Standing between a user application and an efficient solution to it are several decision to be made. We identify three levels of decision making:
- Algorithmic decisions
- Matters of networking and parallel layout of the program, and
- Choice of the best kernels on a given architecture
Traditionally, such choices were all the responsibility of the user. We argue that these choices can be handled in software to a large extent.
Self-Adapting Numerical Software is an umbrella term for software that targets these three problem areas. Such software can be very different in nature: kernel optimization can largely be done statically, network optimization is to a large extent independent of the user data, but it dynamically dependent on run-time conditions, while algorithmic choices are mostly dynamically dependent on the user data, but largely independent of lower levels of the computational platform.
This web page gives the links to several projects at ICL (Salsa, lfc, Atlas) and at our partner sites (see the links section) that target the subject of software that adapts itself to optimize the process of scientific problem solving.