【发布时间】:2012-06-03 17:03:15
【问题描述】:
我正在使用 OpenCL 并拥有 ATI 4850 卡。它有:
- CL_DEVICE_MAX_COMPUTE_UNITS:10
- CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:3
- CL_DEVICE_MAX_WORK_GROUP_SIZE:256
- CL_DEVICE_MAX_WORK_ITEM_SIZES:(256, 256, 256)
- CL_DEVICE_AVAILABLE:1
- CL_DEVICE_NAME:ATI RV770
它可以同时执行多少个任务?
是 CL_DEVICE_MAX_COMPUTE_UNITS * CL_DEVICE_MAX_WORK_ITEM_SIZES = 2560 吗?
更具体地说:单核处理器一次只能执行一个任务,双核可以执行2个任务……我的GPU一次可以执行多少个任务?或者换一种说法:我的 GPU 有多少个处理器?
【问题讨论】:
-
什么意思?一次可以执行多少个内核或GPU上可以运行多少个线程?
-
可能是内核。我查看了规范,它被称为“处理元素”。所以这个问题可以重新表述:“我的 GPU 有多少处理元素?”
-
你不能这么轻易地分辨出来。 GPU 具有多个计算单元,每个计算单元同时并行执行多个线程(“warp”或“wavefront”)。对于 nVidia,目前是 32,对于 ATI 64。我不确定是否有与翘曲尺寸相关的 CL 上限。此外,每个计算单元可以有一个未知数量的运行中线程(nVidia 在某些文档中说 1024),当由于某种原因扭曲阻塞时,这些线程是硬件调度的。假设数字相似,这将使您的 GPU 的线程数接近 320,000 个。
-
除此之外,OpenCL 带来的关于工作项大小和组大小的各种限制,在我看来,这在黑魔法的意义上解释得很多(至少我不能完全了解调整参数的确切作用以及每个参数与实际硬件的关系——这对我来说是一种猜测)。也许那是因为 OpenCL 更加抽象且独立于硬件。或者也许是因为我太愚蠢了,无法理解文档:-)
标签: opencl