An embedded language for data-parallel programming
This thesis describes the implementation of Obsidian, an embedded language for data-parallel programming. The programming style used in Obsidian borrows many ideas from the hardware description language Lava. In lava combinators are are used to combine circuits into larger circuits. Obsidian uses the idea of combinators from Lava, but instead of circuits; data-parallel computations are described. From the high level descriptions of data-parallel computations expressed in Obsidian, C programs are generated for execution on an NVIDIA GPU (Graphics Processing Unit). Modern GPUs are becomming powerful parallel computers, this is giving rise to an entire field called the GPGPU (General-Purpose Computations on the GPU) field. This field driven by the desire to exploit the power of GPUs for general-purpose computations. Obsidian explores a high level programming style for expressing parallel computataions. The implementation of a number of sorting algorithms using Obsidian is also shown. This thesis touches on the areas of GPGPU, embedded languages and data-parallel programming.