Cilk Tools

Tools to help you work with Intel Cilk Plus code.

This software is subject to the U.S. Export Administration Regulations and other U.S. law, and may not be exported or re-exported to certain countries (Cuba, Iran, North Korea, Sudan, and Syria) or to persons or entities prohibited from receiving U.S. exports (including Denied Parties, Specially Designated Nationals, and entities on the Bureau of Export Administration Entity List or involved with missile technology or nuclear, chemical or biological weapons).

Intel Cilk Plus SDK build 4225

The Intel Cilk Plus SDK provides the following tools:

 
  • The Intel Cilk screen race detector
  • The Intel Cilk view scalability analyzer
 
This release is compatible with code generated by Intel® C++ Composer XE 2013 Update 5 or later, or the GCC "cilkplus" branch C/C++ compiler.
 
This release adds support for the TBB scalable allocator memory allocation replacement.
2014-06-04 Submitted by: The Intel Cilk Plus Development Team

Linux
9.51 MB

Mac OS
7.86 MB

Windows
11.52 MB
Intel Cilk Plus SDK build 3566

The Intel Cilk Plus SDK provides the following tools:

 
  • The Intel Cilk screen race detector
  • The Intel Cilk view scalability analyzer
 
This release is compatible with code generated by Intel® C++ Composer XE 2013 Update 5 or later, or the GCC "cilkplus" branch C/C++ compiler.
 
This release introduces support for Composer XE for Mac OS.
2013-08-20 Submitted by: The Intel Cilk Plus Development Team

Linux
10.78 MB

Mac OS
7.88 MB

Windows
12.12 MB
Intel Cilk Plus SDK build 3229

The Intel Cilk Plus SDK provides the following tools:

 
  • The Intel Cilk screen race detector
  • The Intel Cilk view scalability analyzer
 
This release is compatible with code generated by Intel® C++ Composer XE 2011 SP1 or later, or the GCC "cilkplus" branch C/C++ compiler.
2013-03-19 Submitted by: The Intel Cilk Plus Development Team

Linux
11.21 MB

Mac OS

Windows
12.98 MB
Intel Cilk Plus SDK build 2516

The Intel Cilk Plus SDK provides the following tools:

  • The Intel Cilk screen race detector
  • The Intel Cilk view scalability analyzer

This release is compatible with code generated by Intel® C++ Composer XE 2011 SP1 or later, or the GCC "cilkplus" branch C/C++ compiler.

2012-03-07 Submitted by: The Intel Cilk Plus Development Team

Linux
11.5 MB

Mac OS

Windows
13.17 MB
extsrc-2.10

Copies of libelf.so and libdwarf.so for use with Cilkscreen and Cilkview, along with the LGPL-required license agreement and pointer to the sources that match these binaries.

2012-03-07 Submitted by: The Intel Cilk Plus Development Team

Linux
1.14 MB

Mac OS

Windows

Contributed Code

Code contributed by the community to the Cilk Plus project.

Cilkpub

Cilkpub is a library of community-contributed Cilk Plus code. The current package (version 1.05) contains the sources for four modules: parallel sorting, parallel scan, the DotMix DPRNG, a vector reducer, and a commutative reducer_opadd array. See the announcement in the Intel® Cilk™ Plus forum for additional details.

Version: 1.05 2014-05-15 Contributor: Intel Cilk Plus Development Team
Cilkpub (experimental)

An experimental version of Cilkpub which contains code that is still under active development.

Version: 1.035 2013-08-30 Contributor: Intel Cilk Plus Development Team
DotMix DPRNG

DotMix is a deterministic parallel random number generator for Cilk Plus. This library is based on research conducted at MIT, as described in Deterministic parallel random-number generation for dynamic-multithreading platforms. This code relies on pedigrees, a feature supported by compilers implementing Cilk Plus as described in ABI document version 1.1 or later. This package contains Version 1.01 of DotMix. The most recent version of DotMix is now included as part of Cilkpub.

Version: 1.01 2013-03-05 Contributor: Tao B. Schardl and Jim Sukha
libzca 195

libzca provides a framework for accessing metadata in a PIN tool. libzca is shipped as source and requires that you download the PIN dynamic binary instrumentation tool separately. PIN is available from http://www.pintool.org.

The libzca kit includes the full source for the cilkprof tool. cilkprof is an extension of the Intel Cilk view scalability analyzer. cilkprof provides work and span values on a per-function basis.

Version: Build 195 2013-01-17 Contributor: Intel Cilk Plus Development Team
libzca 181

libzca provides a framework for accessing metadata in a PIN tool. libzca is shipped as source and requires that you download the PIN dynamic binary instrumentation tool separately. PIN is available from http://www.pintool.org.

The libzca kit includes the full source for the cilkprof tool.  cilkprof is an extension of the Intel Cilk view scalability analyzer.  cilkprof provides work and span values on a per-function basis.

Version: Build 181 2012-10-24 Contributor: Intel Cilk Plus Development Team

Code Samples

Code snippets, examples, & samples to help you become familiar with Cilk Plus.

Contributions are welcome! Please submit your code using the Submit Contribution page.

Karatsuba V1.0

The Karatsuba algorithm for polynomial multiplication uses a divide and conquer approach, recursively breaking two polynomials into halves and multiplying the halves until it reaches a small enough pair of polynomials which it just multiplies. The sample code provides four implementations of the Karatsuba algorithm; a serial implementation, an implementation vectorized using array notation, an implementation parallelized using the Cilk Plus keywords, and an implementation which is both parallelized with the Cilk Plus keywords and vectorized using array notation. The combined implementation shows the synergy between task and data parallelism. It’s also worth mentioning that the speedup of the vectorized versions is so slight because the Intel compiler’s autovectorization is already doing a good job on this application.

The original version of this implementation is from Structured Parallel Programming by Michael McCool, Arch Robison, and James Reinders.

April 4, 2014 Submitted by: Barry Tannenbaum
Structured Parallel Programming Code Examples

Example code from Structured Parallel Programming by Michael McCool, Arch Robison, James Reinders.

This text offers a way to learn parallel programming for any C or C++ programmer, in a manner that will be highly effective because it teaches the most important and successful parallel programming strategies.  Examples are in both Cilk Plus and TBB, and the patterns apply to other parallel frameworks.

Updated versions of the code may be available at the Downloads tab of the Structured Parallel Programming website.

March 7, 2013 Submitted by: Barry Tannenbaum & Arch Robison

spp_code_0.zip

176.71 KB
Cilk Plus Tutorial Sources

A tarball containing all of the sources from the Cilk Plus tutorial.

22-Apr-2013 - Updated with sample programs to demonstrate the use of the reducers provided in the Cilk Reducer Library.

November 12, 2012 Submitted by: The Intel Cilk Plus Development Team
Cilk Fib

Calculation of a Fibonacci number in parallel. While this is certainly not the best possible way to calculate a Fibonacci number, it provides a simple demonstration of using cilk_spawn and cilk_sync to parallelize a recursive algorithm.

July 11, 2012 Submitted by: The Intel Cilk Plus Development Team

Open Specifications

Intel Cilk Plus is an essential tool to implement parallelism. As the first step towards our commitment for broad adoption of Cilk Plus, we are making public the language specification that includes both our simple keywords and array notations. These specifications are designed to help other compiler developers implement Cilk Plus for their platforms.

Cilk Plus Conformance Suite V1.2.1
This suite tests for conformance with the Cilk Plus Language Specification.
April 3, 2014 Submitted by: Intel Cilk Plus Development Team
Language Extension Specification V1.2
This document describes the syntax and semantics of the Cilk™ Plus language constructs that were added to the C and C++ programming languages.  This version of the specification was released in September, 2013 and supercedes the 1.1 version of the same specification released in July, 2011.  This version adds no new features to the language extensions described in the V1.1 specification, but contains numerous corrections and clarifications.  A few obsolete constructs were removed.  It is recommended that implementors adding Cilk Plus extensions to their compilers base their changes on this document instead of the V1.1 document.
September 9, 2013 Submitted by: The Intel Cilk Plus development team
Language Spec Diffs V1.1 to V1.2
This document is identical to the Intel® Cilk™ Plus Specification version 1.2 except that it shows the changes from version 1.1 in "redline" notation.  Read this document if you are already familiar with the 1.1 version and want to become acquainted with the recent changes.
September 9, 2013 Submitted by: Intel Cilk Plus Development Team
Vector Function ABI v0.9.5
This document is a draft decription of the calling conventions and name mangling rules for SIMD-enabled functions in Intel® Cilk™ Plus and OpenMP 4.0 for the Intel® IA-32, Intel®64, and Intel® Xeon™ Phi™ processors using the SSE, SSSE, AVX, and Xeon™ Phi™ vector instruction sets extensions.  Implementors of Cilk™ Plus on non-Intel compilers are encouraged to follow this ABI closely in order to ensure link-time compatibility with the Intel compiler.
January 22, 2013 Submitted by: Intel Cilk Plus Development Team
Application Binary Interface (ABI) V1.1
Intel Cilk Plus ABI as implemented by Intel® Composer XE 2011 SP1.This document describes the Intel® Cilk™ Plus Application Binary Interface, the interface between compiler-generated code and the Intel® Cilk™ Plus runtime. The purpose of this document is to allow a compiler writer to generate code to use the runtime. This interface is version-specific. Previous versions of Cilk have used a different interface and future versions may change the interface.
December 21, 2011 Submitted by: The Intel Cilk Plus Development Team
Intrinsics for Low Overhead Tool Annotations V1.0
This document specifies two compiler intrinsics that eliminate the overhead in most real use cases, and certainly reduces it. The intrinsics enable richly annotating libraries for tools without incurring significant run-time costs when the tools are not in use. Each annotation is more than a mere mark in the instruction stream. It can accept an expression argument like a call to a routine does.
November 11, 2011 Submitted by: The Intel Cilk Plus Development Team
Language Extension Specification V1.1
This document describes the syntax and semantics of the Cilk™ Plus language constructs that were added to the C and C++ programming languages. This version of the specification has been superseded by version 1.2.
July 7, 2011 Submitted by: The Intel Cilk Plus Development Team
Language Extension Specification V0.9
This document defines the Intel® Cilk™ Plus extension to C and C++. The language extension is supported by a run time user mode work stealing task scheduler which is not directly exposed to the application programmer. However, some of the semantics of the language and some of the guarantees provided require specific behavior of the task scheduler.
October 28, 2010 Submitted by: The Intel Cilk Plus Development Team
Application Binary Interface V0.9
Intel Cilk Plus ABI as implemented by Intel® Composer XE 2011.This document describes the Intel® Cilk™ Plus Application Binary Interface, the interface between compiler-generated code and the Intel® Cilk™ Plus runtime. The purpose of this document is to allow a compiler writer to generate code to use the runtime. This interface is version-specific. Previous versions of Cilk have used a different interface and future versions may change the interface.
October 26, 2010 Submitted by: The Intel Cilk Plus Development Team

Runtime Sources

Source for the Intel Cilk Plus runtime. These sources can be used to build the Linux* and OS X* versions of the runtime. The files here are snapshots of the sources posted in the public Intel Cilk Runtime git repository at https://intelcilkruntime@bitbucket.org/intelcilkruntime/intel-cilk-runti...

Building the Cilk Plus runtime requires the following prerequisites:

  • autoconf
  • automake
  • A C/C++ compiler that supports the Intel Cilk Plus language extensions; either Intel® Composer XE 2011 SP1 or later (icc command) or the "cilkplus" branch in GCC (gcc command).

Directions on how to build the runtime are in the "readme" file.

This software is subject to the U.S. Export Administration Regulations and other U.S. law, and may not be exported or re-exported to certain countries (Cuba, Iran, North Korea, Sudan, and Syria) or to persons or entities prohibited from receiving U.S. exports (including Denied Parties, Specially Designated Nationals, and entities on the Bureau of Export Administration Entity List or involved with missile technology or nuclear, chemical or biological weapons).

Cilk Plus Build 4277

Latest (15-Aug-2014) Cilk Plus Runtime sources

Released: August 18, 2014
Cilk Plus Build 4185

Latest (5-May-2014) Cilk Plus Runtime sources

Released: May 5, 2014
Cilk Plus Build 3613

Latest (18-Sep-2013) Cilk Plus Runtime sources.

Released: September 30, 2013
Cilk Plus Build 3453

Latest (28-Jun-2013) Cilk Plus Runtime sources.

Released: July 8, 2013
Cilk Plus Build 3365

Latest (3-May-2013) Cilk Plus Runtime sources.

Released: May 3, 2013
Cilk Plus Build 2856

Cilk Plus Runtime sources to match the Intel® Composer XE 2013, Update 1 release.

Released: October 23, 2012
Cilk Plus Build 2546

Cilk Plus Runtime sources to match the Intel® Composer XE 2011 SP1, Update 11 release.

Released: June 15, 2012
Cilk Plus Build 1857

Cilk Plus Runtime sources to match the inital GCC release, Intel® Composer XE 2011 SP1, Update 7.

Released: August 15, 2011

GCC 4.8 Cilk Plus branch releases

Binary versions of the GNU Compiler Collection (GCC) C and C++ 4.8 compilers with the cilkplus extension. The compiler binaries below are a snapshot of the cilkplus-4_8-branch. The source for these compilers is available at http://gcc.gnu.org/svn/gcc/branches/cilkplus-4_8-branch.

These compilers are provided as a convenience. This branch is under active development and should not be used for production code. The compilers are not guaranteed to be up-to-date or error-free.

Questions, bug reports, or issues should be posted in the Intel Cilk Plus forum.

To use the GCC Cilk Plus compiler, the appropriate libraries need to be in your LIBRARY_PATH and LD_LIBRARY_PATH. The following commands can be used (in a BASH Shell) to accomplish this:

export LD_LIBRARY_PATH=<your-installation-directory>/cilkplus-4_8-install/lib:<your-installation-directory>/cilkplus-4_8-install/lib64:$LD_LIBRARY_PATH
export LIBRARY_PATH=<your-installation-directory>/cilkplus-4_8-install/lib:<your-installation-directory>/cilkplus-4_8-install/lib64:$LIBRARY_PATH

Building a Cilk Plus application with the GCC compilers requires explicitly enabling the Cilk Plus extension and linking with libcilkrts. For example:

<your-installation-directory>/cilkplus-4_8-install/bin/gcc -fcilkplus -lcilkrts \
    -I <your-installation-directory>/cilkplus-4_8-install/include <OTHER_FLAGS> <SRC_FILES>
<your-installation-directory>/cilkplus-4_8-install/bin/g++ -fcilkplus -lcilkrts \
    -I <your-installation-directory>/cilkplus-4_8-install/include <OTHER_FLAGS> <SRC_FILES>

7-Aug-2013

C and C++ compilers built from the cilkplus-4_8-branch of the GNU Compiler Collection. This is a snapshot of the branch as of 7-Aug-2013. The sources in the branch may have changed since then.

These compilers are built for the  x86-64 architecture.  They were built and tested on SUSE Linux Enterprise Server 11 SP1.

These compilers are provided as a convenience. They are not guaranteed to be up-to-date or error-free.

August 7, 2013

Clang/LLVM Cilk Plus Branch Releases

Binary versions of the Clang/LLVM compilers with Cilk Plus extension, based on Clang 3.4. General information about getting the source code, building the compiler from source code, running Cilk programs with Cilk Plus/LLVM is available at http://cilkplus.github.io.

Questions, bug reports, or issues should be posted in the Intel Cilk Plus forum.

25-Sep-2014
These compilers were built from the "cilkplus" branch of the Clang/LLVM project on github.com, for x86-64 architecture. These compilers are provided as a convenience. They are not guaranteed to be up-to-date or error-free.
September 25, 2014

Linux
17.27 MB

Mac OS
13.78 MB

Experimental Software

The software in this area is still experimental. It may be buggy, incomplete, or ultimately discarded. Use at your own risk!

Piper is an experimental prototype of Intel® Cilk™ Plus that provides library headers and runtime support for pipe-while loops.  A pipe-while loop is a new parallel loop construct described in a recent paper on On-the-fly pipeline parallelism, published in July 2013 in collaboration with researchers at MIT. A pipe-while loop is a generalization of an ordinary while loop that allows for pipeline parallelism between iterations.

  • For a brief overview, see the Piper project page.
  • For additional details about pipe-while loops, as well as a guide to installing and using Piper, see the Piper reference guide below.

Piper is available for download as a runtime binary package.  This package contains the files needed for support parallel pipelines, including an extended set of Intel Cilk Plus header files, a prebuilt Intel Cilk Plus runtime, and sample programs using Piper.

Piper can also be built from source. The source tree is available on BitBucket, at:

https://bitbucket.org/intelcilkruntime/intel-cilk-runtime/branch/piper

The runtime binary package corresponds to the source at commit d987b39 on October 8, 2013.

Released: October 4, 2013