CL_DEVICE ...参数的含义

时间:2018-08-08 10:02:00

标签: c++ opencl gpu

我实现了一个函数,该函数可以检索一些与我的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是因为对我来说,给定名称,这应该在工作项中以某种方式涵盖,所以

  1. Parallel compute unitsParallel compute units)是什么意思?
  2. 以上参数与CL_DEVICE_MAX_COMPUTE_UNITS有何关系?

还有一个问题

Work itemsAddress bits之间有任何关系吗?

谢谢

1 个答案:

答案 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值