Intel® Concurrent Collections Frequently Asked Questions (FAQ)

Home | FAQ | Documentation and Tutorials | Papers | Discussions and Feedback

Contents

General Questions about Concurrent Collections

Question about the Intel® Concurrent Collection for C++ package: content, download, install, feedback

Question about using Intel® Concurrent Collections for C++

Disclaimer and Legal Information

General Questions about Concurrent Collections

1. What is Intel® Concurrent Collections for C++
Intel® Concurrent Collections for C++ is a programming model that allows application domain experts to write multi-core enabled applications on shared and distributed memory without reasoning about threads, the parallel algorithm, or details of scheduling.

2. What is the derivation of the name "Intel® Concurrent Collections for C++"?
We wanted a name that was both generic and descriptive of what the product does and one that did not conflict with existing names in the industry. "Concurrent" obviously alludes to the fact that this is a parallel programming technology. Wikipedia defines "Collections" as a grouping of some variable number of data items. It is also a term used in object oriented programming to refer to a set of objects. Intel® Concurrent Collections for C++ speaks of three types of objects: steps (computations), tags (controls), and items (data). So the name seemed both generic and descriptive!

By the way, the original name for the technology, "TStreams", referred to tagged streams. The tags allow Intel® Concurrent Collections for C++ to be more powerful than strict streaming models. You will see the name "TStreams" in several papers that are available on the web, co-authored by one of the developers of the technology who is now an Intel employee, Kath Knobe.

3. How do I write parallel applications using Intel® Concurrent Collections for C++?
You are an application domain expert. Imagine you are describing your application to a friend on a whiteboard. You specify the computational steps and their inputs and outputs in graph form. Intel® Concurrent Collections for C++ provides a narrow API for you to define your graph and write your step code.

In contrast to the way one would write a serial program, at no time does one specify the execution order of steps, only the inputs and outputs. The runtime system is responsible for scheduling the execution of the steps when its inputs are available and all the conditions for execution are met. At no time in this process does the domain expert reason about execution order or scheduling.

For a full discussion see "The Eight fundamental Patterns of Concurrent Collections" and the Step-by-Step API Tutorial (HTML) (PDF).

4. What benefits can I expect from using Intel® Concurrent Collections for C++?
The Intel® Concurrent Collections for C++ approach allows for a separation of concerns in parallel programming. You as a domain expert only need to focus on the semantics of computations (what the domain expert already knows) without reasoning about the underlying parallel model and the specific target architecture. Porting to a different target platform or interfacing to a different runtime is simplified because the description of the computation remains the same. As an example, without significant changes, your application will run on shared and distributed memory.

5. What applications are suited for parallelization with Intel® Concurrent Collections for C++?
Every computation step specified in an Intel® Concurrent Collections for C++ graph is assumed able to be executed in parallel with only the constraints imposed by the relations in the graph. When all required inputs to a step are available, the step can start execution and may produce outputs that further drive the execution of other step instances. Re-targeting the application for a different form of parallel execution requires only linking the compiled application with a runtime appropriate to the hardware configuration.

6. How does Intel® Concurrent Collection for C++ differ from other parallel models such as OpenMP* and Intel® Threading Building Blocks?
OpenMP* is a shared memory parallel programming model consisting of a set of compiler directives and library routines that extend C++ (and FORTRAN). The user uses the language extensions to specify control structures, data environment, synchronization, and scheduling approach for parallel executions.

Intel® TBB is a C++ template library that implements a set of common parallel programming patterns. The user chooses among parallel algorithm templates for parallelizing an application without the need to deal with threads and scheduling policies.

Like OpenMP* and Intel® TBB, Intel® Concurrent Collections for C++ provides a high-level programming abstraction for parallel. Unlike these other parallel programming approaches, however, Intel® Concurrent Collections for C++ does not require the application domain expert to reason about the parallel algorithm or scheduling.

Most other models are limited to shared memory; Intel® Concurrent Collections for C++ can be used on shared and distributed memory.

Question about the Intel® Concurrent Collection for C++ package: content, download, install, feedback

7. What is in the Intel® Concurrent Collections for C++ package?
Intel® Concurrent Collections for C++ includes user documentation (Getting Started, User’s Guide, Reference Manual, Tutorial, and Release Notes), runtime library and samples. It runs on Linux and Windows* (Visual Studio* 2005, Visual Studio* 2008 and Visual Studio* 2010).

8. How do I get started?
Please see the Getting Started Guide for installation and first steps with Intel® Concurrent Collections for C++. The Step-by-Step API Tutorial (HTML) (PDF) gives you step by step instruction as you begin to write your own CnC program. An introduction to the fundamental concepts of Concurrent Collections can be found in "The Eight fundamental Patterns of Concurrent Collections"

9. What is the state of the product on the WhatIf site?
This is a prototype product. See the Release Notes for a list of features we know we’ll need (e.g., garbage collection, reductions, in-place operations). Performance and scalability are not yet fully addressed by this prototype release.

10. How do I report problems or send feedback?
Please report problems or send feedback through our software engineering blogs.

11. What kind of feedback are you looking for?
We appreciate all feedback; in particular feedback on the following:

  • Your thoughts on this parallel programming model. How does it compare with other techniques you have used?
  • Features of Intel® Concurrent Collections for C++. What missing features are important to you?
  • Syntax of the Intel® Concurrent Collections for C++ textual notation.
  • Ease of use of the current implementation. What did you find difficult to use or to understand?
  • Are there restrictions that present problems for your application domain?
  • What did you like?

Question about using Intel® Concurrent Collections for C++

12. How do get my application to distributed memory, e.g. on a cluster?
The Step-by-Step API Tutorial (HTML) (PDF) has a chapter which discusses the support for distributed memory in detail.

13. The compiler doesn’t find header files tbb/*.h. I have a full installation of Intel® Threading Building Blocks (TBB), what’s wrong?
Most probably the environment variable TBBROOT is not properly set. Please read Getting Started Guide for a detailed description.

14. The compiler doesn’t find header files tbb/*.h. I have a full installation of Intel® Composer or Intel® Parallel Studio, what’s wrong?
Most probably the environment variable TBBROOT is not properly set. In Windows*, Intel® Composer and Intel® Parallel Studio not always export the TBBROOT environment variable. You must explicitly set it. If you do not know how to do this, please read this.

Disclaimer and Legal Information

INFORMATION IN THIS DOCUMENT IS PROVIDED IN CONNECTION WITH INTEL(R) PRODUCTS. NO LICENSE, EXPRESS OR IMPLIED, BY ESTOPPEL OR OTHERWISE, TO ANY INTELLECTUAL PROPERTY RIGHTS IS GRANTED BY THIS DOCUMENT. EXCEPT AS PROVIDED IN INTEL'S TERMS AND CONDITIONS OF SALE FOR SUCH PRODUCTS, INTEL ASSUMES NO LIABILITY WHATSOEVER, AND INTEL DISCLAIMS ANY EXPRESS OR IMPLIED WARRANTY, RELATING TO SALE AND/OR USE OF INTEL PRODUCTS INCLUDING LIABILITY OR WARRANTIES RELATING TO FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABILITY, OR INFRINGEMENT OF ANY PATENT, COPYRIGHT OR OTHER INTELLECTUAL PROPERTY RIGHT. UNLESS OTHERWISE AGREED IN WRITING BY INTEL, THE INTEL PRODUCTS ARE NOT DESIGNED NOR INTENDED FOR ANY APPLICATION IN WHICH THE FAILURE OF THE INTEL PRODUCT COULD CREATE A SITUATION WHERE PERSONAL INJURY OR DEATH MAY OCCUR.

Intel may make changes to specifications and product descriptions at any time, without notice. Designers must not rely on the absence or characteristics of any features or instructions marked "reserved" or "undefined." Intel reserves these for future definition and shall have no responsibility whatsoever for conflicts or incompatibilities arising from future changes to them. The information here is subject to change without notice. Do not finalize a design with this information.

The products described in this document may contain design defects or errors known as errata which may cause the product to deviate from published specifications. Current characterized errata are available on request.

Contact your local Intel sales office or your distributor to obtain the latest specifications and before placing your product order.

Copies of documents which have an order number and are referenced in this document, or other Intel literature, may be obtained by calling 1-800-548-4725, or by visiting Intel's Web Site.

Intel processor numbers are not a measure of performance. Processor numbers differentiate features within each processor family, not across different processor families. See http://www.intel.com/products/processor_number for details.

BunnyPeople, Celeron, Celeron Inside, Centrino, Centrino Atom, Centrino Atom Inside, Centrino Inside, Centrino logo, Core Inside, FlashFile, i960, InstantIP, Intel, Intel logo, Intel386, Intel486, IntelDX2, IntelDX4, IntelSX2, Intel Atom, Intel Atom Inside, Intel Core, Intel Inside, Intel Inside logo, Intel. Leap ahead., Intel. Leap ahead. logo, Intel NetBurst, Intel NetMerge, Intel NetStructure, Intel SingleDriver, Intel SpeedStep, Intel StrataFlash, Intel Viiv, Intel vPro, Intel XScale, Itanium, Itanium Inside, MCS, MMX, Oplus, OverDrive, PDCharm, Pentium, Pentium Inside, skoool, Sound Mark, The Journey Inside, Viiv Inside, vPro Inside, VTune, Xeon, and Xeon Inside are trademarks of Intel Corporation in the U.S. and other countries.

* Other names and brands may be claimed as the property of others.

Copyright (C) 2008-2013, Intel Corporation. All rights reserved.

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