What is ocland?
ocland (OpenCL Land) is a cloud computing OpenCL interface. ocland will connect to the servers that you specify getting the OpenCL devices available, allowing you to perform computations along the network without changing your code!
How runs ocland?
ocland is composed by 2 parts:
- Server application
- Client ICD (Installable Client Driver)
You only needs to have running ocland on the servers that you want to use to perform computations with OpenCL, and the ICD installed on your machine. The ICD is fully compatible with all the rest of your platforms. When you launch an application simply place a file called “ocland” on the execution folder where you specify the servers that you want to use, and magic! all the available platforms on the servers will be shown too.
When can I use ocland?
You can use ocland with almost the applications that uses OpenCL, but since ocland usage implies network traffic, is designed only for heavy computations, where the computation time can compensate the network traffic requirements.
When can’t I use ocland?
Since ocland is running the OpenCL commands in other computer for the moment two allowed operations in the OpenCL specifications are not supported in ocland:
- Shared pointers
- Callback functions
Fortunately this type of operations are not commonly used, so almost applications that uses OpenCL can be used with ocland, and you don’t need to modify or recompile it!
At the other hand, ocland requires some network traffic, so is designed for applications that uses several platforms and devices at the same time, and where the computation time can compesate the network traffic time consumed.
Can I optimize my applications for ocland?
Yeah, you can. ocland may use some network traffic for each command executed, so you must try to reduce as much as possible the network traffic reducing the times that you reads or write memory on devices. Some actions can be taken into account…
Reading and writting memory from/to devices can require the transfer of huge amounts of data. In OpenCL is generally suggested reduce this operations as much as possible, but in ocland is more relevant due to the generalized bad network capabilities.
Since in OpenCL is not really relevant how many times do you transfer the arguments to the kernels because the amount of data is relatively small, in ocland is strongly recommended to reduce this memory transfer as much as possible. Consider send constant variables only one time (if the buffers contents arte modified don’t implies that the buffer changes, send it only one time).
Each command executed on OpenCL requires network traffic, so try to don’t call unvaluable OpenCL commands.
Of course, if you have an iterative process along time, is the place where you may optimize your code.