WEBVTT 1 00:00:02.009 --> 00:00:06.240 Okay, I'm trying to share the screen from my phone. 2 00:00:06.240 --> 00:00:10.948 Onto Webex is it working. 3 00:00:13.349 --> 00:00:23.219 Yes. 4 00:00:23.219 --> 00:00:23.820 Cool. 5 00:00:23.875 --> 00:00:46.674 Okay. 6 00:00:50.640 --> 00:00:53.939 Thank you finally. 7 00:01:08.605 --> 00:01:09.084 Oh. 8 00:01:15.299 --> 00:01:20.010 Okay, well, let me go through things and I can't, I'm just holding this here to tell me. 9 00:01:20.010 --> 00:01:24.359 If it's working. Okay, so finally, um. 10 00:01:27.719 --> 00:01:35.579 Okay, so the machine, so the reason for, um, using this machine is that. 11 00:01:35.579 --> 00:01:44.760 It has, um, it will whatever I forget about 12 core xyandz and quarter terabyte of memory. 12 00:01:44.760 --> 00:01:49.140 And nice only about a year old, 2 year old and video GPU. 13 00:01:49.140 --> 00:01:56.010 And I have local files there you can browse through me some points here that. 14 00:01:57.359 --> 00:02:01.019 The best compiler to use is. 15 00:02:01.019 --> 00:02:06.060 The, um, NVIDIA for plus compiler, which they got from. 16 00:02:06.060 --> 00:02:10.469 So, it's NBC plus plus if you run fast now. 17 00:02:10.469 --> 00:02:15.689 It's in a special directory under slash. If you run bath, I've set it up. 18 00:02:15.689 --> 00:02:21.659 That it will include the directory in your path environment variable and so on. 19 00:02:21.659 --> 00:02:25.379 If you're running something else, like, which is what I run. 20 00:02:25.379 --> 00:02:33.479 There are some, um, some variables to set and I cut and pasted the various things there for you. 21 00:02:33.479 --> 00:02:41.280 Okay, um, the reason for invidious compiler is it's fairly up to date with the C. plus plus standard. 22 00:02:41.280 --> 00:02:51.689 And well integrated with CUDA and it's integrated with open ACC and open MTP. So it's up to date compiler and I have a command that will describe the to, you. 23 00:02:51.689 --> 00:02:56.729 I recommend when I set up is a, an pair. 24 00:02:56.729 --> 00:03:01.919 Okay, um, the new 1 with me. 25 00:03:01.919 --> 00:03:06.240 You can read the rest of your and so forth. So the, um, the new stuff. 26 00:03:06.240 --> 00:03:11.520 Is a is 1 of the parallel tools called open MP. 27 00:03:11.520 --> 00:03:19.949 And when it works, it's, um, 1 of the standards, higher level, mid level to help you write parallel programs. 28 00:03:19.949 --> 00:03:23.280 The way use open MP is you write your program. 29 00:03:23.280 --> 00:03:29.069 In a way that the components of the program are parallelizable. So if you for for loop, for example. 30 00:03:29.069 --> 00:03:41.159 The iterations of the 4, though, should not interact with each other so they can be done in parallel let's say, or your program might have various routines that don't interact with each other and can be executed in parallel. 31 00:03:41.159 --> 00:03:44.879 So, you design your C plus plus program like that. 32 00:03:44.879 --> 00:03:48.150 And once you design your program like that, you put. 33 00:03:48.150 --> 00:03:55.949 In the program to instruct the compiler so is like a pound sign fragment says open empty and the plus standard says. 34 00:03:55.949 --> 00:04:00.930 Allows for several separate new additions to have their own. 35 00:04:00.930 --> 00:04:05.370 And if the compilers doesn't have that addition to just ignores them. 36 00:04:05.370 --> 00:04:10.110 So, I open so open up as a couple of parts. It's got. 37 00:04:10.110 --> 00:04:14.159 Some fragments which are minor extensions to the C plus plus language. 38 00:04:14.159 --> 00:04:23.189 And, for example, you put a fragment and we'll do this for do the iterations of the 4 loop in parallel over as many as parallel threads you have. 39 00:04:24.329 --> 00:04:28.108 So these are running, they're generally running threads. 40 00:04:28.108 --> 00:04:35.459 So, they have access to the same memory, their lightweight. So you can tell open MP. You can tell it to. 41 00:04:35.459 --> 00:04:38.908 Strike this for loop across all the threads that you have. 42 00:04:38.908 --> 00:04:42.329 Or you can also say, you've got the separate. 43 00:04:42.329 --> 00:04:46.319 Functions you can say, just like a, a, a, um. 44 00:04:46.319 --> 00:04:55.949 Cause that thread through run something in parallel fire up a task, and then wait till it finishes. So it's 1 thing open. Mp has are these fragments the 2nd thing it has. 45 00:04:55.949 --> 00:05:02.939 Are some a few functions that you can call that will do things like tell you. 46 00:05:02.939 --> 00:05:06.119 How many do you have available? How many credits you want to use. 47 00:05:06.119 --> 00:05:11.608 And it also interacts with some environment variables. You can set. 48 00:05:11.608 --> 00:05:14.968 Does everyone know what environment variable is? 49 00:05:14.968 --> 00:05:18.418 Oh, yes, okay. It's, um. 50 00:05:18.418 --> 00:05:23.038 Again, I'm, this is a Linux based course, but you can set variables. 51 00:05:23.038 --> 00:05:26.999 In your shell, and it has a name, and it has a value and. 52 00:05:26.999 --> 00:05:30.629 It encodes various things such as the directories to search. 53 00:05:30.629 --> 00:05:36.718 To run a, a program name, you can set those empires, um, to control your open. 54 00:05:36.718 --> 00:05:42.538 And then your compiler, you tell your compiler, you want to compile with open MP if you don't, it just ignores all these fragments. 55 00:05:42.538 --> 00:05:49.259 So, that's the thing and the hard part for this is designing the, um. 56 00:05:50.639 --> 00:06:01.439 You know, designing the program to be parallelizable, um, open MP is not it works well, with the multi core systems like the Intel xyandz. It's not as fully up to date. 57 00:06:01.439 --> 00:06:12.449 With yet, although that's getting added to it. It's a living system it's used by people. It's got a standards group. They keep doing additions. It's nice to work with a package. That's a living system. 58 00:06:12.449 --> 00:06:18.209 And I have some examples on the line. 59 00:06:18.209 --> 00:06:25.228 Um, I give the directory there running in parallel dot, uh. 60 00:06:25.228 --> 00:06:34.168 You're also free who copy stuff to your own computer and run it. If you want to install. 61 00:06:34.168 --> 00:06:38.879 The NVIDIA compilers you become an NVIDIA developers is free. 62 00:06:38.879 --> 00:06:42.509 And then you can download the package and install it on your system. 63 00:06:42.509 --> 00:06:45.509 And I recommend that. 64 00:06:45.509 --> 00:06:51.028 I have a Hello world online. 65 00:06:51.028 --> 00:07:01.829 And which this fires up, it just says, Hello world in parallel and all the available threads. And every time you run the program, you'll get a different answer. 66 00:07:01.829 --> 00:07:04.949 Because and the big lesson from that. 67 00:07:04.949 --> 00:07:09.059 Is there are no guarantees about the orders that the parallel threads run. 68 00:07:09.059 --> 00:07:15.658 They may interlaced instruction by instruction or 1 may finish before the 2nd 1 starts or whatever. 69 00:07:15.658 --> 00:07:19.439 So that will it's unpredictable. 70 00:07:20.579 --> 00:07:24.778 And there's no guarantees who has that paragraph there twice I have to delete it. 71 00:07:24.778 --> 00:07:29.459 I type this in kind of just having historical example. Um. 72 00:07:29.459 --> 00:07:34.379 I was the synchronization problem with the 1st space shuttle mission had a problem with it. 73 00:07:34.379 --> 00:07:39.059 So, debugging is a separate issue. 74 00:07:40.228 --> 00:07:44.848 Okay, so now suppose you want the different threats to interact with each other. 75 00:07:44.848 --> 00:07:48.778 Open MP has several different mechanisms. 76 00:07:48.778 --> 00:07:54.658 From limited mechanisms, which are cheap to more general mechanisms that are expensive. 77 00:07:54.658 --> 00:07:59.488 And and you do them with pragmatist and you can do a pragmatist. 78 00:07:59.488 --> 00:08:05.728 If you put 1 practice called a critical, and you can put it if you have your portal and you put a critical in it. 79 00:08:05.728 --> 00:08:11.129 That the following instruction, which could be a whole block. 80 00:08:11.129 --> 00:08:15.778 Whatever is following C plus plus statement like, so it could be a block. 81 00:08:15.778 --> 00:08:20.038 Is executed on only 1 thread at a time. 82 00:08:20.038 --> 00:08:23.129 So, it gets serialized, um. 83 00:08:23.129 --> 00:08:28.319 A couple of problems with that, of course, is, if you have a critical block and have an example. 84 00:08:28.319 --> 00:08:33.269 It shows that, um, then 1st. 85 00:08:33.269 --> 00:08:36.269 You lose the benefits of parallelism. 86 00:08:36.269 --> 00:08:42.839 And 2nd, the critical blocks are expensive to start up and I'm guessing 100,000 instructions in the cost or something. 87 00:08:42.839 --> 00:08:48.298 But you can use critical blocks to serialized parts of your loop. 88 00:08:48.298 --> 00:08:51.509 Um, a 2nd thing. 89 00:08:51.509 --> 00:08:54.509 That open has is an atomic Craig. 90 00:08:54.509 --> 00:08:57.719 And it's much cheaper, but the atomic crack. 91 00:08:57.719 --> 00:09:02.038 We'll do 1 specific thing in serial and that's a read modified, right? 92 00:09:02.038 --> 00:09:05.458 Which is a common operation. 93 00:09:05.458 --> 00:09:08.609 For example, you've got a common global array. 94 00:09:08.609 --> 00:09:14.129 And each that each separate thread is, say, appending stuff into the right. 95 00:09:14.129 --> 00:09:18.928 So, you have a calendar of where is the 1st free element that you can append to. 96 00:09:18.928 --> 00:09:22.048 So you want to append, you read this counter. 97 00:09:22.048 --> 00:09:25.948 And you and you update it and write it back. 98 00:09:25.948 --> 00:09:29.818 Well, of course, the read modify right could get interrupted by another thread. 99 00:09:29.818 --> 00:09:33.629 So the counter doesn't work, right? 100 00:09:33.629 --> 00:09:43.109 Have an example of that I think so if you have the atomic, it will serialize the read modify, right? So each separate thread. We'll get a. 101 00:09:43.109 --> 00:09:46.798 A valid pointer a valid number. It will be unique. 102 00:09:46.798 --> 00:09:57.448 And it's much cheaper to execute because there's hardware support for that. This is such an important and such a common operation read modify. Right? 103 00:09:57.448 --> 00:10:00.688 That there's hardware support for doing it atomic. 104 00:10:00.688 --> 00:10:06.359 So, that's the atomic Craig, but there's only a few specific. 105 00:10:06.359 --> 00:10:10.438 And statements that can be put after the atomic. 106 00:10:11.639 --> 00:10:18.538 So, another form to read, modify right is called test and set and it does effectively the same thing. 107 00:10:18.538 --> 00:10:25.168 So that the atomic fragment was invented to handle a common, instruct a common. 108 00:10:25.168 --> 00:10:31.889 Thing that you want to do so it does it efficiently. Um, there's another common thing that you want to do. 109 00:10:31.889 --> 00:10:37.948 And that is, um, it's called a reduction operation you want to some, a bigger rate. 110 00:10:37.948 --> 00:10:42.869 Often you want to do it in parallel and. 111 00:10:42.869 --> 00:10:53.849 So, the common saw the, you know, the, the sum, that's a global variable and all the different threads are writing too. So that would be a read modify. Right also read the sum. Add here. 112 00:10:53.849 --> 00:10:58.379 New thing into it and write it back and. 113 00:10:58.379 --> 00:11:04.198 For that open M. P. and it's competitors have a reduction Craig. 114 00:11:04.198 --> 00:11:10.589 And if you say, if you don't have some pragmatic, some will be wrong because. 115 00:11:10.589 --> 00:11:16.198 Different threads will step on each other's toes with the reduction. Pragmatic. Does. 116 00:11:16.198 --> 00:11:23.818 Is it causes open to build a tree of parallel cooperating parallel threads? Basically. 117 00:11:23.818 --> 00:11:29.609 And so each parallel thread has its own sub total that the. 118 00:11:29.609 --> 00:11:32.609 For the, the iterations and that thread add into. 119 00:11:32.609 --> 00:11:40.318 And then then these subtotals get combined and that's all done automatically. 120 00:11:40.318 --> 00:11:47.249 So, for, um, so for the reduction operation. 121 00:11:47.249 --> 00:11:50.759 That's a serious thing that's built into open MP. 122 00:11:50.759 --> 00:11:59.038 So, you do subtitles and I mentioned some other things in here um. 123 00:11:59.038 --> 00:12:04.769 Of course, if you just summing an array, there may be a close form formula, which you can use to test that. 124 00:12:04.769 --> 00:12:07.889 So, if you do the summation without. 125 00:12:07.889 --> 00:12:12.808 Getting the reduction every time you run the program, you'll get a different answer and all the answers will be too small. 126 00:12:12.808 --> 00:12:19.349 You hope you get a different answer is a bad case is every time you run the program, you get the same answer and it's wrong. 127 00:12:19.349 --> 00:12:30.328 So, okay, so we got these fragments to help. You do things in parallel critical atomic reduction. 128 00:12:30.328 --> 00:12:33.719 Um, other things. 129 00:12:36.808 --> 00:12:48.869 Overhead issues and open MP you can tell it how many threads you want to do it. 1st, just compiling the program with open. Mp will make it run more slowly off and just the overhead. 130 00:12:48.869 --> 00:12:52.438 Of having the facilities available, even if you don't use them. 131 00:12:52.438 --> 00:12:56.009 And so with open. 132 00:12:56.009 --> 00:13:02.519 You compile the program at run time. You can tell it how many threads to use. It's using setting an environment variable. 133 00:13:02.519 --> 00:13:06.239 Threads equals port, we use for threads maximum. Let's say. 134 00:13:06.239 --> 00:13:15.568 And so what you can do is that you can then see what the parallel speed up is, as you run the same program with more and more threads. 135 00:13:15.568 --> 00:13:20.609 And it's not going to be linear. Um, so with 2 threat with 1 threat. 136 00:13:20.609 --> 00:13:27.149 You hope it's not much slower than running in cereal with 2 threads ideally would take half the time. 137 00:13:27.149 --> 00:13:30.869 If you're unlucky, it will take more time. I'm not joking. 138 00:13:30.869 --> 00:13:35.849 I've seen examples are running a parallel program with 2 threads take longer. 139 00:13:35.849 --> 00:13:40.739 Real time, they're running it with 1 thread. Just the overhead of the threads. 140 00:13:40.739 --> 00:13:44.158 And also might give you the wrong answer if you're really lucky. So. 141 00:13:44.158 --> 00:13:52.889 Um, by any case, if you're, you know, seriously with 2 threads, it might be almost twice as fast. So you can do graphs and so on. 142 00:13:52.889 --> 00:13:57.089 Become a point with too many threads then it may actually take more time. 143 00:13:58.259 --> 00:14:02.068 Okay, um, so I'm mentioning mentioning that here. 144 00:14:04.168 --> 00:14:08.249 These are all points that I've typed in in the past as a summary. Um. 145 00:14:10.798 --> 00:14:18.658 Since I'm talking about summing an array, we'll get into various voting point issues just as an aside. They're not parallel computing issues. 146 00:14:18.658 --> 00:14:23.938 But they're relevant and, um, I actually, I can be. 147 00:14:25.168 --> 00:14:30.359 I can't because I don't have the do I have the network here? I can start showing your stuff. 148 00:14:32.969 --> 00:14:37.259 No, okay, so I'm still running from. I was hoping I could project something, but no. 149 00:14:37.259 --> 00:14:40.678 Are you looking at your computer and seeing what's on my phone? 150 00:14:40.678 --> 00:14:49.379 Um, why it's working better with my phone than with, um, my iPad. I don't know. 151 00:14:49.379 --> 00:14:57.389 Ipads newer. Okay. Um, I'm in various floating point issues here. I mentioned that. 152 00:14:57.389 --> 00:15:01.589 Your is your axioms for a real field? 153 00:15:01.589 --> 00:15:05.639 Properties the real field real number should have the community of their associative. 154 00:15:05.639 --> 00:15:13.708 Stuff like that basically with folding point numbers on computers. None of these axioms are satisfied. 155 00:15:13.708 --> 00:15:17.399 As computers, the real numbers are not committed to. 156 00:15:17.399 --> 00:15:23.428 They're never associative. Exactly. And that can cause problems with adding and I give an example there. 157 00:15:23.428 --> 00:15:30.298 Um, where so you kept the 20th minus 10,400 plus 1. 158 00:15:30.298 --> 00:15:35.999 It should be 0, but pending on how you associate it it may not be. 159 00:15:35.999 --> 00:15:38.999 There should be 1, so I mentioned stuff like that. 160 00:15:38.999 --> 00:15:44.308 I meant I mentioned some solutions here. You can read for real world solutions. 161 00:15:45.328 --> 00:15:50.129 If it was a serial machine, like Ze on, I would say, just use a couple of precision all the time. 162 00:15:50.129 --> 00:15:54.568 Same speed a single on your. 163 00:15:54.568 --> 00:16:01.469 Double precision is probably half the speed of single, but it may be worse. 164 00:16:01.469 --> 00:16:12.658 Because the double precision compute units are separate from the single precision units, then it depends on many of them are built into the GPU. And that depends on the generation cause the video keeps going back and forth. 165 00:16:12.658 --> 00:16:19.889 Um, because they're expensive to put on the hardware. So, um, I bet you tries to minimize them. 166 00:16:22.139 --> 00:16:30.778 Okay, um, well, you can go into the liver more. Has the tutorial on this also um. 167 00:16:32.339 --> 00:16:35.849 I have another example here, an open MP called tasks. 168 00:16:35.849 --> 00:16:40.889 And so your program can fire off tasks, parallel tasks. 169 00:16:40.889 --> 00:16:47.818 The canonical examples from that sheet alphabet is having bed minus 1 plus alphabet minus 2. 170 00:16:47.818 --> 00:16:53.278 So, the, um, you could fire off in parallel tasks for. 171 00:16:53.278 --> 00:17:03.389 To solve those 2, and they could fire off parallel tasks all. So and so you've got a whole mess of parallel. So a task is an, it's an independent function and it runs and you wait till it finishes. 172 00:17:03.389 --> 00:17:06.959 And so the program can dynamically as it's running. 173 00:17:06.959 --> 00:17:12.028 Create new tasks, and I have an example of that and. 174 00:17:12.028 --> 00:17:16.019 Now, you would never do this for you. It's a. 175 00:17:16.019 --> 00:17:21.058 Pathological example, the fact, you know, the way you really compute f, then. 176 00:17:21.058 --> 00:17:24.388 The fastest way you used to close formula, which I have there. 177 00:17:24.388 --> 00:17:28.949 There's an exact formula, the computes f event in, like, constant time. 178 00:17:28.949 --> 00:17:35.669 Log in time, and I have it there, but for pedagogical purposes, you can fire off parallel tasks, but there's got to be an overhead. 179 00:17:35.669 --> 00:17:40.558 So, I have an example of that, um. 180 00:17:42.838 --> 00:17:47.669 And it's nice because the program can choose to, um, fire off tasks. 181 00:17:47.669 --> 00:17:50.878 Task whatever it wants, and there's. 182 00:17:50.878 --> 00:17:58.048 Obviously, there's, there's scaffolding, so you can fire off the task and wait until it finishes and it returns the value to, you. 183 00:17:59.338 --> 00:18:03.148 Okay, um, so I have an example that does that. 184 00:18:05.159 --> 00:18:12.868 Um, you can I mentioned environment variables. You can read them inside your program. 185 00:18:13.979 --> 00:18:20.788 Um, there's another thing you can do called a barrier. 186 00:18:20.788 --> 00:18:25.798 So, you're writing a lot of whatever's in parallel. 187 00:18:25.798 --> 00:18:31.828 Uh, maybe for loop or something, whatever, or your program might be firing off tasks and stuff. 188 00:18:31.828 --> 00:18:39.598 You can have a barrier and the barrier causes all the parallel tasks to wait until they all get to the barrier. 189 00:18:39.598 --> 00:18:45.148 So, everything before the barrier is completed before anything after the barrier starts. 190 00:18:45.148 --> 00:18:51.209 So, that can be useful. I have an example of that here because the thing is otherwise this, um. 191 00:18:52.499 --> 00:18:58.288 Open up P works, is you, you create a pile of parallel threads. 192 00:18:58.288 --> 00:19:02.759 And then you've got a 4 loop, let's say, and it assigns. 193 00:19:02.759 --> 00:19:06.838 Iteration is the formula to the threads and it's a couple of different. 194 00:19:06.838 --> 00:19:11.308 Policies can use. I think it's probably not worth worrying about that. 195 00:19:11.308 --> 00:19:17.729 But depending the, some of the threads may finished before others, and then the threads. 196 00:19:17.729 --> 00:19:26.729 Running the, for the threads that have been handle all their iterations, they're finished in their idle, just waiting to be used. So if you have another 4 loop after that. 197 00:19:26.729 --> 00:19:32.459 The 2nd floor, you could actually start executing before all the threads for the 1st, part of the finished. 198 00:19:32.459 --> 00:19:38.759 Because you got, because let's say the different iterations of the threads they take each 1 takes a different amount of time perhaps. 199 00:19:38.759 --> 00:19:45.989 And so, by default, as soon as 1 thread, finished all the iterations that were allocated to it, it's available and. 200 00:19:45.989 --> 00:19:49.348 So, the next 4 loop might start up and using that for the thread. 201 00:19:49.348 --> 00:19:53.848 But maybe the next 4 loop wants to use stuff for the 1st, for the computed. 202 00:19:53.848 --> 00:19:59.759 So, you put a barrier between the 2 loops, which would say the 1st, 4 loop has to completely finish all its threats. 203 00:19:59.759 --> 00:20:06.778 For the 2nd, for the can start, that'd be the barrier but of course, the barrier is going to slow down the program but. 204 00:20:06.778 --> 00:20:10.709 It may make a. 205 00:20:12.749 --> 00:20:18.509 It may make the program be. Correct? So that's your trade off do. 206 00:20:18.509 --> 00:20:25.858 So we got so you can take a 4 loop and run it in parallel across all your threads. You can have tasks. 207 00:20:25.858 --> 00:20:30.118 Or you create tasks, um, and they have, um. 208 00:20:30.118 --> 00:20:36.088 Run assigned to the thread so obviously in all of this, you've got some hidden, um. 209 00:20:36.088 --> 00:20:40.048 Scheduling system, which is not really visible, so. 210 00:20:40.048 --> 00:20:50.699 You may have more tasks, then you have threads so they're gonna it's gonna be 2 of them waiting. And again, if you've got the 4 loop has a 1Million iterations perhaps. But you, maybe you've got 48 threads. 211 00:20:50.699 --> 00:20:57.358 And there's going to be iterations waiting to be assigned and there's a couple of policies for that. 212 00:20:57.358 --> 00:21:03.388 But you don't worry about that, but there's you clearly there's some scaffolding under the surface to make this work. 213 00:21:03.388 --> 00:21:06.989 There's another called sections, um. 214 00:21:06.989 --> 00:21:12.898 And it's a more static way to do parts of the program and parallel and the tasks thing. 215 00:21:12.898 --> 00:21:19.919 So you can say your program has these 3 sections, and you can say they will be executed in parallel. 216 00:21:19.919 --> 00:21:23.189 Like, I said, tasks, the more dynamic sections are more static. 217 00:21:23.189 --> 00:21:26.429 So, I'm more assigned to compile time than a run time. 218 00:21:26.429 --> 00:21:31.048 And, um. 219 00:21:31.048 --> 00:21:34.169 All of this stuff is non deterministic. 220 00:21:34.169 --> 00:21:43.798 Every time you run it, it'll be ordered differently. So so I was open empty implemented. It's only running on top of whatever's below it like P threads or something. 221 00:21:43.798 --> 00:21:48.898 So, it's an abstraction on top of, for example, P, threads that as much easier to use. 222 00:21:48.898 --> 00:21:53.669 And that's where it's lives, um, lives in the, um. 223 00:21:53.669 --> 00:21:59.608 Medical system, so if I could, I'd run examples for you. 224 00:21:59.608 --> 00:22:06.719 Um, and those of you that understand the system better than me, are welcome to. 225 00:22:06.719 --> 00:22:14.128 Um, now, can I go see, is anything. 226 00:22:14.128 --> 00:22:20.159 So, I don't even see my iPad on the things to select. I don't know what's going on there. 227 00:22:21.209 --> 00:22:26.098 But Tom, or my phone for try 1 more thing for a fun. 228 00:22:32.848 --> 00:22:37.318 Okay, yeah. Okay. Let me just try this. Okay, so. 229 00:22:39.989 --> 00:22:44.398 I've turned the I, the thing with the phone, this is an 8 so it's rather old. 230 00:22:44.398 --> 00:22:48.749 So, its Internet is quite slow, but, um. 231 00:22:55.199 --> 00:23:02.759 Yeah, sure. 232 00:23:02.759 --> 00:23:08.818 As long as that's showing that little Ethernet icon, I'm not on WiFi so. 233 00:23:14.098 --> 00:23:17.189 I'm thinking we just overloaded the local network. 234 00:23:21.269 --> 00:23:34.433 But it occurred to me, 235 00:23:34.433 --> 00:23:37.253 maybe is trying to jam my net local network. 236 00:23:38.159 --> 00:23:41.338 Rpi does not like people running private WI. Fi. 237 00:23:42.419 --> 00:23:47.308 And it just occurred, there are technical ways to jam at some expensive hotels do that. 238 00:23:47.308 --> 00:23:52.019 And, okay. 239 00:23:52.019 --> 00:23:56.038 You think I'm joking I'm not joking. Um. 240 00:24:00.509 --> 00:24:04.169 Cause I couldn't hear you. 241 00:24:10.348 --> 00:24:14.729 Well, it's they officially for and, um. 242 00:24:14.729 --> 00:24:18.689 So, it may not be that much money and some sort of. 243 00:24:18.689 --> 00:24:22.348 To interferes with the tracing at the start. 244 00:24:22.348 --> 00:24:27.269 I have read that expensive hotels that want that 1 want you to buy. 245 00:24:27.269 --> 00:24:31.739 Their services sometimes will jab people setting up. 246 00:24:32.909 --> 00:24:38.939 That works, and it has never occurred to me. Now, knowing this occurs to me next time for your cable next time. 247 00:24:38.939 --> 00:24:49.618 So that's, uh, that's an R. J. connector. No, that's for the phone. 248 00:24:49.618 --> 00:24:55.798 Um, no, this is my iPad. Cool. No, this is on a table. 249 00:24:55.798 --> 00:25:03.388 Well, now, the trouble is that the hard wired networks they check the Mac. 250 00:25:03.388 --> 00:25:09.598 Right and if you're not out there approved list, the hard wired network will not talk to, you. 251 00:25:09.598 --> 00:25:14.848 For my office, for example, I have to register my computer. 252 00:25:14.848 --> 00:25:19.648 With the computer, or I cannot use the hardware in my office. 253 00:25:20.729 --> 00:25:26.398 Um, no, what I'll do next time is, I'll connect. 254 00:25:26.398 --> 00:25:35.608 My iPad, um, I just took the iPad to the think pad by cable, cause the iPad. 255 00:25:35.608 --> 00:25:38.999 And we'll do cell phone, but I think that doesn't have a cell phone. 256 00:25:38.999 --> 00:25:44.398 Photo or yeah, That'll probably be the easiest thing. So. 257 00:25:44.398 --> 00:25:51.028 But once we get yeah. 258 00:25:56.519 --> 00:26:03.509 Which is it causing the problem? The thing is I'm wonderful. I like the next better, but also the. 259 00:26:05.368 --> 00:26:13.558 The remote terminal apps I don't like remote terminal apps on Windows as much as, and I'm not familiar with him as as much as it says and Linux. 260 00:26:13.558 --> 00:26:17.818 Oh, I mean, because other things I can do with, um. 261 00:26:17.818 --> 00:26:22.949 Linux is, I can mount parallel full file system on my local computer. 262 00:26:22.949 --> 00:26:31.288 And so I can access their remote files, just as if there were local files apart from it being slower. Obviously. 263 00:26:31.288 --> 00:26:37.048 There's a lot of advantages. Well, okay, going back to this. Um, so assuming you can. 264 00:26:37.048 --> 00:26:42.838 See, my phone, so luckily I've typed all this stuff in in the past. Um. 265 00:26:42.838 --> 00:26:49.648 So, we're talking open MP open MP is above threads and so on but it gives you low level tools. 266 00:26:49.648 --> 00:26:55.499 To do your program in parallel, so have kind of good examples online. I'll try to run. Um. 267 00:26:58.108 --> 00:27:07.199 Thank how can I take it out? 268 00:27:08.519 --> 00:27:13.588 I don't even want to take right and a half an hour trying to connect. I want to try other things, but. 269 00:27:15.959 --> 00:27:19.169 Solutions the hardware sorry? 270 00:27:21.778 --> 00:27:25.618 I did that actually, I rebooted it so. 271 00:27:25.618 --> 00:27:31.409 But for why, um, yeah, I think it why I can't. 272 00:27:31.409 --> 00:27:36.419 Run off the iPad, um, WiFi is might be charming. It. 273 00:27:36.419 --> 00:27:40.499 I'm thinking, why can't go straight to WI. Fi. That might be overloaded. 274 00:27:40.499 --> 00:27:45.959 And, oh, well. 275 00:27:47.159 --> 00:27:58.888 However. 276 00:28:01.558 --> 00:28:10.318 Hello. 277 00:28:10.318 --> 00:28:16.019 You know, oh, I just remembered RPI block DNS unless it's encrypted. 278 00:28:17.278 --> 00:28:21.028 I forgot that. 279 00:28:22.108 --> 00:28:25.558 Oh, Hello. 280 00:28:26.788 --> 00:28:31.439 I forgot I know RPI and again, I'm not joking box. 281 00:28:31.439 --> 00:28:34.679 Unless it's on the official DNS server. 282 00:28:36.028 --> 00:28:42.449 So, I can't remember what that is. Um, that's a reason for encrypted DNS. Sorry? 283 00:28:52.439 --> 00:28:56.969 What's what now? What's it called? Uh. 284 00:28:56.969 --> 00:29:01.709 Oh, yeah, I don't I don't even know what that is. 285 00:29:01.709 --> 00:29:06.209 Oh, let me go back with my phone is working. Apparently. Um. 286 00:29:07.469 --> 00:29:16.229 Oh, yeah. 287 00:29:18.118 --> 00:29:23.219 Okay, okay, let me go back to the phone. Let's give you a little intellectual stuff today. 288 00:29:23.219 --> 00:29:28.888 Um, real world networking, so. 289 00:29:28.888 --> 00:29:33.358 Open MP, it's a level above things like P threads that's widely used. 290 00:29:33.358 --> 00:29:42.689 You have to explicitly do stuff in parallel and it's not so good on GPU start yet, although the trying it's lagged behind. 291 00:29:42.689 --> 00:29:47.038 But in any case, it's a tool that's worth getting familiar with. 292 00:29:48.479 --> 00:29:52.949 Another tool is open ACC. 293 00:29:52.949 --> 00:30:07.828 And that's a higher level tool than open MP. It's also widely used. It's newer open. Mp started 20 years ago, people in in parallel computing for a long, long time. Many decades. 294 00:30:07.828 --> 00:30:14.338 And what may parallel computing take off was the fact that the serial machine stop getting faster. 295 00:30:14.338 --> 00:30:22.288 So, that's that's the hot thing for parallel. So, open is another tool. It's an abstraction layer. 296 00:30:22.288 --> 00:30:27.358 Again, it's above the hardware things like P threads and so on and it is, um. 297 00:30:28.888 --> 00:30:34.138 Higher level and open MP open MP you explicitly paralyze the loops. They want a parallel line. 298 00:30:34.138 --> 00:30:37.348 Open ACC, you. 299 00:30:37.348 --> 00:30:45.838 Depend on the compiler to identify those loops into parallelize them automatically. So the theory with open ACC, um, theory. 300 00:30:45.838 --> 00:30:50.759 Is if you write your program so that the loops parallelizable and so on. 301 00:30:50.759 --> 00:30:54.179 And then the opening, and then the companion you tell the compiler. 302 00:30:54.179 --> 00:31:01.558 To use opening the theories that the compiler will identify the stuff that can be done in parallel and will do it. 303 00:31:01.558 --> 00:31:07.259 So does it perfectly? No, but in theory it does, um. 304 00:31:07.259 --> 00:31:13.979 It does it matter, and with open ACC, it also knows about. 305 00:31:13.979 --> 00:31:23.939 Open empty hardly does so and by the way the reason well, not 1 reason I mean, that actually well, there's lots of tutorials um. 306 00:31:23.939 --> 00:31:27.388 I actually was not trying to click on that. Um. 307 00:31:30.868 --> 00:31:33.959 Well, there we go, um. 308 00:31:35.128 --> 00:31:41.638 So so it's got a lot of documentation online. It's being updated large, large user group also. 309 00:31:41.638 --> 00:31:46.528 So, and the theory is it works with is better, which I haven't talked about yet. 310 00:31:46.528 --> 00:31:56.878 Um, other tools, and these are mentioned little towards the end of the 1st tutorial, um, specific. So the thing with. 311 00:31:56.878 --> 00:32:01.019 These 2 things is their platform independent to some extent that. 312 00:32:01.019 --> 00:32:09.959 The theory you should write a parallel program and open ACC. You tell them what the back end is you tell them to compile for the. 313 00:32:11.009 --> 00:32:16.138 Or you tell us to compile for the Mini corps NVIDIA, and it will do it. 314 00:32:16.138 --> 00:32:22.648 The reason I say in theory is about this stuff works perfectly in practice, but that's the idea that your program is portable. 315 00:32:22.648 --> 00:32:30.028 That would also be the idea for open MP, is that except that they're still getting proper back end support for GP. 316 00:32:30.028 --> 00:32:33.118 Um, that's why. 317 00:32:33.118 --> 00:32:39.778 They're good now there's piles of other tools and it'll just be that's all I can do is talk. I can't really show anything. 318 00:32:39.778 --> 00:32:45.719 Specifically for g, for and video, the code is a lower level thing. 319 00:32:45.719 --> 00:32:52.618 Down at the told her, like, a parallel assembly language, and you can specifically target your. 320 00:32:52.618 --> 00:32:58.078 Your credit card, and tell what to run on them. So that's a more lower level thing. 321 00:32:58.078 --> 00:33:02.818 If you're doing massive parallel stuff like you're in energy lab. 322 00:33:02.818 --> 00:33:09.058 They're backing these tools they're also back another a whole pile of other parallel tools that they're experimenting with. 323 00:33:09.058 --> 00:33:16.229 And these parallel tools, help you assign parts of your program to different parallel threads and cores and stuff like that. 324 00:33:16.229 --> 00:33:22.138 So, they give you control more control over your program, how your program goes in parallel. 325 00:33:22.138 --> 00:33:25.469 But they are harder to program, so. 326 00:33:27.538 --> 00:33:38.098 Okay, and that's so the content for today after wasting half an hour, trying to work with our, um. 327 00:33:38.098 --> 00:33:41.848 Sorry, my life, but, um, is. 328 00:33:41.848 --> 00:33:46.348 The intellectually new stuff are open MP and open. 329 00:33:46.348 --> 00:33:50.939 As widely used parallel tools at different levels to help you paralyze your program. 330 00:33:52.709 --> 00:33:57.239 All of the stuff the hardest part is your algorithm design. Of course. So. 331 00:34:00.358 --> 00:34:07.138 And so that's the new stuff for today. I'm open for questions. Um. 332 00:34:07.138 --> 00:34:13.619 If any of you has better luck with the network than I do, then tell me your secret to success and, um. 333 00:34:13.619 --> 00:34:23.548 Other than that. Yeah and like I said, look, I got 3 different machines here. I think it's something where, you know, and. 334 00:34:23.548 --> 00:34:27.449 A couple of different ways to connect to the Internet and. 335 00:34:27.449 --> 00:34:34.559 And what I'll do Thursday, I'll bring 3 different solutions or something and maybe. 336 00:34:34.559 --> 00:34:44.969 It's something that works, I'll get a way to connect to parallel straight from my iPad. Perhaps there's some tools that do that, and I'll bring a cable. 337 00:34:44.969 --> 00:34:51.268 Connect these and experiment. Okay. Other than that, if you have questions, quest away. 338 00:34:51.268 --> 00:35:01.588 Other than that, um, oh, and we weren't going to have the talks. I just completely forgot that there's still 4 people give or take to haven't talked yet. Um. 339 00:35:02.878 --> 00:35:09.239 You know, you got to talk some time, but maybe wait until we got the various hardware working. And then so. 340 00:35:09.239 --> 00:35:16.918 And I'll, I've got 1 homework there asking some simple questions to Thursday. So nothing new. 341 00:35:16.918 --> 00:35:21.869 Other than that on hand. 342 00:35:21.869 --> 00:35:32.668 Yeah, awesome. Well, I tell you a real story. Why went into computer science? I started out. I'd like to physics. I took more physics than anything else as an undergrad. 343 00:35:32.668 --> 00:35:39.389 With physics, because I wasn't smart enough to the theoretical physics I have to experimental physics. 344 00:35:39.389 --> 00:35:46.259 But computer programming at that time, they were batch card decks and every time you ran the program, you got the same answer. 345 00:35:46.259 --> 00:35:49.289 That was before networking. 346 00:35:49.289 --> 00:35:52.438 So, okay. 347 00:35:52.438 --> 00:35:59.159 Sorry oh, no, I think it's overrated. 348 00:35:59.159 --> 00:36:04.918 Hmm. 349 00:36:04.918 --> 00:36:11.639 And, um, yes, private high schools trying to get to talk about work for nowadays. So. 350 00:36:11.639 --> 00:36:18.239 I like the 5 different Margaret, so. 351 00:36:19.889 --> 00:36:23.728 What you doing? Real estate and everything down? Hey, better. 352 00:36:23.728 --> 00:36:29.969 You want to comment on society we've got an artery, but the math is a nursing. Who's the nursing professor? Maria. 353 00:36:29.969 --> 00:36:37.108 And she understands that we have so we decided to go into real estate, which may not socially be useful. 354 00:36:37.108 --> 00:36:41.608 Face to face a whole. 355 00:36:42.869 --> 00:36:46.438 Yeah, it's not easy, but make it work. 356 00:36:47.789 --> 00:36:53.489 Yeah, yeah. 357 00:36:53.489 --> 00:36:57.869 So, the, the detail detail. 358 00:36:57.869 --> 00:37:01.978 Is that. 359 00:37:01.978 --> 00:37:06.628 No, it was really thought I was wondering. So. 360 00:37:06.628 --> 00:37:11.429 So, you deserve a more structured environment? Yeah, I. 361 00:37:13.318 --> 00:37:21.418 Yeah, um, go back to her, I think the time at home, I control my environment. 362 00:37:23.009 --> 00:37:32.128 No, we can't rpm broadcast now, but I feel that. 363 00:37:32.128 --> 00:37:38.278 Well, um, but if we are positive, then you have to be. 364 00:37:40.108 --> 00:37:50.668 Basically, give it to you guys, so he wasn't able to find it. Mm. Hmm. So what he would have been able to do verbal. Yeah. 365 00:37:50.668 --> 00:37:54.358 Well, the vertical talks last Thursday worked out, so yeah. 366 00:37:54.358 --> 00:38:00.748 But I'm sorry for the mess today, I just never expected. Everything would be so hard to make it work. 367 00:38:01.829 --> 00:38:08.009 This is crazy for you. 3 different things here. So. 368 00:38:15.239 --> 00:38:18.719 Yes, sir. 369 00:38:18.719 --> 00:38:22.980 So there is like, so those all should be on that. 370 00:38:22.980 --> 00:38:29.789 Parallel machine a lot of specific parallel machine, or is it? Oh, sorry. Well, what does those referred to. 371 00:38:29.789 --> 00:38:44.489 Oh, it's all it's on my blog. I'm aware that it is. Yeah, the point is that these questions they have, like, no technical stuff related to just, like, ask a question by just reading the article that we want to pause, right? Yes. 372 00:38:44.489 --> 00:38:48.809 It's the motivate you to read it so. 373 00:38:48.809 --> 00:38:53.820 So. 374 00:38:53.820 --> 00:38:57.780 Right. 375 00:38:57.780 --> 00:39:01.440 Takes the parallel yeah. 376 00:39:01.440 --> 00:39:04.440 Hello. 377 00:39:05.909 --> 00:39:09.119 Oh. 378 00:39:09.119 --> 00:39:12.869 I didn't show you into that Thursday in class. 379 00:39:13.920 --> 00:39:20.340 Or you, you have to copy the file. 380 00:39:20.340 --> 00:39:25.050 Okay. 381 00:39:26.730 --> 00:39:30.750 No, you. 382 00:39:30.750 --> 00:39:35.039 You escalates to parallel you're running on that. 383 00:39:35.039 --> 00:39:42.570 And our program to go to that, I have the directory copy the program. 384 00:39:42.570 --> 00:39:46.380 And include positives in your own account. 385 00:39:47.460 --> 00:39:51.449 Hello world copy all of. 386 00:39:51.449 --> 00:39:58.590 No, so, yeah, that but like, we're obviously not gonna be doing like, we have to write our own CI files. 387 00:39:58.590 --> 00:40:05.010 Right. You know, how do we run those models cause aren't cause? Are we support. 388 00:40:05.010 --> 00:40:10.170 The work flow, you build the 1st thing on your local machine. 389 00:40:10.170 --> 00:40:17.099 Amanda, no, you guys should have mentioned that it's painful to that. 390 00:40:17.099 --> 00:40:20.429 Well, I mean, you're running on that machine. 391 00:40:20.429 --> 00:40:27.030 So, you can get a firewall that in your home account, you have an account on that machine you go home directory. 392 00:40:27.030 --> 00:40:31.380 Great file that they file with the home directory. Um. 393 00:40:31.380 --> 00:40:36.510 Yeah, but that's you're running on the machine is that little terminal window? 394 00:40:36.510 --> 00:40:39.780 Like, for a moment. 395 00:40:39.780 --> 00:40:45.510 Okay, so this isn't the graphics. 396 00:40:45.510 --> 00:40:49.380 Driving real fast graphic. I'm aware of it. Yeah, but. 397 00:40:49.380 --> 00:40:53.130 Like, for example, there's no. 398 00:40:53.130 --> 00:40:56.820 On that machine what is like like, integrated public. 399 00:40:56.820 --> 00:41:01.889 Visual Studio Visual Studio, visual stuff that, uh. 400 00:41:01.889 --> 00:41:05.250 So, I edit stuff that I use the max. 401 00:41:05.250 --> 00:41:08.519 Got it a program. 402 00:41:08.519 --> 00:41:13.110 You know, I've had this source code as the file, you know, the. 403 00:41:13.110 --> 00:41:17.639 See, who got the same. 404 00:41:17.639 --> 00:41:22.530 The changes I save it. 405 00:41:22.530 --> 00:41:28.380 I will pause, but then. 406 00:41:28.380 --> 00:41:32.039 Suitable with. 407 00:41:32.039 --> 00:41:35.969 By default the data, the name. 408 00:41:35.969 --> 00:41:41.519 You set up your set of options what's going to use. 409 00:41:41.519 --> 00:41:45.780 Yeah, and so things like. 410 00:41:45.780 --> 00:41:48.869 By the way it may call it files. 411 00:41:48.869 --> 00:41:52.110 Please open that. 412 00:41:52.110 --> 00:41:55.170 They can. 413 00:41:55.170 --> 00:42:00.150 Your work. 414 00:42:00.150 --> 00:42:06.719 This is the command 86 8. 415 00:42:06.719 --> 00:42:10.380 See yourself file that so. 416 00:42:10.380 --> 00:42:14.400 The file in whatever. 417 00:42:14.400 --> 00:42:17.880 Text that queries on that. 418 00:42:17.880 --> 00:42:21.420 Terminals yeah. 419 00:42:21.420 --> 00:42:24.570 File that we didn't do it. 420 00:42:24.570 --> 00:42:30.000 Yeah, sure sure. Yeah. I don't know. I don't know how. 421 00:42:30.000 --> 00:42:35.579 But well, the data structure has this. 422 00:42:35.579 --> 00:42:40.170 Overhead program. 423 00:42:40.170 --> 00:42:44.610 How about using this to me? 424 00:42:44.610 --> 00:42:48.239 Yeah, the thing is. 425 00:42:48.239 --> 00:42:51.510 That you have to. 426 00:42:51.510 --> 00:42:54.630 I'll copy the program. 427 00:42:54.630 --> 00:42:58.349 It's from find her directory here. 428 00:42:58.349 --> 00:43:02.010 Direct because you don't have access. 429 00:43:02.010 --> 00:43:06.150 My directory not yet. 430 00:43:06.150 --> 00:43:13.110 Correct yeah, you say that again, it's a reference point, or if you could file the provider. 431 00:43:13.110 --> 00:43:16.980 Cc whatever they call. 432 00:43:16.980 --> 00:43:20.280 Here we're going to run it. 433 00:43:20.280 --> 00:43:26.940 Um, as far as. 434 00:43:26.940 --> 00:43:30.480 Oh, okay. 435 00:43:30.480 --> 00:43:33.780 Okay, Eva. Okay. 436 00:43:33.780 --> 00:43:41.130 I only my outlook, my was my most part of a review of the. 437 00:43:41.130 --> 00:43:45.360 So, I don't think that. 438 00:43:45.360 --> 00:43:53.579 Got it what? 8 hours frankly. 439 00:43:53.579 --> 00:43:58.769 Title is required if you want. 440 00:43:58.769 --> 00:44:03.599 That is. 441 00:44:03.599 --> 00:44:07.530 Hey. 442 00:44:08.639 --> 00:44:11.699 Um, um. 443 00:44:11.699 --> 00:44:18.150 Yeah, but no problem with that. 444 00:44:19.230 --> 00:44:23.070 Uh, I was going to just use the fact that, you. 445 00:44:23.070 --> 00:44:27.780 Well, he doesn't have to do the stuff that we need to do in terms of the. 446 00:44:27.780 --> 00:44:31.409 Oh, yeah, I'll walk you through the point with. 447 00:44:31.409 --> 00:44:35.340 But the goal is to walk you through. 448 00:44:35.340 --> 00:44:41.880 And then you try to work and that's why. 449 00:44:41.880 --> 00:44:46.079 Okay, yeah. 450 00:44:46.079 --> 00:44:50.039 Do a couple of things so you were. 451 00:44:50.039 --> 00:44:54.179 Yeah. 452 00:44:54.179 --> 00:44:58.469 Walk through what you do. Yeah. There's a lot of this stuff. 453 00:44:58.469 --> 00:45:01.829 Up to the top by looking at. 454 00:45:01.829 --> 00:45:06.269 Fiber is American. 455 00:45:07.980 --> 00:45:13.050 Hello. 456 00:45:13.050 --> 00:45:16.949 That would be good if it is the fire. 457 00:45:18.570 --> 00:45:23.820 Is that a file? 458 00:45:23.820 --> 00:45:27.840 Oh, yeah. 459 00:45:27.840 --> 00:45:32.190 Hello? Hello well. 460 00:45:32.190 --> 00:45:41.159 I mean, okay, I leave it open. I can point to. 461 00:45:41.159 --> 00:45:46.440 And I, I thought of using it for a while with partnerships with the seller. 462 00:45:46.440 --> 00:45:49.889 I want to say extra partners share. 463 00:45:51.239 --> 00:45:55.739 And go to the machine offerings, not. 464 00:45:56.880 --> 00:46:02.880 Yeah, the different the operating system like. 465 00:46:02.880 --> 00:46:07.440 Oh, good. 466 00:46:07.440 --> 00:46:12.360 Great good stuff. Crazy s**. 467 00:46:14.219 --> 00:46:17.400 And I was having a problem with, but. 468 00:46:17.400 --> 00:46:23.130 Here's what it goes into graphics very well. I'm hoping to avoid. 469 00:46:23.130 --> 00:46:26.820 Hello. 470 00:46:26.820 --> 00:46:30.480 And I can have a break and. 471 00:46:30.480 --> 00:46:40.110 And map the Windows, and I can create a separate partition on like, this. 472 00:46:40.110 --> 00:46:44.760 Here right. 473 00:46:44.760 --> 00:46:48.420 I can care about. 474 00:46:48.420 --> 00:46:51.480 Okay. 475 00:46:51.480 --> 00:46:55.679 No, I put it in 1. um. 476 00:46:55.679 --> 00:47:03.480 Oh, no, the ntsf file system. So if I have a this part here. 477 00:47:03.480 --> 00:47:07.289 This is the format isn't here for that. 478 00:47:07.289 --> 00:47:10.710 Whatever. 479 00:47:10.710 --> 00:47:13.739 Then, if I go to Windows. 480 00:47:13.739 --> 00:47:18.360 About that partnership agreement the org. 481 00:47:18.360 --> 00:47:21.750 Hello. 482 00:47:21.750 --> 00:47:29.849 That's not working February because there. 483 00:47:29.849 --> 00:47:33.059 Great. 484 00:47:33.059 --> 00:47:37.590 Oh, well, I want to get lunch class, so yeah. 485 00:47:37.590 --> 00:47:43.019 Perfect.