OpenShader sub-projects up for grabs
Below is an expanding list of sub-projects for OpenShader. First priority is to divide up the simulator into self-contained short-term building blocks that contributors can tackle in isolation.
- Update existing simulators -- BarraSim and GPGPU-sim are existing GPU simulators. They are dependent on old versions of CUDA, they have compilation problems with newer compilers, they are not portable to other platforms, and they require deep hacking to install them on systems without nVidia hardware (due to dependencies on out-dated nVidia drivers). These systems need to be updated to work with current compilers, a wider range of operating systems, and made more independent of nVidia products (drivers, CUDA compiler, etc.). The short-term objective is to be able to build and run these simulators and build and run GPU programs for these simulators in any arbitrary VM that has no particular graphics hardware available.
- Event management system -- A time-ordered event queue for hardware simulation. The queue is divided up into time slots corresponding to clock cycles in the future. Each slot can contain any number of hardware events (i.e. hardware operation that will occur in the future or whose completion occurs in the future). Events resolve to function calls with arguments, and those functions can enqueue more events to occur arbitrarily into the future. Implementations should take inspiration from existing simulators like SESC, SimpleScalar/M-Sim, and MARSSx86.
- Integration with MARSSx86 -- The project lead works at Binghamton University, which has developed MARSSx86, a complete cycle-accurate x86 CPU simulator. Ultimately, OpenShader and MARSSx86 should be integrated. This comes in two parts: (1) Modifications to MARSS to allow OpenShader to be connected at either compile time or run time (where perhaps OpenShader is loaded as libopenshader.so). (2) Definition and implementation of the module/integration interface to allow OpenShader to be integrated with another simulator.
- Energy and performance accounting system -- Eventually, we will be able to incorporate energy information into OpenShader based on gate-level simulations of synthesizable hardware models. We need a general system for keeping track of arbitrary numbers of performance counters, accumulators, etc. How many FPMUL instructions have been executed? How much energy has been spent on FPMUL? Memory accesses? Etc.