Firepile: Run-time Compilation for GPUs in Scala
Nathaniel Nystrom, Derek White and Kishen Das
Abstract:
Recent advances have enabled GPUs to be used as general-purpose
parallel processors on commodity hardware for little cost. However, the ability to program these devices has not kept up with their
performance. The programming model for GPUs has a number of
restrictions that make it difficult to program. For example, software running on the GPU cannot perform dynamic memory allocation, requiring the programmer to pre-allocate all memory the GPU
might use. To achieve good performance, GPU programmers must
also be aware of how data is moved between host and GPU memory
and between the different levels of the GPU memory hierarchy.
We describe Firepile, a library for GPU programming in Scala.
The library enables a subset of Scala to be executed on the GPU.
Code trees can be created from run-time function values, which
can then be analyzed and transformed to generate GPU code. A
key property of this mechanism is that it is modular: unlike with
other meta-programming constructs, the use of code trees need not
be exposed in the library interface. Code trees are general and can
be used by library writers in other application domains. Our experiments show Firepile users can achieve performance comparable to
C code targeted to the GPU with shorter, simpler, and easier-tounderstand code.