我实现了一个函数,该函数可以检索一些与我的opencl设备有关的信息,特别是我有此设备:
URLSessionTask.cancel
我需要确保我了解其中一些(特别是工作组/项目)。
鉴于我有1. Vendor NVIDIA Corporation
1. Device: GeForce GTX 1070
1.1 Hardware Version: OpenCL 1.2 CUDA
1.2 Software Version: 391.24
1.3 OpenCL C version: OpenCL C 1.2
1.4 Address bits: 64
1.5 Max Work Item Dimensions: 3
1.6 Work Item Sizes 1024 1024 64
1.7 Work group size: 1024
1.8 Parallel compute units 15
,这意味着在实例化内核时,我可以使用总计Work Item Sizes : 1024 1024 64
个工作项,这是正确的吗?我猜2^26
表示每个工作组的最大数量(以防我需要起诉壁垒等,我认为此信息很有用)。不确定Work group size : 1024
是因为对我来说,给定名称,这应该在工作项中以某种方式涵盖,所以
Parallel compute units
(Parallel compute units
)是什么意思?CL_DEVICE_MAX_COMPUTE_UNITS
有何关系?还有一个问题
Work items
和Address bits
之间有任何关系吗?
谢谢
答案 0 :(得分:1)
并行计算单元是什么意思
在CPU上,这是逻辑处理器的数量。在NVidias上,这是“流式多处理器”的数量,在AMD GPU上,它们实际上称为“计算单元”。 在OpenCL中使用它们的要点是,对于某些设备,您可以按它们的计算单元“精雕细琢”,并在这些单元上独立启动内核。
鉴于我有工作项大小:1024 1024 64,这意味着当我实例化内核时,我总共可以使用2 ^ 26个工作项,这是正确的吗?
不正确。这些是每个维度的最大值。 工作组大小限制是每个维度的最大乘积。 IOW,如果最大“工作组大小”为1024,则可以启动例如[1024,1,1]或[128,8,1]或[4,16,4],但是启动[2000,1,1]或[100,100,1]将失败。继续尝试。
之所以这么小限制,通常与障碍有关,而且与本地内存大小有关(在大多数GPU中相对较小)。
此外,clEnqueueNDRangeKernel:的文档中对此进行了解释
local_work_size
指向一个work_dim无符号值数组,该值描述了 组成工作组的工作项目(也称为 工作组),将执行kernel指定的内核。总数 工作组中工作项的数量计算为local_work_size [0] * ... * local_work_size [work_dim-1]。 工作项总数 工作组中的值必须小于或等于CL_DEVICE_MAX_WORK_GROUP_SIZE值