为什么需要 OpenCL 和 CUDA?
当不使用异构系统架构,数据在 CPU和GPU之间的流动,会造成很大的开销。
由于CPU和GPU拥有独立的地址空间,当控制数据在CPU和GPU之间流动时, CPU代码通过系统调用向GPU发送任务,此类系统调用一般由GPU驱动程序管理,这么多的环节造成了很大的调用开销。
OpenCL 和 CUDA
1. 流程
CUDA 和 OpenCL 的开发模型基本一致,都是由 Host 和 Device 组成
- Host:CPU 和Host存储空间,串行代码
- Device: GPU 和Device存储空间,并行代码
对于异构系统,程序首先执行 Host 程序,然后由 Host 程序激活 Device 程序执行kernel,kernel 程序是指 Device 设备上执行的代码,它是直接在设备上执行,受具体设备的限制。
2. 从程序理解流程
PS:只是非常简单的对数据的理解
- 从 CPU 拷贝数据到 GPU
- 调用 kernel 来操作存储在 GPU 的数据
- 将操作结果从 GPU 拷贝至 CPU
3. OpenCL 和 CUDA 的区别
- OpenCL 是一个开源的标准,通用性好
- CUDA 只针对NVIDIA的GPU产品
CUDA 和 OpenCL 的差别主要表现在调用 Device 的 API 的差异
cl-CUDA
在通用Lisp程序中使用NVIDIA CUDA的库