# libOpenCL - OCL-ICD implementation of OpenCL ICD loader - man(7) - [phpMan]

[_LIBOPENCL_(7)](https://www.chedong.com/phpMan.php/man/LIBOPENCL/7/markdown)                                                                            [_LIBOPENCL_(7)](https://www.chedong.com/phpMan.php/man/LIBOPENCL/7/markdown)

## NAME
       libOpenCL, libOpenCL.so - OCL-ICD implementation of OpenCL ICD loader

## DESCRIPTION
       libOpenCL.so is the library linked by OpenCL programs. It does not contains any OpenCL
       implementation itself, but merely act as a dispatcher to real OpenCL implementations provided
       as OpenCL Installable Client Driver (ICD). An ICD loader should be able to load ICDs provided
       by any vendors.

       According to OpenCL specifications from Khronos (see [Khronos]), the ICD Loader looks for
       files into _/etc/OpenCL/vendors_ directory and, for each file whose name ends with _.icd_, the
       ICD Loader loads with [**dlopen**(3)](https://www.chedong.com/phpMan.php/man/dlopen/3/markdown) the shared library whose name is on the first line of the
       _.icd_ file.

       Each shared library name in ".icd" files can have its path, or it can be a plain filename. In
       the latter case, the ICD shared library will be looked for into the standard dynamic library
       loader paths.

## ENVIRONMENT
       Some environment variables can be used modify the default behavior of libOpenCL.

       **OPENCL_VENDOR_PATH**
           This variable allows one to modify the default _/etc/OpenCL/vendors_ path. It is compatible
           with some other ICD loaders (but not all of them, as the variable is not part of the
           standard). Note that **$OCL_ICD_VENDORS **(see below) is used in priority if defined and not
           empty.

       **OCL_ICD_VENDORS**
           This variable allows one to change the way ICD are searched on the system. Several cases
           are considered:

            1. if **$OCL_ICD_VENDORS **is a directory path, then this path replaces the
               "/etc/OpenCL/vendors" path in the standard behavior: the loader will use the _.icd_
               files in this directory;

            2. else, if **$OCL_ICD_VENDORS **ends with _.icd_, libOpenCL.so will only load the ICD whose
               shared library name is wrote into the specified ".icd" file;

               If there is no slashes into **$OCL_ICD_VENDORS**, libOpenCL.so will first try to use
               _/etc/OpenCL/vendors/_**$OCL_ICD_VENDORS **(or **$OPENCL_VENDOR_PATH_**/_**$OCL_ICD_VENDORS **if
               **OPENCL_VENDOR_PATH **is defined). If this fail or if there are shashes, it uses
               **$OCL_ICD_VENDORS **(as a relative or absolute file name path).

            3. else libOpenCL.so will try to load **$OCL_ICD_VENDORS **as the ICD shared library itself
               (i.e. to load it directly with [**dlopen**(3)](https://www.chedong.com/phpMan.php/man/dlopen/3/markdown)).

       **OPENCL_LAYERS**
           This variable allows one to specify a colon separated list of layers to load, specifying
           their path.

       **OPENCL_LAYER_PATH**
           This variable allows one to override the default system layer search path
           (_/etc/OpenCL/layers_).

       **OCL_ICD_ASSUME_ICD_EXTENSION**
           If set to an non-empty value, contrary the Khronos specification, the loader will not
           check that the loaded ICDs declare the cl_khr_icd extension. It will also use the
           clGetPlatformInfo from the dispatch table if no such function is globally available. You
           may need to define this environment variable if you are using not (fully) compliant ICD,
           or if you are using the Intel ICD together with [**optirun**(1)](https://www.chedong.com/phpMan.php/man/optirun/1/markdown). In the latter case, a bug
           into the Intel ICD will make the application crash.

       If set to the _debug_ value, some additional messages will be printed in debug mode (see
       **OCL_ICD_DEBUG **below).

       **OCL_ICD_PLATFORM_SORT**
           Allows one to choose the way platforms are sorted when presented to programs through
           [**clGetPlatformIDs**(3)](https://www.chedong.com/phpMan.php/man/clGetPlatformIDs/3/markdown). Current provided algorithms are:

           •   **devices**: first, list platforms that support most GPU, then most CPU then most
               accelerators. If **OCL_ICD_PLATFORM_SORT **is not set or set to an unknown value, this
               algorithm is used.

           •   **none**: no sort is done and the order can change at each run.

       **OCL_ICD_DEFAULT_PLATFORM**
           Number of the platform to choose as default platform. Note that using this environment
           variable without ensuring the use of a sort algorithm for platforms is not really useful.

       **OCL_ICD_DEBUG**
           If ocl-icd has been compiled with debug support, you can set this environment variable to
           a value where each bit display some kind of informations. Defined values are:

           •   **1**: warnings (enabled by default if debug support is present and **OCL_ICD_DEBUG **is not
               set)

           •   **2**: informative messages

           •   **4**: entering/exiting for some OpenCL functions

           •   **8**: dump of the internal structure of loaded ICDs

           **OCL_ICD_DEBUG **is mainly useful for ocl-icd development itself and/or for ICD development.

## SEE ALSO
       Khronos OpenCL registry website

## AUTHOR
       **Vincent Danjean **<<Vincent.Danjean@ens-lyon.org>>
           Author.

                                             2015-06-08                                 [_LIBOPENCL_(7)](https://www.chedong.com/phpMan.php/man/LIBOPENCL/7/markdown)
