[Script Info] Title: [Events] Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text Dialogue: 0,0:00:00.00,0:00:18.42,Default,,0000,0000,0000,,{\i1}36C3 preroll music{\i0} Dialogue: 0,0:00:18.42,0:00:24.53,Default,,0000,0000,0000,,Herald-Angel: This Talk will be about… I\Nhave to read this. Mathematical diseases Dialogue: 0,0:00:24.53,0:00:28.60,Default,,0000,0000,0000,,in climate models and how to cure them.\NAnd I don't have the slightest idea what Dialogue: 0,0:00:28.60,0:00:33.85,Default,,0000,0000,0000,,these two guys are talking about now. And\Nwhen I asked them, they said, just tell Dialogue: 0,0:00:33.85,0:00:40.04,Default,,0000,0000,0000,,the people it's about next generation\Nclimate models and how to build them. Dialogue: 0,0:00:40.04,0:00:45.79,Default,,0000,0000,0000,,Which is cool. Throw that on Twitter.\NPlease welcome Ali Ramadhan and Valentin Dialogue: 0,0:00:45.79,0:00:47.23,Default,,0000,0000,0000,,Churavy. Dialogue: 0,0:00:47.23,0:00:55.24,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:00:55.24,0:00:58.51,Default,,0000,0000,0000,,Ali Ramadhan: Can you guys hear us? Is\Nthis OK? Dialogue: 0,0:00:58.51,0:01:00.21,Default,,0000,0000,0000,,Valentin Churavy: I'll stand back...\NRamadhan: I'll stand back a little bit. Dialogue: 0,0:01:00.21,0:01:05.03,Default,,0000,0000,0000,,OK, cool. Thank you. So if you guys saw\Nthe last talk by karlab... karlabyrinth or Dialogue: 0,0:01:05.03,0:01:08.53,Default,,0000,0000,0000,,something. So we're kind of expanding on\Nher talk a little bit. So she talked a lot Dialogue: 0,0:01:08.53,0:01:11.21,Default,,0000,0000,0000,,about kind of uncertainties…\N{\i1}audio feedback from microphone{\i0} Dialogue: 0,0:01:11.21,0:01:15.67,Default,,0000,0000,0000,,uncertainties in climate models. And one\Npoint that she did make was that most of Dialogue: 0,0:01:15.67,0:01:18.41,Default,,0000,0000,0000,,the uncertainty actually comes from\Nhumans. But there's a really huge Dialogue: 0,0:01:18.41,0:01:22.07,Default,,0000,0000,0000,,uncertainty that also comes from… comes\Nfrom the models. So we're talking more Dialogue: 0,0:01:22.07,0:01:26.17,Default,,0000,0000,0000,,about the model uncertainties, which is\Nkind of uncertainties because of unknown Dialogue: 0,0:01:26.17,0:01:31.59,Default,,0000,0000,0000,,or missing physics, kind of how to cure\Nthem. So it'll be kind of a weird talk. So Dialogue: 0,0:01:31.59,0:01:35.12,Default,,0000,0000,0000,,I'll talk a little bit more about the\Nclimate modeling part and then kind of how Dialogue: 0,0:01:35.12,0:01:39.84,Default,,0000,0000,0000,,to cure them involves using new programing\Nlanguages. And that's where Valentin will Dialogue: 0,0:01:39.84,0:01:44.81,Default,,0000,0000,0000,,talk about Julia. So we'll kind of just\Nstart with maybe just giving kind of an Dialogue: 0,0:01:44.81,0:01:50.08,Default,,0000,0000,0000,,idea of why it's so hard to model the\Nclimate. So if you've… maybe you've seen Dialogue: 0,0:01:50.08,0:01:54.55,Default,,0000,0000,0000,,images like this a lot where it's like a…\Nit's a satellite image basically of Dialogue: 0,0:01:54.55,0:01:58.53,Default,,0000,0000,0000,,clouds. It's used for like weather\Nforecasting. But you can immediately see Dialogue: 0,0:01:58.53,0:02:02.32,Default,,0000,0000,0000,,there's lots of, you know, lots of really\Nsmall clouds. So basically, if you want to Dialogue: 0,0:02:02.32,0:02:06.25,Default,,0000,0000,0000,,build a climate model, you've got to be\Nable to resolve all the physics in these Dialogue: 0,0:02:06.25,0:02:10.77,Default,,0000,0000,0000,,clouds. So you can actually zoom in a lot.\NAnd see the clouds look pretty big over Dialogue: 0,0:02:10.77,0:02:15.14,Default,,0000,0000,0000,,here. But if you zoom in on kind of\NCentral America, then you see even smaller Dialogue: 0,0:02:15.14,0:02:21.51,Default,,0000,0000,0000,,clouds. And if you zoom in even more so,\Nso you zoom in on the Yucatan Peninsula, Dialogue: 0,0:02:21.51,0:02:24.78,Default,,0000,0000,0000,,then you can see the clouds are really,\Nreally small. So you're… there are maybe Dialogue: 0,0:02:24.78,0:02:28.98,Default,,0000,0000,0000,,five smaller clouds, some some of the\Nclouds are, you know, a hundred meters or Dialogue: 0,0:02:28.98,0:02:33.71,Default,,0000,0000,0000,,something. And as the last talk kind of\Nsuggests that most climate models are… Dialogue: 0,0:02:33.71,0:02:38.99,Default,,0000,0000,0000,,they resolve things of, you know, up to 50\Nkilometers. So anything smaller than 50 Dialogue: 0,0:02:38.99,0:02:43.67,Default,,0000,0000,0000,,kilometers, the climate model can't really\Nsee. So you have to kind of take that… it Dialogue: 0,0:02:43.67,0:02:46.29,Default,,0000,0000,0000,,kind of has to account for that because\Nclouds are important, and if you have more Dialogue: 0,0:02:46.29,0:02:51.78,Default,,0000,0000,0000,,clouds, then that reflects some of the\Nheat out. So maybe you cool. But it also Dialogue: 0,0:02:51.78,0:02:55.57,Default,,0000,0000,0000,,traps more of the heat in so maybe you\Nwarm. And if you have more clouds, maybe Dialogue: 0,0:02:55.57,0:03:00.13,Default,,0000,0000,0000,,you warm more. But if you have less\Nclouds, maybe you warm even more. So it's Dialogue: 0,0:03:00.13,0:03:04.55,Default,,0000,0000,0000,,kind of unsure. We actually don't know if\Nclouds will make the climate warmer or if Dialogue: 0,0:03:04.55,0:03:07.76,Default,,0000,0000,0000,,they'll make the climate cooler. So it's\Nimportant for your climate models to kind Dialogue: 0,0:03:07.76,0:03:13.20,Default,,0000,0000,0000,,of resolve or see these little clouds. So\Nkind of where the mathematical disease Dialogue: 0,0:03:13.20,0:03:16.94,Default,,0000,0000,0000,,comes in, is that you don't… we don't know\Nwhat equation to solve. We don't know Dialogue: 0,0:03:16.94,0:03:21.40,Default,,0000,0000,0000,,exactly what physics to solve, to see, to\Nkind of resolve the effect of these little Dialogue: 0,0:03:21.40,0:03:25.12,Default,,0000,0000,0000,,clouds. So it's kind of the the\Nmathematical disease. We don't know how to Dialogue: 0,0:03:25.12,0:03:29.94,Default,,0000,0000,0000,,do it. So you instead use a… well, it's\Ncalled a parametrization, which is the Dialogue: 0,0:03:29.94,0:03:33.12,Default,,0000,0000,0000,,mathematical disease. So in the\Natmosphere, the big mathematical disease Dialogue: 0,0:03:33.12,0:03:40.24,Default,,0000,0000,0000,,is clouds. But if you look at the ocean,\Nyou kind of get a similar… You have also Dialogue: 0,0:03:40.24,0:03:43.72,Default,,0000,0000,0000,,similar mathematical diseases. So if you\Nfor example, this is model output. We Dialogue: 0,0:03:43.72,0:03:48.83,Default,,0000,0000,0000,,don't have good satellite imagery of the\Noceans. So if you if you look at, for Dialogue: 0,0:03:48.83,0:03:53.40,Default,,0000,0000,0000,,example, model output from an ocean model,\Nhigh resolution ocean model here, it's Dialogue: 0,0:03:53.40,0:03:58.16,Default,,0000,0000,0000,,kind of centered on the Pacific. So you\Ncan kind of see Japan and China and the Dialogue: 0,0:03:58.16,0:04:03.06,Default,,0000,0000,0000,,white kind of lines. Those are streamlines\Nor that the lines tell you where the water Dialogue: 0,0:04:03.06,0:04:07.02,Default,,0000,0000,0000,,is going. So you could see a lot of kind\Nof straight lines. You see this curve here Dialogue: 0,0:04:07.02,0:04:13.67,Default,,0000,0000,0000,,current off of Japan, but you see lots of\Ncircles. So the circles are these eddies Dialogue: 0,0:04:13.67,0:04:17.91,Default,,0000,0000,0000,,and they're kind of the turbulence of the\Nocean. They move, they kind of stir and Dialogue: 0,0:04:17.91,0:04:23.74,Default,,0000,0000,0000,,mix and transport a lot of salt or heat or\Ncarbon or nutrients or… you know, marine Dialogue: 0,0:04:23.74,0:04:28.27,Default,,0000,0000,0000,,life or anything. It's the main way the\Nocean kind of moves heat from the equator Dialogue: 0,0:04:28.27,0:04:32.97,Default,,0000,0000,0000,,to the pole. It kind of stirs things\Naround. So they're really important for Dialogue: 0,0:04:32.97,0:04:38.48,Default,,0000,0000,0000,,kind of how carbon moves in the ocean, for\Nhow the ocean heats up. And here they look Dialogue: 0,0:04:38.48,0:04:42.26,Default,,0000,0000,0000,,pretty big. But again, you can zoom in and\Nyou'll see lots of small scale structures. Dialogue: 0,0:04:42.26,0:04:46.50,Default,,0000,0000,0000,,So we're going to switch to a different\Nmodel output and different colors. So here Dialogue: 0,0:04:46.50,0:04:51.26,Default,,0000,0000,0000,,here's kind of the same area. So you see\NJapan in the top left. But what's being Dialogue: 0,0:04:51.26,0:04:55.72,Default,,0000,0000,0000,,plotted is vorticity. So you have to know\Nwhat that is. It's kind of a measure of Dialogue: 0,0:04:55.72,0:05:00.03,Default,,0000,0000,0000,,how much the fluid or the water is\Nspinning. But the point is that you have Dialogue: 0,0:05:00.03,0:05:05.34,Default,,0000,0000,0000,,lots of structure. So there's lots of, you\Nknow, big circles, but there also lots of Dialogue: 0,0:05:05.34,0:05:10.07,Default,,0000,0000,0000,,really little circles. And again, your\Nclimate model can only see something like Dialogue: 0,0:05:10.07,0:05:14.92,Default,,0000,0000,0000,,50 kilometers or 100 kilometers. But as\Nyou can see here, there's lots of stuff Dialogue: 0,0:05:14.92,0:05:18.86,Default,,0000,0000,0000,,that's much smaller than a hundred\Nkilometers. So if you superimpose kind of Dialogue: 0,0:05:18.86,0:05:23.88,Default,,0000,0000,0000,,this this grid, maybe that's your climate\Nmodel grid. And, you know, basically for Dialogue: 0,0:05:23.88,0:05:27.84,Default,,0000,0000,0000,,the climate model, every one of these\Nboxes is like one number. So you can't Dialogue: 0,0:05:27.84,0:05:31.88,Default,,0000,0000,0000,,really see anything smaller than that. But\Nthere's important dynamics and physics Dialogue: 0,0:05:31.88,0:05:35.38,Default,,0000,0000,0000,,that happens in like 10 kilometers, which\Nis a lot smaller than what the climate Dialogue: 0,0:05:35.38,0:05:39.47,Default,,0000,0000,0000,,model can see. And there's even important\Nphysics that happens that like 100 meters Dialogue: 0,0:05:39.47,0:05:44.29,Default,,0000,0000,0000,,or 200 meters. So if you want if you want\Nto, you know, what the climate will look Dialogue: 0,0:05:44.29,0:05:50.91,Default,,0000,0000,0000,,like, we need to… we need to know about\Nthe physics that happens at 200 meters. So Dialogue: 0,0:05:50.91,0:05:55.02,Default,,0000,0000,0000,,to give an example of some of the physics\Nthat happens at 10 kilometers, here's kind Dialogue: 0,0:05:55.02,0:06:01.04,Default,,0000,0000,0000,,of a little animation where this kind of\Nexplains why you get all these eddies or Dialogue: 0,0:06:01.04,0:06:05.53,Default,,0000,0000,0000,,all the circles in the ocean. So a lot of\Ntimes you have, say, hot water, say, in Dialogue: 0,0:06:05.53,0:06:10.52,Default,,0000,0000,0000,,the north. So the hot water here is all in\Norange or yellow and you have a lot of Dialogue: 0,0:06:10.52,0:06:15.34,Default,,0000,0000,0000,,cold water. So the cold water is in the\Nsouth and it's purple. And then once this… Dialogue: 0,0:06:15.34,0:06:20.10,Default,,0000,0000,0000,,once you add rotation, you end up with\Nthese eddies because what the hot water Dialogue: 0,0:06:20.10,0:06:24.35,Default,,0000,0000,0000,,wants to do, the hot water is lighter,\Nit's less dense. So it actually wants to Dialogue: 0,0:06:24.35,0:06:28.81,Default,,0000,0000,0000,,go on top of the cold water. So usually\Nhave cold at the bottom, hot at the top. Dialogue: 0,0:06:28.81,0:06:34.12,Default,,0000,0000,0000,,So you have heavy at the bottom and light\Nat the top. So when you add… without Dialogue: 0,0:06:34.12,0:06:38.05,Default,,0000,0000,0000,,rotation, the hot water will just go on\Ntop of the cold water. But when you have Dialogue: 0,0:06:38.05,0:06:42.54,Default,,0000,0000,0000,,rotation, you end up… it kind of wants to\Ntip over. But it's also rotating. So you Dialogue: 0,0:06:42.54,0:06:47.48,Default,,0000,0000,0000,,kind of get this beautiful swirling\Npatterns and these are kind of the same Dialogue: 0,0:06:47.48,0:06:52.38,Default,,0000,0000,0000,,circular eddies that you see in the real\Nocean. But this model here is like two Dialogue: 0,0:06:52.38,0:06:55.14,Default,,0000,0000,0000,,hundred and fifty kilometers by five\Nhundred kilometers and it's like one Dialogue: 0,0:06:55.14,0:06:59.71,Default,,0000,0000,0000,,kilometer deep. So you need a lot of\Nresolution to be able to resolve this Dialogue: 0,0:06:59.71,0:07:04.75,Default,,0000,0000,0000,,stuff, but not… your climate model doesn't\Nhave that much resolution. So some of the Dialogue: 0,0:07:04.75,0:07:08.45,Default,,0000,0000,0000,,features here, like the sharp prints\Nbetween the cold and the hot water, your Dialogue: 0,0:07:08.45,0:07:12.88,Default,,0000,0000,0000,,climate model might not see that. So maybe\Nif you if you don't resolve this properly, Dialogue: 0,0:07:12.88,0:07:17.27,Default,,0000,0000,0000,,you get the mixing rate wrong or maybe\Nthat the ocean is the wrong temperature or Dialogue: 0,0:07:17.27,0:07:22.04,Default,,0000,0000,0000,,something. So it's kind of important to\Nresolve this stuff. Another one, the color Dialogue: 0,0:07:22.04,0:07:26.17,Default,,0000,0000,0000,,scheme here is really bad. {\i1}laughs{\i0} I'm\Nsorry, but another one, for example, is Dialogue: 0,0:07:26.17,0:07:32.39,Default,,0000,0000,0000,,here. Everything's under 100 meter, so\Nit's a cube of 100 meters on each side and Dialogue: 0,0:07:32.39,0:07:37.34,Default,,0000,0000,0000,,you're starting with 20 degrees Celsius\Nwater at the top. You have 19 degrees Dialogue: 0,0:07:37.34,0:07:41.37,Default,,0000,0000,0000,,Celsius water at the bottom initially. So\Nit's kind of you're… as you go deeper in Dialogue: 0,0:07:41.37,0:07:46.27,Default,,0000,0000,0000,,the ocean, the water gets colder. And then\Nif you can imagine, the ocean kind of at Dialogue: 0,0:07:46.27,0:07:50.67,Default,,0000,0000,0000,,night, it's kind of cold. So the top is\Nbeing cooled and you end up with cold Dialogue: 0,0:07:50.67,0:07:54.64,Default,,0000,0000,0000,,water on the top. The cold water wants to be\Nat the bottom. So it ends up sinking and you Dialogue: 0,0:07:54.64,0:07:59.03,Default,,0000,0000,0000,,get all this convection going on. So this\Nis happening at a lot of places in the Dialogue: 0,0:07:59.03,0:08:03.65,Default,,0000,0000,0000,,ocean. You get a lot of mixing at the top.\NYou get this kind of layer at the top of Dialogue: 0,0:08:03.65,0:08:08.09,Default,,0000,0000,0000,,the ocean. It's kind of constant color,\Nconstant temperature. So this mix layer is Dialogue: 0,0:08:08.09,0:08:12.24,Default,,0000,0000,0000,,important for the ocean. So knowing how\Ndeep that mix layer is and knowing how Dialogue: 0,0:08:12.24,0:08:16.00,Default,,0000,0000,0000,,much of the water is being mixed is also\Nimportant for for climate. But as you can Dialogue: 0,0:08:16.00,0:08:19.86,Default,,0000,0000,0000,,imagine, you know, if this happens on very\Nsmall scales. So you're climate model has Dialogue: 0,0:08:19.86,0:08:24.87,Default,,0000,0000,0000,,to know something about what's happening\Nat this scale. So this isn't I guess the Dialogue: 0,0:08:24.87,0:08:28.92,Default,,0000,0000,0000,,mathematical diseases in the ocean is, the\Nclimate model cannot see this, so it has Dialogue: 0,0:08:28.92,0:08:32.97,Default,,0000,0000,0000,,to do something else that's maybe\Nunphysical to resolve this stuff. And Dialogue: 0,0:08:32.97,0:08:38.42,Default,,0000,0000,0000,,that's a mathematical disease, I guess.\NAside from the ocean and the atmosphere. Dialogue: 0,0:08:38.42,0:08:41.82,Default,,0000,0000,0000,,You also have the same problem with sea\Nice. So this is kind of just a satellite Dialogue: 0,0:08:41.82,0:08:47.01,Default,,0000,0000,0000,,picture of where sea ice is forming off\Nthe coast of Antarctica. So you get winds Dialogue: 0,0:08:47.01,0:08:48.68,Default,,0000,0000,0000,,that kind of come off the \Ncontinent and they're Dialogue: 0,0:08:48.68,0:08:51.08,Default,,0000,0000,0000,,kind of blowing all the \Nice that's beeing formed Dialogue: 0,0:08:51.08,0:08:53.90,Default,,0000,0000,0000,,away. So you get all these\Nlittle lines and streaks and they kind of Dialogue: 0,0:08:53.90,0:08:58.39,Default,,0000,0000,0000,,merge into sea ice. But in this whole\Npicture is like 20 kilometers. So the Dialogue: 0,0:08:58.39,0:09:01.95,Default,,0000,0000,0000,,climate model doesn't see this, but\Nsomehow it has to represent all the Dialogue: 0,0:09:01.95,0:09:08.56,Default,,0000,0000,0000,,physics. And you have kind of similar\Nthings happening with soil moisture, land Dialogue: 0,0:09:08.56,0:09:16.24,Default,,0000,0000,0000,,and dynamic vegetation, aerosols. So, you\Nknow, these are kind of three places with Dialogue: 0,0:09:16.24,0:09:21.27,Default,,0000,0000,0000,,pretty pictures. But see, if you look at\Nthe atmosphere, so it's not just clouds. Dialogue: 0,0:09:21.27,0:09:27.35,Default,,0000,0000,0000,,You also have aerosols, which are like\Nlittle particles, or sulfates that are Dialogue: 0,0:09:27.35,0:09:31.68,Default,,0000,0000,0000,,important for kind of cloud formation and\Nmaybe atmospheric chemistry. But again, we Dialogue: 0,0:09:31.68,0:09:34.70,Default,,0000,0000,0000,,don't fully understand the physics of\Nthese aerosols. So again, you have to kind Dialogue: 0,0:09:34.70,0:09:40.27,Default,,0000,0000,0000,,of parametrize them. Same thing with kind\Nof convictions. You maybe your climate Dialogue: 0,0:09:40.27,0:09:44.16,Default,,0000,0000,0000,,model doesn't resolve all the very deep\Nconvection in the atmosphere so as to get Dialogue: 0,0:09:44.16,0:09:48.19,Default,,0000,0000,0000,,all sides to parametrize it. So I guess\Nyou have many kind of mathematical Dialogue: 0,0:09:48.19,0:09:51.29,Default,,0000,0000,0000,,diseases in the atmosphere. So I'm not\Nexpecting you to understand everything in Dialogue: 0,0:09:51.29,0:09:55.11,Default,,0000,0000,0000,,this in this picture. But the idea is: The\Natmosphere is complicated. There's no way Dialogue: 0,0:09:55.11,0:09:59.74,Default,,0000,0000,0000,,a climate model is going to kind of, you\Nknow, figure all this out by itself. And Dialogue: 0,0:09:59.74,0:10:04.60,Default,,0000,0000,0000,,again, you could you could do something\Nsimilar for the ocean. So we can just show Dialogue: 0,0:10:04.60,0:10:07.37,Default,,0000,0000,0000,,an image for like two little parts of\Nthese. But the point is, you know, the Dialogue: 0,0:10:07.37,0:10:11.49,Default,,0000,0000,0000,,ocean is not kind of just a bucket of\Nwater standing there. So there's lots of Dialogue: 0,0:10:11.49,0:10:15.18,Default,,0000,0000,0000,,stuff happening deep inside the ocean. And\Nsome of it, we think is important for Dialogue: 0,0:10:15.18,0:10:19.18,Default,,0000,0000,0000,,climate. Some of it we don't know. Some\Nmight not be important. But again, a lot Dialogue: 0,0:10:19.18,0:10:25.43,Default,,0000,0000,0000,,of this happens on very small spatial\Nscales. So we don't know or the climate Dialogue: 0,0:10:25.43,0:10:30.44,Default,,0000,0000,0000,,model can't always resolve all this stuff.\NAnd again, same thing with kind of sea Dialogue: 0,0:10:30.44,0:10:34.37,Default,,0000,0000,0000,,ice. Lots of small scale stuff is\Nimportant for sea ice. And I think one Dialogue: 0,0:10:34.37,0:10:37.77,Default,,0000,0000,0000,,person asked about kind of tipping points\Nand there's kind of two with like sea ice Dialogue: 0,0:10:37.77,0:10:43.88,Default,,0000,0000,0000,,that are pretty important. One of them is\Nthis CSL biofeedback. So if you have sea Dialogue: 0,0:10:43.88,0:10:48.63,Default,,0000,0000,0000,,ice that melts. Now you have more ocean\Nand the ocean can absorb more heat. But Dialogue: 0,0:10:48.63,0:10:51.98,Default,,0000,0000,0000,,now the earth is warmer, so it melts more\Nsea ice. So as soon as you kind of start Dialogue: 0,0:10:51.98,0:10:55.67,Default,,0000,0000,0000,,melting sea ice, maybe you melt even more\Nsea ice and eventually you reach an earth Dialogue: 0,0:10:55.67,0:11:00.02,Default,,0000,0000,0000,,with no sea ice. So there's kind of\Nresearch into that stuff going on, but Dialogue: 0,0:11:00.02,0:11:04.41,Default,,0000,0000,0000,,it's a possible tipping point. Another one\Nis this kind of marine ice sheet, Dialogue: 0,0:11:04.41,0:11:08.97,Default,,0000,0000,0000,,stability, instability at the bottom of\Nthe ice shelf. So if you start melting Dialogue: 0,0:11:08.97,0:11:13.50,Default,,0000,0000,0000,,water, if you start melting ice from the\Nbottom of the ice shelf, then we create Dialogue: 0,0:11:13.50,0:11:17.53,Default,,0000,0000,0000,,kind of a larger area for more ice to\Nmelt. So maybe once you start melting and Dialogue: 0,0:11:17.53,0:11:20.94,Default,,0000,0000,0000,,increasing sea level, you just keep\Nmelting more and more and increasing sea Dialogue: 0,0:11:20.94,0:11:27.30,Default,,0000,0000,0000,,level even more. But again, it's kind of\Nhard to quantify these things on like 50 Dialogue: 0,0:11:27.30,0:11:34.91,Default,,0000,0000,0000,,or 100 year timescales because it all\Nhappens on very small scales. So yeah, the Dialogue: 0,0:11:34.91,0:11:39.76,Default,,0000,0000,0000,,point is there's lots of these kind of\Nparametrizations or mathematical diseases. Dialogue: 0,0:11:39.76,0:11:43.80,Default,,0000,0000,0000,,And once you start adding them all up, you\Nend up with lots and lots of kind of Dialogue: 0,0:11:43.80,0:11:48.18,Default,,0000,0000,0000,,parameters. So this is a really boring\Ntable. But the point is, so this is like Dialogue: 0,0:11:48.18,0:11:53.11,Default,,0000,0000,0000,,one parametrization for like vertical\Nmixing in the ocean. It's basically the Dialogue: 0,0:11:53.11,0:11:57.14,Default,,0000,0000,0000,,process that I showed the rainbow color\Nmovie about to see a climate model for Dialogue: 0,0:11:57.14,0:12:02.06,Default,,0000,0000,0000,,that. I'm trying to kind of parametrize\Nthat, physics might have like 20 Dialogue: 0,0:12:02.06,0:12:05.86,Default,,0000,0000,0000,,parameters. And, you know, some of them\Nare crazy like a surface layer fractional Dialogue: 0,0:12:05.86,0:12:10.12,Default,,0000,0000,0000,,like zero point one or something. And\Nusually they keep the same constants for Dialogue: 0,0:12:10.12,0:12:14.62,Default,,0000,0000,0000,,all these values. Usually it's like\Nsomeone in like 1994 came up with these 20 Dialogue: 0,0:12:14.62,0:12:18.73,Default,,0000,0000,0000,,numbers and now we all use the same 20\Nnumbers. But you know, maybe they're Dialogue: 0,0:12:18.73,0:12:21.85,Default,,0000,0000,0000,,different. And like the Pacific or the\NAtlantic or like maybe they're different Dialogue: 0,0:12:21.85,0:12:25.74,Default,,0000,0000,0000,,when it's summer and winter and the\Nproblem is, there's many of these Dialogue: 0,0:12:25.74,0:12:28.92,Default,,0000,0000,0000,,parametrizations. So you know here's like\N20 parameters, but then you have a lot Dialogue: 0,0:12:28.92,0:12:32.43,Default,,0000,0000,0000,,more for clouds. You have a lot more sea\Nice. We add them all up. Suddenly you have Dialogue: 0,0:12:32.43,0:12:38.05,Default,,0000,0000,0000,,like 100, maybe up to a thousand kind of\Ntunable parameters. Kind of going back to Dialogue: 0,0:12:38.05,0:12:42.70,Default,,0000,0000,0000,,this plot that was shown at the last talk.\NYou can see kind of the all the models Dialogue: 0,0:12:42.70,0:12:47.88,Default,,0000,0000,0000,,kind of agree really well from like 1850\Nto 2000, because they're all kind of being Dialogue: 0,0:12:47.88,0:12:50.95,Default,,0000,0000,0000,,they all have different kind of\Nparameters, but they all get kind of tuned Dialogue: 0,0:12:50.95,0:12:54.89,Default,,0000,0000,0000,,or optimized. So they get the 20th\Ncentury. Correct. So they get the black Dialogue: 0,0:12:54.89,0:12:59.98,Default,,0000,0000,0000,,line. Correct. But then when you run them\Nforward, you run them to like 2300. They Dialogue: 0,0:12:59.98,0:13:02.86,Default,,0000,0000,0000,,all are slightly different. So they all\Nstart producing different physics and Dialogue: 0,0:13:02.86,0:13:07.55,Default,,0000,0000,0000,,suddenly you get a huge like red band. So\Nthat's saying you have lots of model Dialogue: 0,0:13:07.55,0:13:12.87,Default,,0000,0000,0000,,uncertainty. So it's kind of on some\Npeople might say like oh this like tuning Dialogue: 0,0:13:12.87,0:13:17.51,Default,,0000,0000,0000,,process is like optimization. It's like\Nnot very scientific to be kind of right. Dialogue: 0,0:13:17.51,0:13:22.44,Default,,0000,0000,0000,,It's kind of like in the past. It's kind\Nof like the best live we've had. But I Dialogue: 0,0:13:22.44,0:13:26.42,Default,,0000,0000,0000,,think, you know, we should be able to do a\Nlittle bit better. Better than that. So Dialogue: 0,0:13:26.42,0:13:28.70,Default,,0000,0000,0000,,just to give you the idea, you know, some\Npeople would say, you know, why don't you Dialogue: 0,0:13:28.70,0:13:31.65,Default,,0000,0000,0000,,just you know, most of the physics, which\Nyou just, you know, resolve all the Dialogue: 0,0:13:31.65,0:13:36.64,Default,,0000,0000,0000,,physics, you know, but see if you want to\Ndo like a direct numerical simulation, so Dialogue: 0,0:13:36.64,0:13:39.41,Default,,0000,0000,0000,,it's basically saying you want to resolve\Nall the motions in the ocean, in the Dialogue: 0,0:13:39.41,0:13:43.31,Default,,0000,0000,0000,,atmosphere. You basically need to resolve\Nthings down to like one millimeter. So if Dialogue: 0,0:13:43.31,0:13:46.85,Default,,0000,0000,0000,,you have like a grid spacing of one\Nmillimeter and you consider the volume of Dialogue: 0,0:13:46.85,0:13:50.76,Default,,0000,0000,0000,,the ocean and the atmosphere, you\Nbasically say you need like 10 to the 28 Dialogue: 0,0:13:50.76,0:13:55.47,Default,,0000,0000,0000,,grid points. You know, that's like imagine\Nputting cubes of like one millimeter Dialogue: 0,0:13:55.47,0:13:56.85,Default,,0000,0000,0000,,everywhere in the \Nocean and atmosphere. Dialogue: 0,0:13:56.85,0:13:58.63,Default,,0000,0000,0000,,That's how many great\Npoints you would need. Dialogue: 0,0:13:58.63,0:14:01.83,Default,,0000,0000,0000,,So unfortunately, you could do that.\NBut there's not enough computer power or Dialogue: 0,0:14:01.83,0:14:05.80,Default,,0000,0000,0000,,storage space in the world to do that. So\Nyou're kind of stuck doing something a bit Dialogue: 0,0:14:05.80,0:14:11.12,Default,,0000,0000,0000,,coarser. Usually most climate models, he's\Nlike 10 to the 8 great points so that you Dialogue: 0,0:14:11.12,0:14:16.39,Default,,0000,0000,0000,,10 to the 20 to little words. You don't\Nwant to just run a big climate model once Dialogue: 0,0:14:16.39,0:14:19.87,Default,,0000,0000,0000,,you know you need to run them for very\Nlong times, usually like you run them for Dialogue: 0,0:14:19.87,0:14:23.29,Default,,0000,0000,0000,,a thousand years or ten thousand years\Nwhen you want to run many of them because Dialogue: 0,0:14:23.29,0:14:27.17,Default,,0000,0000,0000,,you want to collect statistics. So\Ngenerally you don't run at the highest Dialogue: 0,0:14:27.17,0:14:31.46,Default,,0000,0000,0000,,resolution possible. You run kind of at a\Nlower resolution so you can run many, many Dialogue: 0,0:14:31.46,0:14:36.90,Default,,0000,0000,0000,,models. So because you can only use so\Nmuch resolution, it seems that power Dialogue: 0,0:14:36.90,0:14:39.79,Default,,0000,0000,0000,,transitions or these kind of mathematical\Nthings, you have to live with them, you've Dialogue: 0,0:14:39.79,0:14:45.31,Default,,0000,0000,0000,,got to use them. But at least one idea is,\Nyou know, instead of using numbers that Dialogue: 0,0:14:45.31,0:14:49.03,Default,,0000,0000,0000,,sum. But he came up with in 1994. You\Nmight as well try to figure you know, Dialogue: 0,0:14:49.03,0:14:50.98,Default,,0000,0000,0000,,better numbers or maybe \Nyou know if the numbers Dialogue: 0,0:14:50.98,0:14:52.21,Default,,0000,0000,0000,,are kind of different \Nin different places, Dialogue: 0,0:14:52.21,0:14:55.91,Default,,0000,0000,0000,,you should find that out. So one\Nthing you could do, one thing we are Dialogue: 0,0:14:55.91,0:15:01.34,Default,,0000,0000,0000,,trying to do is get the pressurization is\Nto kind of agree with like basic physics Dialogue: 0,0:15:01.34,0:15:05.21,Default,,0000,0000,0000,,or agree with observations. So we have\Nlots of observations. How many we can run Dialogue: 0,0:15:05.21,0:15:07.30,Default,,0000,0000,0000,,kind of high resolution \Nsimulations to resolve Dialogue: 0,0:15:07.30,0:15:09.10,Default,,0000,0000,0000,,a lot of the physics \Nand then make sure Dialogue: 0,0:15:09.10,0:15:12.10,Default,,0000,0000,0000,,when you put the prioritization in\Nthe climate model, it actually gives you Dialogue: 0,0:15:12.10,0:15:16.84,Default,,0000,0000,0000,,the right numbers according to basic\Nphysics or observations. But sometimes Dialogue: 0,0:15:16.84,0:15:20.81,Default,,0000,0000,0000,,that might mean, you know, different\Nnumbers in the Atlantic, in the Pacific or Dialogue: 0,0:15:20.81,0:15:24.48,Default,,0000,0000,0000,,different numbers for the winter and the\Nsummer. And you have to run many high Dialogue: 0,0:15:24.48,0:15:28.66,Default,,0000,0000,0000,,resolution simulations to get enough data\Nto do this. But indeed, you know, these Dialogue: 0,0:15:28.66,0:15:33.89,Default,,0000,0000,0000,,days I think we have enough computing\Npower to do that. So it's kind of do all Dialogue: 0,0:15:33.89,0:15:37.07,Default,,0000,0000,0000,,these high resolution simulations. We\Nended up building a new kind of ocean Dialogue: 0,0:15:37.07,0:15:42.37,Default,,0000,0000,0000,,model that we run on GPUs because these\Nare all faster for giving us these Dialogue: 0,0:15:42.37,0:15:46.52,Default,,0000,0000,0000,,results. So we ended up usually most\Nclimate modeling is done in Fortran. We Dialogue: 0,0:15:46.52,0:15:53.31,Default,,0000,0000,0000,,decided to go with with Julia for a number\Nof reasons, which I'll talk about. But the Dialogue: 0,0:15:53.31,0:15:58.22,Default,,0000,0000,0000,,left figure is kind of that mixed layer or\Nboundary layer turbulence kind of movie. Dialogue: 0,0:15:58.22,0:16:01.63,Default,,0000,0000,0000,,But instead of the rainbow color map, now\Nit's using a more reasonable color maps. Dialogue: 0,0:16:01.63,0:16:07.05,Default,,0000,0000,0000,,It looks like the ocean, the right is that\Nold movie. So we're generating tons and Dialogue: 0,0:16:07.05,0:16:11.67,Default,,0000,0000,0000,,tons of data from using simulations like\Nthis and then hopefully we can get enough Dialogue: 0,0:16:11.67,0:16:15.44,Default,,0000,0000,0000,,data and like figure out a way to explain\Nthe prior transitions. But it's kind of a Dialogue: 0,0:16:15.44,0:16:19.81,Default,,0000,0000,0000,,work in progress. So a different idea that\Nmight be more popular here, I don't know. Dialogue: 0,0:16:19.81,0:16:25.77,Default,,0000,0000,0000,,Is instead of kind of using the existing\Npermanent positions, you could say, OK, Dialogue: 0,0:16:25.77,0:16:29.96,Default,,0000,0000,0000,,well, now you have tons and tons of data.\NMaybe you just throw in like a neural Dialogue: 0,0:16:29.96,0:16:34.62,Default,,0000,0000,0000,,network into the differential equations.\NBasically, you put in the physics, you Dialogue: 0,0:16:34.62,0:16:37.76,Default,,0000,0000,0000,,know, and then the neural network is\Nresponsible for the physics you don't Dialogue: 0,0:16:37.76,0:16:43.78,Default,,0000,0000,0000,,know. So, for example, you know, most\Npeople here might not. I also don't want Dialogue: 0,0:16:43.78,0:16:46.23,Default,,0000,0000,0000,,to talk about differential equations\Nbecause I would take a long time. So just Dialogue: 0,0:16:46.23,0:16:48.28,Default,,0000,0000,0000,,imagine that the equation\Nin the middle is kind of Dialogue: 0,0:16:48.28,0:16:49.96,Default,,0000,0000,0000,,what a climate model\Nneeds to solve. Dialogue: 0,0:16:49.96,0:16:53.24,Default,,0000,0000,0000,,And the question marks are kind of\Nphysics we don't know. So we don't know Dialogue: 0,0:16:53.24,0:16:58.72,Default,,0000,0000,0000,,what to put there. But maybe you could put\Nout a neural network. So number one is Dialogue: 0,0:16:58.72,0:17:03.32,Default,,0000,0000,0000,,kind of a possible characterisation or a\Npossible way you could try to franchise Dialogue: 0,0:17:03.32,0:17:05.75,Default,,0000,0000,0000,,the missing physics where the neural\Nnetworks kind of responsible for Dialogue: 0,0:17:05.75,0:17:09.94,Default,,0000,0000,0000,,everything. We find that doesn't work as\Nwell. So instead, maybe you tell it some Dialogue: 0,0:17:09.94,0:17:13.99,Default,,0000,0000,0000,,of the physics, maybe tell it about cue,\Nwhich is like the heating or cooling at Dialogue: 0,0:17:13.99,0:17:17.54,Default,,0000,0000,0000,,the surface. And then it's kind of\Nresponsible for resolving the other stuff. Dialogue: 0,0:17:17.54,0:17:22.30,Default,,0000,0000,0000,,But it's still a work in progress because\Nthe blue is kind explosive your data. The Dialogue: 0,0:17:22.30,0:17:25.69,Default,,0000,0000,0000,,orange is supposed to be the narwhal and\Nthey don't agree. So it's still a work in Dialogue: 0,0:17:25.69,0:17:28.96,Default,,0000,0000,0000,,progress, but hopefully we'll be able to\Ndo that better. So this is kind of stuff Dialogue: 0,0:17:28.96,0:17:34.40,Default,,0000,0000,0000,,that's like a week or two old. But kind of\Nreach a conclusion, at least from my half Dialogue: 0,0:17:34.40,0:17:39.75,Default,,0000,0000,0000,,of the talk. So the reason I personally\Nlike Julia as a climate modeler is we were Dialogue: 0,0:17:39.75,0:17:45.00,Default,,0000,0000,0000,,able to kind of build an ocean model from\Nscratch basically in less than a year. And Dialogue: 0,0:17:45.00,0:17:47.47,Default,,0000,0000,0000,,one of the nice things\Nis that the user interface Dialogue: 0,0:17:47.47,0:17:49.56,Default,,0000,0000,0000,,or the scripting and the model\Nbackend is all in one language, Dialogue: 0,0:17:49.56,0:17:52.03,Default,,0000,0000,0000,,whereas in the past\Nused to usually write the high Dialogue: 0,0:17:52.03,0:17:57.85,Default,,0000,0000,0000,,level and like Python and maybe the back\Nend is like Fortran or C. And we find, you Dialogue: 0,0:17:57.85,0:18:01.40,Default,,0000,0000,0000,,know, when we Julia, it's just as fast as\Nour legacy model, which was written in Dialogue: 0,0:18:01.40,0:18:07.23,Default,,0000,0000,0000,,Fortran. And one of the nicest things was\Nthat basically able to write code once and Dialogue: 0,0:18:07.23,0:18:10.51,Default,,0000,0000,0000,,using there's a need of GPU compiler. So\Nbasically you write your code one single Dialogue: 0,0:18:10.51,0:18:15.18,Default,,0000,0000,0000,,code base and you go to CPUs and GPUs.\NSo you'd want to write two different code Dialogue: 0,0:18:15.18,0:18:20.61,Default,,0000,0000,0000,,bases. And yeah, we find generally because\Nit's high level language, we're all kind Dialogue: 0,0:18:20.61,0:18:24.86,Default,,0000,0000,0000,,of more productive. We can give a more\Npowerful user API and Julia kind of has a Dialogue: 0,0:18:24.86,0:18:30.24,Default,,0000,0000,0000,,nice multiple dispatch backend so that we\Nfind that makes it easy for the users to Dialogue: 0,0:18:30.24,0:18:35.33,Default,,0000,0000,0000,,kind of extend the model or hack the\Nmodel. And there's. Some people would say Dialogue: 0,0:18:35.33,0:18:38.48,Default,,0000,0000,0000,,the Julia community is pretty small. But\Nwe find there's a pretty big Julia Dialogue: 0,0:18:38.48,0:18:41.47,Default,,0000,0000,0000,,community interest in scientific\Ncomputing. So we fund kind of all the Dialogue: 0,0:18:41.47,0:18:46.54,Default,,0000,0000,0000,,packages we need are pretty much\Navailable. So with our client conclude my Dialogue: 0,0:18:46.54,0:18:50.24,Default,,0000,0000,0000,,half by saying there is most of the\Nuncertainty in climate modeling basically Dialogue: 0,0:18:50.24,0:18:53.85,Default,,0000,0000,0000,,comes from humans because they don't know\Nwhat humans will do. But there's a huge Dialogue: 0,0:18:53.85,0:18:57.55,Default,,0000,0000,0000,,model uncertainty basically because of\Nphysics we don't understand or physics, Dialogue: 0,0:18:57.55,0:19:01.61,Default,,0000,0000,0000,,the kind of model cannot see. You can't\Nresolve every cloud and you know, every Dialogue: 0,0:19:01.61,0:19:05.39,Default,,0000,0000,0000,,wave in the oceans you've got you've got\Nto figure out a way to account for them. Dialogue: 0,0:19:05.39,0:19:09.94,Default,,0000,0000,0000,,So that's what our prioritization does.\NAnd we're trying to kind of use a lot of Dialogue: 0,0:19:09.94,0:19:14.68,Default,,0000,0000,0000,,computing power to kind of make sure we\Ntrain or come up with good privatizations Dialogue: 0,0:19:14.68,0:19:19.60,Default,,0000,0000,0000,,instead of kind of tuning the model at the\Nend. And we're hoping this will lead to Dialogue: 0,0:19:19.60,0:19:23.75,Default,,0000,0000,0000,,better climate predictions. Maybe you\Nwill. Maybe you won't. But at least, you Dialogue: 0,0:19:23.75,0:19:28.99,Default,,0000,0000,0000,,know, even if it doesn't. Hopefully we can\Nsay we got rid of the model tuning problem Dialogue: 0,0:19:28.99,0:19:33.11,Default,,0000,0000,0000,,and hopefully we can make. We find it\Nthat software development for climate Dialogue: 0,0:19:33.11,0:19:37.93,Default,,0000,0000,0000,,modeling is easier than if we did it in\NFortran. I will say this kind of an Dialogue: 0,0:19:37.93,0:19:41.76,Default,,0000,0000,0000,,advertisement, but I'm looking to bike her\Non Germany for a week and apparently can't Dialogue: 0,0:19:41.76,0:19:46.39,Default,,0000,0000,0000,,take the next bike out of Leipzig. So if\Nanyone is looking to sell their bicycle or Dialogue: 0,0:19:46.39,0:19:51.23,Default,,0000,0000,0000,,wants to make some cash, I'm looking to\Nrent a bicycle. So yeah, if you have one, Dialogue: 0,0:19:51.23,0:19:55.07,Default,,0000,0000,0000,,come talk to me, please. Thank you. Danke. Dialogue: 0,0:19:55.07,0:20:02.19,Default,,0000,0000,0000,,{\i1}applause{\i0} Dialogue: 0,0:20:02.19,0:20:09.49,Default,,0000,0000,0000,,Churavy: So one big question for me always\Nis how can we ask technologists hub that Dialogue: 0,0:20:09.49,0:20:14.58,Default,,0000,0000,0000,,think most of us in this room are fairly\Ndecent with computers? The internet is not Dialogue: 0,0:20:14.58,0:20:19.41,Default,,0000,0000,0000,,necessarily an new island for us. But how\Ndo we use that knowledge to actually Dialogue: 0,0:20:19.41,0:20:25.06,Default,,0000,0000,0000,,impact real change? And if you haven't\Nthere's some fantastic article: Dialogue: 0,0:20:25.06,0:20:30.03,Default,,0000,0000,0000,,worrydreams.com/ClimateChange. Which lists\Nall the possible or not all the possible Dialogue: 0,0:20:30.03,0:20:36.61,Default,,0000,0000,0000,,but a lot of good ideas to think about and\Ngo like, okay, do my skills apply in that Dialogue: 0,0:20:36.61,0:20:43.49,Default,,0000,0000,0000,,area? Well, I'm a computer scientist. I do\Nprograming language research. So how do my Dialogue: 0,0:20:43.49,0:20:50.43,Default,,0000,0000,0000,,skills really apply to climate change? How\Ncan I help? And one of the things that Dialogue: 0,0:20:50.43,0:20:54.88,Default,,0000,0000,0000,,took me in this article was how, and one\Nof the realization, and why I do my work Dialogue: 0,0:20:54.88,0:20:59.79,Default,,0000,0000,0000,,is that the tools that we have built for\Nscientists and engineers, they are that Dialogue: 0,0:20:59.79,0:21:05.55,Default,,0000,0000,0000,,poor. Computer scientists like myself have\Nfocused a lot on making programing easier, Dialogue: 0,0:21:05.55,0:21:11.58,Default,,0000,0000,0000,,more accessible. What we don't necessarily\Nhave kept the scientific community as a Dialogue: 0,0:21:11.58,0:21:18.25,Default,,0000,0000,0000,,target audience. And then you get into\Nthis position where models are written in Dialogue: 0,0:21:18.25,0:21:23.15,Default,,0000,0000,0000,,a language. Fortran 74 and isn't that a\Nnice language, but it's still not one that Dialogue: 0,0:21:23.15,0:21:28.32,Default,,0000,0000,0000,,is easily picked up and where you find\Nenthusiasm in younger students for using Dialogue: 0,0:21:28.32,0:21:36.45,Default,,0000,0000,0000,,it. So I work on Julia and my goal is\Nbasically to make a scientific computing Dialogue: 0,0:21:36.45,0:21:41.41,Default,,0000,0000,0000,,easier, more accessible and make it easier\Nto access the huge computing power we have Dialogue: 0,0:21:41.41,0:21:49.96,Default,,0000,0000,0000,,available to do climate modeling. Ideas,\Nif you are interesting in this space is, Dialogue: 0,0:21:49.96,0:21:53.59,Default,,0000,0000,0000,,you don't need to work on Julia\Nnecessarily, but you can think about maybe Dialogue: 0,0:21:53.59,0:21:59.42,Default,,0000,0000,0000,,I'm to look at modeling for physical\Nsystems, modeling like one of the Dialogue: 0,0:21:59.42,0:22:04.25,Default,,0000,0000,0000,,questions is can be model air conditioning\Nunits more precisely, get them more Dialogue: 0,0:22:04.25,0:22:09.21,Default,,0000,0000,0000,,efficient? Or any other technical system.\NHow do we get that efficiency? But we need Dialogue: 0,0:22:09.21,0:22:15.34,Default,,0000,0000,0000,,better tools to do that. So the language\Ndown here as an example is modelicar. Dialogue: 0,0:22:15.34,0:22:19.56,Default,,0000,0000,0000,,There is a project right now, modelicar is\Ntrying to see how we can push the Dialogue: 0,0:22:19.56,0:22:24.77,Default,,0000,0000,0000,,boundary there. The language up here is Fortran.\NYou might have seen a little bit of that Dialogue: 0,0:22:24.77,0:22:32.31,Default,,0000,0000,0000,,in the talk beforehand and it's most often\Nused to do climate science. So why Dialogue: 0,0:22:32.31,0:22:37.10,Default,,0000,0000,0000,,programing languages? Why do I think that\Nmy time is best spent to actually work on Dialogue: 0,0:22:37.10,0:22:44.25,Default,,0000,0000,0000,,programing languages and do that in order\Nto help people? Well, Wittgenstein says: Dialogue: 0,0:22:44.25,0:22:48.62,Default,,0000,0000,0000,,"The limits of my language are the limits\Nof my world." What I can express is what I Dialogue: 0,0:22:48.62,0:22:52.19,Default,,0000,0000,0000,,think about. And I think people are\Nmultilingual, know that that sometimes Dialogue: 0,0:22:52.19,0:22:56.05,Default,,0000,0000,0000,,it's easier to think for them. But certain\Nthings in one language say it isn't the Dialogue: 0,0:22:56.05,0:23:00.66,Default,,0000,0000,0000,,other one. But language is about\Ncommunication. It's about communication Dialogue: 0,0:23:00.66,0:23:05.67,Default,,0000,0000,0000,,with scientists, but it's also about\Ncommunication with the computer. And too Dialogue: 0,0:23:05.67,0:23:09.95,Default,,0000,0000,0000,,often programing language fall into that\Ntrap where it's about, oh, I want to Dialogue: 0,0:23:09.95,0:23:15.72,Default,,0000,0000,0000,,express my one particular problem or I\Nwanna express my problem very well for the Dialogue: 0,0:23:15.72,0:23:20.42,Default,,0000,0000,0000,,compiler, for the computer. I won't talk\Nto the machine. What if I found that Dialogue: 0,0:23:20.42,0:23:24.64,Default,,0000,0000,0000,,programming languages are very good to\Ntalk to other scientists, to talk in a Dialogue: 0,0:23:24.64,0:23:29.22,Default,,0000,0000,0000,,community and to actually collaborate? And\Nso the project that Ali and I are both Dialogue: 0,0:23:29.22,0:23:35.42,Default,,0000,0000,0000,,part of has, I think, 30 ish. I don't\Nknow. The numbers are as big as the big Dialogue: 0,0:23:35.42,0:23:40.58,Default,,0000,0000,0000,,coupe of climate scientists modelers. And\Nwe have a couple of numerical scientists, Dialogue: 0,0:23:40.58,0:23:44.65,Default,,0000,0000,0000,,computer scientists and engineers and we\Nall working the same language, being able Dialogue: 0,0:23:44.65,0:23:49.26,Default,,0000,0000,0000,,to collaborate and actually work on the\Nsame code instead of me working on some Dialogue: 0,0:23:49.26,0:23:56.61,Default,,0000,0000,0000,,low level implementation and Ali telling\Nme what to write. That wouldn't be really Dialogue: 0,0:23:56.61,0:24:05.05,Default,,0000,0000,0000,,efficient. So, yes, my goal is to make\Nthis search easier. Do we really need yet Dialogue: 0,0:24:05.05,0:24:09.11,Default,,0000,0000,0000,,another high level language? That is a\Nquestion I often get. It's like why Julia? Dialogue: 0,0:24:09.11,0:24:14.66,Default,,0000,0000,0000,,And not why are you not spending your time\Nand effort doing this for Python? Well, so Dialogue: 0,0:24:14.66,0:24:21.58,Default,,0000,0000,0000,,this is as a small example, this is Julia\Ncode. It looks rather readable. I find it Dialogue: 0,0:24:21.58,0:24:28.93,Default,,0000,0000,0000,,doesn't use a semantic whitespace. You may\Nlike that or not. It has all the typical Dialogue: 0,0:24:28.93,0:24:33.96,Default,,0000,0000,0000,,features that you would expect from a high\Nlevel dynamic language. It is using the Dialogue: 0,0:24:33.96,0:24:37.19,Default,,0000,0000,0000,,M.I.T. license that has a built in package\Nmanager. It's very good for interactive Dialogue: 0,0:24:37.19,0:24:45.04,Default,,0000,0000,0000,,development, but it has a couple of\Nunusual wants and those matter. You need Dialogue: 0,0:24:45.04,0:24:49.83,Default,,0000,0000,0000,,if you want to simulate a climate model,\Nyou need to get top performance on a Dialogue: 0,0:24:49.83,0:24:56.47,Default,,0000,0000,0000,,supercomputer. Otherwise you won't get an\Nanswer in the time that it matters. Julia Dialogue: 0,0:24:56.47,0:25:02.83,Default,,0000,0000,0000,,uses just in time ahead of time\Ncompilation, the other great feature is Dialogue: 0,0:25:02.83,0:25:07.67,Default,,0000,0000,0000,,actually a spitting in Julia. So I can\Njust look at implementations. I can dive Dialogue: 0,0:25:07.67,0:25:12.61,Default,,0000,0000,0000,,and dive and dive deeper into somebodies\Ncode and don't have a comprehension Dialogue: 0,0:25:12.61,0:25:20.21,Default,,0000,0000,0000,,barrier. If I if you ever have spent some\Ntime and tried to figure out how Python Dialogue: 0,0:25:20.21,0:25:26.36,Default,,0000,0000,0000,,sums numbers under the hood to make it\Nreasonably fast. Good luck. It's hard. Dialogue: 0,0:25:26.36,0:25:30.06,Default,,0000,0000,0000,,It's written in C. See, and there is a lot\Nof barriers in order to understand what's Dialogue: 0,0:25:30.06,0:25:35.38,Default,,0000,0000,0000,,actually going on. Then reflection and\Nmeta programing. You can do a lot of fun Dialogue: 0,0:25:35.38,0:25:41.14,Default,,0000,0000,0000,,stuff which we're going to talk about. And\Nthen the big coin for me is that you have Dialogue: 0,0:25:41.14,0:25:46.15,Default,,0000,0000,0000,,native keep you code generation support so\Nyou can actually take Julia code and run Dialogue: 0,0:25:46.15,0:25:49.92,Default,,0000,0000,0000,,it on the GPU. You you're not\Nrelying on libraries because libraries Dialogue: 0,0:25:49.92,0:25:59.45,Default,,0000,0000,0000,,only are can express the things. That was\Nwhere writtenin there. So early on last Dialogue: 0,0:25:59.45,0:26:03.55,Default,,0000,0000,0000,,December, I think we met up for the\Nclimate science project and after deciding Dialogue: 0,0:26:03.55,0:26:08.45,Default,,0000,0000,0000,,on using Julia for the entire project.\NThey were like, we we're happy with the Dialogue: 0,0:26:08.45,0:26:12.71,Default,,0000,0000,0000,,performance, but we have a problem. We\Nhave to duplicate our code for GPUs Dialogue: 0,0:26:12.71,0:26:20.53,Default,,0000,0000,0000,,and CPUs. What really? It can't be! I mean, I\Ndesigned the damn thing, it should be working. Dialogue: 0,0:26:20.53,0:26:25.56,Default,,0000,0000,0000,,Well, what they had at that point was\Nbasically always a copy of two functions Dialogue: 0,0:26:25.56,0:26:31.17,Default,,0000,0000,0000,,where one side of it was writing the CPU\Ncode and the other side was implementing a Dialogue: 0,0:26:31.17,0:26:36.71,Default,,0000,0000,0000,,GPU code. And really, there were only a\Ncouple of GPU specific parts in there. And Dialogue: 0,0:26:36.71,0:26:43.21,Default,,0000,0000,0000,,if anybody has ever written GPU Code, it's\Nthis pesky which index am I calculation. Dialogue: 0,0:26:43.21,0:26:49.71,Default,,0000,0000,0000,,Worthy for loop on the CPU to would just\Nlooks quite natural. And I was like, what? Dialogue: 0,0:26:49.71,0:26:55.61,Default,,0000,0000,0000,,Sit. Come on. What we can do is we can\Njust wait a kernel so he takes a body of Dialogue: 0,0:26:55.61,0:27:00.49,Default,,0000,0000,0000,,the for loop, extracts it in a new\Nfunction. Add a little bit of sugar and Dialogue: 0,0:27:00.49,0:27:06.46,Default,,0000,0000,0000,,magic to court GPU kernels and CPU\Nfunctions and then we're done. Problem Dialogue: 0,0:27:06.46,0:27:12.73,Default,,0000,0000,0000,,solved. What the code roughly would look\Nlook like isn't actually this. You can Dialogue: 0,0:27:12.73,0:27:19.67,Default,,0000,0000,0000,,copy and paste this and it should work.\NAnd so you have two functions. One of them Dialogue: 0,0:27:19.67,0:27:23.68,Default,,0000,0000,0000,,launches where you extract your kernel.\NThen you write a function that takes Dialogue: 0,0:27:23.68,0:27:29.58,Default,,0000,0000,0000,,another function and runs it function in a\Nfor loop or it launches that function on Dialogue: 0,0:27:29.58,0:27:34.60,Default,,0000,0000,0000,,the GPU. And then you have this little GPU\Nsnippet is the only bit of us actually Dialogue: 0,0:27:34.60,0:27:39.25,Default,,0000,0000,0000,,GPU, which calculates the index and\Nthen calls the function F with an index Dialogue: 0,0:27:39.25,0:27:45.78,Default,,0000,0000,0000,,argument. I'm done here. My, my\Ncontribution to this project was done, Dialogue: 0,0:27:45.78,0:27:49.65,Default,,0000,0000,0000,,Well, they came back to me and we're like,\Nnow it's not good enough. And I was like, Dialogue: 0,0:27:49.65,0:27:54.55,Default,,0000,0000,0000,,why? Well, the issue is they needed kernel\Nfusion. So that's the process of taking Dialogue: 0,0:27:54.55,0:28:00.11,Default,,0000,0000,0000,,two functions and merging them together.\NI'm like, okay, fine. Why do they need Dialogue: 0,0:28:00.11,0:28:04.79,Default,,0000,0000,0000,,that? Because if you want to be white(?)\Naverage efficient GPO code, you need to be Dialogue: 0,0:28:04.79,0:28:09.98,Default,,0000,0000,0000,,really concerned about the numbers of\Nglobal memory loads and stores. If you Dialogue: 0,0:28:09.98,0:28:13.72,Default,,0000,0000,0000,,have too many of them or if they are\Nirregular, you lose a lot of performance Dialogue: 0,0:28:13.72,0:28:20.47,Default,,0000,0000,0000,,and you need good performance. Otherwise,\Nwe can't simulate the solution once. They Dialogue: 0,0:28:20.47,0:28:24.60,Default,,0000,0000,0000,,also actually wanted to take use GPU\Nfunctionality and low level controlled. Dialogue: 0,0:28:24.60,0:28:29.61,Default,,0000,0000,0000,,They wanted to look at their kernels and\Nuse shared memory constructs. They wanted Dialogue: 0,0:28:29.61,0:28:36.19,Default,,0000,0000,0000,,to do precise risk working, minimizing the\Nnumber of registers used and they really cared Dialogue: 0,0:28:36.19,0:28:40.75,Default,,0000,0000,0000,,about low level performance. They were\Nlike, well, we can't do this with the Dialogue: 0,0:28:40.75,0:28:47.79,Default,,0000,0000,0000,,abstraction you gave us because it builds\Nup too many barriers. And I could have Dialogue: 0,0:28:47.79,0:28:53.97,Default,,0000,0000,0000,,given you a few more typical computer\Nscience answer, which would have been OK. Dialogue: 0,0:28:53.97,0:28:59.43,Default,,0000,0000,0000,,Give me two years and I'll come back to\Nyou and there is a perfect solution which Dialogue: 0,0:28:59.43,0:29:03.35,Default,,0000,0000,0000,,is like a cloud cover in the sky. And I\Nwrite your speech spoke language that does Dialogue: 0,0:29:03.35,0:29:06.85,Default,,0000,0000,0000,,exactly what you need to do. And at the\Nend, we have a domain specific language Dialogue: 0,0:29:06.85,0:29:10.59,Default,,0000,0000,0000,,for climate simulation that will do final\Nvolume and discontinuous cloaking in Dialogue: 0,0:29:10.59,0:29:17.41,Default,,0000,0000,0000,,everything you want. And I will have a\NPhD. Kit. Fantastic. Well, we don't have Dialogue: 0,0:29:17.41,0:29:21.88,Default,,0000,0000,0000,,the time. The whole climate science\Nproject that we are on has accelerated Dialogue: 0,0:29:21.88,0:29:27.04,Default,,0000,0000,0000,,timeline because the philanthropist that\Nthe funding that research are. Well, if Dialogue: 0,0:29:27.04,0:29:35.09,Default,,0000,0000,0000,,you can't give us better answer anytime\Nsoon, it won't matter anymore. So I sat Dialogue: 0,0:29:35.09,0:29:40.58,Default,,0000,0000,0000,,down and was like, okay, I need a box. I\Nneed something. It has minimal effort. Dialogue: 0,0:29:40.58,0:29:45.15,Default,,0000,0000,0000,,Quick delivery. I need to be able to fix\Nit. If I do get it wrong the first time Dialogue: 0,0:29:45.15,0:29:49.60,Default,,0000,0000,0000,,around and I did, it needs to be hackable.\NMy collaborator needs to understand it and Dialogue: 0,0:29:49.60,0:29:55.04,Default,,0000,0000,0000,,actually be able to change it. And it\Nneeds to be happened yesterday. Well, Dialogue: 0,0:29:55.04,0:29:59.37,Default,,0000,0000,0000,,Julia is good at these kinds of hacks. And\Nas I've learned, you can actually let them Dialogue: 0,0:29:59.37,0:30:06.26,Default,,0000,0000,0000,,go into bespoke solutions and have better\Nabstractions after the fact. So that Dialogue: 0,0:30:06.26,0:30:10.22,Default,,0000,0000,0000,,you're that you can actually do the fancy\Ncomputer science that I really wanted to Dialogue: 0,0:30:10.22,0:30:14.86,Default,,0000,0000,0000,,do. The product is called GPUify Loops\Nbecause I couldn't come up with a worse Dialogue: 0,0:30:14.86,0:30:23.52,Default,,0000,0000,0000,,name, nobody else could. So we stick with\Nit. It's a Macro based. And so, Julia, you Dialogue: 0,0:30:23.52,0:30:30.73,Default,,0000,0000,0000,,can write syntax macros that transform the\Ntransform the written statements into Dialogue: 0,0:30:30.73,0:30:37.33,Default,,0000,0000,0000,,similar statements so you can insert code\Nor remove code if you want to. At, right Dialogue: 0,0:30:37.33,0:30:41.33,Default,,0000,0000,0000,,now target CPUs and GPUs and we are\Ntalking about how do we get multi threaded Dialogue: 0,0:30:41.33,0:30:46.48,Default,,0000,0000,0000,,into the story, how do we target more on\Ndifferent GPUs? There are other projects Dialogue: 0,0:30:46.48,0:30:51.47,Default,,0000,0000,0000,,that are very similar. So there's OCCA,\Nwhich is where a lot of these ideas are Dialogue: 0,0:30:51.47,0:30:58.61,Default,,0000,0000,0000,,coming from and Open ACC in C++ does\Nsomething really similar. But basically Dialogue: 0,0:30:58.61,0:31:02.29,Default,,0000,0000,0000,,you write a for loop, you write an at\Nloop in front of it, which is the magic Dialogue: 0,0:31:02.29,0:31:09.48,Default,,0000,0000,0000,,macro that takes a transformation. And you\Nhave two indexed statements and now you Dialogue: 0,0:31:09.48,0:31:15.09,Default,,0000,0000,0000,,just say I want to launch it on the GPU\Nand it magically does a job. Get, Dialogue: 0,0:31:15.09,0:31:22.15,Default,,0000,0000,0000,,fantastic. So let's pick up the entire\Nimplementation of the macro at loop Dialogue: 0,0:31:22.15,0:31:29.27,Default,,0000,0000,0000,,without the error checking that didn't fit\Non the screen a couple of nights. So Dialogue: 0,0:31:29.27,0:31:38.14,Default,,0000,0000,0000,,everything is here and basically I'm just\Nmanipulating the for loop so that on the Dialogue: 0,0:31:38.14,0:31:46.35,Default,,0000,0000,0000,,GPU it only iterates one iteration per\Nindex and on CPU it iterates all of the Dialogue: 0,0:31:46.35,0:31:50.89,Default,,0000,0000,0000,,indices because CPU is single threaded\Nand a GPU is many, many Dialogue: 0,0:31:50.89,0:31:56.81,Default,,0000,0000,0000,,multithreaded. Of course there's a little\Nbit of magic hidden in the device function Dialogue: 0,0:31:56.81,0:32:00.88,Default,,0000,0000,0000,,because how do I know where I'm running?\NAnd if you're curious how to do that and Dialogue: 0,0:32:00.88,0:32:06.78,Default,,0000,0000,0000,,then we can talk after afterwards. But\Notherwise, it's a very simple, Dialogue: 0,0:32:06.78,0:32:11.44,Default,,0000,0000,0000,,straightforward transformation. It's\Nwritten in Julia. It's a Julia function. Dialogue: 0,0:32:11.44,0:32:17.60,Default,,0000,0000,0000,,And. Yeah. So you don't need to understand\Nthe code here. I just want to show how quick it Dialogue: 0,0:32:17.60,0:32:24.76,Default,,0000,0000,0000,,can be to write something like this. If\Nyou know anything about GPU Programming at Dialogue: 0,0:32:24.76,0:32:28.62,Default,,0000,0000,0000,,all, there should be a little voice in the\Nhead, of the back of your head is like, Dialogue: 0,0:32:28.62,0:32:34.78,Default,,0000,0000,0000,,wait a second. How can you run a dynamic\Nprogramming on a GPU? That shouldn't be Dialogue: 0,0:32:34.78,0:32:43.10,Default,,0000,0000,0000,,possible. Well, Julia can run on the GPU\Nbecause it has a lot of meta programing Dialogue: 0,0:32:43.10,0:32:47.77,Default,,0000,0000,0000,,facilities for the port for stage\Nprograming. So I can generate code based Dialogue: 0,0:32:47.77,0:32:51.68,Default,,0000,0000,0000,,on a specific call signature. It has\Nintrospection, reflection mechanisms that Dialogue: 0,0:32:51.68,0:32:56.76,Default,,0000,0000,0000,,allow me to do some interesting stuff in\Nthe background. It is built upon LVM, Dialogue: 0,0:32:56.76,0:33:02.47,Default,,0000,0000,0000,,which is a common compiler infrastructure.\NAnd so I can actually write staged Dialogue: 0,0:33:02.47,0:33:08.44,Default,,0000,0000,0000,,function that would generate an LVM\Nspecific code for my one function and do Dialogue: 0,0:33:08.44,0:33:16.82,Default,,0000,0000,0000,,so do that during compile time and is a\Ndynamic language that tries really hard to Dialogue: 0,0:33:16.82,0:33:20.48,Default,,0000,0000,0000,,avoid runtime uncertainties. And this is\None of the challenges if you're getting Dialogue: 0,0:33:20.48,0:33:26.90,Default,,0000,0000,0000,,into Julia is to understand that when\Nyou're writing code that has a lot of Dialogue: 0,0:33:26.90,0:33:32.23,Default,,0000,0000,0000,,runtime uncertainties, you get relative\Nslow performance, or as fast as Python. Dialogue: 0,0:33:32.23,0:33:36.78,Default,,0000,0000,0000,,But if you work with the compiler and you\Nwrite runtime uncertainties you can get Dialogue: 0,0:33:36.78,0:33:40.49,Default,,0000,0000,0000,,very fast code and you can run your code\Non the GPU, you basically that's the Dialogue: 0,0:33:40.49,0:33:45.34,Default,,0000,0000,0000,,limites test. If you can run your code on\Nthe GPU, that you did your job well and it Dialogue: 0,0:33:45.34,0:33:50.75,Default,,0000,0000,0000,,provides tools to understand the behavior\Nof your code. So a warning runtime Dialogue: 0,0:33:50.75,0:33:55.13,Default,,0000,0000,0000,,uncertainty. It does that and I don't have\Nthe time to go too deep into the answers. Dialogue: 0,0:33:55.13,0:33:59.24,Default,,0000,0000,0000,,There is actually a paper about this. It\Nhas a type system that allows you to do Dialogue: 0,0:33:59.24,0:34:03.26,Default,,0000,0000,0000,,some sophisticated reasoning type\Ninfluence to figure out what your code is Dialogue: 0,0:34:03.26,0:34:07.66,Default,,0000,0000,0000,,doing. Mutable dispatchers actually\Nhelping us quite a lot in making it easier Dialogue: 0,0:34:07.66,0:34:11.41,Default,,0000,0000,0000,,to do virtualized codes. It was a case of\Nspecialization and just in time Dialogue: 0,0:34:11.41,0:34:18.25,Default,,0000,0000,0000,,compilation. And so just looking a little\Nbit closer at some of these topics, if you Dialogue: 0,0:34:18.25,0:34:25.06,Default,,0000,0000,0000,,want to look at the entire pipeline that\Nflow when you start while you're Dialogue: 0,0:34:25.06,0:34:30.13,Default,,0000,0000,0000,,functioning, call it what happens through\Nthe Julia compiler. You have tools to Dialogue: 0,0:34:30.13,0:34:33.83,Default,,0000,0000,0000,,introspect and all of these on the right\Nhand side here and then you have tools to Dialogue: 0,0:34:33.83,0:34:43.30,Default,,0000,0000,0000,,interact on the left hand side. You can\Ninject code back into the compiler. The Dialogue: 0,0:34:43.30,0:34:48.49,Default,,0000,0000,0000,,other thing is Julia has dynamic\Nsemantics. So when you difficult, you can Dialogue: 0,0:34:48.49,0:34:54.20,Default,,0000,0000,0000,,at runtime, redefine your function and\Nrecall it new function and it uses Dialogue: 0,0:34:54.20,0:35:00.93,Default,,0000,0000,0000,,multiple dispatch. So if you look at the\Nabsolute value call here, which of the 13 Dialogue: 0,0:35:00.93,0:35:06.28,Default,,0000,0000,0000,,possible methods will it call? In C++ or\Nin other programing languages this called Dialogue: 0,0:35:06.28,0:35:10.93,Default,,0000,0000,0000,,a virtual function call. So isn't Julia\Neverything a virtual functional call? No. Dialogue: 0,0:35:10.93,0:35:18.25,Default,,0000,0000,0000,,This is one of the important points is\Nwhen we call a function, let's say because Dialogue: 0,0:35:18.25,0:35:24.23,Default,,0000,0000,0000,,sign of X, we look at the type of the\Ninput arguments and then we first of all Dialogue: 0,0:35:24.23,0:35:33.59,Default,,0000,0000,0000,,look at which function is applicable to\Nour input argument. So in this case, it Dialogue: 0,0:35:33.59,0:35:41.92,Default,,0000,0000,0000,,would be the real down here because float\N64 is a subtype of real. So we choose the Dialogue: 0,0:35:41.92,0:35:50.74,Default,,0000,0000,0000,,right method using dispatch and then we\Nspecialize that method for the signature. Dialogue: 0,0:35:50.74,0:35:54.32,Default,,0000,0000,0000,,So the rule in multiople dispact is to\Nremember is we calling the most specific Dialogue: 0,0:35:54.32,0:35:58.67,Default,,0000,0000,0000,,method, whatever specific might mean. So\Nif you have this bit of example, where we Dialogue: 0,0:35:58.67,0:36:06.22,Default,,0000,0000,0000,,have a function F, which has three\Ndifferent methods and we have an integer Dialogue: 0,0:36:06.22,0:36:10.96,Default,,0000,0000,0000,,argument that can be matched on X, or on Y,\Nand then we have a floating point argument Dialogue: 0,0:36:10.96,0:36:16.69,Default,,0000,0000,0000,,on Y and we call this with a "1,Hello".\NWell, we will select the methods that is Dialogue: 0,0:36:16.69,0:36:24.42,Default,,0000,0000,0000,,most specific for this argument, which\Nwould be the number 1 here. On the other Dialogue: 0,0:36:24.42,0:36:28.82,Default,,0000,0000,0000,,hand, if when we have a float 64 and\Nthe second position, then we will call the Dialogue: 0,0:36:28.82,0:36:34.73,Default,,0000,0000,0000,,second method. Now what happens if I pass\Nin an integer and the first position and a Dialogue: 0,0:36:34.73,0:36:38.86,Default,,0000,0000,0000,,floating point in the second position?\NWell, you would get a run time error Dialogue: 0,0:36:38.86,0:36:44.18,Default,,0000,0000,0000,,because we can't make this decision. What\Nis the most specific method? That's just Dialogue: 0,0:36:44.18,0:36:49.17,Default,,0000,0000,0000,,something to keep in mind. Method\Nspecialization works really similarly when Dialogue: 0,0:36:49.17,0:36:55.35,Default,,0000,0000,0000,,you call a method for the first time. This\Nmethod sign right now has no Dialogue: 0,0:36:55.35,0:37:01.38,Default,,0000,0000,0000,,specializations. And then I look back,\Ncall it once and Julia will insert a Dialogue: 0,0:37:01.38,0:37:06.71,Default,,0000,0000,0000,,speciallisation just for Float64. Before\Nthat it could have been a Float32. The Dialogue: 0,0:37:06.71,0:37:11.43,Default,,0000,0000,0000,,Float64 is for this method. So\NJulia specializes in compilers methods on Dialogue: 0,0:37:11.43,0:37:15.05,Default,,0000,0000,0000,,concrete called signatures instead of\Nkeeping everything dynamic or everything Dialogue: 0,0:37:15.05,0:37:23.21,Default,,0000,0000,0000,,ambiguous. You can introspect this process\Nand there are several macros that are code Dialogue: 0,0:37:23.21,0:37:30.51,Default,,0000,0000,0000,,lowered or code type that will help you\Nunderstand that process. I think I don't Dialogue: 0,0:37:30.51,0:37:35.16,Default,,0000,0000,0000,,have enough time to go into detail here,\Nbut just as a note, if you have a look at Dialogue: 0,0:37:35.16,0:37:40.60,Default,,0000,0000,0000,,this, the percentage for means it's an\Nassignment. So if you reference it later, Dialogue: 0,0:37:40.60,0:37:48.66,Default,,0000,0000,0000,,so in line 5, we will iterate on the 4\Nvalue. And then we can look at the type Dialogue: 0,0:37:48.66,0:37:52.73,Default,,0000,0000,0000,,information that Julia infers out of that\Ncall. We're calling the function mandel Dialogue: 0,0:37:52.73,0:37:59.49,Default,,0000,0000,0000,,with the U in 32 and you can see how that\Ninformation propagates through the Dialogue: 0,0:37:59.49,0:38:05.11,Default,,0000,0000,0000,,function itself. And then if you actually\Ndo agressive inlining .., we do aggressive Dialogue: 0,0:38:05.11,0:38:09.75,Default,,0000,0000,0000,,inlining and optimizations and\Ndevirtualization. And so in the end, we Dialogue: 0,0:38:09.75,0:38:15.96,Default,,0000,0000,0000,,don't have calls anymore. We only have the\Nintrinsics that Julia provides on which Dialogue: 0,0:38:15.96,0:38:23.87,Default,,0000,0000,0000,,programs are actually implemented. So this\Nis a unsigned less than integer function. Dialogue: 0,0:38:23.87,0:38:27.83,Default,,0000,0000,0000,,So we are using time and find as an\Noptimization to find static or near static Dialogue: 0,0:38:27.83,0:38:32.26,Default,,0000,0000,0000,,site programs. It allows us to do us\Nagressive virtualization, inlining and Dialogue: 0,0:38:32.26,0:38:36.63,Default,,0000,0000,0000,,constant propagation. But it raises\Nproblems of cash and validation. So in Dialogue: 0,0:38:36.63,0:38:42.25,Default,,0000,0000,0000,,bygone days, this used to be the case. I\Ncould define a new function G after Dialogue: 0,0:38:42.25,0:38:48.14,Default,,0000,0000,0000,,calling G want a function, a new function,\Nf after calling G once and I would get the Dialogue: 0,0:38:48.14,0:38:53.25,Default,,0000,0000,0000,,old restore back. That's bad. That's\Ncounter-intuitive. That's not dynamic. So Dialogue: 0,0:38:53.25,0:38:59.56,Default,,0000,0000,0000,,in Julia 1.0 and I think 0.5 and 0.6\Nalready. We fix that. So we invalidating Dialogue: 0,0:38:59.56,0:39:06.40,Default,,0000,0000,0000,,the functions that have dependencies on\Nthe function. We just changed. But can we Dialogue: 0,0:39:06.40,0:39:09.71,Default,,0000,0000,0000,,see latency of your program? If you change\Na lot of the functions and you recall them Dialogue: 0,0:39:09.71,0:39:20.78,Default,,0000,0000,0000,,well hm we need to do a lot of work every\Ntime. We do constant propagation, so it Dialogue: 0,0:39:20.78,0:39:27.42,Default,,0000,0000,0000,,isn't very simple example. We try to\Nreduce. We try to exploit as much Dialogue: 0,0:39:27.42,0:39:32.21,Default,,0000,0000,0000,,information as possible. And so if you\Ncall if you want a function F and you call Dialogue: 0,0:39:32.21,0:39:36.36,Default,,0000,0000,0000,,the function sign with a constant value,\Nwe actually build just turning you the Dialogue: 0,0:39:36.36,0:39:40.52,Default,,0000,0000,0000,,constant avoiding the calculation is the\Nsine entirely. And that can be very Dialogue: 0,0:39:40.52,0:39:49.93,Default,,0000,0000,0000,,important during hot calls and in a cycle.\NThis can sometimes go wrong or Julia can Dialogue: 0,0:39:49.93,0:39:53.93,Default,,0000,0000,0000,,has heuristics in order to decide when or\Nwhether or not these optimizations are Dialogue: 0,0:39:53.93,0:40:00.68,Default,,0000,0000,0000,,valuable. And so when you introspect your\Ncode, you might see the results that are Dialogue: 0,0:40:00.68,0:40:05.67,Default,,0000,0000,0000,,not that are not quite, what you want. So\Nwe don't know what the return value here Dialogue: 0,0:40:05.67,0:40:10.15,Default,,0000,0000,0000,,is. It's just a tuple. We know it's a \Ntuple, nothing else. Holistic to say, not Dialogue: 0,0:40:10.15,0:40:14.06,Default,,0000,0000,0000,,specialize. But the nice thing about Julia\Nand where we get performance voice that we Dialogue: 0,0:40:14.06,0:40:17.97,Default,,0000,0000,0000,,can actually do for specialisation and\Nhopefully at some point view makes a Dialogue: 0,0:40:17.97,0:40:26.05,Default,,0000,0000,0000,,compiler smart enough that these edge\Ncases disappear. So I can use some secrets Dialogue: 0,0:40:26.05,0:40:33.28,Default,,0000,0000,0000,,and foresee specialization to happen and\Nthen I can actually infer the precise of Dialogue: 0,0:40:33.28,0:40:40.27,Default,,0000,0000,0000,,return type of my function. Another thing\Nto know when you're coming for more Dialogue: 0,0:40:40.27,0:40:45.05,Default,,0000,0000,0000,,traditional object oriented programing\Nlanguage is that types are not extensible, Dialogue: 0,0:40:45.05,0:40:50.19,Default,,0000,0000,0000,,extendable. So you can't inherit from\Nsomething like Int64. You can only subtype Dialogue: 0,0:40:50.19,0:40:55.71,Default,,0000,0000,0000,,abstract types. We do that because\Notherwise we couldn't do a lot of Dialogue: 0,0:40:55.71,0:41:01.11,Default,,0000,0000,0000,,optimizations. When we, when we look at\Nprogramms, we can't never assume that you Dialogue: 0,0:41:01.11,0:41:05.31,Default,,0000,0000,0000,,won't add code. We had a dinamic programming\Nlanguage at any time in the runtime of your Dialogue: 0,0:41:05.31,0:41:11.76,Default,,0000,0000,0000,,program you can't add code. And so we don't\Nhave close word semantics, which doesn't Dialogue: 0,0:41:11.76,0:41:16.50,Default,,0000,0000,0000,,doesn't allow us to say, hey, by the way,\Nwe know all possible subtypes here. You Dialogue: 0,0:41:16.50,0:41:20.80,Default,,0000,0000,0000,,might add a new type. Later on by\Nsaying a common types are not extendable. Dialogue: 0,0:41:20.80,0:41:27.74,Default,,0000,0000,0000,,We get a lot of the performance back. So\Npersonally, for me, why do I like Julia? Dialogue: 0,0:41:27.74,0:41:32.51,Default,,0000,0000,0000,,Or why do I work on Julia? It works like\NPyphon, it talks like Lisp and runs like Dialogue: 0,0:41:32.51,0:41:38.12,Default,,0000,0000,0000,,Fortran. That's my five sales pitch.\NIt's very hackable and extendable. Dialogue: 0,0:41:38.12,0:41:46.50,Default,,0000,0000,0000,,I can poke at the internals\Nand I can bend them if I need to. It's a Dialogue: 0,0:41:46.50,0:41:52.33,Default,,0000,0000,0000,,bit of upon LVM. So in reality, for me as\Na compiler writer, it's my favorite LVM Dialogue: 0,0:41:52.33,0:41:59.19,Default,,0000,0000,0000,,front end. I can get the LVM code\Nthat I need to actually run. But for users, Dialogue: 0,0:41:59.19,0:42:04.87,Default,,0000,0000,0000,,that's hopefully not a concern. If you do\Nour job right and it has users in Dialogue: 0,0:42:04.87,0:42:09.43,Default,,0000,0000,0000,,scientific computing and I'm in a prior\Nlife whilst doing a lot of scientific Dialogue: 0,0:42:09.43,0:42:15.04,Default,,0000,0000,0000,,computing in cognitive science wanting\Nmodels. And I care about these users Dialogue: 0,0:42:15.04,0:42:21.19,Default,,0000,0000,0000,,because I've seen how hard it can be to\Nactually make progress when the tools you Dialogue: 0,0:42:21.19,0:42:28.78,Default,,0000,0000,0000,,have are bad. And my personal goal is to\Nenable scientists and engineers to Dialogue: 0,0:42:28.78,0:42:37.50,Default,,0000,0000,0000,,collaborate efficiently and actually make\Nchange. Julia is a big project and Climate Dialogue: 0,0:42:37.50,0:42:44.45,Default,,0000,0000,0000,,is a big project and many people to thank.\NAnd with that, I would like to extend you Dialogue: 0,0:42:44.45,0:42:50.18,Default,,0000,0000,0000,,an invitation if you're interested. There\Nis juliacon every year. Where you have a Dialogue: 0,0:42:50.18,0:42:57.83,Default,,0000,0000,0000,,develop meet up. Last year we were about\N60 people are much smaller than CCC. But Dialogue: 0,0:42:57.83,0:43:02.24,Default,,0000,0000,0000,,next year it will be in Lisbon. So come\Njoin us if you're interested and if you Dialogue: 0,0:43:02.24,0:43:05.97,Default,,0000,0000,0000,,want to meet scientists who have\Ninteresting problems and are looking for Dialogue: 0,0:43:05.97,0:43:08.57,Default,,0000,0000,0000,,solutions. Thank you. Dialogue: 0,0:43:08.57,0:43:17.12,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:43:17.12,0:43:23.86,Default,,0000,0000,0000,,Herald A: Time for questions and answers,\Nare there any questions? Dialogue: 0,0:43:23.86,0:43:29.05,Default,,0000,0000,0000,,Herald H: Yeah, we've got microphones over\Nthere. So just jump to the microphone and Dialogue: 0,0:43:29.05,0:43:33.01,Default,,0000,0000,0000,,ask your questions so that\Neverybody could hear. Dialogue: 0,0:43:33.01,0:43:38.51,Default,,0000,0000,0000,,Question: What do you mean when you say\Ndead? Julia talks like Lisp and how is Dialogue: 0,0:43:38.51,0:43:43.28,Default,,0000,0000,0000,,that a good thing {\i1}Lachen{\i0}\NChuravy: Well, it talks like Lisp, but it Dialogue: 0,0:43:43.28,0:43:48.49,Default,,0000,0000,0000,,doesn't look like Lisp. I assume that's\Nwhat you mean. It doesn't have that many Dialogue: 0,0:43:48.49,0:43:53.96,Default,,0000,0000,0000,,braces. But no, Lisp has another powerful meta \Nprogramming capabilities and macros. And Dialogue: 0,0:43:53.96,0:43:58.32,Default,,0000,0000,0000,,so we have a lot of that. If you read a\Nlittle bit about the history of Lisp. The Dialogue: 0,0:43:58.32,0:44:03.65,Default,,0000,0000,0000,,original intention was to write NLisp,\Nwhich would be Lisp with a nice syntax. And Dialogue: 0,0:44:03.65,0:44:07.32,Default,,0000,0000,0000,,I think Julia is my personal is NLisp.\NIt has all these nice features, but it Dialogue: 0,0:44:07.32,0:44:13.39,Default,,0000,0000,0000,,doesn't have the packet syntax. \NHerald A: OK. Thank you. Dialogue: 0,0:44:13.39,0:44:18.58,Default,,0000,0000,0000,,Question: Thanks for the talk. My question\Nis regarding the first part of the talk. Dialogue: 0,0:44:18.58,0:44:22.92,Default,,0000,0000,0000,,You, if I understand correctly, you\Nsimulating a deterministic system there. Dialogue: 0,0:44:22.92,0:44:26.18,Default,,0000,0000,0000,,So there's no additional noise\Nterm or anything, right? Dialogue: 0,0:44:26.18,0:44:29.99,Default,,0000,0000,0000,,Ramadhan: Well, if you had infinite\Nprecision, I think it would be Dialogue: 0,0:44:29.99,0:44:34.85,Default,,0000,0000,0000,,deterministic. But I think by kind design\Nturbulence itself is not deterministic. Dialogue: 0,0:44:34.85,0:44:38.40,Default,,0000,0000,0000,,Well, it's a chaotic system,\NQuestion: But the district size version Dialogue: 0,0:44:38.40,0:44:41.40,Default,,0000,0000,0000,,itself is deterministic. You don't have\Nthe monte carlo part where you have Dialogue: 0,0:44:41.40,0:44:44.47,Default,,0000,0000,0000,,some noise that you would add to \Nwhich might actually be justified Dialogue: 0,0:44:44.47,0:44:49.80,Default,,0000,0000,0000,,from the physics side. Right?\NRamadhan: Well, I mean, we, if you think if Dialogue: 0,0:44:49.80,0:44:53.65,Default,,0000,0000,0000,,you ran the same simulation again, you\Nwould not get that. Well, I think if you Dialogue: 0,0:44:53.65,0:44:55.94,Default,,0000,0000,0000,,ran on the exact same machine, \Nyou would get the Dialogue: 0,0:44:55.94,0:44:58.24,Default,,0000,0000,0000,,same answer. So in that \Nsense, it is deterministic. Dialogue: 0,0:44:58.24,0:45:00.91,Default,,0000,0000,0000,,But if you ran on a slightly \Ndifferent machine like truncation Dialogue: 0,0:45:00.91,0:45:04.01,Default,,0000,0000,0000,,error, I'd like the 16th decimal place\Ncould give you a completely different Dialogue: 0,0:45:04.01,0:45:08.18,Default,,0000,0000,0000,,answer. Question: Sure. So the point I'm\Ntrying. Am I allowed to continue? Dialogue: 0,0:45:08.18,0:45:12.27,Default,,0000,0000,0000,,Herald H: Yes, of course. There's no one\Nelse. Well, there is one person else. So you Dialogue: 0,0:45:12.27,0:45:17.25,Default,,0000,0000,0000,,can continue a few minutes if you want to.\NThanks. {\i1}Laughter{\i0} Dialogue: 0,0:45:17.25,0:45:20.03,Default,,0000,0000,0000,,Question: So the point I was\Ntrying to make is, Dialogue: 0,0:45:20.03,0:45:22.42,Default,,0000,0000,0000,,if you add noise in the \Nsense that it's a physical Dialogue: 0,0:45:22.42,0:45:24.79,Default,,0000,0000,0000,,system, you have noise in\Nthere, it might actually allow you to Dialogue: 0,0:45:24.79,0:45:28.89,Default,,0000,0000,0000,,solve a PDI or discretize a PD, but get a\Nstochastic simulation itself, which might Dialogue: 0,0:45:28.89,0:45:34.48,Default,,0000,0000,0000,,be interesting because it often can make\Nthings easier. And also, you mentioned Dialogue: 0,0:45:34.48,0:45:39.01,Default,,0000,0000,0000,,neural differential equations, right? And\Nin particular, with physical systems, if Dialogue: 0,0:45:39.01,0:45:43.23,Default,,0000,0000,0000,,you have an discontinuities, for example,\Nthe DT integral can actually be quite the Dialogue: 0,0:45:43.23,0:45:47.89,Default,,0000,0000,0000,,problem. And there is work on to just\Nplug my colleagues work, control neutral Dialogue: 0,0:45:47.89,0:45:50.86,Default,,0000,0000,0000,,differential equations where you can\Nactually also built in these Dialogue: 0,0:45:50.86,0:45:53.58,Default,,0000,0000,0000,,discontinuities, which might also be\Ninteresting for you guys. Dialogue: 0,0:45:53.58,0:45:56.47,Default,,0000,0000,0000,,Ali: That's why maybe we should talk\Nbecause I don't know much about that stuff Dialogue: 0,0:45:56.47,0:45:59.69,Default,,0000,0000,0000,,where we're kind of just starting up. I\Nthink that so we've been doing this maybe Dialogue: 0,0:45:59.69,0:46:03.48,Default,,0000,0000,0000,,hopefully continuous, but maybe we'll hit\Ndiscontinuities. I don't know. We should Dialogue: 0,0:46:03.48,0:46:07.36,Default,,0000,0000,0000,,talk, though. Q: And also the math is\Nbeautiful and has no sickness. It's the Dialogue: 0,0:46:07.36,0:46:10.36,Default,,0000,0000,0000,,physics that mightn't change. I'm a\Nmathematician. I have to say that. Ali: I know Dialogue: 0,0:46:10.36,0:46:15.48,Default,,0000,0000,0000,,that the physics is ugly, trust me.\NChuravy: Just as quickly, we do have Dialogue: 0,0:46:15.48,0:46:24.57,Default,,0000,0000,0000,,stickers and I sell cookies, too. They are\Nin the cookie box and on. I think they for Dialogue: 0,0:46:24.57,0:46:29.53,Default,,0000,0000,0000,,somebody from our community is giving a\Njuliaworkshop and we're trying to find a Dialogue: 0,0:46:29.53,0:46:34.29,Default,,0000,0000,0000,,set up an assembly space and hopefully\Nthat goes out as well. Dialogue: 0,0:46:34.29,0:46:38.49,Default,,0000,0000,0000,,Herald H: Go on please.\NQuestion: Also, one question for the first Dialogue: 0,0:46:38.49,0:46:44.84,Default,,0000,0000,0000,,part of the talk I want. I wanted to ask\Nif it's possible or if you are using Dialogue: 0,0:46:44.84,0:46:49.19,Default,,0000,0000,0000,,dynamic resolution in your climate models.\NWell, you will maybe have a smaller grid Dialogue: 0,0:46:49.19,0:46:54.90,Default,,0000,0000,0000,,size near the (???) and larger\Nin the areas that are not that Dialogue: 0,0:46:54.90,0:46:58.14,Default,,0000,0000,0000,,interesting.\NRamadhan: Like adaptive grids? So I Dialogue: 0,0:46:58.14,0:47:02.52,Default,,0000,0000,0000,,think we mostly do that in the vertical.\NSo usually in the ocean, the thinking Dialogue: 0,0:47:02.52,0:47:04.26,Default,,0000,0000,0000,,things are interesting \Nin the, you know, Dialogue: 0,0:47:04.26,0:47:06.07,Default,,0000,0000,0000,,close to the surface. \NWe have more resolution Dialogue: 0,0:47:06.07,0:47:08.78,Default,,0000,0000,0000,,there. But as you go deeper,\Nthings get less interesting. So you put Dialogue: 0,0:47:08.78,0:47:14.38,Default,,0000,0000,0000,,less resolution there. Generally, I think\Nin general, the idea people have asked Dialogue: 0,0:47:14.38,0:47:17.76,Default,,0000,0000,0000,,that before, you know, why do you always\Nuse constant grids? Why don't you use Dialogue: 0,0:47:17.76,0:47:21.70,Default,,0000,0000,0000,,these adaptive grids on your global, you\Nknow, models? And you the answer I've Dialogue: 0,0:47:21.70,0:47:24.67,Default,,0000,0000,0000,,heard I don't know if it's very\Nconvincing. I think generally there hasn't Dialogue: 0,0:47:24.67,0:47:28.95,Default,,0000,0000,0000,,been that much research or people who do\Nresearch into adaptive grids for kind of Dialogue: 0,0:47:28.95,0:47:34.96,Default,,0000,0000,0000,,models. Their funding gets cut. But I like\Nthe answer I've heard is a lot of the Dialogue: 0,0:47:34.96,0:47:38.07,Default,,0000,0000,0000,,time, a lot of the atmosphere and ocean is\Nturbulent. So if you especially you do Dialogue: 0,0:47:38.07,0:47:42.75,Default,,0000,0000,0000,,kind of adaptive refinement, then you just\Nkind of adapt everywhere because there's Dialogue: 0,0:47:42.75,0:47:48.40,Default,,0000,0000,0000,,kind of turbulence everywhere. But yeah, I\Ndon't I'm not. I guess first for our Dialogue: 0,0:47:48.40,0:47:53.32,Default,,0000,0000,0000,,simulations we're kind of just some of\Nthe numerical methods are only fast if you Dialogue: 0,0:47:53.32,0:47:57.07,Default,,0000,0000,0000,,run it on a regular grid. So\Nthat's the reason we don't use adaptive Dialogue: 0,0:47:57.07,0:48:01.31,Default,,0000,0000,0000,,grids for our simulations. But in general,\Nadaptive grids for climate models is Dialogue: 0,0:48:01.31,0:48:05.01,Default,,0000,0000,0000,,interesting beyond like it seems like\Nthere needs to be more research in that Dialogue: 0,0:48:05.01,0:48:07.99,Default,,0000,0000,0000,,area. So I don't know if I answered your\Nquestion, but I kind of just ranted it. Dialogue: 0,0:48:07.99,0:48:10.89,Default,,0000,0000,0000,,Question: You did, thanks.\NHerald H: Go go ahead, please. Dialogue: 0,0:48:10.89,0:48:16.16,Default,,0000,0000,0000,,Question: Yeah, it's just a few guesses\Nabout us. I think I have. I wept quite a Dialogue: 0,0:48:16.16,0:48:22.17,Default,,0000,0000,0000,,bit of legacy fortune code in Python. And\Nmy question is, would there be a simple Dialogue: 0,0:48:22.17,0:48:28.74,Default,,0000,0000,0000,,pass converting Fortran code to Julia,\Npreferably automatically. Do you have any Dialogue: 0,0:48:28.74,0:48:33.06,Default,,0000,0000,0000,,ideas about this one?\NChuravy: You can do it. Your Julia code Dialogue: 0,0:48:33.06,0:48:39.10,Default,,0000,0000,0000,,will look like Fortran code. So you\Nhaven't won anything. So, yes. As a good Dialogue: 0,0:48:39.10,0:48:42.17,Default,,0000,0000,0000,,starting point, you can do that.\NAbsolutely. But you can also just call Dialogue: 0,0:48:42.17,0:48:46.08,Default,,0000,0000,0000,,Fortran from Julia and then totally move\Nover. I generally don't want people to Dialogue: 0,0:48:46.08,0:48:50.06,Default,,0000,0000,0000,,rework their code, except if there's a\Ngood reason. Like starting from scratch Dialogue: 0,0:48:50.06,0:48:55.47,Default,,0000,0000,0000,,sometimes helps. It can be a good reason.\NOr if you say the solutions, we don't have Dialogue: 0,0:48:55.47,0:49:00.88,Default,,0000,0000,0000,,the necessary experts to to work with the\Nold solution anymore. But generally, if Dialogue: 0,0:49:00.88,0:49:04.70,Default,,0000,0000,0000,,you have Fortran code, I would just say,\Nwell, call Julia from Fortran or from Dialogue: 0,0:49:04.70,0:49:11.04,Default,,0000,0000,0000,,Julia, get it up to speed and then start\Ntransitioning. Piece by piece. That makes Dialogue: 0,0:49:11.04,0:49:16.77,Default,,0000,0000,0000,,sense?\NHerald H: So any more questions? No more Dialogue: 0,0:49:16.77,0:49:23.53,Default,,0000,0000,0000,,questions. That's an early read. Ali Ramadhan,\Nand Valentin Churavy, thank you very much. Dialogue: 0,0:49:23.53,0:49:25.98,Default,,0000,0000,0000,,{\i1}Applaus{\i0} Dialogue: 0,0:49:25.98,0:49:29.37,Default,,0000,0000,0000,,{\i1}36C3 postroll music{\i0} Dialogue: 0,0:49:29.37,0:49:51.00,Default,,0000,0000,0000,,Subtitles created by c3subtitles.de\Nin the year 2020. Join, and help us!