Modern computer systems become increasingly distributed and heterogeneous by comprising multi-core CPUs, GPUs, and other accelerators. Current programming approaches for such systems usually require the application developer to use a combination of several programming models (e.g., MPI with OpenCL or CUDA) in order to exploit the system's full performance potential.
dOpenCL (distributed OpenCL) is a novel, uniform approach to programming distributed heterogeneous systems with accelerators. It transparently integrates the nodes of a distributed system into a single OpenCL platform. Thus, dOpenCL allows the user to run unmodified existing OpenCL applications in a heterogeneous distributed environment. Besides, it extends the OpenCL programming model to deal with individual nodes of the distributed system. As dOpenCL seamlessly integrates existing vendor-specific OpenCL implementations, it is forward-compatible to even the latest devices.
The dOpenCL runtime system is designed as a distributed middleware comprising the dOpenCL client driver, the dOpenCL daemon, and the dOpenCL communication library. The client driver is installed on the host, and a daemon runs on each compute node of the target distributed system. The host runs the OpenCL application's host program, while the compute nodes execute application kernels on their local devices. The communication library is installed on both, the host and the compute nodes, and facilitates communication between the client driver and daemons.
The client driver provides a fully-fledged implementation of the OpenCL API, such that it transparently replaces an existing OpenCL implementation on the host. Therefore, an original OpenCL application does not have to be modified in way (i.e., compiled or linked anew) in order to use dOpenCL. The daemon is a system service which continuously runs on each compute node and submits kernels and other commands to the compute node's devices on behalf of the client driver. The daemon employs the compute node's native OpenCL implementation, i.e., an optimized implementation provided by the device vendor, for this purpose. This enables dOpenCL to employ any device by smoothly integrating an appropriate native OpenCL implementation, while most other OpenCL implementations are restricted to a particular set of supported devices. Moreover, dOpenCL is forward-compatible to novel devices, e.g., AMD APUs or the Intel® Xeon Phi™, as the means to efficiently control these devices are adopted from their native OpenCL implementations.
The client driver and the daemons interact by means of the dOpenCL communication library. The communication library is an implementation of the dOpenCL API. This API resembles the OpenCL API but is restricted to functions that the client driver requires to control the daemons. The API is not exposed to the application programmer, but rather serves as an abstraction layer within the dOpenCL runtime system to decouple the client driver and the daemon from a particular communication library.
This implementation approach enables the user to choose an implementation of the dOpenCL communication library that is optimized for the target distributed system, e.g., an MPI-based implementation for computer clusters, or a socket-based implementation for local area networks.
dOpenCL has been developed and tested on the following systems:
- Ubuntu 12.04
- CentOS 5.9 and 6.4
The current implementation of dOpenCL requires the Grid Communication Framework (GCF) which is part of the Real Time Framework (RTF).
The dOpenCL source code can be downloaded here:
- Simplified application object management on the daemon
- Converted project to C++11
dOpenCL is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
dOpenCL is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
Permission to use dOpenCL for scientific, non-commercial work is granted under the terms of the dOpenCL Academic License 1.0 provided appropriate credit is given. Please use Kegel, P., Steuwer, M., Gorlatch, M., "dOpenCL: Towards Uniform Programming of Distributed Heterogeneous Multi-/Many-Core Systems", in Journal of Parallel and Distributed Computing, 73(12), pages 117-126, Elsevier, 2013 for citations and http://dopencl.uni-muenster.de for reference.