PDC-A: Programs and Execution
- Definitions and properties
- Parallelizable actions
- Including closures, functions, and services
- Composite actions; sessions, tasks; scopes
- Naming or identifying actions as parties (for example thread IDs)
- Impact of granularity and overhead
- Ordering among actions; happens-before relations
- Relaxing ordering constraints permits nondeterministic execution of the series/parallel directed acyclic graphs representing program components
- Independence: determining when ordering doesn’t matter, in terms of commutativity, dependencies, preconditions
- Consistency: Agreement about values and predicates; races, atomicity, consensus
- Ensuring ordering when necessary in parallel programs
- For example locking, safe publication
- Communication among parties may impose ordering among their actions. As in: sending a message happens before receiving it
- Places: Physical devices executing parallel actions (parties)
- Hardware components, remote hosts
- Places may support multiple parties (in sequence or schedule)
- Parties may include external and human users
- May include scheduling, time-slicing and emulation of multiple parallel actions by fewer processors
- Faults arising from failures in parties or communication
- Failures may be due to untrusted parties and protocols not under the control of the program or administrative domain
- Degree of fault tolerance may be a design choice
- Parallelizable actions
- Starting parallel actions
- Placement: arranging that the action be performed (eventually) by a designated party
- Details range from hardwiring to configuration scripts, or relying on automated provisioning and management by platforms
- Establishing communication and resource management
- Procedural: Enabling multiple actions to start at a given program point
- For example, starting new threads
- May be contained in a scope ending when all complete
- Reactive: Enabling upon an event
- For example, installing event handlers
- Less control of when actions begin or end
- Dependent: Enabling upon completion of others
- For example, sequencing
- Placement: arranging that the action be performed (eventually) by a designated party
PDC-B: Communication
- Fundamentals
- Media
- Varieties: channels (message passing or IO), shared memory, heterogeneous, data stores
- Reliance on the availability and nature of underlying hardware, connectivity, and protocols; language support, emulation
- Channels
- Explicit party-to-party communication; naming
- APIs: sockets, architectural and language-based channel constructs
- Memory
- Architectures in which parties directly communicate only with memory at given addresses
- Consistency: Bitwise atomicity limits, coherence, local ordering
- Memory hierarchies, locality: caches, latency, false-sharing
- Heterogeneous Memory using multiple memory stores, with explicit data transfer across them; for example, GPU local and shared memory, DMA
- Multiple layers of sharing domains, scopes and caches
- Data Stores
- Cooperatively maintained structured data implementing maps, sets, and related ADTs
- Varieties: Owned, shared, sharded, replicated, immutable, versioned
- Media
- Programming with communication
- Using channel, socket, and/or remote procedure call APIs
- Using shared memory constructs in a given language
PDC-C: Coordination
- Fundamentals
- Dependent actions
- Execution control when one activity’s initiation or progress depends on actions of others
- Completion-based: Barriers, joins
- Data-enabled: Produce-Consumer designs
- Condition-based: Polling, retrying, backoffs, helping, suspension, queueing, signaling, timeouts
- Reactive: enabling and triggering continuations
- Progress
- Dependency cycles and deadlock; monotonicity of conditions
- Atomicity
- Atomic instructions, enforced local access orderings
- Locks and mutual exclusion
- Deadlock avoidance: ordering, coarsening, randomized retries; encapsulation via lock managers
- Common errors: failing to lock or unlock when necessary, holding locks while invoking unknown operations, deadlock
- Programming with coordination
- Controlling termination
- Using locks, barriers, and other synchronizers in a given language; maintaining liveness without introducing races
- Using transactional APIs in a given framework
- Dependent actions
PDC-D: Software Engineering
- Safety, liveness and performance requirements
- Temporal logic constructs to express “always” and “eventually”
- Metrics for throughput, responsiveness, latency, availability, energy consumption, scalability, resource usage, communication costs, waiting and rate control, fairness; service level agreements
- Identifying, testing for, and repairing violations
- Common forms of errors: failure to ensure necessary ordering (race errors), atomicity (including check-then-act errors), or termination (livelock)..
PDC-E: Algorithms and Application Domains
- Expressing and implementing parallel and distributed algorithms
- Implementing concepts in given languages and frameworks to initiate activities (for example threads), use shared memory constructs, and channel, socket, and/or remote procedure call APIs
- Survey:
| Category | Typical Execution agents | Typical Communication mechanisms | Typical Algorithmic domains | Typical Engineering goals |
| Multicore
|
threads | Shared memory, Atomics, locks | Resource management, data processing | throughput, latency, energy |
| Reactive | Handlers, threads | IO Channels | Services, real-time | latency |
| Data parallel | GPU, SIMD, accelerators, hybrid | Heterogeneous memory | Linear algebra, graphics, data analysis | throughput, energy |
| Cluster | Managed hosts | Sockets, Message channels | Simulation, data analysis | throughput |
| Cloud | Provisioned hosts | Service APIs | Web applications | scalability |
| Open Distributed |
Autonomous hosts | Sockets, Data stores | Fault tolerant data stores and services | reliability |