We are excited to release OpenCilk 3.0. Among many improvements, OpenCilk 3.0 includes new language features and integration with other systems. We are particularly thrilled to release a new parallel-loop construct, contributed by the OpenCilk user community; preliminary support for Android phones; and integration with VS Code and other modern IDEs. See the release notes below for technical details about this new release.
We would like to thank everyone who helped us with this release. Whether you are using OpenCilk to write new parallel applications, teach software performance engineering, or develop new parallel-computing systems, we appreciate all of your feedback and input for how we can improve OpenCilk.
Your help wanted
We are looking for help to create precompiled binaries and packages for OpenCilk for more systems. If you are interested in helping to package OpenCilk, please let us know by leaving a comment on the discussion page for this release.
OpenCilk 3.0 release notes
OpenCilk 3.0 includes the following new features and high-level improvements.
[Beta feature] Add support for range-
cilk_for
loops, a parallel version of C++ range-for loops, over containers that support random-access iteration. These loops function just like ordinarycilk_for
loops while providing a simple syntax to operate over the elements of a container in parallel. For example, one can now use the following syntax to write a parallel loop over astd::vector<T> v
:
cilk_for (auto x : v)
do_stuff(x);
Add support to VS Code and other LSP-based IDE's for
cilk_spawn
,cilk_scope
,cilk_for
, andcilk_sync
keywords by extending a custom version of the clangd language server. This support enables modern IDE features to work on and around Cilk code, as this screenshot illustrates:See here for a draft VS Code extension for OpenCilk and guidance on setting up VS Code to use OpenCilk's custom clangd.
[Beta feature] Add support for Android OS, to allow Android apps to use Cilk for task-parallel C/C++.
Add support for C++ struct and class members to be Cilk reducer hyperobjects.
Remove the need for user programs to include the
cilk/cilk.h
header file to use Cilk keywords.Upgrade the OpenCilk compiler to be based on LLVM 19.1.7.
Fix many bugs and improve performance.
Infrastructure improvements
Alongside this release are several improvements to the OpenCilk software ecosystem.
GitHub actions are now available for building OpenCilk as part of a GitHub workflow: https://github.com/OpenCilk/actions.
A repository of Cilk-5 benchmarks and Intel Cilk Plus benchmarks have been ported to OpenCilk and are publicly available: https://github.com/OpenCilk/smallapps.
Acknowledgments
Thanks to @eliecuevas, @sualehasif, and @arvid220u, for contributing range-cilk_for
loops to the OpenCilk language and compiler.
Thanks to everyone who helped us test this new OpenCilk release, including @wheatman, @DanielDeLayo, @MangoShip, and @Akatsukis.