This work will explore ways of representing an architecture and micro-architecture and generating translation rules for the compiler. Based on this foundation, the project will develop ways automatically to generate simulator, run-time system, and compiler components that are matched to each other, for common avenues of experimental exploration. At the same time, the effort will research the question of how to structure a modern simulation environment so that researchers easily can modify it in novel ways, retarget it to different architectures and languages, and rehost it to new systems. Development of new mechanisms for instrumenting a simulation from a higher-level perspective, and for mining the output of the instrumentation is a key contribution. The research will seek a new approach that balances support for modern languages and run-time environments against simulator performance. Dynamic optimization of simulation, adapting and specializing simulation to the application code at run time, will be another area of research. Lastly, several motivating studies will drive the environment’s development, which should also provide novel results in architecture, cooperative hardware/software performance enhancements, and run-time and compiler optimizations.
The development of a new simulation environment with the capabilities described above will enable a new level of experimentation for enhancing computer systems performance in the computer science and engineering communities. As computers push nearer to the fundamental limits of technology, if performance increases are to continue researchers must gain a deeper understanding of the interrelated hardware and software impediments that remain to be overcome. This, in turn, leads to enhanced computational capabilities for science, engineering, and commerce. Having a robust, well-engineered, portable simulation environment that supports easy modification and instrumentation will also be highly beneficial for educational users.