Intel has announced it is placing the Cilk Plus compiler and runtime code into open source:
We have recently created a new branch for GCC-4.7 called “cilkplus” in which we have started implementing the Intel® Cilk™ Plus extensions in the C and C++ front-ends. Read James’ blog on this release – Parallelism as a First Class Citizen in C and C++, the time has come.
We are looking for collaborators and advice as we proceed – both in this open-source project, and on the open specification. The compiler and associated runtime are available at http://gcc.gnu.org/svn/gcc/branches/cilkplus.
Intel acquired the technology from Cilk Arts in 2009. Since then the chip maker has folded the technology into its parallel programming offerings. Today the language is one of three pillars of Intel’s parallel building blocks, the other two being Threading Building Blocks (also available as open source) and Array Building Blocks.
Basically, the Cilk Plus language is an extension of C/C++ that supports parallel programming via the addition of three keywords and vector-friendly array notation. As such, it encompasses both task-level parallelism and data parallelism in a shared memory environment. And since it only adds a handful of extra constructs to C/C++, it offers a more mainstream-looking alternative to task parallel frameworks (like OpenMP) and more complex vector-oriented programming languages.
Cilk actually began at MIT in the Supertech Research Group. It was developed there under the direction of Charles Leiserson, who went on to co-found Cilk Arts. MIT’s Cilk source, version 5.4.6, is available under the GNU General Public License and can be is available through the Supertech Research Group’s Cilk website.
By putting Cilk Plus into the public domain, Intel seems to be positioning it as the starting point for a standard C/C++ parallel programming language. In a recent blog post, Intel’s James Reinders talks about the need to support basic parallel programming in the language, rather than within libraries. He writes:
The time has come for high level constructs for task and data parallelism to be explicitly added to C and C++. This will enable Parallel Programming in C and C++ to be fully portable, easily intelligible, and consistently decipherable by a compiler.
He subsequently points to Cilk Plus as the model for doing this, noting that its elegant support of task and data parallelism and its ability to maintain serial semantics is are among its most promising virtues. Reindeers finishes by saying, we should not get carried away by adding a lot of esoteric parallel language features. Simplicity of design works for both the application developer and the compiler programmer.