Obsidian: A Domain Specific Embedded Language for Parallel Programming of Graphics Processors

We present a domain specific language, embedded in Haskell, for general purpose parallel programming on GPUs. Our intention is to explore the use of connection patterns in parallel programming. We briefly present our earlier work on hardware generation, and outline the current state of GPU architectures and programming models. Finally, we present the current status of the Obsidian project, which aims to make GPU programming easier, without relinquishing detailed control of GPU resources. Both a programming example and some details of the implementation are presented. This is a report on work in progress.

[1]  Conal Elliott,et al.  Programming graphics processors functionally , 2004, Haskell '04.

[2]  Barbara Horner-Miller,et al.  Proceedings of the 2006 ACM/IEEE conference on Supercomputing , 2006 .

[3]  Bo Joel Svensson,et al.  Obsidian: An Embedded Language for Data-Parallel Programming , 2008 .

[4]  Edward T. Grochowski,et al.  Larrabee: A many-Core x86 architecture for visual computing , 2008, 2008 IEEE Hot Chips 20 Symposium (HCS).

[5]  Naga K. Govindaraju,et al.  Fast scan algorithms on graphics processors , 2008, ICS '08.

[6]  Mary Sheeran Hardware Design and Functional Programming: a Perfect Match , 2005, J. Univers. Comput. Sci..

[7]  Michael D. McCool,et al.  Shader metaprogramming , 2002, HWWS '02.

[8]  Simon L. Peyton Jones,et al.  Data parallel Haskell: a status report , 2007, DAMP '07.

[9]  Pat Hanrahan,et al.  Brook for GPUs: stream computing on graphics hardware , 2004, ACM Trans. Graph..

[10]  David Tarditi,et al.  Accelerator: using data parallelism to program GPUs for general-purpose uses , 2006, ASPLOS XII.

[11]  Mary Sheeran,et al.  muFP, a language for VLSI design , 1984, LFP '84.

[12]  Martin Odersky,et al.  Domain-Specific Program Generation , 2004, Lecture Notes in Computer Science.

[13]  Lennart Ohlsson,et al.  Implementing an embedded GPU language by combining translation and generation , 2006, SAC.

[14]  Guy E. Blelloch,et al.  NESL: A Nested Data-Parallel Language , 1992 .

[15]  Oege de Moor,et al.  Compiling embedded languages , 2000, Journal of Functional Programming.

[16]  P. Hanrahan,et al.  Sequoia: Programming the Memory Hierarchy , 2006, ACM/IEEE SC 2006 Conference (SC'06).

[17]  John D. Owens,et al.  GPU Computing , 2008, Proceedings of the IEEE.

[18]  George J. Milne,et al.  Correct Hardware Design and Verification Methods , 2003, Lecture Notes in Computer Science.

[19]  John Hart,et al.  ACM Transactions on Graphics: Editorial , 2003, SIGGRAPH 2003.

[20]  Philipp Lucas CGiS: high-level data-parallel GPU programming , 2007 .

[21]  Ralf Hinze An Algebra of Scans , 2004, MPC.

[22]  Franz Franchetti,et al.  SPIRAL: Code Generation for DSP Transforms , 2005, Proceedings of the IEEE.

[23]  Philip Wadler,et al.  A practical subtyping system for Erlang , 1997, ICFP '97.

[24]  Mary Sheeran,et al.  Lava: hardware design in Haskell , 1998, ICFP '98.

[25]  Thomas C. Jansen,et al.  GPU++: an embedded GPU development system for general-purpose computations , 2007 .

[26]  Mary Sheeran,et al.  The Design and Verification of a Sorter Core , 2001, CHARME.

[27]  Koen Claessen Embedded Languages for Describing and Verifying Hardware , 2001 .

[28]  David P. Luebke,et al.  CUDA: Scalable parallel programming for high-performance scientific computing , 2008, 2008 5th IEEE International Symposium on Biomedical Imaging: From Nano to Macro.

[29]  Walid Taha,et al.  A Gentle Introduction to Multi-stage Programming , 2003, Domain-Specific Program Generation.

[30]  M. McCool Data-Parallel Programming on the Cell BE and the GPU using the RapidMind Development Platform , 2006 .