这段时间一直在进行OpenCL方面的学习。感觉OpenCL是一个非常厉害的程序开发体系,他的作用就是使用同一套语言开发出来的程序在不同的平台上都可以跑。
OpenCL现在主要用于并行开发,并行的意义就是很多处理器拿着不同的原材料做完全相同的处理得到不同的结果。这个“同时”的好处在于,由于处理过程完全相同,那么我直接将任务分发给所有可以执行这项任务的单元,这样所有人都可以独立地进行处理。背景理解可以参考这边文章:链接
OpenCL运行包含2个环境(也叫2个端):主机端(host)和设备端(device)。
host端绝大部分情况就是我们所说的CPU;设备端则是那些支持OpenCL的设备,比如显卡、FPGA等。他们的作用分别是:主机端负责调度任务,是指挥的角色;设备则负责具体的并行处理,是劳动者的角色。
下面,我通过梳理OpenCL通用的开发流程来说明上面这些东西的意义:
(1)找平台Platform(在Host端执行)
找平台Platform基本等同于找当前Host端(装CPU的那台电脑上)有几个OpenCL开发环境,比如你有NVIDIA的CUDA环境就算一个CUDA的Platform,你有Altera的OpenCL环境就算Altera的platform。换句话说,找Platform就是找你那个支持OpenCL的设备是哪家公司的产品,基本上一家公司就算一个platform(当然也不排除1家公司多个plat