“Python是目前较流行的一种科学计算语言。语法简洁,上手快,易于维护的优点。但其运算速度是真心的慢。那我们能否利用Python的简洁+OpenCL的运算能力呢?答案是可以的,那就是PyOpenCL。”
>>预备知识
有一台电脑,电脑安装了N张显卡或N个CPU。我们用这台计算机对一幅三维场景进行渲染。我们把三维场景平均分成M小块,每张显卡负责渲染其中的M/N块……。
这个例子是常用三维软件的多线程渲染过程。这其实也是OpenCL的工作原理。
实物 | OpenCL中名称 |
---|---|
电脑 | 主机(Host) |
显卡或CPU | 计算设备(Compute Device) |
显卡或CPU中的独立核心 | 计算单元(Compute Unit) |
每个独立核心处理的每一个任务 | 处理元素(Processing Element) |
>>硬件结构

因此,每个计算设备每次能同时处理多少数据,与它的内存大小是有关系。
>>内存结构

计算设备根据任务需求分为多个工作组(Workgroup)。相当于计算单元(Compute Unit)。每个工作组有自己独立的本地内存(Local Memory)。
每个工作组内的任务又分为各个工作项(Work-Item)。相当于处理元素。每个处理元素都有属于自己的私有内存。
从上图可看到,如果某一步骤要共享数据,就要借助上一层的内存。
>>架构

PyOpenCL示例-04.内存架构