# 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.