Implementing OpenMP for Zig to enable its use in HPC context
David Kacs, Nick Brown, Joseph Lee
TL;DR
The paper addresses enabling OpenMP in Zig to broaden its use in HPC. It employs a preprocessing-based approach to inject OpenMP runtime calls for parallel regions, worksharing loops, and common clauses, avoiding extensive compiler redesigns. Empirical results on NAS benchmarks show Zig+OpenMP achieving performance comparable to reference C/Fortran OpenMP implementations, with Zig outperforming Fortran in EP and CG while remaining competitive in other kernels, and wide interoperability with Fortran via C linkage. The work demonstrates Zig as a viable, safer alternative for high-performance computing and outlines concrete paths for expanding HPC features and interoperability in Zig.
Abstract
This extended abstract explores supporting OpenMP in the Zig programming language. Whilst, C and Fortran are currently the main languages used to implement HPC applications, Zig provides a similar level of performance complimented with several modern language features, such as enforcing memory safety. However, Zig lacks support for OpenMP which is the de facto threaded programming technology. Leveraging Zig's LLVM compiler tooling, we have added partial support for OpenMP to the Zig compiler and demonstrated that the performance attained by using Zig with OpenMP is comparable to, and in come cases exceeds, that of conventional HPC languages. Consequently we demonstrate that Zig is a viable and important programming technology to use for HPC, and this work paves the way for more HPC features to be added to Zig, ultimately providing HPC developers with the option of using a safer, more modern language for creating high performance applications.
