C and C++ functions can call into Cilk Plus code and vice versa. Deprecation of Cilk Plus In May, 2017, GCC 7.1 was released and marked Cilk Plus support as deprecated. Intel itself announced in September 2017 that they would deprecate Cilk Plus with the 2018 release of the Intel Software Development Tools. In May 2018, GCC 8.1 was released with Cilk Plus support removed. OpenCilk After Cilk Plus support was deprecated by Intel, MIT has taken on the development of Cilk in the OpenCilk implementation, focusing on the LLVM/Clang fork now termed "Tapir". OpenCilk remains largely compatible with Intel Cilk Plus. Its first stable version was released in March 2021. Language features The principle behind the design of the Cilk language is that the programmer should be responsible for exposing the parallelism, identifying elements that can safely be executed in parallel; it should then be left to the run-time environment, particularly the scheduler, to decide during execution how to actually divide the work between processors. It is because these responsibilities are separated that a Cilk program can run without rewriting on any number of processors, including one. Task parallelism: spawn and sync Cilk's main addition to C are two keywords that together allow writing task-parallel programs. The keyword, when preceding a function call (), indicates that the function call () can safely run in parallel with the statements following it in the calling function. Note that the scheduler is not obligated to run this procedure in parallel; the keyword merely alerts the scheduler that it can do so. A statement indicates that execution of the current function cannot proceed until all previously spawned function calls have completed. This is an example of a barrier method. (In Cilk Plus, the keywords are spelled and , or and if the Cilk Plus headers are included.) Below is a recursive implementation of the Fibonacci function in Cilk, with parallel recursive calls, which demonstrates the , and keywords. The original Cilk required any function using these to be annotated with the keyword, which is gone as of Cilk Plus. (Cilk program code is not numbered; the numbers have been added only to make the discussion easier to follow.) cilk int fib(int n) { if (n < 2) { return n; } else { int x, y; x = spawn fib(n - 1); y = spawn fib(n - 2); sync; return x + y;