Proxy Apps Overview Brief description of our proxy applications and how they're used
Proxy applications play a key role in our co-design process. They are the main mechanism for communicating the application workload to the exascale ecosystem including hardware architects, algorithm developers, system software developers, etc. Proxy apps also allow domain scientists and application developers to evaluate solutions offered by emerging hardware and software capabilities. Ultimately, the data generated as we iterate the proxy apps through co-design loops will enable the trade-off analysis that is the essence of co-design.
Proxy applications have several characteristics that distinguish them from benchmarks that are designed only to measure system performance on some fixed problem. These differences include:
- Well designed proxy apps present a realistic representation of a specific requirement of a scientific workflow. This may be a numerically intensive kernel, or it may be some other aspect such as I/O or communication. Real applications can spawn multiple proxy apps.
- Proxy apps consist of documentation and specification of the problem to solve, plus a reference implementation. In many cases it will be necessary to heavily modify the reference implementation, or even write a new implementation from scratch based on the spec to answer a specific co-design question.
- Proxy apps are designed to be flexible to allow exploration of new programming models and new algorithms in order to learn how these emerging technologies will impact real applications.
- Proxy apps are sufficiently close in implementation to the parent app that lessons learned during the co-design process can flow back for incorporation into the parent app.