OpenCL程序
0. 载入opencl库 (这种方法可使得程序在编译时脱离OpenCL库)
handel = dlopen("dlOpenCL.so",其他参数); // 打开so共享库
dlsym(handel,#func_name) // 注册库内部的函数
1. 检测申请计算资源 (初始化,一般只需要执行一次)
1)获取平台 –> clGetPlatformIDs 先获取平台数量,再获取平台id列表
2)从平台中获取设备–>clGetDeviceIDs 先获取设备数量,再获取设备id列表
clGetDeviceInfo 获取设备信息(名字 版本 最大计算单元 全局内存缓冲区大小等信息)
3)创建上下文–> clCreateContext
4)创建命令队列–> clCreateCommandQueue
前面为 平台层,后面为 运行时层
5)创建缓存->clCreateBuffer
2. 拷贝主机数据到设备device clCreateBuffer
3. opencl程序编译
6)读取程序文件,创建程序–>clCreateProgramWithSource
7)编译程序–>clBuildProgram
8)创建内核–>clCreateKernel
9)为内核设置参数–>clSetKernelArg
设置 NDRange
4. 运行kernel函数
10)将内核发送给命令队列,执行内核–>clEnqueueNDRangeKernel
5. 拷贝设备上的计算结果到主机
11)获取计算结果–>clEnqueueReadBuffer
6.释放计算资源
12)释放资源–>clReleaseXX**
释放kernel核, clReleaseKernel
释放program编译程序, clReleaseProgram
释放device memory设备内存, clReleaseMemObject
释放command queue指令队列, clReleaseCommandQueue
释放context上下文环境, clReleaseContext
CUDA C加速步骤
1) 在device (也就是GPU) 上申请内存
2) 将host (也就是CPU) 上的数据拷贝到device
3) 执行CUDA kernel function
4) 将device上的计算结果传回host
5) 释放device上的内存
ref
https://blog.youkuaiyun.com/RuanJian_GC/article/details/132570906