The goal of this project is to design enabling technologies for high-quality interactive media, and in particular video games. With the current hardware platforms shifting to multicore CPUs and GPUs video game engines must be parallelized (Borkar, 2007; de Galas, 2007; Ramanathan, 2006). While many design and technical elements of video games, including those involving rendering, collision detection and gaming physics are naturally parallelizable, game developers of today are not traditionally trained to develop parallel code which requires suitable design of data structures and multi-threaded algorithms. Thus the adaptation to the fast-paced developments of multi-core architectures and their increasing capabilities and complexities has not been easy. This necessitates the design of new tools and techniques that simplify the expression of parallel patterns and facilitate their conversion into efficient parallel code.
Our goal is to design a new programming language that will simplify parallelization of video games. To make the implementation feasible to complete within the timeframe of the project and facilitate its adoption in the industry, the language will be translated into C++ (or another useful notation) rather than compiled. The new language will be based on the new programming style that compels the programmer to write code as a collection of independent (and thus inherently parallel) transforms. A transform is a small computational kernel operating on logically related data. Whenever there is a data or control dependency between transforms, they are explicitly stated by the programmer. This is very different from the traditional serial programming style, where a program is written as a stream of inherently sequential code, and extracting parallelism comes as an afterthought. In our approach, the code constructs will be parallel by default; sequential constructs will be added only where absolutely necessary. Unlike functional languages, we will have first-class support for modification of global state.
Another important goal of the language implementation would be to effectively utilize graphic processing units (GPU) and general-purpose GPUs for parallel computation. Although GPUs have been used before for parallelizing various codes in scientific simulation and graphics, programming these devices is a difficult task that can only be handled successfully by advanced developers. Our goal is to make them more accessible to an average programmer by providing platform-independent linguistic constructs that simplify their programming.
The output of this project will be the design and implementation of a new parallel language targeted at the gaming industry, that is: collection of linguistic constructs, translators, code analysis tools, and runtime algorithms that will enhance productivity of game developers and result in production of innovative games, whose impact will extend not only to entertainment, but to robotics, multi-agent simulations, and serious games used for education and training.
This project has a high potential to create strong academic/industrial partnerships and trigger technology transfer into the industry. This work is of direct interest to Intel, EA and potentially other companies.
[BOR07] S. Borkar, Thousand Core ChipsA Technology Perspective, DAC 2007
[GAL07] J. de Galas. The quest for more processing power: is the single core CPU doomed? http://www.anandtech.com/cpuchipsets/showdoc.aspx?i=2377, February 2005.
[INT06] R.M. Ramanathan, Intel Multi-Core Processors Making the Move to Quad-Core and Beyond, http://www.pogolinux.com/learn/files/quad-core-06.pdf