WEBVTT 1 00:06:15.869 --> 00:06:24.778 Silence. 2 00:06:36.238 --> 00:06:40.528 Okay, on good afternoon class. 3 00:06:40.528 --> 00:06:44.369 Let's see what's happening here. 4 00:06:49.468 --> 00:06:56.699 So, see if this works. 5 00:07:01.259 --> 00:07:13.139 Still having a sharing problem. 6 00:07:15.598 --> 00:07:18.838 I tried something which worked after class on. 7 00:07:18.838 --> 00:07:22.288 Monday, and. 8 00:07:23.879 --> 00:07:28.889 Let's see. 9 00:07:30.149 --> 00:07:33.718 Silence. 10 00:07:44.579 --> 00:07:48.569 Silence. 11 00:08:03.178 --> 00:08:07.769 Trying to get. 12 00:08:10.619 --> 00:08:16.649 If this works. 13 00:08:16.649 --> 00:08:21.358 Silence. 14 00:08:22.769 --> 00:08:28.228 Silence. 15 00:08:32.278 --> 00:08:37.408 Wow, I managed to lock up another computer at chilly. 16 00:08:37.408 --> 00:08:44.009 Trying to share just a 2nd, here. 17 00:08:56.938 --> 00:09:00.119 Silence. 18 00:09:00.119 --> 00:09:03.629 Silence. 19 00:09:05.219 --> 00:09:14.068 This is getting silly. 20 00:09:14.068 --> 00:09:19.528 Silence. 21 00:09:20.879 --> 00:09:27.028 Silence. 22 00:09:28.288 --> 00:09:32.009 Well. 23 00:09:33.119 --> 00:09:40.499 Or we can see. 24 00:09:40.499 --> 00:09:49.139 So, the question is, can you hear me can you see the screen. 25 00:09:55.889 --> 00:10:00.389 And. 26 00:10:03.538 --> 00:10:10.589 You can hear me. 27 00:10:11.849 --> 00:10:18.688 Yeah, cause my preview shows that you can see my screen. 28 00:10:26.188 --> 00:10:34.078 Silence. 29 00:10:35.278 --> 00:10:39.958 And my 2nd computer just locked out permanently. 30 00:10:41.458 --> 00:10:52.649 Probably have to rebuild it, so. 31 00:10:53.999 --> 00:10:57.958 According finally popped up again. 32 00:11:09.418 --> 00:11:19.948 And can you screen is still loading? Well, that's actually and events. 33 00:11:19.948 --> 00:11:23.428 Silence. 34 00:11:23.428 --> 00:11:31.499 Silence. 35 00:11:44.489 --> 00:11:48.658 No, it's not working. 36 00:11:59.183 --> 00:12:12.504 Well, the question is not just can does my screen sharing working, but is the screen sharing for the speakers working so we've got 3 final project presentations today. 37 00:12:12.504 --> 00:12:15.203 Isaac, Joseph and Justin. 38 00:12:15.509 --> 00:12:18.839 And I guess if Isaac, I'm. 39 00:12:18.839 --> 00:12:29.278 Wants to give it a try Joseph I can see your screen. Great. I don't know what you're doing that. I'm doing wrong. 40 00:12:31.109 --> 00:12:34.678 But question for you. 41 00:12:34.678 --> 00:12:41.129 About what that might be able to answer that. Are you using Linux by any chance? Yes, I am. 42 00:12:41.129 --> 00:12:44.249 So, in my parent past experience. 43 00:12:44.249 --> 00:12:47.818 Linux and Webex have never played nicely together. 44 00:12:47.818 --> 00:12:54.629 Good, I know I ended up just going back to Windows for Webex as much of a pain as it was. 45 00:12:54.629 --> 00:13:01.109 Well, that's not an option. I use Linux. I would the solution would be to stop using Webex. Actually. 46 00:13:01.109 --> 00:13:11.249 Um, but the thing is, when other people are, if other, if other people can project their screens, the problem is Joseph, is it worked and then it stopped working. 47 00:13:11.249 --> 00:13:25.558 And after class Monday, I was playing around and I found some weird things like like, if i1st started a 2nd client, and then the 1st client could share, or maybe the 2nd find could share. So, that was the. 48 00:13:26.639 --> 00:13:33.688 You know, that was the crazy issue. It's flaky and I can't figure out what it is that affects it. 49 00:13:35.308 --> 00:13:45.028 I don't remember last semester when I tried using Linux and Webex together my Mike would never work. 50 00:13:45.028 --> 00:13:53.219 So well, that's a separate thing. I, if I set the volume control up in 3 different places, my Mike finally works. 51 00:13:53.219 --> 00:13:57.208 However, if I'm showing videos and Shawn on YouTube. 52 00:13:58.318 --> 00:14:04.019 Then that does not play nicely with my headset. That's why I'm not using a headset right now. 53 00:14:04.019 --> 00:14:11.639 Because if it takes audio from the headset, it won't take audio from you too. But at least not. 54 00:14:12.719 --> 00:14:18.149 You know, this is this is insane, but. 55 00:14:19.318 --> 00:14:22.438 It works. No, I'm sorry. 56 00:14:22.438 --> 00:14:32.818 I said, we know it works now for at least 1 of the presenters. Yes. So, since Joseph, since you were presenting, I mean, since I could see your screen, would you like to. 57 00:14:32.818 --> 00:14:39.178 Present your project just give me about 3rd. Okay. 58 00:14:39.178 --> 00:14:43.619 All right. 59 00:14:50.399 --> 00:14:57.149 So, I just made a basic circuit solver. It's meant this. All right now it'll just solve these. 60 00:14:57.149 --> 00:15:03.359 I have done those so many times in circuits and every time I have been annoyed, we're trying to. 61 00:15:03.359 --> 00:15:08.908 Frank stuff across the screen, so I felt like trying to solve that. It was a problem. I was fairly familiar with. 62 00:15:08.908 --> 00:15:15.568 Thought it would be fun to do with parallel stuff. So, the way I choose to input my data. 63 00:15:17.158 --> 00:15:29.099 I have a 1st line That'll develop whether or not it's series or parallel. The functionality is still fairly limited. 2nd line is voltage and then the rest of the files just resistor values. I do want to add in. 64 00:15:29.099 --> 00:15:32.278 More voltage stuff. 65 00:15:32.278 --> 00:15:38.969 Later down, so you can have multiple voltages later than 1, but that's for another time for working demo. 66 00:15:38.969 --> 00:15:42.869 This is just proof of concept. This would be fine. 67 00:15:42.869 --> 00:15:51.928 So Here's all the data it's going to show you just the power for us each resistor, the voltage across each resistor current for each resistor. 68 00:15:51.928 --> 00:15:57.178 Just gives you some nice statistics so I'm going to demo this real quick. 69 00:15:58.528 --> 00:16:05.639 Don't mind. Okay. Good at what this thing. 70 00:16:06.749 --> 00:16:10.979 I've had that problem quite a few times. Oh, wait, I hit the wrong. 71 00:16:12.448 --> 00:16:15.839 I'm allowed to share a demo, right? Absolutely. 72 00:16:17.129 --> 00:16:20.698 Nice password Thank you. 73 00:16:20.698 --> 00:16:28.349 You couldn't see it hold that thought. 74 00:16:28.349 --> 00:16:31.408 Wait, you couldn't see it there. 75 00:16:31.408 --> 00:16:39.328 I'm just joking. Okay. I was because this is actually an issue. We have a major problems. 76 00:16:39.328 --> 00:16:53.668 I just get a read. 77 00:16:53.668 --> 00:16:57.178 And this, so I can at least prove it compiles. 78 00:16:58.619 --> 00:17:06.118 All right. Okay, well. 79 00:17:06.118 --> 00:17:09.959 I'm just going to run it just to show you that. It does at least exist. 80 00:17:11.999 --> 00:17:17.308 But, basically, it wants a file name. I'm just going to go with what the 1st 1 I had was. 81 00:17:19.949 --> 00:17:23.669 I'll quit and then I can cat my answer. 82 00:17:26.068 --> 00:17:29.159 Oh, because I can't spell. Well, this is what. 83 00:17:29.159 --> 00:17:33.568 Programming all day gets you, but there's your total resistance of the file. 84 00:17:33.568 --> 00:17:42.989 Of what's everything that's in that file and then here was basically what the file looked like. It was a series circuit and. 85 00:17:42.989 --> 00:17:50.459 Vault power source and then it was all those resisters as you can see, I did go through and check this by hand. This came out correctly. 86 00:17:50.459 --> 00:17:54.898 I can go for some of the code if people would be interested. 87 00:17:54.898 --> 00:17:59.009 Well, where is the parallel component of it? So. 88 00:17:59.009 --> 00:18:02.368 I have a separate test for that. Okay. 89 00:18:02.368 --> 00:18:06.328 I can run that 1 in a sec just give me 1. SEC. 90 00:18:08.308 --> 00:18:11.398 I didn't manage to get serious, but okay. What. 91 00:18:11.398 --> 00:18:15.179 My sharing just died. That's interesting. 92 00:18:15.179 --> 00:18:19.469 You know, I might have done that because I just came in from a 2nd computer. 93 00:18:19.469 --> 00:18:22.588 To try sharing to work no, I can see your screen. 94 00:18:22.588 --> 00:18:27.628 Okay, I just went back and shared that again, but if I go dot slash now. 95 00:18:27.628 --> 00:18:33.449 Why is this? Not okay that's why she died out and then we can go. 96 00:18:39.028 --> 00:18:52.019 I know most of this stuff is fairly simple right now. 97 00:18:52.019 --> 00:18:56.699 But I was done, I cannot type to save my life. 98 00:18:56.699 --> 00:19:01.528 But that would be a version of the parallel. I know the stuff was small. 99 00:19:01.528 --> 00:19:05.368 That was 1 option, right there. 100 00:19:05.368 --> 00:19:08.669 So, there's proof that it at least works in parallel. 101 00:19:10.169 --> 00:19:14.398 Well, the circuits in parallel, but is your program in parallel. 102 00:19:14.398 --> 00:19:19.888 Let me. 103 00:19:22.739 --> 00:19:29.009 Where's the open? Np pregnant I count if you'd like to brag parallel. 104 00:19:30.749 --> 00:19:40.919 Yep, so the parallel component was just to be able to compute all the stuff at once for a component because if you add, let's just say, 100,000 components. Okay. 105 00:19:40.919 --> 00:19:45.358 It would be a really crappy time to sit there and calculate each 1 1 at a time. 106 00:19:45.358 --> 00:19:54.358 Mm, that was my thought process. I've sat there and done that for circuits before and while not for 100,000 components, but for a. 107 00:19:54.358 --> 00:19:58.979 Even with 30 components I've had issues with circuits are solvers slowing down. 108 00:19:58.979 --> 00:20:07.078 But there's people that it isn't parallel, why do they slow down? Are they using some sort of some sort of method. 109 00:20:07.078 --> 00:20:10.348 Or I would assume so, but. 110 00:20:10.348 --> 00:20:15.088 It's been spice in my computer have never once planned nicely. 111 00:20:15.088 --> 00:20:20.429 Okay, I've had that blue screen my computer more times than I cared account. 112 00:20:21.929 --> 00:20:26.489 And you want me to use Windows okay. Oh. 113 00:20:26.489 --> 00:20:37.858 Oh, no, Windows Windows is not my favorite choice. I'm just saying, Webex works with. I know. I mean, yeah I just had to reboot 1 of my 2. I got 2 laptops here. 1 shows your screen. The other does not. 114 00:20:37.858 --> 00:20:47.009 So, go figure sign into Webex twice. 1 laptop is currently working. The other laptop is not working. 115 00:20:47.009 --> 00:20:56.098 Lovely yes so I just used open to compute the value for each individual and the total resistance. 116 00:20:56.098 --> 00:21:02.068 Some things can be paralyzed while others could not as there are steps. When you do this, that you have to do. 1st. 117 00:21:02.068 --> 00:21:05.909 So, to an extent, you can parallelize things. 118 00:21:05.909 --> 00:21:09.358 But there are some things that you just cannot parallelize. 119 00:21:11.009 --> 00:21:15.838 So these are just the current limitations. I have very limited error handling still. 120 00:21:15.838 --> 00:21:23.699 And then there's just the limitations of 1 vaulted source. It's just resistors and just series or parallel not serious. They're all yet. 121 00:21:23.699 --> 00:21:29.009 So ever changes I would like to make I'd like to add support for multiple voltage sources. 122 00:21:29.009 --> 00:21:34.048 I'm obviously going to have to change on my file works with all of these things as well. 123 00:21:34.048 --> 00:21:43.919 I would like to add burger handling and then something I would really like think would be interesting and would be a very good opportunity for parallel computing, be able to run multiple batch jobs at once. 124 00:21:43.919 --> 00:21:50.398 I'm going to have, like, 7 or 8 different circuits. I want to run them all at once. I felt like that would also be a good parallel opportunity. 125 00:21:51.929 --> 00:21:58.318 Okay, thanks. And you're right up you'd want to go more into the strengths and limitations of the parallel part also. So. 126 00:21:58.318 --> 00:22:03.209 But, yeah, thank you. Anyone else have questions any questions for you. 127 00:22:03.209 --> 00:22:07.888 Questions questions no. 128 00:22:10.288 --> 00:22:14.578 Okay, thanks try. 129 00:22:17.969 --> 00:22:26.909 Anything else again here? No, I decide to share my screen and it. 130 00:22:28.169 --> 00:22:32.098 Not working. Okay. 131 00:22:32.098 --> 00:22:38.009 I said, would you like to talk? Sure. Give me 1 moment. 132 00:22:41.098 --> 00:22:54.028 So, hopefully you should be able to see my screen. Yes, I can see your screen on both of my computers. All right so, um. 133 00:22:54.028 --> 00:23:02.848 Isaac, and for my term project side, influence an algorithm to solve the extra components problem for Shockwave data from cft solutions. 134 00:23:02.848 --> 00:23:03.479 So, 135 00:23:03.473 --> 00:23:03.923 um, 136 00:23:05.003 --> 00:23:13.104 so the connection components problem is a graph problem you can so graphs are data structures that appear in lots and lots of different places, 137 00:23:13.614 --> 00:23:14.814 network analysis, 138 00:23:14.844 --> 00:23:16.913 or scientific computing, 139 00:23:16.913 --> 00:23:28.493 or anything else vary of chunks of data that are connected to each other in a specific way so finding graphs connected components can tell you a lot more about that data and it lets you kind of. 140 00:23:28.798 --> 00:23:41.723 Identify groups that are, um, implied by the graph so the application I'm interested in is shock detection for, um, computational through dynamics, but I'll get into the details of that in a little bit. 141 00:23:42.203 --> 00:23:44.844 So, a key thing to keep in mind at this point is that, um. 142 00:23:45.118 --> 00:23:51.058 The grass are interested and can get really big. So, what exactly is the problem. 143 00:23:51.058 --> 00:24:01.858 So and how do you normally solve it? So, on the left here, we have a graph with free different connected components. So we have a small 1 here, a larger 1 here and. 144 00:24:01.858 --> 00:24:13.703 The final 1 here, so if you can reach Vertex a, from, via countably finite number of edge locks, they belong to the same connected component. 145 00:24:14.243 --> 00:24:20.574 So, in cereal, a breakfast search or a depth for search solstice and linear time. 146 00:24:20.878 --> 00:24:27.749 So you can think of as a flood fill, like the figure on the right so it's pretty straightforward and you can. 147 00:24:27.749 --> 00:24:32.338 Probably imagine the basics of the recursion that you can do to solve this problem. 148 00:24:32.338 --> 00:24:46.558 So, we do hit scaling issues pretty quickly. So, even in cereal, we need to be careful about how we write that. Um, recursion since a depth 1st search can actually cause crashes when it generates too many. 149 00:24:46.558 --> 00:24:49.949 Um, too many nested recursive frames so. 150 00:24:49.949 --> 00:25:02.608 But even once we've solved that problem, the size of data sets can get unmanageable. So, my own data set that I was interested in was near the 300,000 vertices with 3,000,000. 151 00:25:02.608 --> 00:25:06.118 So you can see if these 2 examples. 152 00:25:06.118 --> 00:25:10.679 They can these graphs can get much much bigger so. 153 00:25:10.679 --> 00:25:13.979 The largest, real data set I found is. 154 00:25:13.979 --> 00:25:18.568 Like, almost 300Million vertices so. 155 00:25:18.568 --> 00:25:23.368 The size of these problems can become a primary motivation for parallelism. 156 00:25:25.134 --> 00:25:38.243 Now, I'm a little nervous about trying to pronounce the name of this group of algorithms. So I'll stick to calling them the. So, there are parallel algorithms that are designed to solve connect components and. 157 00:25:38.548 --> 00:25:43.348 They are intended to lend themselves to distributed memory setups, but. 158 00:25:43.348 --> 00:25:46.739 Obviously, you can still influence them and share memory as I did. 159 00:25:46.739 --> 00:25:49.888 So, conceptually they work by. 160 00:25:49.888 --> 00:25:56.429 Turning each of our text into a treat and it's connecting and modifying these trees. 161 00:25:56.429 --> 00:26:00.689 So that they conversion to a format that represents connected components. 162 00:26:00.689 --> 00:26:10.979 So no guarantee to terminate and log in integrations, but in practice, they can do so much more quickly. Especially if the graph is pretty dense. 163 00:26:10.979 --> 00:26:14.098 So that means if the vertices. 164 00:26:14.098 --> 00:26:17.429 Are connected to a lot a, a lot of the outer parentheses. 165 00:26:17.429 --> 00:26:22.318 So, you can paralyzed computation within each iteration. 166 00:26:22.318 --> 00:26:31.318 But they aren't guaranteed to, um, so the entire thing isn't guaranteed to terminate faster than optimal, but for the problems I'm interested in, they. 167 00:26:31.318 --> 00:26:46.163 They, they do terminate faster. So another thing to keep in mind is that you can kind of, um, you can decompose or influence it in terms of linear algebra. So we have to write libraries. You can actually implement these on use. 168 00:26:48.269 --> 00:26:52.469 So, the algorithm that I am punch, it is fast. 169 00:26:52.854 --> 00:26:58.433 Which is a very good general purpose algorithm that has 2 types of operations during each duration. 170 00:26:58.554 --> 00:27:11.693 There's tree hooking where the fathers of each for our tax is a that's represented by the factor here is updated based on and the ID of each protects. 171 00:27:12.269 --> 00:27:18.058 So, the idea of each for our checks is arbitrary, but it needs to be consistent. It's just kind of say. 172 00:27:18.058 --> 00:27:29.669 What, if these 2 trees are connected to each other but who becomes whose fodder so on and so forth? Um, there's also a short cutting phase where we just. 173 00:27:29.669 --> 00:27:34.318 Reduced a number of layers in each tree and that's to the. 174 00:27:34.318 --> 00:27:44.189 That's to make sure that we can actually progress in the iterations. So by repeatedly doing this merging and shortcutting in parallel, you can solve the problem. 175 00:27:44.189 --> 00:27:48.628 So another thing to notice that, uh, in code. 176 00:27:48.628 --> 00:27:58.259 This is all influential in terms of, um, operations on an array of ants. So, this kind of tree based data is only really implied by that vector. 177 00:27:58.259 --> 00:28:01.709 Or that so. 178 00:28:01.709 --> 00:28:05.999 What kind of data did I want to get the connected components of. 179 00:28:05.999 --> 00:28:16.169 So, here, we have a mesh of a cft solution for a can best platform. So basically, if cylinder full of high pressure, and we want to watch a shockwave that shoots out of it. 180 00:28:16.169 --> 00:28:19.739 So. 181 00:28:19.739 --> 00:28:26.999 So, from, um, from some relatively complex CFD analysis, we can find out which of these elements, or to use of. 182 00:28:26.999 --> 00:28:30.419 These little triangles that you see here, which 1 of these have. 183 00:28:30.419 --> 00:28:33.868 Like contains a shock wave and. 184 00:28:33.868 --> 00:28:42.538 Be, and I make those my vertices of the graph and the edges of the graph are determined by a closeness criterion. 185 00:28:42.538 --> 00:28:47.848 So, if the so if certain elements are close to each other, they're determined to be. 186 00:28:47.848 --> 00:28:58.979 I'm trying to share an edge, so the goal of finding these connection opponents was to separate different shockwaves from each other. So, think of similar to a data clustering problem. 187 00:28:58.979 --> 00:29:08.699 So, on the left, we have a visualization of the Shockwave data. I, and potentially algorithm is a graph and on the right we have the output. 188 00:29:09.294 --> 00:29:21.473 So, the colors are arbitrary, but the points that are the same color belong to the same connection components. So, as you can see, I was able to find, um, the 2 shocks of interest. 189 00:29:22.013 --> 00:29:27.324 And there's a lot of additional noise that I was able to kind of ignore because of that. 190 00:29:27.568 --> 00:29:31.259 So so, um. 191 00:29:31.259 --> 00:29:37.288 I can use this information for further CFD analysis, but you'll, uh, you'd have to read my thesis for that. 192 00:29:37.288 --> 00:29:42.239 So performance, um, I didn't include. 193 00:29:42.239 --> 00:29:46.979 A, it was pretty constant cost so these times our average times. 194 00:29:46.979 --> 00:29:58.318 And you can see that strong scaling is almost perfect for the alpha but I think that's because the graph is actually really dense. So it doesn't take too many iterations to converge. 195 00:29:58.318 --> 00:30:07.409 And on sparser graphs, we'd start seeing diminishing returns, um, much more quickly. So the data set did lend itself to parallelism. Um, very well. 196 00:30:07.409 --> 00:30:13.378 So, um, yeah, so this was mentioned on, um. 197 00:30:13.378 --> 00:30:19.048 As a multi core program rather than is a program, because there's a. 198 00:30:19.048 --> 00:30:23.788 A lot of if comparisons that I wasn't, I wasn't sure how it would uh. 199 00:30:23.788 --> 00:30:29.608 How do on a so there's a few main points to I'd approve. 200 00:30:29.608 --> 00:30:36.088 That I'd like to improve upon, so I'm pretty sure that my input data wasn't optimal from graphs. So that's, um. 201 00:30:36.088 --> 00:30:41.038 That's giving performance ahead in terms of, I think, um, for. 202 00:30:41.038 --> 00:30:45.239 There's also room for, um, some asynchronous tasks there. 203 00:30:45.239 --> 00:30:51.689 So, another key idea would be implementing this inside at cft solver, rather than as a post processing step. 204 00:30:51.689 --> 00:30:57.989 So, the solver's ready has some parallelism inside of it and. 205 00:30:57.989 --> 00:31:03.088 If I merge them together, I won't have to submit another job to do this on large data sets. 206 00:31:04.919 --> 00:31:11.429 So, GPU, implementation, as I said, uh, it should be doable to write libraries but, um. 207 00:31:11.429 --> 00:31:16.679 I don't think I'll need that degree performance so I start working with much larger data sets. 208 00:31:16.679 --> 00:31:28.769 So it also be interesting to test it on other types of data sets in the future. So, beyond the Shockwave data to see if there's performance trends based on where the graph comes from. 209 00:31:28.769 --> 00:31:32.338 So, yeah, I have a. 210 00:31:32.338 --> 00:31:37.469 Afraid I didn't have a demo prepared, but, um, I'd be glad to take any questions. 211 00:31:37.469 --> 00:31:46.858 Yeah, thank you very much. I'm interested in the graph that you're finding components on more. Is this. 212 00:31:46.858 --> 00:31:55.259 Is this like, there there are cells in a cellular data structure and some are connected or not or is this something more general? 213 00:31:55.259 --> 00:31:59.009 Okay, so, um, it it is basically. 214 00:31:59.009 --> 00:32:03.148 That kind of cell cellular data structure, right? Um. 215 00:32:03.148 --> 00:32:07.558 But the graph edges aren't actually determined by the kind of. 216 00:32:07.558 --> 00:32:14.699 Connectivity graph of that cell so I actually say if I can reach another shot containing cell. 217 00:32:14.699 --> 00:32:21.868 With free steps through to through, just for your cells. That's when I say that. Okay, that's an edge. 218 00:32:21.868 --> 00:32:25.259 Because there's actually pretty significant gaps. 219 00:32:25.259 --> 00:32:31.378 Between some of the, um, between some of the elements that I'd like to have connect up. 220 00:32:32.788 --> 00:32:42.959 Well, it's interesting. So so the cells are so, let me see if I'm describing it right? So the cells are cubes and if a cells with an additional 3 of another cell. 221 00:32:42.959 --> 00:32:47.699 Then you assume it's connected? Yeah. So, um, I have a. 222 00:32:47.699 --> 00:32:55.288 Illustration here, so as you can see it here I set this is, um, degree too. So it. 223 00:32:55.288 --> 00:33:00.959 It's able to kind of cross that gap because the closeness criterion still draws an edge there. 224 00:33:00.959 --> 00:33:05.009 So, alternatively, you could do a dilation perhaps. 225 00:33:05.009 --> 00:33:12.568 Of the original data, and then a traditional adjacent C conductivity maybe. 226 00:33:12.568 --> 00:33:17.128 That's that's possible but, um, the problem is data. 227 00:33:17.128 --> 00:33:22.769 This is this the Shockwave information is determined by brilliant data. 228 00:33:22.769 --> 00:33:26.519 And it and even then it's, um. 229 00:33:26.519 --> 00:33:31.888 It'd be kind of difficult to do that kind of diffusion process. Oh, okay. 230 00:33:31.888 --> 00:33:34.888 So the reason I'm asking, because there are really fast. 231 00:33:34.888 --> 00:33:43.078 Connected component algorithm is when it's just, you know, 26 fold productivity or something like it's a cell adjacent to its. 232 00:33:43.078 --> 00:33:47.338 But that's a that's a different problem, but there are past algorithms that do that. 233 00:33:47.338 --> 00:33:53.249 But, um, but here is a harder problem. Yeah, this is like, uh. 234 00:33:53.249 --> 00:33:58.469 Possibly like, um, and degree connectivity because this should. 235 00:33:58.469 --> 00:34:03.058 They should be able to connect to that 1. mm. 236 00:34:03.058 --> 00:34:06.719 Yep, so okay. 237 00:34:07.919 --> 00:34:13.768 So, I don't know any other questions or. 238 00:34:15.478 --> 00:34:18.719 Anyone else questions. 239 00:34:19.798 --> 00:34:23.458 No, thank you then a very interesting Isaac. Right? 240 00:34:23.458 --> 00:34:27.059 Thank you, Justin. Would you like to talk. 241 00:34:27.059 --> 00:34:31.918 Yeah, let's hope let's see if you guys see my screen. 242 00:34:34.528 --> 00:34:39.929 Yes, on both my computers. Okay so web scraper. 243 00:34:39.929 --> 00:34:45.239 Yep. Okay. So yeah, I'm just in my project to do a image scraper. 244 00:34:45.239 --> 00:34:48.929 So just a quick project overview. 245 00:34:48.929 --> 00:34:52.498 Start using JavaScript to notice. 246 00:34:52.498 --> 00:34:58.018 I just because I was using it for another project and another class I want to try out some parallel things. 247 00:34:58.018 --> 00:35:02.309 So the overall, like, kind of a process of what I've done is I created a. 248 00:35:02.309 --> 00:35:06.148 A pretty basic front, so that user can enter like a. 249 00:35:06.148 --> 00:35:11.068 And then they can scan it for images and then they can download this images. So the. 250 00:35:11.068 --> 00:35:17.458 The parallel would come into see how parallel can affect, but scanning time and the download time. 251 00:35:17.458 --> 00:35:24.088 So, for that performance, I want to look at, you think a sync versus a wait just kind of like. 252 00:35:24.088 --> 00:35:28.949 The nature of no JS versus trying to do web workers, which is like, uh. 253 00:35:28.949 --> 00:35:32.548 Creating multiple threads to do the work instead. 254 00:35:34.168 --> 00:35:40.949 So, just a quick highlight. What is notary? It's a, it's a JavaScript fun time built on Chrome to be a JavaScript engine. 255 00:35:40.949 --> 00:35:49.048 And it's unique because it uses a ventship and non blocking model. So it's, it's a much lighter and more efficient. 256 00:35:49.048 --> 00:35:52.768 So traditionally to the image on there, right? 257 00:35:52.768 --> 00:36:02.668 Some kind of software might have to wait or I have to pick threads from some kind of thread pool when it has to handle request or I would have to wait for an available thread. 258 00:36:02.668 --> 00:36:09.449 But for no, it handles it on an event basis, or pretty much request comes in, it can handle it. 259 00:36:09.449 --> 00:36:23.963 Using a call back on a single thread. So kind of 1 example of how a JavaScript that would work. So, this is a pretty basic 2nd, you have a console print to set timeouts another console. 260 00:36:24.809 --> 00:36:28.708 So, what happens is the console is on the cost that gets executed. 261 00:36:28.708 --> 00:36:35.309 And then the set time out both set time, I get put on the call stack, but because they're part of the note API. 262 00:36:35.309 --> 00:36:38.398 They can be handled with a call back. 263 00:36:38.398 --> 00:36:43.889 So, when you look at the order of how these console logs actually come out on that bottom picture, you'll see that. 264 00:36:43.889 --> 00:36:47.188 The 1st council comes out and the last council comes out. 265 00:36:47.188 --> 00:36:52.858 Both before the console logs in the call backs of the 2 set time apps. 266 00:36:52.858 --> 00:36:57.748 And the reason why the 2nd call back comes out 1st, is because the set time outs are. 267 00:36:57.748 --> 00:37:02.518 Non blocking, so on the set time, let's get put on the noted API. 268 00:37:02.518 --> 00:37:05.668 They can both start at the same time. So. 269 00:37:05.668 --> 00:37:13.108 The 2nd set time, I'd have to wait the 2 seconds of the 1st 1 for I can start counting. So they're kind of running at the same time. 270 00:37:13.108 --> 00:37:17.458 Which is why we have the 2nd call back executing 1st before the 1st 1. 271 00:37:17.458 --> 00:37:23.998 So, how did that were that day and a quick note on. 272 00:37:23.998 --> 00:37:28.559 So, hey, wait pretty much makes sense. Asynchronous function performs seriously. 273 00:37:28.559 --> 00:37:31.559 So, on the example on the right. 274 00:37:31.559 --> 00:37:38.969 The result 1 awaits a 2 job, because to job is a synchronous function and it's a weighted. 275 00:37:38.969 --> 00:37:44.489 Uh, the next line cannot execute until 2 job. 11 has finished. 276 00:37:44.489 --> 00:37:48.719 While if you do it without, and the picture below it. 277 00:37:48.719 --> 00:37:53.429 What happens is that the 3 do jobs start running at the same time? 278 00:37:53.429 --> 00:37:56.998 And in the callbacks, uh. 279 00:37:56.998 --> 00:38:01.438 The callbacks will pretty much handle the results as they come back. So that's why. 280 00:38:01.438 --> 00:38:04.559 The 1 or 2 and 3 a wait, the results. 281 00:38:04.559 --> 00:38:09.778 So, instead of waiting for the 1st, 2, tried to finish for a 2nd job this time. 282 00:38:09.778 --> 00:38:13.949 All the new jobs can execute at the same time and return the results. 283 00:38:13.949 --> 00:38:17.909 As they finish, which makes it more efficient. 284 00:38:19.110 --> 00:38:22.139 Uh, so how did I use a sync anyway? So. 285 00:38:22.139 --> 00:38:28.440 Uh, for downloading, at least I created 2 situations 1 where I would do Dallas synchronously. 286 00:38:28.440 --> 00:38:37.619 Where our 1st download 1 image, wait for that image to finish downloading and then download the next 1. so, this would definitely be a lot slower since after wait time. 287 00:38:37.619 --> 00:38:42.329 So, that top image is that serial implementation I'm pay waiting each download. 288 00:38:42.329 --> 00:38:45.630 For each image I found with an image source. 289 00:38:45.630 --> 00:38:50.579 And then to do it asynchronously so kind of more parallel. 290 00:38:50.579 --> 00:38:55.050 Add these a thing called a promise, which I promise is to go back. 291 00:38:55.050 --> 00:38:58.619 2 sides here, I defined a promise pretty much. Just a placeholder. 292 00:38:58.619 --> 00:39:09.659 That will wait for the result of a basically that's function. So it's kind of undefined that. 1st, but when that pay synchronous function comes back, then the promise will have some value. 293 00:39:10.920 --> 00:39:15.960 So, to do the parallel, I, all of the kind of. 294 00:39:15.960 --> 00:39:21.119 Function executions of download from the sink into a promiser. Right? And then. 295 00:39:21.119 --> 00:39:26.730 That 3rd line from the bottom has a wait promised at all so they don't execute. 296 00:39:26.730 --> 00:39:30.090 All of the function calls inside my promissory. 297 00:39:30.090 --> 00:39:35.039 And then we'll wait for all of them to finish. So that kind of has all the downloads happening in parallel. 298 00:39:36.329 --> 00:39:42.329 So, I wanted to compare the patient in a way to web workers. Web workers is pretty much means. 299 00:39:42.329 --> 00:39:46.949 For web content to run in scripts on the background so that it can perform. 300 00:39:46.949 --> 00:39:50.909 More intensive tasks that it failed to user interface. 301 00:39:50.909 --> 00:39:56.519 And the thing about work is, is that they do run it in a different context compared to the main contexts. 302 00:39:56.519 --> 00:40:01.170 So, when I'm writing code, I have to check if 1 of whether or not. 303 00:40:01.170 --> 00:40:10.590 The worker context, or, like the main context, and there are different types of workers so that the worker I use for this project is dedicated worker. 304 00:40:10.590 --> 00:40:13.769 So, it's only accessible by the scripts that it called. 305 00:40:13.769 --> 00:40:20.099 And the data is sent only between kind of the main thread and the brokers thread by messages. 306 00:40:20.099 --> 00:40:25.230 So another so an example of how you would use web workers. 307 00:40:25.230 --> 00:40:32.880 Um, so 1st, here, maybe I'll just, I'll just explain how I use it. This is a little tedious. 308 00:40:32.880 --> 00:40:38.130 Okay, so how I used it, so let's you can see my mouse. So. 309 00:40:38.130 --> 00:40:42.119 1st up so I have to check if I'm on the main worker thread. 310 00:40:42.119 --> 00:40:46.619 And then here, I, I can create and kind of divvy up the work. I need to do. 311 00:40:46.619 --> 00:40:50.550 So, since I'm downloading images. 312 00:40:50.550 --> 00:41:02.010 This example, let's see, this is for scanning. Okay so I did it for both. I did it for both scanning and downloading. I use for tested out web brokers both. 313 00:41:02.010 --> 00:41:05.610 I think this example is scanning so since. 314 00:41:05.610 --> 00:41:09.900 Each, no, it gets scanned the same as every other note. 315 00:41:09.900 --> 00:41:15.239 I can divvy up subsets of my image array onto different workers rights. 316 00:41:15.239 --> 00:41:19.409 So that's what's going on up here where I add workers different threads. 317 00:41:19.409 --> 00:41:23.429 And then I have to handle what happens when. 318 00:41:23.429 --> 00:41:27.840 The web worker finishes all of its jobs. 319 00:41:27.840 --> 00:41:33.119 So, on error, we'll kind of do a throw error on exit. We're going to delete that worker's thread. 320 00:41:33.119 --> 00:41:41.369 For that that web worker, and then we can check if there are any more threads that are still executing. Otherwise we can kind of say that we're done. 321 00:41:41.369 --> 00:41:46.949 All the Web workers are done, and then we can kind of update the. 322 00:41:46.949 --> 00:41:54.090 But then, the cool thing about Rebecca is that I can also send that data back from the web brokers to the main thread, or just kind of. 323 00:41:54.090 --> 00:41:59.880 I think we discussed privatized bins and a later lecture. So what happens on each worker thread is that. 324 00:41:59.880 --> 00:42:05.219 It can store the results of its work, its own thread and then what's finished. 325 00:42:05.219 --> 00:42:09.599 It will pass all of it back to the management. So that's what's going on on this. 326 00:42:09.599 --> 00:42:14.760 Last snippet here is that when the worker sends a message, it's going to take. 327 00:42:14.760 --> 00:42:18.000 Uh, that message is going to be fits results. 328 00:42:18.000 --> 00:42:21.269 I was going to add it to make global image results. 329 00:42:23.400 --> 00:42:26.969 Uh, so there's some performance. 330 00:42:26.969 --> 00:42:31.500 Or not pretty performance things happening with web workers. It does take time. 331 00:42:31.500 --> 00:42:37.380 Uh, to create what Parker's, which is how like, that overhead we saw on creating other threats and other languages. 332 00:42:37.380 --> 00:42:41.550 So, it does take time to instantiate Web workers and there's also some latency. 333 00:42:41.550 --> 00:42:50.010 Between the communication of the messages from the web worker to back to the main thread and there's even some limitations on how large. 334 00:42:50.010 --> 00:42:54.539 That message can be here it says about what the post message, which is what I was using. 335 00:42:54.539 --> 00:43:06.090 The day I can only be about 1300 kilobytes. Uh, let's see, what else do I have? Okay so I did do some testing between the, between the, a sink synchronous. 336 00:43:06.090 --> 00:43:12.750 And using Web workers, so for scanning, just using the regular, a gateway. 337 00:43:12.750 --> 00:43:21.150 I was really fast at 11 millisecond that 1st link, but then doing it with threads. It was a lot slower. 338 00:43:21.150 --> 00:43:27.030 And as I created more web workers, that overhead started to have a larger impact. So the time increases. 339 00:43:27.030 --> 00:43:30.630 But I add more threats for downloading. 340 00:43:30.630 --> 00:43:37.199 The effect is a little less so, 1st, downloading the synchronicity, which is like. 341 00:43:37.199 --> 00:43:41.670 Waiting for the 1st to finish and then start in the next. That's really slow. It's around in seconds. 342 00:43:41.670 --> 00:43:46.679 Again, doing them with pacing can wait are generally pretty fast 4 and 4 seconds. 343 00:43:46.679 --> 00:43:49.920 And then doing it with threads is a bit slower then. 344 00:43:49.920 --> 00:43:54.780 Uh, a way a sync version, but also faster than the synchronous. 345 00:43:54.780 --> 00:43:59.880 And again, we can kind of speak, adding more threads stoked increases that performance time. 346 00:44:01.500 --> 00:44:05.010 Uh, just a quick note on the design. 347 00:44:05.010 --> 00:44:08.789 Uh, because I was using note, I could use a library called. 348 00:44:08.789 --> 00:44:13.199 Last minute, right Java script within an HTML file. So I. 349 00:44:13.199 --> 00:44:17.159 So, once I kind of find all the images I can load. 350 00:44:17.159 --> 00:44:22.710 The images dynamically on the user side so that they can see what images. 351 00:44:22.710 --> 00:44:29.909 The, uh, the software found, and I also had some client side job script, just for kind of interaction to disable. 352 00:44:29.909 --> 00:44:34.559 The download button, so I didn't find any images so well. 353 00:44:34.559 --> 00:44:37.679 So, I can do a quick demo to show that it does work. 354 00:44:37.679 --> 00:44:41.760 I'm running it locally, so this is what it looks like. 355 00:44:41.760 --> 00:44:45.360 So, when you enter your out, we can do this 1. 356 00:44:45.360 --> 00:44:49.199 And this scale, this 1st scan is just using a gateway. 357 00:44:49.199 --> 00:44:54.329 So, I can scan it and the things will come up and then I can change. 358 00:44:54.329 --> 00:44:59.130 Again, the threads, depending on what scan down what I want to do. 359 00:44:59.130 --> 00:45:02.130 So, we can download it using threads. 360 00:45:02.130 --> 00:45:07.650 If I pull up here, we'll see that. If I use 4th feds, they'll probably come up. 361 00:45:07.650 --> 00:45:10.739 And bunches of 4. 362 00:45:12.780 --> 00:45:17.070 Yeah, or they all kind of pop up, but they do come back so yeah. 363 00:45:17.070 --> 00:45:24.869 That's about it. Not any questions. 364 00:45:24.869 --> 00:45:29.880 Yeah, thank you. So, gotten banned by any websites now for scraping. 365 00:45:29.880 --> 00:45:36.929 Surprisingly, not no, 1 known gave me any problems. Okay just joking. Anyone else have questions. 366 00:45:36.929 --> 00:45:45.389 Yeah, so I'd like to explore more so the more parallelism you add the slower it gets you said about increased overhead. 367 00:45:45.389 --> 00:45:48.510 Do you have any more detail idea what's happening? 368 00:45:48.510 --> 00:45:51.719 Unlike the instantiation. 369 00:45:51.719 --> 00:45:56.789 No, I have to look closer into the sea actually what's happening when it creates web workers. 370 00:45:58.980 --> 00:46:03.329 Okay, okay. Any other questions. 371 00:46:03.329 --> 00:46:12.900 Well, thank you so more presentations on Monday and now I fill up the time. I have lots of new material. 372 00:46:12.900 --> 00:46:19.380 And I have 3 computers, and part of me now, 2, been to a laptops and a. 373 00:46:19.380 --> 00:46:34.349 I pad me, so maybe I should could reboot 1 of them in Windows, but not today. Let me just see how sharing works. So, at least I can test what if the sharing is working maybe. 374 00:46:34.349 --> 00:46:40.739 Um, and. 375 00:46:43.920 --> 00:46:52.619 I'm not seeing anything actually. 376 00:46:52.619 --> 00:46:58.980 Try sharing from another machine. 377 00:46:58.980 --> 00:47:02.820 Okay. 378 00:47:03.960 --> 00:47:08.099 It's interesting. 379 00:47:08.099 --> 00:47:14.309 Viewing my screen. 380 00:47:15.750 --> 00:47:19.679 Silence. 381 00:47:30.565 --> 00:47:41.394 I did a look up a little bit. I don't know. What are you using the web version of Webex? Not yeah. It's the only available version. Okay. So I don't know. 382 00:47:41.699 --> 00:47:44.820 What to explore using. 383 00:47:44.820 --> 00:47:50.159 What am I using? Google Chrome and Firefox Firefox. 384 00:47:50.159 --> 00:47:59.610 Okay, then I'm not sure because they were saying it was an old issue where it would only really work on Firefox because of some Java something. 385 00:47:59.610 --> 00:48:04.619 Don't get installed, but that was an issue from, like, 2013. so I don't know if that would be. 386 00:48:04.619 --> 00:48:11.519 I've been known to see bugs come back actually years later. 387 00:48:12.715 --> 00:48:23.695 Okay, well, that's a point. Let me make certain that my security. So, but let's say it was working and then it stopped. That's the annoying thing. And sometimes it will stop, and sometimes it will start again in the middle of a class. 388 00:48:23.994 --> 00:48:29.664 And after class Monday, I was playing around, I could get it to share it from the 2nd computer. 389 00:48:29.940 --> 00:48:33.900 I, um, you know, I had a. 390 00:48:33.900 --> 00:48:41.519 And not the, I'm hoping well, I've got a 3rd idea. 391 00:48:41.519 --> 00:48:47.400 Which is that I let you display the screen while while I talk at chilly. 392 00:48:47.400 --> 00:48:54.809 Which, which sounds crazy, but. 393 00:48:54.809 --> 00:49:00.179 Want to try 1 or 2 more things. 394 00:49:00.179 --> 00:49:06.329 Viewing my screen, but that's. 395 00:49:06.329 --> 00:49:09.539 That's it it's not transmitting it. 396 00:49:10.710 --> 00:49:15.269 1, more. 397 00:49:16.769 --> 00:49:19.769 Share this 1. 398 00:49:24.239 --> 00:49:31.650 I see, it says viewing my screen. 399 00:49:31.650 --> 00:49:37.920 I mean, from my 2nd, computer 1st, computer says I'm sharing my screen and shows a nice view of it. 400 00:49:37.920 --> 00:49:42.750 That can computer says viewing my screen. 401 00:49:42.750 --> 00:49:57.119 Silence. 402 00:49:57.119 --> 00:50:01.739 This because I really want it. This is cool. Material. 403 00:50:14.909 --> 00:50:18.599 Kind of version of it and see what happens. 404 00:50:37.139 --> 00:50:44.940 Silence. 405 00:50:44.940 --> 00:50:49.079 Okay. 406 00:50:49.079 --> 00:50:59.429 Okay, so what I'm doing now is I'm sharing from the iPad. 407 00:50:59.429 --> 00:51:03.360 Okay, which is working and. 408 00:51:05.190 --> 00:51:14.070 So. 409 00:51:16.800 --> 00:51:26.550 Okay, so what I have down here, I've got links to some various things that what I'd like to show. You just a quick brief thing. 410 00:51:29.880 --> 00:51:36.929 Of some of the various different tools and so on if we can get the IBM thing working. 411 00:51:39.719 --> 00:51:44.429 Just a 2nd, here. 412 00:51:51.449 --> 00:51:55.500 Hello. 413 00:51:55.500 --> 00:52:05.429 And see if this 1 works. 414 00:52:07.650 --> 00:52:14.909 They don't have my password manager. 415 00:52:14.909 --> 00:52:18.929 On the iPad. Okay. 416 00:52:34.139 --> 00:52:43.619 Cool. Okay. Except it's not sharing it. 417 00:52:45.510 --> 00:52:48.570 Um. 418 00:52:58.260 --> 00:53:03.269 You were seeing my screen, I click on quantum computing that IBM dot com. 419 00:53:03.269 --> 00:53:07.860 And it doesn't follow the clerk so. 420 00:53:09.989 --> 00:53:14.789 This is getting insane and. 421 00:53:14.789 --> 00:53:20.130 But maybe that will cost the 1st thing to start sharing again that. 422 00:53:20.130 --> 00:53:24.900 Seem chillier things happen no. 423 00:53:28.525 --> 00:53:29.094 Ok, 424 00:53:35.005 --> 00:53:53.844 Eva, 425 00:53:53.844 --> 00:53:56.065 reconnecting try something else. 426 00:54:05.335 --> 00:54:23.394 Eva, 427 00:54:23.425 --> 00:54:24.445 okay. 428 00:54:24.719 --> 00:54:30.210 Okay, you're now on the IBM quantum computing website. Okay. 429 00:54:30.210 --> 00:54:35.760 Finally, um, so if you look at say. 430 00:54:35.760 --> 00:54:39.719 Launch okay, so I had to create an account. The account was free. 431 00:54:39.719 --> 00:54:45.210 And now you can jump back in on titles. 432 00:54:45.210 --> 00:54:48.269 Okay, so. 433 00:54:48.269 --> 00:55:00.360 You can see it, so, which we're on now is, so IBM has a number of quantum computers more than a dozen I think scattered around the world. Their name. 434 00:55:00.360 --> 00:55:09.599 And from 5, Cupid on up there, the trans mind cube beds are using joses and junctions and they're connected in specific topologies. 435 00:55:09.599 --> 00:55:18.719 And so they have tools to help you use it. What I'm logged into now is a circuit does a creator and simulator. 436 00:55:19.315 --> 00:55:28.014 And so the left is just a list of circuits I've done in the middle here. 437 00:55:28.224 --> 00:55:35.454 What you see is a menu bar, a possible Gates and then at the bottom we can go and. 438 00:55:36.780 --> 00:55:47.400 I'm using the thing on the iPad for the 1st time, and it's interface a little different but what you see in the middle there are various Cubics Q1 Q2. 439 00:55:47.400 --> 00:56:00.329 And you can, and so on, and you can create Gates, you can drag and drop Gates. I could drag a drag and drop had Omar Gates and so on, and then do the rotation. So you get. 440 00:56:00.329 --> 00:56:04.889 Proposed 0 and 1 and there's a controlled not for example. 441 00:56:04.889 --> 00:56:12.030 And I put a square root operator in there, just for fun square root intuitively. 442 00:56:12.030 --> 00:56:17.760 Air square root of not intuitively. I don't know what it does, but if you do 2 of them, it does or not. 443 00:56:18.114 --> 00:56:32.545 And then a measurement, and at the right for each cube at this little circle, that's partly filled in it shows you how saturated? Well, basically the overlay we can click on 1 of them. 444 00:56:32.820 --> 00:56:37.500 And was a phase and basically. 445 00:56:38.454 --> 00:56:47.364 How overlaid it is on the right at the bottom you see probabilities of the 2 cubital being in the various states. 446 00:56:47.364 --> 00:56:59.364 So, I mean, it's showing up for that thing, which is set up for 16 possible cube bets and you can, you'll see that 00000010 are equal, equally as equal aptitudes. 447 00:56:59.394 --> 00:57:04.494 If I could go in and say, remove I can. 448 00:57:07.860 --> 00:57:13.650 A gate here I just removed the square gate. It didn't do anything much. 449 00:57:13.650 --> 00:57:23.250 If I removed, say, the controlled, not just had our gate and see what happens. It changed things for example. So. 450 00:57:23.250 --> 00:57:29.010 At the, so you can get a sense of what what it just lost it. 451 00:57:30.780 --> 00:57:36.659 As far as I can tell you, you're no longer seeing the screen sharing it just stopped about 10 seconds ago. 452 00:57:38.010 --> 00:57:44.610 Okay, at this point, I blame Webex when basically, you know, it goes from sharing to not sharing without. 453 00:57:44.610 --> 00:57:52.800 And you notice they try another share and see if I can start it up again. 454 00:57:55.139 --> 00:57:58.170 Reconnecting had lost the connection somehow. 455 00:57:58.170 --> 00:58:08.489 Let me stop the video for 1 of my machines to see if that. 456 00:58:08.489 --> 00:58:11.849 Lowers the bandwidth so That'll. 457 00:58:11.849 --> 00:58:19.590 I'll try something maybe something is feeling overloaded. 458 00:58:23.789 --> 00:58:29.940 That did not help. Let me go back to here. 459 00:58:39.210 --> 00:58:44.130 Their content their screen. 460 00:58:44.130 --> 00:58:51.420 Broadcast okay. 461 00:58:53.610 --> 00:58:58.019 You can see the screen again now for a few seconds. So memorize it. 462 00:58:58.019 --> 00:59:01.380 This is going to go away who knows? Okay. 463 00:59:03.179 --> 00:59:09.210 Okay, so this is the circuit composer at the right? So IBM has 2 languages. 464 00:59:09.210 --> 00:59:13.530 They got their own language cut, open 2.0. 465 00:59:13.530 --> 00:59:17.789 And that is the program that will generate that circuit. 466 00:59:17.789 --> 00:59:23.369 And you can type things in the program there, and it will update the circuit immediately. 467 00:59:23.369 --> 00:59:27.329 If I could try it. 468 00:59:35.670 --> 00:59:47.699 When you see, so I edited the circuit and it put the 2nd had Omar gate on Q1 there. So it's by directional. You can use the going to do the circuit. You can use the. 469 00:59:47.699 --> 00:59:55.019 Program there read and write, you can also program in on and it's not showing this 1. 470 00:59:55.019 --> 01:00:00.179 You can important to the reference and so on and it will read Python. 471 01:00:00.179 --> 01:00:10.289 And I show you the price on thing in any case. So, what I'm showing you now is you can interactively to the circuit you can do it in their assembly language. You can drag and drop. 472 01:00:10.289 --> 01:00:14.550 Drag and drop Gates. 473 01:00:14.550 --> 01:00:17.670 And see, probabilities at the bottom. 474 01:00:17.670 --> 01:00:31.769 And then the next thing you can do is you can actually, so, the probability that those are mathematically calculated probabilities. The next thing you can do is actually run it on a simulator or something. 475 01:00:31.769 --> 01:00:37.170 So, we're seeing various machines let's find a simulator. 476 01:00:37.170 --> 01:00:42.630 Not a real machine come on scroll scroll scroll. 477 01:00:42.630 --> 01:00:49.500 Let me just submit it to here and see what happens. So. 478 01:00:49.500 --> 01:00:56.519 So, what I'm doing now is I'm running the job on a real machine, or what I'm doing is it's submitting it. 479 01:00:57.809 --> 01:01:01.980 And it's a batch job I'm not interactive. 480 01:01:03.329 --> 01:01:07.110 And let us see, come on. 481 01:01:13.320 --> 01:01:20.760 And I'm trying to see the output. 482 01:01:20.760 --> 01:01:25.860 But I haven't actually done this on the iPad before of all. I've done it only on the laptop. 483 01:01:25.860 --> 01:01:31.320 So oh, it's pending so far. 484 01:01:31.320 --> 01:01:39.989 Okay, so okay, so it's going to finish in half an hour because it's a real machine so it's queued up. 485 01:01:39.989 --> 01:01:43.800 Um, if I could try to run it on. 486 01:01:49.469 --> 01:01:58.230 Come on. Okay. Okay. Um. 487 01:01:59.880 --> 01:02:05.610 Okay, it's a simulator and let me just run it on that. See what happens. 488 01:02:20.969 --> 01:02:26.219 Now, again, since these are probabilistic, and it runs at like, a 1024 times. 489 01:02:26.219 --> 01:02:30.480 And let's see. 490 01:02:32.760 --> 01:02:36.630 Hello. 491 01:02:43.860 --> 01:02:47.280 It's a simulator job is pending also so. 492 01:02:54.864 --> 01:03:09.594 Now, what the trends piling means is that there's a topology for how the cubes are connected and you can do like a to gate operation only between 2 adjacent cubiks on the graph. And what means. 493 01:03:09.869 --> 01:03:21.119 It means moving the assignment of Urological cubic to the fiscal qbtr, even doing move operations to create a circuit. That's actually compilable. 494 01:03:21.119 --> 01:03:25.019 So. 495 01:03:25.019 --> 01:03:30.539 So that's what's happening there the video doesn't affect anything. I can start it again. 496 01:03:30.539 --> 01:03:43.860 Okay, so that's now again, there's an exponential relationship, but the simulator goes exponentially slower than the real machine. So you can simulate 5 Cubics and so on. 497 01:03:43.860 --> 01:03:48.210 But in any case, so they have example, um. 498 01:03:50.400 --> 01:03:54.900 And, um, lots of stuff here. 499 01:03:56.159 --> 01:04:00.630 You you can browse around, they've got information and demo stuff. 500 01:04:00.630 --> 01:04:10.949 Launch experiments let's get tutorials and textbook. 501 01:04:10.949 --> 01:04:15.329 And so on, so you can browse around are showing you various. 502 01:04:15.329 --> 01:04:19.619 Optimization machine learning, um. 503 01:04:19.619 --> 01:04:22.829 Something evolving Grover and whatever. 504 01:04:22.829 --> 01:04:28.440 Over so this is extracts from their textbooks and the program. 505 01:04:29.670 --> 01:04:33.750 So you can you can have fun here with this sort of stuff. So I think. 506 01:04:33.750 --> 01:04:37.889 Okay, so that there is. 507 01:04:37.889 --> 01:04:42.449 Stuff they got a lot of information and you can go down look at that. 508 01:04:45.869 --> 01:04:51.269 Okay, I go back to my. 509 01:04:53.909 --> 01:04:59.489 Okay, for other information on IBM. 510 01:04:59.489 --> 01:05:04.110 There's a tutorial here, bottom Gates and so on. 511 01:05:05.190 --> 01:05:09.960 And this is presented at a conference as lots of, um, code examples. 512 01:05:09.960 --> 01:05:13.260 I saw notebooks also D wave. 513 01:05:13.260 --> 01:05:20.579 I got back to here, so some of this is, um, some of this is. 514 01:05:21.690 --> 01:05:29.849 Is a refresh, but does have these gauge the rotations in the. 515 01:05:30.929 --> 01:05:34.590 And the block sphere around different axes. 516 01:05:34.590 --> 01:05:39.780 This is showing the various Gates. 517 01:05:39.780 --> 01:05:45.840 You'll start seeing relations between the cube bits and 40 transforms. In fact. 518 01:05:45.840 --> 01:05:53.309 Um, is a strong relation here and using the had Amar gauge, starts looking, like, doing for you transform somewhat. 519 01:05:53.309 --> 01:05:59.280 Cupid gate, that's how it would look as a circuit and. 520 01:06:01.199 --> 01:06:15.179 Heather Gates, the controlled rotation Gates, you can actually put in an angle and it will rotate the cube by that angle because the thing is being excited by a microwave and Micro, execute it for longer. It rotates more or something. 521 01:06:15.179 --> 01:06:19.469 Swap Gates, you cannot copy a cube, but but you can swap. 522 01:06:19.469 --> 01:06:23.969 Um, for example, go to bed street to gauge. 523 01:06:23.969 --> 01:06:31.019 Um, stuff like this bigger things, bigger circuits. 524 01:06:31.019 --> 01:06:35.760 Yeah. 525 01:06:35.760 --> 01:06:41.969 So this is a good set of slides introduction to cube at this is. 526 01:06:41.969 --> 01:06:49.110 Basic gauge some see if you can fund the back ends are. 527 01:06:49.110 --> 01:06:53.429 Simulators or hardware, and again, you can download the simulator, run it on your local machine. 528 01:06:53.429 --> 01:06:57.329 Um, okay. 529 01:06:58.650 --> 01:07:02.070 And talking about here results are statistical. 530 01:07:02.070 --> 01:07:05.190 When there's something like that happening. 531 01:07:06.389 --> 01:07:13.679 This is a limited conductivity thing I told you about. You can only do an operation between 2 cubes, Jason in the graph. 532 01:07:16.920 --> 01:07:21.900 Fundamental algorithms and so you can have fun looking at that slide set here. 533 01:07:21.900 --> 01:07:26.909 Okay, that was the thing from. 534 01:07:26.909 --> 01:07:30.780 Another thing here. 535 01:07:30.780 --> 01:07:38.969 Some tools you're going to fund browsing through here. 536 01:07:38.969 --> 01:07:44.880 But what I've been mentioning now, I think the hot work is in the tools on top of the basic. 537 01:07:44.880 --> 01:07:50.849 Quantum computer, so you can look at these errors. There's a number of projects Python, libraries and other things here. 538 01:07:50.849 --> 01:08:00.385 You can browse around this if you're interested most of the major companies are getting into quantum computing in some way. Then if you would like to use other machines. 539 01:08:00.385 --> 01:08:08.934 So, there's the IBM 1 there, Amazon and Microsoft both have in their cloud computing, have ways. You can use some Amazon bracket. 540 01:08:09.239 --> 01:08:13.139 So you get started with different quantum computing technologies. 541 01:08:13.139 --> 01:08:22.829 You can combine them, so if you have a bigger application, then part might run in the classical machine part might run on bottom issue. Just like using cheap use. 542 01:08:22.829 --> 01:08:26.670 And they have their com solutions lab. 543 01:08:26.670 --> 01:08:34.979 I'm obvious so obvious, you know, partners here and so on. So. 544 01:08:37.104 --> 01:08:45.354 Failed test run and so on and there have examples here, going higher application, using quantum, keeping me up at the application level. 545 01:08:45.744 --> 01:08:52.703 So again, the reason simulation does well on a quantum machine is is molecular simulation. 546 01:08:52.979 --> 01:09:03.449 The molecules are implementing quantum physics, so it's a, it's ultimately a quantum physical problem so it's best simulated on a quantum computer. 547 01:09:03.449 --> 01:09:08.670 Optimization that was a D wave thing among others. And again. 548 01:09:09.689 --> 01:09:17.430 So the way some of these quantum algorithms work is a very a transfer. Well, you have a lot of ampa to do an operation. 549 01:09:17.430 --> 01:09:28.289 Sort of increases 1 of the attitudes and it's like a, it's an optimization thing. And since machine learning has this massive parallel search and optimization machine learning. 550 01:09:28.289 --> 01:09:31.289 Is nicely fit for that. 551 01:09:31.289 --> 01:09:41.850 There's a different here's the 3 different. Well, there's more than 3 years. The 3 main technologies. So this would be a nice summary. You can go. This is getting the Amazon website. 552 01:09:41.850 --> 01:09:52.500 About 3 of the companies they're talking about, we're getting here instead of IBM, but it's the gate based superconducting cube and again. 553 01:09:52.500 --> 01:10:02.340 You know, there's still a debate D, wave is 1 of the earlier partners they have a lot of cute bits, but they do only the optimization. Well, you don't. 554 01:10:02.340 --> 01:10:17.274 Design a circuit, like, have with IBM, IBM has fast gate times, but it's attractors sync. It might have trouble scaling up. It's a very finicky hardware, keeping everything in tune the AI on tap die on 1. say, think. 555 01:10:17.579 --> 01:10:23.909 They've got different problems, they're not as fast and so on. But any case you can have fun with that. 556 01:10:23.909 --> 01:10:30.930 And I, I didn't put a link in there for the Microsoft. 557 01:10:30.930 --> 01:10:38.310 But basically, so this will lead you in should you be interested in a lot of other stuff? 558 01:10:40.494 --> 01:10:53.454 So you can put quantum computing on your resume. So what I encourage you to do, actually, is run some of the demo programs on Amazon and then you can honestly say, you've run quantum programs on different quantum architectures. 559 01:10:53.454 --> 01:11:00.954 Not just on 1 and may even change the program a little and run it and then you can put on your resume that you've done this. 560 01:11:01.649 --> 01:11:05.550 You know, it might be and salary enhancing or something. 561 01:11:05.550 --> 01:11:11.010 So, Monday, we'll have 5 more talks. 562 01:11:11.010 --> 01:11:16.829 And that will be the last class and then your projects. 563 01:11:16.829 --> 01:11:20.670 If you haven't done homeworks to them, your projects. 564 01:11:20.670 --> 01:11:28.020 Are do now, they do when they're due because the registrar wants grades from me, like. 565 01:11:28.020 --> 01:11:41.994 36 hours after the last class day, or something like that. Now, I may not exactly meet it, but I have to sort of meet it because I have to think of the registrar, because they're manually clearing students with complicated circumstances. 566 01:11:41.994 --> 01:11:43.885 And this year things are complicated. 567 01:11:44.939 --> 01:11:51.119 So and other than that, alright, some of this down also on Monday, I'm available. 568 01:11:51.119 --> 01:11:58.319 Basically, even after you leave for questions, any topic that's legal and ethical. I'm glad to talk to you about. 569 01:11:58.319 --> 01:12:04.560 Doesn't even have to be this course so have fun and we'll talk a little more about that. Monday. 570 01:12:04.560 --> 01:12:08.159 But have a good a good weekend and see you Monday.