Ticket #1537 (new proposed-project)
Add NVIDIA CUDA backend for Data Parallel Haskell
|Reported by:||basvandijk||Owned by:|
|Priority:||OK||Keywords:||CUDA, Data Parallel Haskell, Concurrency|
|Difficulty:||3 people Summer||Mentor:||not-accepted|
Description (last modified by basvandijk) (diff)
This ticket proposes to add a NVIDIA CUDA backend for the Data Parallel Haskell extension of GHC.
To quote Wikipedia on CUDA:
"CUDA ("Compute Unified Device Architecture"), is a GPGPU technology that allows a programmer to use the C programming language to code algorithms for execution on the GPU... CUDA gives developers unfettered access to the native instruction set and memory of the massively parallel computational elements in CUDA GPUs. Using CUDA, Nvidia GeForce-based GPUs effectively become powerful, programmable open architectures like today’s CPUs (Central Processing Units). By opening up the architecture, CUDA provides developers both with the low-level, deterministic, and for repeatable access to hardware that is necessary API to develop essential high-level programming tools such as compilers, debuggers, math libraries, and application platforms."
To me, the exciting thing about CUDA is, if not the technology itself the high availability of CUDA enabled "graphic" cards. It is estimated that by the end of 2007 there will be over 40,000,000 CUDA-capable GPUs!
Also see the NVIDIA CUDA site.
Data Parallel Haskell
To quote the Haskell Wiki on DPH:
"Data Parallel Haskell is the codename for an extension to the Glasgow Haskell Compiler and its libraries to support nested data parallelism with a focus to utilise multi-core CPUs. Nested data parallelism extends the programming model of flat data parallelism, as known from parallel Fortran dialects, to irregular parallel computations (such as divide-and-conquer algorithms) and irregular data structures (such as sparse matrices and tree structures)..."
It turns out people are actually already working on this. See this thread on haskell-cafe.
I actually think this project is to big for a Google Summer of Code project. It's more suitable for a Masters project I guess. However the project can be broken into several sub-projects that each address a different research question. Immediate questions that come to mind are for example:
- How to compile DPH code to CUDA C code?
- How to integrate normal Haskell code with CUDA backed DPH code?
- <add your question here>