FastMPJ implements the mpiJava 1.2 API, which is the most widely extended MPI-like Java bindings, for a highly productive development of MPJ applications (see figure below). The MPJ communications API, which includes both collective and point-to-point primitives, is implemented on top of the xxdev device layer for interaction with the underlying hardware. The device layer has been designed as a simple and pluggable architecture of low-level communication devices. Moreover, this layer supports the direct communication of any serializable Java object without data buffering.
Currently, FastMPJ includes five communication devices that support high-speed cluster networks: (1) ugnidev, for Gemini/Aries adapters from Cray over the uGNI interface; (2) ibvdev, for all InfiniBand/RoCE/iWARP compliant devices based on the Verbs layer; (3) mxmdev, for InfiniBand/RoCE adapters from Mellanox over the MXM library; (4) psmdev, for TrueScale adapters from Intel/QLogic over the InfiniPath PSM interface; and (5) mxdev, for Myrinet adapters and additionally for generic high-speed Ethernet hardware over the MX/Open-MX libraries. Furthermore, although these devices are specifically designed for inter-node network-based communication, in the particular case of mxmdev, psmdev and mxdev also provide efficient intra-node shared memory communication, usually implemented through some Inter-Process Communication (IPC) mechanism. Thus, this fact allows FastMPJ to take full advantage of hybrid shared/distributed memory architectures, such as clusters of multi-core nodes.
Finally, the TCP/IP stack support is included through Java NIO sockets (niodev), whereas high-performance shared memory systems can benefit from the thread-based device (smdev). Both devices are implemented in "pure" Java code (i.e., 100% Java), which ensures portability.