Discretization Co-Design Approach
CEED's co-design approach is based on close collaboration between its Applications, Hardware, and Software thrusts, each of which has a two-way, push-and-pull relation with the external application, hardware and software technologies teams. CEED's Finite Elements thrust serves as a central hub that ties together, coordinates and contributes to the efforts in all thrusts.
For example, the development of discretization libraries in CEED is led by the Finite Elements thrust but involves working closely with vendors (Hardware thrust) and software technology efforts (Software thrust) to take full advantage of exascale hardware. Making sure that these libraries meet the needs of, and are successfully incorporated in, ECP applications is based on collaboration between the Applications and Finite Elements thrusts.
In addition to libraries of highly performant kernels, a key product of the CEED project will be a set of miniapps that will serve multiple roles:
- Provide a mechanism to test and optimize across the breadth of implementations already developed by team members for a variety of platforms.
- Serve as stand-alone unit-test drivers for the library kernels.
- Provide well-documented (implementation, usage, and performance) benchmarks to work with vendors, now and in the future (e.g. in system procurement).
- Provide test and demonstration cases for application scientists who are considering new formulations.
The miniapps developed in CEED, which we also refer to as CEEDlings, will range from local, element-level kernels, which can be run in a simulator, to bake-off problems, which combine local and global kernels into model problem benchmarks for high-order computations, to proxy apps, which will include application-relevant physics.
These encapsulated CEEDlings will be used in interactions with vendors on emergent HPC technologies and ECP software technologies projects to highlight performance critical paths (e.g. size of on package memory, internode latency, hardware collectives) and provide simple examples of meaningful high-order computations. One of the goals in these interactions will be to impact the design of exascale architectures, and system and application software, for improved portability and performance of the high-order algorithms.