Skip to content

Releases: OpenCilk/opencilk-project

OpenCilk 2.1

13 Jan 13:20
Compare
Choose a tag to compare

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

09 Jan 00:09
Compare
Choose a tag to compare
Pre-release

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

14 Sep 12:13
Compare
Choose a tag to compare
Pre-release

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

02 Sep 18:29
Compare
Choose a tag to compare

Prerelease version of OpenCilk 2.1 for MIT course 6.106.

opencilk/v2.0.1

03 Sep 01:06
Compare
Choose a tag to compare

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

21 Jul 01:19
Compare
Choose a tag to compare

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, where I and R 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 to clang 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

15 Jul 01:43
Compare
Choose a tag to compare
Pre-release

OpenCilk 2.0 release candidate 2

opencilk/v2.0 release candidate 1

07 Jul 11:16
Compare
Choose a tag to compare
Pre-release

Version 2.0 release candidate 1

opencilk/v1.1

22 Oct 12:07
Compare
Choose a tag to compare

OpenCilk version 1.1

opencilk/v1.1 release candidate 2

20 Sep 11:57
Compare
Choose a tag to compare
Pre-release
opencilk/v1.1-rc2

Create issue template for bug reports