Releases: OpenCilk/opencilk-project
OpenCilk 2.1
Release notes for OpenCilk 2.1
OpenCilk 2.1 features the following enhancements.
Major changes
- The compiler has been upgraded and is now based on LLVM 16.0.6.
- [New, beta feature] The compiler includes the LambdaABI Tapir back end. Using LambdaABI, one can extend OpenCilk with a new parallel runtime system simply by providing an appropriate bitcode-ABI file for that runtime system, as described in the OpenCilk conference paper at ACM PPoPP 2023.
- Reducers have been improved in several ways:
- In C++, reducers are now implicitly converted to views when binding references.
- The previous restriction that Cilk programs can use at most 1024 reducers has been lifted.
- Reducer performance has been improved.
- Support has been improved for using ASan to check Cilk programs for memory errors.
- Support for building the runtime system and Cilk tools as standalone projects has been improved.
- Many bug fixes and performance improvements have been incorporated.
Minor changes
- [Beta feature] The OpenMPABI Tapir back end has been replaced with a new OMPTaskABI back end that uses a bitcode-ABI file, as described in the OpenCilk conference paper.
- Cilksan has been extended with instrumentation for more library functions and compiler intrinsics.
- Cilksan's support for reducers is now independent of the runtime system. Cilksan's reducer support no longer requires specialized functionality from cheetah to simulate steals.
- The runtime system's implementation of C++-exception support has been simplified.
- The runtime system's logic for stealing work has been simplified.
Acknowledgments
Thanks to everyone who helped test this new version of OpenCilk, especially:
- Brian Wheatman
- Samir Droubi
- Ryan Deng
- @bababuck
- MIT course 6.106, Fall 2023
opencilk/v2.1 release candidate 2
This is the second release candidate for OpenCilk 2.1, based on LLVM 16.0.6. This version incorporates fixes for bugs encountered with the first release candidate.
opencilk/v2.1 release candidate 1
Release candidate 1 for OpenCilk v2.1.
This new version of OpenCilk includes the following major changes:
- An upgraded compiler, now based on LLVM 16.0.6.
- [Beta feature] New compiler support to target alternative runtime systems without having to modify the compiler codebase.
- A new implementation of reducer hyperobjects in the runtime system, which no longer restricts the number of reducers a Cilk program might use.
- Streamlined support in the runtime system for C++ exceptions.
- Several optimizations and improvements to the stealing logic in the runtime system.
- Revised support in Cilksan to race-detect Cilk programs that use reducers, meaning that Cilksan no longer needs special runtime-system support to race-detect such programs.
- Improved Cilksan support for ARM64.
- Many bug fixes to address issues discovered in the previous version.
You can download and build the new version of OpenCilk from source using the infrastructure repository as follows:
git clone git@github.com:OpenCilk/infrastructure.git
cd infrastructure
tools/get -t opencilk/v2.1-rc1 $(pwd)/opencilk
tools/build $(pwd)/opencilk $(pwd)/build
Please let us know if you encounter any issues with this release candidate.
OpenCilk v2.1 prerelease for MIT course 6.106
Prerelease version of OpenCilk 2.1 for MIT course 6.106.
opencilk/v2.0.1
This release contains several minor bug fixes and improvements over OpenCilk 2.0.
- Improved logic for putting workers to sleep when they fail to find work to do.
- Fixed bug with maintaining pedigrees and built-in DPRNG.
- Address issues #127, #129, and OpenCilk/infrastructure#21.
opencilk/v2.0
Release notes for OpenCilk version 2.0
Major changes
OpenCilk 2.0 features the following major changes from OpenCilk 1.1.
- [Beta] Cilk reducer hyperobjects (a.k.a. reducers) are now supported through a new language syntax and implementation. A local or global variable in C or C++ can be made into a reducer by adding
cilk_reducer(I,R)
to its type, whereI
andR
designate the identity and reduce functions for the reducer. For example, here is how a simple integer-summation reducer can be implemented using the new reducer syntax:
#include<cilk/cilk.h>
void zero(void *v) {
*(int*)v = 0;
}
void plus(void *l, void *r) {
*(int *)l += *(int *)r;
}
int foo(int *A, int n) {
int cilk_reducer(zero, plus) sum = 0;
cilk_for (int i = 0; i < n; ++i)
sum += A[i];
return sum;
}
- Support for the Intel Cilk Plus reducer library has been removed.
- The compiler has been upgraded to be based on LLVM 14.0.6.
- Support for pedigrees and built-in deterministic parallel random-number generation has been improved and optimized. In particular, pedigrees are now correctly updated at both spawns and syncs.
- Support for pedigrees has been streamlined. To enable pedigree support, simply link the Cilk program with the pedigree library,
-lopencilk-pedigrees
. - Many bug fixes and performance improvements have been included compared to the previous version.
Known limitations
- We are writing new documentation for OpenCilk and posting it on the new website, https://www.opencilk.org/.
- With the compiler now based on LLVM 14, the default DWARF version is now DWARFv5. If you encounter an error when using a tool such as
unhandled dwarf2 abbrev form code 0x25
, then the tool does not support DWARFv5. You can opt back into using the old DWARF version by passing either-gdwarf-4
or-fdebug-default-version=4
toclang
when you compile the program. - The default setting of floating-point contraction is now
-ffp-contract=on
. As a result, floating-point computation may behave differently with this version of OpenCilk. You can opt back into the old floating-point-contraction behavior by passing the compiler flag-ffp-contract=off
. See here for more details. - There are some standard library functions and LLVM intrinsic functions that Cilksan does not recognize. When Cilksan fails to recognize such a function, it may produce a link-time error of the form,
undefined reference to '__csan_FUNC'
for some function name__csan_FUNC
.- Please report these missing functions as issues on the OpenCilk issue tracker.
- [Beta] You can work around this issue by passing the additional flag
-mllvm -cilksan-bc-path=`find /path/to/opencilk/ -name "libcilksan.bc"`
when compiling the Cilk program.
Acknowledgments
Thanks to everyone who contributed to the development of OpenCilk 2.0, via code contributions, testing, or in other ways, including:
- Brian Wheatman
- Teo Collin
- William Luo
opencilk/v2.0 release candidate 2
OpenCilk 2.0 release candidate 2
opencilk/v2.0 release candidate 1
Version 2.0 release candidate 1
opencilk/v1.1
OpenCilk version 1.1
opencilk/v1.1 release candidate 2
opencilk/v1.1-rc2 Create issue template for bug reports