Main Obsidian Repository
Haskell Other
Latest commit 6720082 Mar 14, 2017 @svenssonjoel Increasing the version range of dependencies "cuda" and "language-c-q…

Changes to several file to make it compile again after version range increase.

TODO: test that it also still runs.


An embedded language for GPU kernel programming.

Current features

  • Pull arrays: traditional “arrays as function from index to value”
  • Push arrays: a computation that is parameterised on a “write function”.
  • Executing kernels from within Haskell is possible on platforms supported by the CUDA bindings (Linux, Mac). Obsidian.Run.CUDA.Exec provides a very low level interface to running kernels.
  • Memory manager alignes arrays in shared memory with respect to memory banks.


  • New functions for “programming the hierarchy:
    • asThread, asWarp, asBlock, asGrid replaces tConcat,pConcat,sConcat functionality
    • execThread Program Thread (SPush Thread a) -> SPush Thread a
    • execWarp
    • execBlock
    • force is now called compute
  • Memory manager had a big revamping.
  • Code generation revamping: All intermediate shared arrays are declared at toplevel of kernel (as pointers into a chunk of shared mem). This makes the body of a kernel much more readable.

In Progress

  • Mutable arrays: Mutable arrays in shared memory can be created. Global mutable arrays can be passed into a kernel as an argument.
  • Atomic operations on mutable arrays.


  • Automatic lookup table generation. Use constant memory for lookup tables.
  • Implement a memory manager that uses the optimal memory layout. This is possible, all information is there.
  • Enhance and improve the library for programming with mutable arrays. Make mutable arrays more accessible to the programmer and make them a more integrated part of the programming style.
  • Testing: Many changes lately, a test-suite is needed. Example programs and benchmarks seem to work, but more is needed.
  • Multikernel programs expressed within Obsidian.

Versioning Policy (from Apr 14 2014 with the release of version

  • A.B.C.D
  • A.B changes when API Changes (in a disruptive way)
  • C changes with additions that does not break existing programs
  • D Bugfixes and internal hacking.