Overview

The Data Communication and Synchronization (DaCS) library provides a set of services which ease the development of applications and application frameworks in a heterogeneous multi-tiered system (for example a hierarchical memory system). The DaCS services are implemented as a set of APIs providing an architecturally neutral layer for application developers on a variety of multi-core systems. One of the key abstractions that further differentiates DaCS from other programming frameworks is a hierarchical topology of processing elements, each referred to as a DaCS Element (DE). Within the hierarchy each DE can serve one or both of the following roles:
Figure 1. Example PPE Host with SPE AcceleratorsExample PPE Host with SPE Accelerators

The DaCS services provide the functionality needed to perform these roles and can be divided into the following categories:

Resource reservation
The resource reservation services allow an HE to reserve AEs below itself in the hierarchy. The APIs abstract the specifics of the reservation system (O/S, middleware, etc.) to allocate resources for an HE. Once reserved, the AEs can be used by the HE to execute tasks for accelerated applications.
Process management
The process management services provide the means for an HE to execute and manage accelerated applications on AEs, including, but not limited to, remote process launch, and remote error notification.
Group management
The group management services provide the means to designate dynamic groups of processes for participation in collective operations. In SDK 3.0 this is limited to process execution synchronization (barrier).
Remote memory
The remote memory services provide the means to create, share, transfer data to, and transfer data from a remote memory segment. The data transfers are performed using a one-sided put/get remote direct memory access (rDMA) model. These services also provide the ability to scatter/gather lists of data, and provide optional enforcement of ordering for the data transfers.
Message passing
The message passing services provide the means for passing messages asynchronously, using a two-sided send/receive model. Messages are passed point-to-point from one process to another.
Mailboxes
The mailbox services provide a simple interface for synchronous transfer of small (32-bit) messages from one process to another.
Process Synchronization
The process synchronization services provide the means to coordinate or synchronize process execution. In SDK 3.0 this is limited to the barrier synchronization primitive.
Data Synchronization
The data synchronization services provide the means to synchronize and serialize data access. These include management of wait identifiers for synchronizing data transfers, as well as mutex primitives for data serialization.
Error Handling
The error handling services enable the user to register error handlers and gather error information.