GPU设备上可以同时执行多少任务?

时间:2011-06-21 07:21:45

标签: opencl

我正在使用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有多少个处理器?

2 个答案:

答案 0 :(得分:6)

RV770具有10个SIMD内核,每个内核由16个着色器内核组成,每个内核由5个ALU组成(VLIW5架构)。总共800个ALU可以进行并行计算。我认为没有办法从OpenCL中获取所有这些数字。我也不确定你会把它等同于CPU核心。也许是着色器核心?你可以阅读VLIW at Wikipedia。这是一个有趣的设计。

如果你说CPU核心在任何给定时间只执行一个“任务”,即使它有多个并行工作的ALU,那么我想你可以说RV770将处理160个任务。但由于不同芯片的工作方式存在差异,我认为“核心”和“任务”很难定义。具有超线程的CPU甚至可以同时执行两组代码。使用OpenCL我不相信在任何给定时间都可以执行多个内核 - 除非最近的驱动程序更新已经改变了。

无论如何,我认为以最佳性能提供GPU的工作更为重要。不幸的是,除了试验之外,没有办法找到最好的工作组规模。至少不是我所知道的。一个帮助是,如果驱动程序支持OpenCL 1.1,您可以查询CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE并将您的工作大小设置为其中的倍数。否则,获得64的倍数可能是一个安全的赌注。

答案 1 :(得分:1)

GPU工作最终成为波前/扭曲。

使用GPU进行UI和计算有效地将它用于许多程序,而不会意识到它。许多用于GUI绘图,以及您正在执行的任何计算内核。快速OpenCL客户端是异步的,并且与多个工作实例重叠,因此它们不会受到延迟限制。预计您将并行使用多个内核。

除了限制可以使用的缓冲区数量的内存之外,似乎没有“硬”限制。在UI和计算机上使用相同的GPU时,必须限制工作。根据我的经验,发出太多工作将导致GUI和/或计算内核的匮乏。似乎没有任何方法可以确保您不会出现饥饿(在工作项开始实际执行之前的长时间延迟)。一些工作项可能会持续很长时间(在坏情况下持续10秒或更长时间),而GPU会执行其他工作项。我推测根据数据可用性将项目分派到管道,很少或根本没有任何东西可以防止工作项目的饥饿。

通过让GPU几乎/有时耗尽其工作队列,减少GUI绘制工作项目的饥饿延迟,限制前进工作排队的次数大大提高了GUI响应能力。