Latest Developments in General Purpose GPU Programming with F#

Starting with our experiments with integrating General Purpose GPU programming into F# at Microsoft Research, I've been watching the evolution of F# as a GPGPU programming platform. Over time, GPGPU programming with F# has become both more professionalized , and much more broad spectrum (including CUDA, OpenCL and other options).

Some latest developments in this area have been:

  • There were two talks on F#/GPU/Finance at the NVIDIA GTC Conference covering both how F#/GPU programming is really used in real, large-scale financial applications, and how F# enables the design of a language-integrated compiler targeting LLVM:
  • Alea.cuBase 1.2.680 has been released – congratulations to the team from QuantAlea!  Alea.cuBase is available on NuGet.
  • QuantAlea have released a first version of CUDALab, demonstrating live documentation for CUDA kernels written using F# scripts and Alea.cuBase.
  • Vulpes is a Deep Belief Net written in F#, and using Alea.cuBase to access the GPU. The source for Vulpes is now available on GitHub.
  • FSCL (the F# to OpenCL compiler) has matured considerably.  FSCL increases the abstraction over OpenCL programming on heterogenous parallel platforms. It includes an F# to OpenCL compiler and a kernel execution runtime that, together, simplify developing OpenCL kernels and exploiting all the different, heterogenous parallel computing devices that populate most of the today platforms.
  • Nessos Technologies have released GpuLinq on GitHub. This is implemented in F# but can be applied to C# LINQ expression trees as well. To quote, GpuLinq's main mission is to democratize GPGPU programming through LINQ. The main idea is that we represent the query as an Expression tree and after various transformations-optimizations we compile it into fast OpenCL kernel code. In addition we provide a very easy to work API without the need of messing with the details of the OpenCL API

 Together these point to how F#'s unique language features truly enable a new level in General Purpose GPU programming.