MULTICORE COMMUNICATIONS API WORKING GROUP (MCAPI®)
Objective
The Multicore Communications API (MCAPI®) specification defines an API and a semantic for communication and synchronization between processing cores in embedded systems.
Overview
The purpose of MCAPI, which is a message-passing API, is to capture the basic elements of communication and synchronization that are required for closely distributed (multiple cores on a chip and/or chips on a board) embedded systems. The target systems for MCAPI span multiple dimensions of heterogeneity (e.g., core, interconnect, memory, operating system, software toolchain, and programming language). MCAPI provides a limited number of calls with sufficient communication functionality while keeping it simple enough to allow efficient implementations. Additional functionality can be layered on top of the API set. The calls are exemplifying functionality and are not mapped to any particular existing implementation.
While many industry standards exist for distributed systems programming, they have primarily been focused on the needs of widely distributed systems, SMP systems, or specific application domains (for example scientific computing.) Thus, the Multicore Communications API from the Multicore Association has similar, but more highly constrained, goals than these existing standards with respect to scalability and fault tolerance, yet has more generality with respect to application domains. MCAPI is scalable and can support virtually any number of cores, each with a different processing architecture and each running the same or a different operating system, or no OS at all. As such, MCAPI is intended to provide source-code compatibility that allows applications to be ported from one operating environment to another.

Status
The MCAPI working group has completed the second version of this specification.
The MCAPI working group is currently working on refinements and enhancements to Version 2.015. Functional areas that are being worked on include shared memory/zero copy message/packet management functions and interoperability.
Chairperson
- Sven Brehmer, President, PolyCore Software
Frequently Asked Questions
IMPLEMENTATION HIGHLIGHTS
- Are there any specific hardware and/or platform requirements to use/learn the MCAPI?
- Can MCAPI be implemented on an ASIC or FPGA in gate form?
- Can MCAPI be used for communication between a smartphone
- What is the maximum number of cores supported by MCAPI?
- Can MCAPI be used with multiple microcontrollers?
- How many vendors currently provide MCAPI implementations?
- Is there an open implementation of MCAPI being developed for Linux?
- Do you have a porting guide for MCAPI?
- What about MCAPI performance?
COMPARISONS
- How is MCAPI more appropriate than CORBA for SMP/AMP?
- Wouldn't MCAPI be better as a protocol specification? Then we would know, for example, that the DSP OS and CPU/APE OS talk the same language?
- What is an advantage of MCAPI over other mechanism of inter-task communication such as POSIX mechanisms, for example?
- What is the difference between MCAPI and StreamIt or Cilk++ model for doing multicore programming?
- What are main differences between MCAPI 1.0 and 2.0?
- Isn't MCAPI just a new IPC protocol like LINX, MPI or others?
- If we already implement an IPC, do we need to replace it to utilize MCAPI?
- How does this compare to OpenMP or other parallel APIs.
- How does MCAPI compare to MPI?
- Is MCAPI similar to ARINC653 Supplement?
FEATURES
- Are any reduction operations (such as those found in MPI) supported through MCAPI?
- Does MCAPI include group communication or only point to point communication?
- Does MCAPI only provide for a standard set of calls or is there other overhead in the API that reduces throughput between endpoints? Is throughput dependent on layers under MCAPI only?
- What about shared memory required for MCAPI?
- Are there any arbitration issues?
- Are any error detection/recovery mechanisms available?
- Using MCAPI, is it possible to recover from a node failure in SMP/AMP real-time cluster?
- What about hooks for logging?
- What hooks are there for debugging purposes?
- In a system in which IP packets are sent from one core to another, can the message passing interface work?
- Are both sampling and queuing message behavior supported?
- Applications written to use MCAPI but written on cores with different endianess would not necessarily be endian-compatible. How are endian and integer size differences addressed?
- How can MCAPI be used in SMP environment?
- Can multiple channels on multiple cores communication be handled and how?
- Since hierarchy is used, how are lead domain and lead node managed?
- Why does MCAPI support master/slave and not client server?
- For message sending, does the MCAPI specification deal with message conflicts? It includes a priority variable, but what about multiple messages being sent to a node with the same priority?
- Is out-of-order memory writes handled by MCAPI?
- How is MCAPI different when going over Ethernet compared to socket communication between two processes on two cores in AMP configuration?
- Can domains be hierarchical, other domains under domains?
- Can MCAPI be used to implement locking mechanisms across AMP shared memory areas?
- Is it possible to send messages in non-blocking mode or blocking with timeout?
- Does MCAPI have support for security, having to deal with multiple OSes?

