Placeholder Image

字幕表 動画を再生する

  • ANNOUNCER: The following content is provided under a Creative

  • Commons license.

  • Your support will help MIT Open Courseware

  • continue to offer high quality educational resources for free.

  • To make a donation or to view additional materials

  • from hundreds of MIT courses, visit MIT OpenCourseWare

  • at ocw.mit.edu.

  • JULIAN SHUN: All right.

  • So today we're going to talk about cache

  • oblivious algorithms.

  • Who remembers what a cache oblivious algorithm is?

  • So what is a cache oblivious algorithm oblivious to?

  • Cache size.

  • So a cache oblivious algorithm is an algorithm

  • that automatically tunes for the cache size on your machine.

  • So it achieves good cache efficiency.

  • And the code doesn't need to have any knowledge of the cache

  • parameters of your machine.

  • In contrast, a cache-aware algorithm

  • would actually know the parameters of the cache sizes

  • on your machine.

  • And the code would actually put the size of the cache inside.

  • So today we're going to talk a lot more about cache oblivious

  • algorithms.

  • Last time we talked about one cache oblivious algorithm

  • that was for matrix multiplication.

  • And today we're going to talk about some other ones.

  • So first example I want to talk about

  • is simulation of heat diffusion.

  • So here's a famous equation known as the heat equation.

  • And this equation is in two dimensions.

  • And we want to simulate this function

  • u that has three parameters t, x, and y. t is the time step.

  • X and y are the x, y coordinates of the 2D space.

  • And we want to know the temperature for each x,

  • y coordinate for any point in time t.

  • And the 2D heat equation can be modeled

  • using a differential equation.

  • So how many of you have seen differential equations before?

  • OK.

  • So good, most of you.

  • So here I'm showing the equation in two dimensions.

  • But you can get similarly equations

  • for higher dimensions.

  • So here it says the partial derivative of u with respect

  • to t is equal to alpha.

  • Alpha is what's called the thermo diffusivity.

  • It's a constant times the sum of the second partial derivative

  • of u with respect to x, and the second partial derivative of u

  • with respect to y.

  • So this is a pretty famous equation.

  • And you can see that we have a single derivative

  • on the left side and a double derivative on the right side.

  • And how do we actually write code

  • to simulate this 2D heat process?

  • So oftentimes in scientific computing,

  • people will come up with these differential equations just

  • to describe physical processes.

  • And then they want to come up with efficient code

  • to actually simulate the physical process.

  • OK.

  • So here's an example of a 2D heat diffusion.

  • So let's say we started out with a configuration on the left.

  • And here the color corresponds to a temperature.

  • So a brighter color means it's hotter.

  • Yellow is the hottest and blue is the coldest.

  • In on the left we just have 6172,

  • which is the course number.

  • So if you didn't know that, you're

  • probably in the wrong class.

  • And then afterwards we're going to run it

  • for a couple time steps.

  • And then the heat is going to diffuse to the neighboring

  • regions of the 2D space.

  • So after you run it for a couple of steps,

  • you might get the configuration on the right

  • where the heat is more spread out now.

  • And oftentimes, you want to run this simulation

  • for a number of time steps until the distribution of heat

  • converges so it becomes stable and that

  • doesn't change by much anymore.

  • And then we stop the simulation.

  • So this is the 1D heat equation.

  • I showed you a 2D one earlier.

  • But we're actually going to generate code for the 1D heat

  • equation since it's simpler.

  • But all the ideas generalize to higher dimensions.

  • And here's the range of colors corresponding to temperature,

  • so the hottest colors on the left

  • and the coldest colors on the right.

  • And if you had a heat source that's

  • on the left hand side of this bar,

  • then this might possibly be a stable distribution.

  • So if you keep running the simulation,

  • you might get a stable distribution of heat

  • that looks like this.

  • OK.

  • So how do we actually write code to simulate this differential

  • equation?

  • So one commonly used method is known as finite difference

  • approximation.

  • So we're going to approximate the partial derivative of u

  • with respect to each of its coordinates.

  • So the partial derivative of u with respect to t

  • is approximately equal to u of t plus delta t

  • where delta t is some small value, and x, and then

  • minus u of tx.

  • And then that's all divided by delta t.

  • So how many of you have seen this approximation method

  • before from your calculus class?

  • OK, good.

  • So as you bring the value of delta t down to 0,

  • then the thing on the right hand side approach

  • is the true partial derivative.

  • So that's a partial derivative with respect to t.

  • We also need to get the partial derivative with respect to x.

  • And here I'm saying the partial derivative with respect

  • to x is approximately equal to ut of x plus delta

  • x over 2 minus ut of x minus delta x

  • over 2, all divided by delta x.

  • So notice here that instead of adding delta

  • x in the first term and not adding anything

  • in the second term, I'm actually adding delta x over 2

  • in the first term and subtracting text over 2

  • in the second term.

  • And it turns out that I can do this with the approximation

  • method.

  • And it still turns out to be valid as long as the two terms

  • that I'm putting in, their difference is delta x.

  • So here the difference is delta x.

  • And I can basically decide how to split up

  • this delta x term among the two things in the numerator.

  • And the reason why I chose delta x over 2 here

  • is because the math is just going to work out nicely.

  • And it's going to give us cleaner code.

  • This is just the first partial derivative with respect to x.

  • Actually need the second partial derivative

  • since the right hand side of this equation

  • has the second partial derivative.

  • So this is what the second partial derivative looks like.

  • So I just take the partial derivative with respect

  • to x of each of the terms in my numerator from the equation

  • above.

  • And then now I can actually plug in the value

  • of this partial derivative by applying the equation

  • above using the arguments t and x plus delta x

  • over 2, and similarly for the second term.

  • So for the first term when I plug it

  • into the equation for the partial derivative with respect

  • to x, I'm just going to get ut of x plus delta x minus utx.

  • And then for the second term, I'm

  • going to get ut of x minus delta x.

  • And then I subtract another factor of utx.

  • So that's why I'm subtracting 2 times utx in the numerator

  • here.

  • And then the partial derivative of each

  • of the things in a numerator also

  • have to divide by this delta x term.

  • So on the denominator, I get delta x squared.

  • So now I have the second partial derivative with respect to x.

  • And I also have the first partial derivative with respect

  • to t.

  • So I can just plug them into my equation above.

  • So on the left hand side I just have this term here.

  • And I'm multiplying by this alpha constant.

  • And then on this term just comes from here.

  • So this is what the 1d heat equation

  • reduces to using the finite difference approximation

  • method.

  • So any questions on this

  • So how do we actually write code to simulate this equation here?

  • So we're going to use what's called a stencil computation.

  • And here I'm going to set delta at x and delta t equal to 1,

  • just for simplicity.

  • But in general you can set them to whatever you want.