Co-Design: Deploying Leading-Edge Computing Capabilities


NOTE: This proxy app is currently UNSUPPORTED & EXPORT CONTROLLED (EAR99)


Lassen is a mini-app intended to explore applications with varying load balance.

Lassen is a front tracking code. It models how waves propagate from point sources by tracking how the wave front propagates outward until it interacts with the problem boundary, an internal obstacle, or another wave front. The mini-app computes the arrival time at each node location in the mesh, which is the earliest time that a wave front reaches that point.

Lassen is written to work over an unstructured mesh. However, the problem setups available through the mini-app generate a Cartesian mesh. The mesh is then sub-divided into domains which are assigned to processors.

The computational work is nearly entirely located in the space immediately before and after the front. As the front moves, so does the work load. In the current implementation, where space is partitioned into domains, this leads to constantly changing load imbalance. A processor will be busy and doing useful work only when the front is passing through the mesh elements of one of its domains. As the number of domains increases, proportionately fewer domains are busy at any given time. Clearly, this approach does not scale well, and a new approach is needed.

The mini-app currently includes four build options: serial, MPI, Charm++ and MPI/Charm++ in an interoperability mode. The MPI version assigns one domain to each processor. The Charm++ version allows for a processor to own one or more domains, which can be dynamically reassigned during run-time to attempt load balance.

The MPI/Charm++ interoperability version demonstrates that an MPI based-application can work with Charm++. This opens up the possibility that algorithms of an MPI based-application can be incrementally re-written in Charm++.

The default mode of operation for this mini-app is modeling point source in the corner of a box or cube. There are command line arguments to set the number of mesh elements and domains in each dimension. The code will output various diagnostics about progress, time to solutions, and error from the analytical solution. If the SILO library has been enabled, then the final problem state is written to a file for visualization.

Other problem setups are possible by creating a small setup file that defines the location of obstacles and point sources. See the README file for further details on how to build and run the code.