AAU Student Projects - visit Aalborg University's student projects portal
A master's thesis from Aalborg University
Book cover


FuGL - Functional GPU Language

Authors

;

Term

4. term

Education

Publication year

2018

Submitted on

Pages

106

Abstract

At udvikle software, der udnytter en GPU (grafikprocessor), kræver ofte lavniveausprog og indgående kendskab til hardware og eksekveringsmodeller. Det betyder mange tidskrævende finjusteringer for at opnå maksimal ydeevne. I dette projekt introducerer vi FuGL, et statisk typet, funktionelt programmeringssprog til GPU'er. FuGL tilbyder høj-niveau abstraktioner, så parallelisering kan udtrykkes med få nøgleord. FuGL bruger LLVM som backend, som kan målrette både CPU- og GPU-arkitekturer. Kompileren er skrevet i C# på .NET Core og kører på Windows, macOS og Linux. Den benytter LLVMSharp til at anvende LLVM's C-API og generere LLVM-assembly. Sproget har en enkel, Lisp-lignende syntaks med få konstruktioner. Med kun nøgleordene mutable og gpu kan udvikleren styre, hvordan og hvornår data allokeres og kopieres til GPU'en, så unødvendige kopier undgås. GPU-kernels (funktioner, der kører på GPU'en) angives blot med nøgleordet gpu. For at vurdere programmerbarheden lod vi tre udviklere bruge FuGL; deres erfaring viser, at den nuværende version er tilfredsstillende. I ydelsestests implementerede vi tre algoritmer i FuGL og sammenlignede dem med andre sprog til GPU-udvikling. Resultaterne viser en ydeevne på linje med andre højniveausprog.

Developing software that runs on a GPU (graphics processing unit) often requires low-level languages and deep knowledge of the hardware and execution model. Developers spend time tuning many details to reach full performance. This project introduces FuGL, a statically typed functional programming language for GPUs. FuGL provides high-level abstractions so parallel work can be expressed with just a few keywords. FuGL uses LLVM as a backend, which can target both CPU and GPU architectures. The compiler is written in C# on .NET Core and runs on Windows, macOS, and Linux. It uses LLVMSharp to access the LLVM C API and emit LLVM assembly. The language has a simple, Lisp-like syntax with few constructs. With only the keywords mutable and gpu, developers can control when data is allocated and moved to the GPU, avoiding unnecessary copies. GPU kernels (functions that run on the GPU) are declared using only the gpu keyword. To assess programmability, three developers tried FuGL, and their experience with the current version was satisfactory. Performance was evaluated by implementing three algorithms in FuGL and comparing against other languages for GPU development, showing performance comparable to other high-level languages.

[This abstract was generated with the help of AI]