Comparing Parallel Functional Array Languages: Programming and Performance

  • I took a course on massively parallel programming taught by one of the authors of this paper that extensively used Futhark and CUDA. While I have not used any of these languages since, I have used JAX[1] quite a lot, where the learnings from this course have been quite helpful. Many people will end up writing code for GPUs through different levels of abstraction, but those who are able to reason about the semantics through functional primitives might have an easier time understanding what's happening under the hood.

  • Chapel got a mention in the 'Related Work' section. I looked at it a few years ago and found it compelling (but I don't do HPC so it was just window watching). What's the HN feedback on Chapel?

    https://chapel-lang.org/

  • Are these languages pure in the functional sense? E.g. Do they allow/encourage mutation? My understanding is that APL permits mutable state and side effects, but maybe they are rarely used in practice? If you're modifying the contents of an array in-place, I don't think it's reasonable to consider that functional.

  • Matlab supposedly is “portable APL”.

  • Notice that all the all the languages mentioned depends on the external BLAS library for example OpenBLAS for performance.

    D language have excellent support functional and array features with parallel support. On top that not known to others it has high performance native BLAS kind of library with ergonomic and intuitiveness similar to python [1].

    [1] Numeric age for D: Mir GLAS is faster than OpenBLAS and Eigen (2016):

    http://blog.mir.dlang.io/glas/benchmark/openblas/2016/09/23/...