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

Dmi*_*riy 7 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有多少个处理器?

Dr.*_*ibo 7

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

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

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