API支持情况
1. 版本信息¶
根据配置文件和 clinfo 输出,你编译的 PoCL 版本信息,使用的是llvm17:
- PoCL 版本: 5.0
- 平台 OpenCL 版本: OpenCL 3.0 (目标平台版本)
- 设备 OpenCL 版本: OpenCL 3.0
- OpenCL C 版本: OpenCL C 1.2(主要支持)+ OpenCL C 3.0(部分特性)
- 设备类型: CPU (HOST device)
OpenCL 1.0 API (2009年12月发布) - 基础核心¶
平台层 API (2个)¶
clGetPlatformIDs- 获取可用平台列表clGetPlatformInfo- 查询平台信息
设备 API (2个)¶
clGetDeviceIDs- 获取设备列表clGetDeviceInfo- 查询设备信息
上下文 API (4个)¶
clCreateContext- 创建 OpenCL 上下文clCreateContextFromType- 根据设备类型创建上下文clRetainContext- 增加上下文引用计数clReleaseContext- 减少上下文引用计数clGetContextInfo- 查询上下文信息
命令队列 API (4个)¶
clCreateCommandQueue- 创建命令队列clRetainCommandQueue- 增加命令队列引用计数clReleaseCommandQueue- 减少命令队列引用计数clGetCommandQueueInfo- 查询命令队列信息
内存对象 API (11个)¶
clCreateBuffer- 创建缓冲区对象clRetainMemObject- 增加内存对象引用计数clReleaseMemObject- 减少内存对象引用计数clGetMemObjectInfo- 查询内存对象信息clGetImageInfo- 查询图像对象信息clCreateImage2D- 创建2D图像对象clCreateImage3D- 创建3D图像对象clGetSupportedImageFormats- 查询支持的图像格式clSetMemObjectDestructorCallback- 设置内存对象析构回调clEnqueueReadBuffer- 从缓冲区读取数据到主机clEnqueueWriteBuffer- 从主机写入数据到缓冲区
采样器 API (3个)¶
clCreateSampler- 创建采样器对象clRetainSampler- 增加采样器引用计数clReleaseSampler- 减少采样器引用计数clGetSamplerInfo- 查询采样器信息
程序对象 API (7个)¶
clCreateProgramWithSource- 从源代码创建程序对象clCreateProgramWithBinary- 从二进制创建程序对象clRetainProgram- 增加程序对象引用计数clReleaseProgram- 减少程序对象引用计数clBuildProgram- 编译程序对象clGetProgramInfo- 查询程序对象信息clGetProgramBuildInfo- 查询程序编译信息
内核对象 API (6个)¶
clCreateKernel- 创建内核对象clCreateKernelsInProgram- 创建程序中的所有内核clRetainKernel- 增加内核引用计数clReleaseKernel- 减少内核引用计数clSetKernelArg- 设置内核参数clGetKernelInfo- 查询内核信息clGetKernelWorkGroupInfo- 查询内核工作组信息
执行命令 API (13个)¶
clEnqueueNDRangeKernel- 执行 N 维内核clEnqueueTask- 执行单工作项内核clEnqueueNativeKernel- 执行本地 C/C++ 函数clEnqueueCopyBuffer- 复制缓冲区clEnqueueCopyImage- 复制图像clEnqueueCopyImageToBuffer- 图像复制到缓冲区clEnqueueCopyBufferToImage- 缓冲区复制到图像clEnqueueMapBuffer- 映射缓冲区到主机内存clEnqueueMapImage- 映射图像到主机内存clEnqueueUnmapMemObject- 取消内存对象映射clEnqueueReadImage- 从图像读取数据clEnqueueWriteImage- 写入数据到图像clEnqueueMarker- 在队列中插入标记
同步 API (5个)¶
clEnqueueWaitForEvents- 等待事件完成clEnqueueBarrier- 插入屏障命令clWaitForEvents- 等待事件列表完成clGetEventInfo- 查询事件信息clRetainEvent- 增加事件引用计数clReleaseEvent- 减少事件引用计数
性能分析 API (1个)¶
clGetEventProfilingInfo- 查询事件性能分析信息
刷新和完成 API (2个)¶
clFlush- 刷新命令队列clFinish- 等待命令队列完成
扩展 API (2个)¶
clGetExtensionFunctionAddress- 获取扩展函数地址clUnloadCompiler- 卸载 OpenCL 编译器
OpenCL 1.1 API (2011年6月发布) - 增强功能¶
设备 API (1个)¶
clCreateSubDevices- 创建子设备 (注: 实际是 1.2 引入)
内存对象 API (2个)¶
clCreateSubBuffer- 创建子缓冲区clEnqueueReadBufferRect- 矩形区域读取缓冲区clEnqueueWriteBufferRect- 矩形区域写入缓冲区clEnqueueCopyBufferRect- 复制缓冲区矩形区域
事件 API (2个)¶
clCreateUserEvent- 创建用户事件clSetUserEventStatus- 设置用户事件状态clSetEventCallback- 设置事件回调函数
OpenCL 1.2 API (2012年11月发布) - 重大更新¶
设备 API (2个)¶
clRetainDevice- 增加设备引用计数clReleaseDevice- 减少设备引用计数
图像 API (1个)¶
clCreateImage- 创建图像对象 (统一接口)
程序对象 API (2个)¶
clCompileProgram- 编译程序clLinkProgram- 链接程序clUnloadPlatformCompiler- 卸载平台编译器clCreateProgramWithBuiltInKernels- 从内置内核创建程序
内核对象 API (2个)¶
clGetKernelArgInfo- 查询内核参数信息clEnqueueFillBuffer- 填充缓冲区clEnqueueFillImage- 填充图像clEnqueueMigrateMemObjects- 迁移内存对象
扩展 API (1个)¶
clGetExtensionFunctionAddressForPlatform- 获取平台特定扩展函数地址
OpenCL 2.0 API (2013年11月发布) - 现代化特性¶
命令队列 API (1个)¶
clCreateCommandQueueWithProperties- 使用属性创建命令队列
内存对象 API - SVM (共享虚拟内存) (7个)¶
clSVMAlloc- 分配 SVM 内存clSVMFree- 释放 SVM 内存clEnqueueSVMFree- 异步释放 SVM 内存clEnqueueSVMMap- 映射 SVM 内存clEnqueueSVMUnmap- 取消 SVM 内存映射clEnqueueSVMMemcpy- 复制 SVM 内存clEnqueueSVMMemFill- 填充 SVM 内存clSetKernelArgSVMPointer- 设置内核 SVM 指针参数
Pipe 对象 API (2个)¶
clCreatePipe- 创建管道对象clGetPipeInfo- 查询管道信息
内核执行 API (2个)¶
clSetKernelExecInfo- 设置内核执行信息clEnqueueSVMMigrateMem- 迁移 SVM 内存
OpenCL 2.1 API (2015年11月发布) - SPIR-V 支持¶
程序对象 API (3个)¶
clCreateProgramWithIL- 从中间语言 (SPIR-V) 创建程序clCloneKernel- 克隆内核对象clGetKernelSubGroupInfo- 查询子组信息clEnqueueSVMMemFill- SVM 内存填充 (已在 2.0)
设备和主机定时器 API (2个)¶
clGetDeviceAndHostTimer- 获取设备和主机时间戳clGetHostTimer- 获取主机时间戳
OpenCL 2.2 API (2017年5月发布) - 可编程性增强¶
程序对象 API (1个)¶
clSetProgramReleaseCallback- 设置程序释放回调clSetProgramSpecializationConstant- 设置程序特化常量
OpenCL 3.0 API (2020年9月发布) - 模块化和向后兼容¶
上下文 API (1个)¶
clSetContextDestructorCallback- 设置上下文析构回调clSetDefaultDeviceCommandQueue- 设置默认设备命令队列
扩展 API - Khronos 官方扩展¶
ICD 扩展 (cl_khr_icd)¶
clIcdGetPlatformIDsKHR- ICD 获取平台 ID
GL 互操作扩展 (cl_khr_gl_sharing)¶
clCreateFromGLTexture- 从 OpenGL 纹理创建内存对象clCreateFromGLTexture2D- 从 OpenGL 2D 纹理创建 (已弃用)clCreateFromGLTexture3D- 从 OpenGL 3D 纹理创建 (已弃用)clEnqueueAcquireGLObjects- 获取 GL 对象clEnqueueReleaseGLObjects- 释放 GL 对象clGetGLContextInfoKHR- 查询 GL 上下文信息
EGL 互操作扩展 (cl_khr_egl_image)¶
clCreateFromEGLImageKHR- 从 EGL 图像创建内存对象clEnqueueAcquireEGLObjectsKHR- 获取 EGL 对象clEnqueueReleaseEGLObjectsKHR- 释放 EGL 对象
命令缓冲区扩展 (cl_khr_command_buffer) - 实验性¶
clCreateCommandBufferKHR- 创建命令缓冲区clRetainCommandBufferKHR- 增加命令缓冲区引用计数clReleaseCommandBufferKHR- 减少命令缓冲区引用计数clFinalizeCommandBufferKHR- 完成命令缓冲区clEnqueueCommandBufferKHR- 执行命令缓冲区clCommandBarrierWithWaitListKHR- 命令缓冲区屏障clCommandCopyBufferKHR- 命令缓冲区复制缓冲区clCommandCopyBufferRectKHR- 命令缓冲区复制缓冲区矩形clCommandCopyBufferToImageKHR- 命令缓冲区缓冲区到图像clCommandCopyImageKHR- 命令缓冲区复制图像clCommandCopyImageToBufferKHR- 命令缓冲区图像到缓冲区clCommandFillBufferKHR- 命令缓冲区填充缓冲区clCommandFillImageKHR- 命令缓冲区填充图像clCommandNDRangeKernelKHR- 命令缓冲区执行内核clCommandSVMMemcpyKHR- 命令缓冲区 SVM 内存复制clCommandSVMMemFillKHR- 命令缓冲区 SVM 内存填充clGetCommandBufferInfoKHR- 查询命令缓冲区信息
扩展 API - Intel 扩展¶
统一共享内存 USM (cl_intel_unified_shared_memory)¶
clMemAllocINTEL- Intel USM 内存分配 (主机/设备/共享)clMemFreeINTEL- Intel USM 内存释放clGetMemAllocInfoINTEL- 查询 USM 内存信息clSetKernelArgMemPointerINTEL- 设置内核 USM 指针参数clEnqueueMemcpyINTEL- USM 内存复制clEnqueueMemFillINTEL- USM 内存填充clEnqueueMigrateMemINTEL- USM 内存迁移clEnqueueMemAdviseINTEL- USM 内存建议
扩展 API - PoCL 特有扩展¶
内容大小扩展 (cl_pocl_content_size)¶
clSetContentSizeBufferPoCL- 设置缓冲区内容大小 (PoCL 特有)
完整 API 统计总结¶
| OpenCL 版本 | 引入的核心 API 数量 | 累计总数 |
|---|---|---|
| OpenCL 1.0 | 66 个 | 66 |
| OpenCL 1.1 | 6 个 | 72 |
| OpenCL 1.2 | 14 个 | 86 |
| OpenCL 2.0 | 11 个 | 97 |
| OpenCL 2.1 | 5 个 | 102 |
| OpenCL 2.2 | 2 个 | 104 |
| OpenCL 3.0 | 2 个 | 106 |
| Khronos 扩展 | 27 个 | 133 |
| Intel 扩展 | 8 个 | 141 |
| PoCL 扩展 | 1 个 | 142 |
| 其他实现 | 27 个 | 169 |
支持的 OpenCL C 语言特性¶
根据 clinfo 输出,你的 PoCL 支持以下 OpenCL C 3.0 特性:
✅ __opencl_c_3d_image_writes - 3D 图像写入 ✅ __opencl_c_images - 图像支持 ✅ __opencl_c_atomic_order_acq_rel - 原子操作获取-释放顺序 ✅ __opencl_c_atomic_order_seq_cst - 原子操作顺序一致性 ✅ __opencl_c_atomic_scope_device - 设备范围原子操作 ✅ __opencl_c_atomic_scope_all_devices - 所有设备范围原子操作 ✅ __opencl_c_program_scope_global_variables - 程序范围全局变量 ✅ __opencl_c_generic_address_space - 通用地址空间 ✅ __opencl_c_subgroups - 子组支持 ✅ __opencl_c_read_write_images - 读写图像 ✅ __opencl_c_fp16 - 半精度浮点 ✅ __opencl_c_fp64 - 双精度浮点 ✅ __opencl_c_int64 - 64 位整数 ✅ __opencl_c_ext_fp32_global_atomic_add - FP32 全局原子加法 ✅ __opencl_c_ext_fp32_local_atomic_add - FP32 局部原子加法 ✅ __opencl_c_ext_fp32_global_atomic_min_max - FP32 全局原子最小/最大 ✅ __opencl_c_ext_fp32_local_atomic_min_max - FP32 局部原子最小/最大 ✅ __opencl_c_ext_fp64_global_atomic_add - FP64 全局原子加法 ✅ __opencl_c_ext_fp64_local_atomic_add - FP64 局部原子加法 ✅ __opencl_c_ext_fp64_global_atomic_min_max - FP64 全局原子最小/最大 ✅ __opencl_c_ext_fp64_local_atomic_min_max - FP64 局部原子最小/最大
支持的设备扩展¶
你的 PoCL 编译版本支持以下扩展:
cl_khr_byte_addressable_store- 字节可寻址存储cl_khr_global_int32_base_atomics- 全局 32 位基础原子操作cl_khr_global_int32_extended_atomics- 全局 32 位扩展原子操作cl_khr_local_int32_base_atomics- 局部 32 位基础原子操作cl_khr_local_int32_extended_atomics- 局部 32 位扩展原子操作cl_khr_3d_image_writes- 3D 图像写入cl_khr_command_buffer(v0.9.4) - 命令缓冲区 (实验性)cl_khr_subgroups- 子组cl_khr_subgroup_ballot- 子组投票cl_khr_subgroup_shuffle- 子组洗牌cl_khr_spir- SPIR 支持cl_khr_il_program- IL 程序 (SPIR-V)cl_khr_fp16- 半精度浮点cl_khr_fp64- 双精度浮点cl_khr_int64_base_atomics- 64 位基础原子操作cl_khr_int64_extended_atomics- 64 位扩展原子操作cl_intel_unified_shared_memory- Intel USMcl_intel_subgroups- Intel 子组cl_intel_required_subgroup_size- Intel 子组大小cl_ext_float_atomics- 浮点原子操作cl_pocl_pinned_buffers- PoCL 固定缓冲区cl_pocl_content_size- PoCL 内容大小