ocland Frequently Asked Questions

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:

  1. Server application
  2. 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't 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.

Since ocland is running the OpenCL commands in other computer for the moment two allowed operations in the OpenCL specifications are not supported:

  1. Shared pointers
  2. 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!

Can I optimize my applications for ocland?


You can optimize your applications for ocland trying 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...

  1. 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.
  2. Is strongly recommended to reduce kernel arguments set operations as much as possible. Consider send constant variables only one time (if the buffers contents are modified don't implies that the buffer changes, send it only the first time).
  3. Each command executed on OpenCL requires network traffic, so try to don't call unnecessary OpenCL commands.
Of course, if you have an iterative process, is the place where you may optimize your code.