OpenCL使用设备对象抽象硬件。每个设备对象由不同的计算单元组成,每个计算单元具有一定数量的工作元素。
这3个概念如何在物理上进行映射?
我们以一张显卡为例。
这是我的猜测:
设备 - >显卡
计算单位 - >图形卡核心
工作要素 - >图形卡核心(流核心)内的矢量alus单细胞
我从不同的OpenCL教程中读到的是,我们应该将我们的问题数据划分为1,2或3维空间,然后将一部分n维数据分配给每个工作组。然后,在单个计算单元内的流核心中执行工作组。
如果我的显卡有4个计算单元,这是否意味着我最多可以拥有4个工作组? 我的图形卡中的每个计算单元都有48个流核心。这又意味着我应该创建最多48个元素的工作组吗? 48的倍数?
我想OpenCL有一些调度程序允许我们使用比可用硬件资源更多的工作组和线程,但我认为真正的并行性是按照我上面所述完成的。
我的OpenCL范式是否合适?