Basic Ideas for P573


Scientific computations involve large amounts of data

Climate modeling is a modern application that has become both politically and physically hot; a Sept 2012 report has shown that the loss of artic ice, particularly sea ice, is occurring 10-20 times faster than was originally predicted. By 2030 it is possible that the Artic will be ice-free every summer, and sea-ice-free year round.

Weather modeling is a bit less politically controversial but no less challenging. Given a set of physical coordinates (latitude, longitude, elevation, and time), model temperature, pressure, humidity, and velocity of air as time proceeds. Chemical species may also need to be computed since those have an effect on weather - that's the primary tool for rain-making.

Discretize the Earth by laying down a 1 km x 1 km mesh, with 11 mesh points in vertical direction. That gives ~ 5x109 mesh points. The output for a single time value can require ~ 4.5 x 1010 doubles. The data also can be arranged in large multidimensional array, one dimension for each variable. Some simulations now use meshes that are 100 meters x 100 meters x 100 meters, requiring 1000 times the amount of data to be used, or 4.5 x 1013 doubles = 45 trillion doubles = 8845 trillion bytes.


The primary bottleneck in scientific computing is in moving data, not operating on data

This has held for as long as computation has been done, going back at least to calendar systems from 37,500 years ago. Coding the Stonehenge calendar clearly took a long time (and debugging it required major muscle power as well as time). In addition to moving data, metadata needs to be created and maintained: what set of inputs was used for a computation, what were the program parameters set to, what system was the run made upon, what verification and validation had been made on the code, etc.


Load-store analysis

Given the precept that data movement is always the bottleneck, a simple analysis of this is surprisingly easy, using "load-store modeling". It will be demonstrated how to use it via some linear algebraic operations operating on vectors and matrices, e.g.,

Being able to perform a simple load-store analysis is both the most critical skill in P573, and the easiest one.

Load/store analysis tells you if a high (or higher) performance version exists for some operation, but it does not necessarily tell you just how to get that version. Getting good performance from codes, or just understanding bad performance when it occurs, requires some understanding of basic computer architecture. Computer architecture is a deep subject which goes into the details of machine organization and its interaction with hardware. Fortunately scientific computing can be done effectively with a handful of basic architectural ideas.