The Concurrent Collections Programming Model
Burke, Michael G.
Parallel computing has become firmly established since the 1980’s as the primary means of achieving high performance from supercomputers. 1 Concurrent Collections (CnC) was developed to address the need for making parallel programming accessible to non-professional programmers. One approach that has historically addressed this problem is the creation of domain specific languages (DSLs) that hide the details of parallelism when programming for a specific application domain. In contrast, CnC is a model for adding parallelism to any host language (which is typically serial and may be a DSL). In this approach, the parallel implementation details of the application are hidden from the domain expert, but are instead addressed separately by users (and tools) that serve the role of tuning experts. The basic concepts of CnC are widely applicable. Its premise is that domain experts can identify the intrinsic data dependences and control dependences in an application, irrespective of lower-level implementation choices. The dependences are specified in a CnC graph for an application. Parallelism is implicit in a CnC graph. A CnC graph has a deterministic semantics, in that all executions are guaranteed to produce the same output state for the same input. This deterministic semantics and the separation of concerns between the domain and tuning experts are the primary characteristics that differentiate CnC from other parallel programming models.