Futhark is a purely functional data-parallel programming language in the ML family. It can be compiled to typically very efficient parallel code, running on either a CPU or GPU. The language and compiler are developed at DIKU at the University of Copenhagen, originally as part of the HIPERFIT centre. The language and compiler are quite stable and suitable for practical programming.
For more information, see:
-
Parallel Programming in Futhark, an extensive introduction and guide
We try to make use of GitHub issues for organising our work. Issues tagged with good first issue do not require deep knowledge of the code base.
In Brief: this fork of the main Futhark Project hopes to accomplish execution of Futhark on M1 Apple GPU/APUs by integrating an addon module (known as mtlpp or Metal++) which can then create and compile Metal Shader Language Code via Objective-C++ (Instead of CUDA or OpenCL) on Mac; this practice of using C++ to execute Objective-C is known as Toll-Free Bridging
, therefore opening the floodgates on platform agnostic GPU support that Futhark provides, development is currently very hot.
This project has further, future, steps which includes creating an MLIR (LLVM Dialect) backend for Futhark though this is a future objective.
Issues and progress are tracked through this repository, it's Project page on @MilesLitteral GitHub.
Discussion, technical talks, brainstorming and drafting are all posted to the FM Gist, feel free to read or contribute to the conversation: https://gist.github.com/MilesLitteral/3ae5c427eab97b32d87b7e311d028efe
A handy test command for the build (in root) is futhark metal dotproduct.fut
An offshoot project to support futhark -> native .metal shaders (an interest of this project moving forward) as it would increase the flexibility of Futhark in relation to, say, importing a futhark library into an xcode project like it is a .dll, or making futhark libraries that M1/M2 Macs readily understand and can import
https://github.com/MilesLitteral/language-metal-quote
There is a desire to create an MLIR Backend, this is currently inprogress but on a separate branch, for more info look at the futhark-metal/mlir
branch, there is also a Vulkan branch that will be resumed in the future
https://gist.github.com/MilesLitteral/3ae5c427eab97b32d87b7e311d028efe