OpenCL - 性能

OpenCL - Performance

我正在使用 OpenCL 并使用一个矩阵来增加它的值,我需要应用程序时间尽可能短。使用 OpenCL 提高性能的最佳方法是什么?看过一些关于数据并行和任务并行的东西,但是我不是很了解。

我正在使用 64x56 矩阵。使用任务并行性,我创建了 64 个内核函数。每列一个内核,但我认为我可以做得更好。

如果您在 GPU 上执行内核,最好让一个线程处理一项。但是,这取决于您对矩阵元素的具体操作,例如您对它们执行了多少操作。 如果你只是增加一些元素,这可能没有什么好处。

一般来说,有3种选择:

  1. 一个线程处理整个矩阵。这样就没有并行性,对GPU不利。
  2. 一个线程与一个线程一起工作 row/column。 -> 使用 64/56 线程,全局工作大小等于 64 或 56。
  3. 一个线程处理一个元素。 -> 使用了 3584 个线程,全局工作大小为 {64, 56}。

您是否尝试过只使用一个内核来处理一个元素,并为其调用 clEnqueueNDRangeKernel,全局工作大小等于 {64, 56}?它如何影响执行时间?