Intel® Concurrent Collections for C++ for Windows* and Linux*

Parallelism Without the Pain

Why CnC?

CnC makes it easy to write C++ programs which take full advantage of the available parallelism. Whether run on multicore systems, Xeon Phi™ or clusters CnC will seamlessly exploit the performance potential of your hardware. Through its portability and composability (with itself and other tools) it provides future-proof scalability.

Intel® Concurrent Collections for C++

Intel® Concurrent Collections for C++ is a C++ template library for letting C++ programmers implement CnC applications which run in parallel on shared and distributed memory. Intel(R) Concurrent Collections for C++ is now also available as open source from github

Primary features

Easy parallelism

  • There is no need to think about lower level parallelization techniques like threading primitives or message passing; no need to understand pthreads, MPI, Windows threads, TBB,...
  • There is no need to think about different types of parallelism such as task, pipeline, fork-join, task or data parallelism.
  • Intel® Concurrent Collections for C++ provides a separation of concerns between what the application means and how to tune it for a specific platform. The application code can be paired with isolated tuning code. This allows programmers to focus on each separately.


CnC yields quasi-linear scaling in these example applications


CnC yields quasi-linear scaling on thousands of cores in RTM-3dfd


CnC makes tuning a separate ingredient
CnC makes tuning a separate ingredient




  • The same source runs on Windows and Linux.
  • The same binary runs on shared memory multi-core systems and clusters of workstations. In fact, Intel® Concurrent Collections for C++ is a unified model for shared and distributed memory systems (as opposed to the MPI / OpenMP combination, for example).


  • Because Intel® Concurrent Collections for C++ provides a way to express an algorithm with minimal scheduling constraints, it is very efficient
  • In addition, Intel® Concurrent Collections for C++ supports two types of tuning:
    • Runtime tuning makes the runtime more efficient for a specific application.
    • Application tuning makes the application itself more efficient with user-specified distribution of the work.


  • Intel® Concurrent Collections for C++ achieves scalable performance on a wide range of configurations from small multicore systems to large clusters.
  • No need to re-write or re-compile application in order to target a new configuration.

The following downloads are available under the BSD license. The current version is 1.0.100.

Including required TBB bits
Choose one of these if in doubt
Linux* 64bit  
Windows* 64bit Windows* 32bit (old ver. 1.0.002)

Without TBB bits
Requires existing TBB >= 4.2 Update 3
Windows* 64bit Windows* 32bit (old ver. 1.0.002)

The Idea

The major goal of CnC (Concurrent Collections) is a productive path to efficient parallel execution. And yet a CnC program does not indicate what runs in parallel. Instead, it explicitly identifies what precludes parallel execution. There are exactly two reasons that computations cannot execute in parallel. If one computation produces data that the other one consumes, the producer must execute before the consumer. If one computation determines if another will execute, the controller must execute before the controllee. CnC is a data and control flow model together with tuple-space influence. However, it is closer in philosophy to the PDG (Program Dependence Graph) intermediate form than to other parallel programming models. Its high-level abstractions allow flexible and efficient mapping of a CnC program to the target platform. By this it simplifies parallelism and at the same time let's you exploit the full parallel potential of your application.

What's new in version 1.0?

  • Support for re-use
    • Write CnC graphs and use them in other CnC programs (multiple times)
    • Embed non-CnC functionality in a CnC application
  • Reductions
  • Join/Cross
  • Combine MPI programs with CnC code
  • More example codes
    • Attaching to databases (mysql*)
    • Showcasing reductions, mapreduce, join, CnC-SPMD/MPI combo and more
  • Intel(R) Concurrent Collections for C++ is now available as open source from github.
  • Bug fixes etc.
  • Added support for Visual Studio* 2013, dropped support for Visual Studio* 2008 (Microsoft Windows* only)
  • With Update 1.0.100:
    • Improved tracing output: put()s, get()s and reporting never-available items linked to calling step
    • Added warning messages about put()s before get()s in step executions (unless -DNDEBUG)
    • New CnC programs/samples: raytracer and jacobi2d-heureka
    • Improved startup process for SOCKETS on distributed memory
    • Dropped binary releases for ia32 and Visual Studio* 2010 (Microsoft Windows*)
    • Source structure improvements on github

See also the Release Notes.

Docs about Intel® Concurrent Collections for C++

API Documentation
Release Notes
Getting Started

CnC Papers and Related Links

The Concurrent Collections Programming Model
Parallel Programming For Distributed Memory Without The Pain
Performance Evaluation of Concurrent Collections on High-Performance Multicore Computing Systems
Measuring the Overhead of Intel C++ CnC over Gauss-Jordan Elimination
Segmentation for the Brain Connectome using a Multi-Scale Parallel Computing Architecture
Cluster Computing using Intel Concurrent Collections 
Habanero Concurrent Collections Project at Rice University

Discussions, Report Problems or Leave Feedback

To report a problem or request a feature, please use the issue tracker on github:

For questions and feedback on this product you can also visit the "Whatif Alpha Forum" to participate in forum discussions about Intel® Concurrent Collections:

To stay in touch with the Intel® Concurrent Collections team and the community, we provide a new email-list you can subscribe to or just watch online:

For more complete information about compiler optimizations, see our Optimization Notice.


Hi Carlo,

Hi Carlo,

thanks for reporting the problems. The forum is now open again. If your build problem hasn't been solved yet, we should switch to the forum. I am confident we can fix it quickly. Can you give the exact error message, e.g. the permission for what is the problem?




I am having some trouble to install Cnc on Ubuntu 13.10.
I have download the package that include tbb, extract it, run

( and CNCROOT is properly set in my env), but I still can't run make on the samples.

It says that either I don't have the permission or (if I run

sudo make
) that the variables are not set.

I would ask in the forum but I don't have the permission to do that.