# third_party_opencl-icd-loader **Repository Path**: openharmony-sig/third_party_opencl-icd-loader ## Basic Information - **Project Name**: third_party_opencl-icd-loader - **Description**: KhronosGroup OpenCL ICD Loader 用于提供加载不同OpenCL驱动的接口层。 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: https://gitee.com/openharmony-sig/third_party_opencl-icd-loader - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-12-12 - **Last Updated**: 2025-05-07 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 🚨 **重要提示 | IMPORTANT** > > **⚠️ 此代码仓已归档。新地址请访问 [third_party_opencl-icd-loader](https://gitcode.com/openharmony-sig/third_party_opencl-icd-loader)。| ⚠️ This repository has been archived. For the new address, please visit [third_party_opencl-icd-loader](https://gitcode.com/openharmony-sig/third_party_opencl-icd-loader).** > --- > # OpenCLTM ICD Loader 此仓库包含Khronos官方OpenCL ICD Loader的源代码和测试代码。 ## 引言 OpenCL定义了*Installable Client Driver*(ICD)机制,允许开发人员根据*Installable ClientDriver*加载程序(ICD 加载程序)构建OpenCL应用程序,而不是链接特定的OpenCL驱动实现。 ICD 加载程序负责: * 导出OpenCL API符号信息 * 枚举所有支持ICD Loader扩展OpenCL驱动 * 将OpenCL API调用转发到正确的驱动实现 此仓库包含Khronos官方OpenCL ICD Loader的源代码和测试代码。 请注意,此仓库仅包好OpenCL加载程序,但不包含OpenCL具体驱动实现。 您需要为支持OpenCL ICD扩展(`cl_khr_icd`)的OpenCL设备获取并安装OpenCL驱动实现,才能使用OpenCL ICD Loader运行OpenCL应用程序。 OpenCL扩展规范中描述了OpenCL可安装客户端驱动程序扩展(`cl_khr_icd`),该规范可在[Khronos OpenCL注册表]中找到(https://www.khronos.org/registry/opencl/)。 ## 构建指导 OpenCL-ICD-Loader依赖OpenCL-Headers,关于OpenCL-Headers的具体介绍详见:https://gitee.com/openharmony/third_party_opencl-headers 1、OpenCL-Headers依赖 OpenCL-ICD-Loader组件已经通过`public_deps`包含了对OpenCL Header的依赖,您可以直接依赖OpenCL-ICD-Loader组件,无需单独依赖OpenCL-Header ``` public_deps = [ "//third_party/opencl-headers:opencl_headers" ] ``` 2、添加对OpenCL-ICD-Loader的依赖 OpenCL-ICD-Loader提供了`inner_kis`接口,您可以通过如下方式添加依赖 ``` external_deps = [ "opencl-icd-loader:libopencl" ] ``` 同时您需要在组件的bundle.json中添加deps申明 ``` "deps": { "components": [ "opencl-icd-loader" ] } ``` 3、OpenCL API使用 您在正确设置对OpenCL-ICD-Loader的依赖后,只需要在代码中包含对应的头文件,即可直接调用OpenCL的正式API,Loader本身无需任何初始化处理。 一个简单的OpenCL程序如下: ``` #include //注意,OpenCL头文件路径需要按照CL/*.h的格式包含 cl_platform_id platform_id; cl_device_id device_id; cl_int err = clGetPlatformIDs(1, &platform_id, NULL); if (err != CL_SUCCESS) { return err; } err = clGetDeviceIDs(platform_id, CL_DEVICE_TYPE_GPU, 1, &device_id, NULL); if (err != CL_SUCCESS) { return err; } cl_context context = clCreateContext(0, 1, &device_id, NULL, NULL, &err); if (context == NULL || err != CL_SUCCESS) { return err; } cl_command_queue queue = clCreateCommandQueueWithProperties(context, device_id, 0, &err); if (queue == NULL || err != CL_SUCCESS) { return err; } cl_program program = clCreateProgramWithSource(context, 1, &program_source, NULL, &err); if (program == NULL || err != CL_SUCCESS) { return err; } cl_kernel kernel = clCreateKernel(program, "kernel_name", &err); if (kernel == NULL || err != CL_SUCCESS) { return err; } // set arg to kernel ... err = clEnqueueNDRangeKernel(queue, kernel, work_dim, NULL, global, local, 0, NULL, NULL); if (err != CL_SUCCESS) { return err; } clFinish(queue); // release all opencl object ... ``` ## OpenCL使用文档 API官方文档 https://registry.khronos.org/OpenCL/ API详细定义 https://registry.khronos.org/OpenCL/sdk/3.0/docs/man/html/ API一张图的使用说明 https://www.khronos.org/files/opencl30-reference-guide.pdf ## License 见 [LICENSE](LICENSE). --- OpenCL and the OpenCL logo are trademarks of Apple Inc. used by permission by Khronos.