预先计算的参数有助于提高性能吗?

时间:2013-05-16 20:23:11

标签: performance cuda gpgpu

例如,如果我在m x n矩阵上操作,我很可能需要将mn传递给我的内核。

如果我还需要了解总分数N = m*n,我应该N作为参数传递(并消耗带宽)或计算{{ 1}}在内核本地为每个线程(并且消耗大量重复操作的处理能力,即使N只需要计算一次)?

在这里,我正在谈论为大量数据集集合启动1000次的内核,所以真的试图提升性能。

Stride是另一个例子,你在启动内核之前知道TBP和BPG,因此可以预先计算。

1 个答案:

答案 0 :(得分:1)

为了回答这个问题,你至少需要知道一件事。

我的限制因素是什么?

基本上你有两个选择:

  • 你的内核是内存绑定的 - 这意味着你可以从/向全局内存读取/写入(通常)和/或与已访问的内存相比具有少量计算 - >你不必担心这种优化

  • 你的内核是计算绑定的 - 这意味着r / w流量完全被计算次数隐藏 - >您所描述的优化可能有所帮助,但不一定

了解运行探查器和运行内核分析的最佳选择。