1 OpenCL Applications
David Anderson edited this page 2024-06-13 16:47:35 -07:00

You can run OpenCL applications under BOINC.

Application requirements

Your application must call

int boinc_get_opencl_ids(
    int argc, char** argv, int type, cl_device_id* device, cl_platform_id* platform
);

This returns the OpenCL platform and device IDs for the GPU that your app should use. Pass the argc and argv your application receives from the BOINC client. The third argument type should specify the vendor of the desired GPU and can be one of the following:

Symbol value
PROC_TYPE_NVIDIA_GPU 1
PROC_TYPE_AMD_GPU 2
PROC_TYPE_INTEL_GPU 3

With BOINC Clients version 7.0.12 or later, the first 3 arguments will be ignored and all data will be taken from the init_data.xml file in the slot directory. The first 3 arguments allow this to work with older BOINC Clients. If your OpenCL app can use OpenCL-capable GPUs from any vendor, you can pass 0 for the third argument (type); if you pass a type value of 0, the type will be taken from the gpu_type field of the init_data.xml file on newer clients, but will return an error code of CL_INVALID_DEVICE_TYPE on older clients.

This function is in the library boinc/api/libboinc_opencl.a (on Macs: boinc/mac_build/build/Deployment/libboinc_opencl.a). As an alternative to linking the library, you can add the file boinc/api/libboinc_opencl.cpp to your source files when building your project application.

Scheduler requirements

The following plan classes are defined in sched/sched_customize.cpp:

opencl_nvidia_101

For app versions that run on NVIDIA GPUs using OpenCL 1.1, using at most 256MB of GPU RAM.

opencl_ati_101

For app versions that run on ATI GPUs using OpenCL 1.1, using at most 256MB of GPU RAM.

You can modify sched_customize.cpp to change these parameters or add your own plan classes.