FuGL - Functional GPU Language

Studenteropgave: Kandidatspeciale og HD afgangsprojekt

  • Henrik Djernes Thomsen
  • Christian Lundtofte Sørensen
4. semester, Software, Kandidat (Kandidatuddannelse)
Developing software that utilizes the GPU often requires using low-level languages, and the developer must be aware of the underlying architecture and execution model, to fully utilize the available resources found on a GPU. This may require the developer to tweak and tune many details in an implementation in order to gain full performance, also requiring a lot of knowledge on the topic.
In this project we introduce FuGL, a statically typed functional GPU programming language. FuGL features high level abstractions, requiring only a few keywords to parallelize an implementation. FuGL uses LLVM as backend, as it features architectural support for both CPUs and GPUs.
The FuGL compiler is developed using .Net Core with C#, to support both Windows, macOS and Linux. The compiler implements the LLVM C API using LLVMSharp, to emit LLVM Assembly. FuGL features a simple syntax with only a few constructs, as with Lisp. With only the keywords mutable and gpu, the developer is able to decide how and when data is allocated and copied to the GPU, to remove unwanted memory copying. Kernels are specified using only the gpu keyword.
FuGL has been tested on three developers to determine the programmability, which is satisfying for the current version. Furthermore FuGL is performance tested, showing that the performance is comparable to other high level languages. The performance tests are performed by implementing three algorithms in FuGL and comparing the performance with other languages for GPU development.
Udgivelsesdato6 jun. 2018
Antal sider106
ID: 280486248