Expressive array constructs in an embedded GPU kernel programming language
Paper in proceeding, 2012

Graphics Processing Units (GPUs) are powerful computing devices that with the advent of CUDA/OpenCL are becomming useful for general purpose computations. Obsidian is an embedded domain specific language that generates CUDA kernels from functional descriptions. A symbolic array construction allows us to guarantee that intermediate arrays are fused away. However, the current array construction has some drawbacks; in particular, arrays cannot be combined efficiently. We add a new type of push arrays to the existing Obsidian system in order to solve this problem. The two array types complement each other, and enable the definition of combinators that both take apart and combine arrays, and that result in efficient generated code. This extension to Obsidian is demonstrated on a sequence of sorting kernels, with good results. The case study also illustrates the use of combinators for expressing the structure of parallel algorithms. The work presented is preliminary, and the combinators presented must be generalised. However, the raw speed of the generated kernels bodes well.

General purpose GPU programming

Arrays

Embedded domain specific language

Data parallelism

Haskell

Author

Koen Lindström Claessen

Chalmers, Computer Science and Engineering (Chalmers), Software Technology (Chalmers)

Mary Sheeran

Chalmers, Computer Science and Engineering (Chalmers), Software Technology (Chalmers)

Joel Bo Svensson

Chalmers, Computer Science and Engineering (Chalmers), Software Technology (Chalmers)

Conference Record of the Annual ACM Symposium on Principles of Programming Languages

07308566 (ISSN)

21-30
978-1-4503-1117-5 (ISBN)

Areas of Advance

Information and Communication Technology

Subject Categories

Software Engineering

DOI

10.1145/2103736.2103740

ISBN

978-1-4503-1117-5

More information

Latest update

10/5/2023