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


Product Overview | FAQ | Documentation and Tutorials | Papers | Discussions and Feedback | Blog

Parallelism Without the Pain

Intel® Concurrent Collections for C++ simplifies parallelism and at the same time let's you exploit the full parallel potential of your application.

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 What If Pre-Release License Agreement license.

Including required TBB bits
Choose one of these if in doubt
Linux* 64bit  
Windows* 64bit Windows* 32bit

Without TBB bits
Requires existing TBB >= 4.1 Update 1
Windows* 64bit Windows* 32bit

The Idea

Traditional approaches to parallelism let the programmer express the parallelism exlicitly. This makes achieving parallelism unnecessarily hard and ineffective. With Intel® Concurrent Collections for C++ the programmer does not think about what should go in parallel; instead he/she specifies the semantic dependencies of his algorithm and so defines the ordering constraints only: Concurrent Collections (CnC) lets the programmer define what cannot go in parallel. The model allows the programmer to specify high-level computational steps including inputs and outputs but he/she does not express when or where things should be executed. The when and where are handled by the runtime and/or an optional tuning layer. Code within the computational steps is written using standard serial constructs of the C++ language. Data is either local to a computational step or it is explicitly produced and consumed by them. An application in this programming model supports multiple styles of parallelism (e.g., data, task, pipeline parallel). While the interface between the computational steps and the runtime system remains unchanged, a wide range of runtime systems may target different architectures (e.g., shared memory, distributed) or support different scheduling methodologies (e.g., static or dynamic). With Intel® Concurrent Collections for C++ we provide a parallel runtime system for shared and distributed memory systems. Our goal in supporting a strict separation of concerns between the specification of the application and the optimization of its execution on a specific architecture is to help ease the transition to parallel architectures for programmers who are not parallelism experts. For excellent performance results which we were able to achieve with Intel® Concurrent Collections for C++ please read here.

What's new in version 0.9?

  • New step/thread affinity control: use step-tuner to assign affinity of steps to threads
  • Added thread-pinning: pin threads to CPU-cores
  • New cancellation feature for step-tuners: cancel individual steps (in flight or yet to come), all steps, or custom cancellation sets
  • Added tuning capabilites for CnC::parallel_for: switch on/off checking dependencies, priority, affinity, depends and preschedule
  • New support for Intel(R) Xeon Phi(TM) (MIC): native and mixed CPU/MIC
  • Improved instrumentation hooks for ITAC: Using collection names as given in collection-constructors
  • Cleaner/simpler hashing and equality definition for custom tags
  • New samples (UTS, NQueens (with cancellation), parsec/dedup, Floyd-Warshall) and improved samples
  • Closed memory leak on distributed memory
  • Other bug fixes etc.
  • Added support for Visual Studio* 2012, dropped support for Visual Studio* 2005 (Windows* only)
  • Require TBB 4.1 (was 4.0)
  • Switched to gcc 4.3 ABI (Linux* only)

See also the Release Notes.

Documentation and Tutorials

Papers, Presentations, Research

Discussions, Report Problems or Leave Feedback

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:

Aternatively, to report a problem or leave feedback on this product, please visit the "Whatif Alpha Forum" to participate in forum discussions about Intel® Concurrent Collections:

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


Just FYI, the GraphBuilder documentation links are broken in the release notes (in fact all the release notes links are broken). Is there another way to see them?

Tolga, Thanks for your report concerning the broken links! We are working on this web page and hope to have the links corrected by later today. The graph builder documentation may also be accessed by downloading and installing the 0.5 release. --Melanie

How well does CnC work with SIMD vectorization? Or is that an orthogonal issue to the CnC-level abstraction?

Hi Jeff,
yes, SIMD vectorization is an orthogonal issue like other optimizations one might apply to step-code.
SIMD parallelism is too fine grained to be handled by our current implementation/feature-set (but in general there is no reason why the CnC model couldn't handle this).


ps: The email-list and the forum are monitored more closely. Technical questions have a better chance of getting answered there and provide better support for monitoring/following discussions.

There are a number of problems with the instructions given for setting up CNC manually for VS2010:

1) "project -> Properties -> C/C++ -> General -> Additional Dependencies" doesn't exist in VS2010.

2) The TBB instructions assume "Intel64" for the path which isn't correct for ia32.

3) You need to add the TBB library directory to
"project -> Properties -> VC++ Directory -> Library Directories" OR
"project -> Properties -> Linker -> Additional Library Directories"
because the TBB library that is directly linked depends on other TBB libraries in the same directory (might as well add the CNC library directory while at it).

4) Instead of using the full path for the libraries, just add them by name to
"projects -> Properties -> Linker -> Command Line -> Additional Options" e.g. "cnc_vc10.lib tbb.lib" without quotes.

Also, last I checked, the 64 bit build of CNC's examples all use the 32 bit toolchain so they won't work if you try to compile them.

Hi Aaron,
thanks a lot for your feedback!
1)+2): I have corrected the GettingStarted document on the web (the next update will have it fixed in the installation, too).
3): It works just fine with me. What other libs does it need which it doesn't find?
4): Yes, that's an alternative if you provided the lib-path, but it should work fine with absolute paths

ia32/intel64 issues: Again, I can't reproduce the issues. Did you select "X64" as the solution platform (default is Win32)?

ps: The email-list and the forum are monitored more closely. Technical questions have a better chance of getting answered there and provide better support for monitoring/following discussions.

Hi Episteme,

Hi Episteme,
mixing CnC with the mentioned libs should technically work fine. It must be noted that the programing model of CnC does not allow side-effects (other than through CnC itself). As soon as you use the above within a CnC step, you are likely to cause such side effects and so you'll be outside the mode which gives you guarantees like determinism and race-freedom. It will work, though - it's then simply up to you to protect your foot from being shot (which is one complication that CnC aims to hide from you).

With respect to windows8-apps, we haven't done any checks or verification. so we do not know. However, as the underlying TBB works fine ( , you might want to experiment with it.