【问题标题】:How to ensure that my workitems are running parallel?如何确保我的工作项并行运行?
【发布时间】:2014-04-25 06:58:51
【问题描述】:

CL_DEVICE_NAME = GeForce GT 630

CL_DEVICE_TYPE = CL_DEVICE_TYPE_GPU

CL_PLATFORM_NAME:NVIDIA CUDA

size_t global_item_size = 8;
size_t local_item_size = 1;
clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &global_item_size, &local_item_size, 0, NULL, NULL);

这里不允许在内核中打印。因此,如何确保我所有的 8 个内核并行运行?

额外信息(关于我的问题): 对于内核,我将 8X8 大小的输入和输出数组作为缓冲区传递。根据工作项编号,我正在解决该行并将结果保存在输出缓冲区中。然后我正在阅读结果。

如果我正在运行 AMD 平台 SDK,我在内核中添加 print 语句

#pragma OPENCL EXTENSION cl_amd_printf : enable

因此我可以清楚地看到,如果我使用的是 4 核机器,我的前 4 个内核是并行运行的,然后其余的将并行运行,这表明它正在并行解决最大 4 个。

但是,我的 CL_DEVICE_TYPE_GPU 怎样才能看到相同的结果?

任何帮助/指针/建议将不胜感激。

【问题讨论】:

  • 您如何使用printf 验证您是否有并行执行?
  • @jprice 抱歉回复晚了。 printf 对于每 4 个项目以随机顺序出现。如果我在每个工作项中运行大函数/循环,printf 序列将类似于 (0,1,3,2,2,3,1,0,1,2,3,0 .....) 如果有的话第一个工作项完成然后它将被替换为下一个,例如 4/5/... 相应地。这是一个合适的方法吗?
  • @jprice,AMD 平台的速度提高了大约 3.5 倍。但对于 GPU,加速会有所不同。因此我需要验证有多少项目是并行进行的?

标签: parallel-processing opencl


【解决方案1】:

使用printf 根本不是确定您的代码是否实际并行执行的可靠方法。例如,您可以在单个内核上同时运行 4 个线程,并且您的 printf 语句仍然会以不确定的顺序输出,因为它们之间的 CPU 时间片。事实上,OpenCL 1.2 specification(“printf 输出同步”)的第 6.12.13.1 节明确指出,不能保证输出的写入顺序。

听起来您真正追求的是一个指标,它可以告诉您设备的使用情况,这与确定某些工作项是否实际并行执行不同。最好的方法是使用分析器,它通常包含这样的指标。不幸的是,NVIDIA 的 NVVP 不再适用于 OpenCL,所以这对您没有帮助。

在 NVIDIA 硬件上,工作组中的工作项被分成 32 个一组,称为 warp。每个 warp 都以 SIMD 方式执行,因此 warp 中的 32 个工作项以同步方式执行。您通常会在每个计算单元上驻留许多扭曲,可能来自多个工作组。计算单元将根据需要在这些 warp 之间透明地进行上下文切换,以在 warp 停止时保持处理元素忙碌。

您的简短代码 sn-p 表明您要求 8 个工作项,工作组大小为 1。我不知道这是否只是一个示例,但如果不是,那么这几乎肯定会在 GPU 上提供相当差的性能。如上所述,您确实希望工作组大小为 32 的倍数,以便 GPU 可以填充每个扭曲。此外,您将需要数百个全局大小 (NDRange) 的工作项,以便正确填充 GPU。运行这么小的问题并不能很好地表明您的 GPU 的性能。

【讨论】:

    【解决方案2】:

    如果您将足够多的工作项(至少 32 个,但最好是数千个)排队,那么您的“工作项正在并行运行”。

    您可以使用分析工具查看内核执行方式的详细信息,例如 NVIDIA 硬件上的 Parallel Nsight 或 AMD 硬件上的 CodeXL。它将告诉您有关硬件占用率和执行速度的信息。您还可以看到内存传输。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-10
      • 2015-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-08
      • 1970-01-01
      相关资源
      最近更新 更多