PyOpenCL示例-04.内存架构

Python是目前较流行的一种科学计算语言。语法简洁,上手快,易于维护的优点。但其运算速度是真心的慢。那我们能否利用Python的简洁+OpenCL的运算能力呢?答案是可以的,那就是PyOpenCL。”


>>预备知识

有一台电脑,电脑安装了N张显卡或N个CPU。我们用这台计算机对一幅三维场景进行渲染。我们把三维场景平均分成M小块,每张显卡负责渲染其中的M/N块……。

这个例子是常用三维软件的多线程渲染过程。这其实也是OpenCL的工作原理。

实物OpenCL中名称
电脑主机(Host)
显卡或CPU计算设备(Compute Device)
显卡或CPU中的独立核心计算单元(Compute Unit)
每个独立核心处理的每一个任务处理元素(Processing Element)

>>硬件结构

一台主机有多个计算设备; 一个计算设备包含多个计算单元; 多个处理元素组成一个计算单元;

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

>>内存结构

主机把要处理的数据从主机内存上传到计算设备的内存(Global/Constant Memory)。
计算设备根据任务需求分为多个工作组(Workgroup)。相当于计算单元(Compute Unit)。每个工作组有自己独立的本地内存(Local Memory)。
每个工作组内的任务又分为各个工作项(Work-Item)。相当于处理元素。每个处理元素都有属于自己的私有内存。

从上图可看到,如果某一步骤要共享数据,就要借助上一层的内存。

>>架构

我们编写的OpenCL程序就是按这个架构。

PyOpenCL示例-04.内存架构
滚动到顶部