- CLHandleType
- CLGetInfoInteger
- CLGetInfoString
- CLContextCreate
- CLContextFree
- CLGetDeviceInfo
- CLProgramCreate
- CLProgramFree
- CLKernelCreate
- CLKernelFree
- CLSetKernelArg
- CLSetKernelArgMem
- CLSetKernelArgMemLocal
- CLBufferCreate
- CLBufferFree
- CLBufferWrite
- CLBufferRead
- CLExecute
- CLExecutionStatus
使用OpenCL工作
OpenCL 程序用来执行支持OpenCL 1.1或更高版本视频卡上的计算. 现代视频卡包含数百个小型专用处理器,可以同时与输入数据流进行简单的数学运算. OpenCL语言组织了并行计算并且为一类特定任务提供了更快的速度.
在一些图形卡中默认禁止处理double类型数字。这可能会导致编译错误5105。若要启用支持double类型数字,请添加以下指令到您的OpenCL程序:#pragma OPENCL EXTENSION cl_khr_fp64 : enable。但是,如果图形卡不支持double型,启用该指令则不会有帮助。
建议以单独的CL文件编写OpenCL源代码,稍后将其包含进使用资源变量MQL5程序。
处理OpenCL程序中的错误
若要获取有关OpenCL程序中最后一个错误的信息,请使用允许获取错误代码和文本描述的CLGetInfoInteger和CLGetInfoString函数。
OpenCL最后错误代码:要获取最新OpenCL错误,请调用CLGetInfoInteger,同时忽略handle参数(可以设置为零)。错误描述:https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS。
对于未知错误代码,返回"unknown OpenCL error N"字符串,这里N为错误代码。例如:
//--- 获取最后一个错误代码时忽略第一个'handle'参数
|
OpenCL错误的文本描述:要获取最新OpenCL错误,请调用CLGetInfoString。错误代码应传递为handle参数。
错误描述:https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS。如果传递的是CL_LAST_ERROR而不是错误代码,那么函数将返回最后一个错误的描述。例如:
//--- 获取最后一个OpenCL错误的代码
|
到目前为止,作为错误描述,给出内部枚举的名称。您可以在这里找到它的解码:https://registry.khronos.org/OpenCL/specs/3.0-unified/html/OpenCL_API.html#CL_SUCCESS。例如,CL_INVALID_KERNEL_ARGS值表示“当某些内核参数未设置或无效时,在将内核排队时返回。”
运行OpenCL程序中的函数:
函数 |
操作 |
---|---|
返回OpenCL处理类型作为 ENUM_OPENCL_HANDLE_TYPE 详表中的某个值. |
|
为OpenCL对象或设备返回一个整数属性值 |
|
创建OpenCL背景 |
|
移除OpenCL背景 |
|
从OpenCL驱动程序接收设备属性 |
|
从源代码创建OpenCL程序 |
|
移除OpenCL程序 |
|
创建OpenCL开始函数 |
|
移除OpenCL开始函数 |
|
为OpenCL函数设置一个参数 |
|
设置OpenCL缓冲作为OpenCL函数的参数 |
|
设置本地缓冲区作为内核函数参数 |
|
创建OpenCL缓冲 |
|
删除OpenCL缓冲 |
|
写入数组到OpenCL缓冲 |
|
读取OpenCL缓冲到数组 |
|
运行OpenCL程序 |
|
返回OpenCL程序执行状态。 |
另见