2

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

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

在这里,我说的是针对大型数据集的集合启动了 1000 次的内核,因此确实在努力提高性能。

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

4

1 回答 1

1

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

我的限制因素是什么?

基本上你有两个选择:

  • 您的内核受内存限制-这意味着您从/向全局内存读取/写入(通常)很多和/或与已访问的内存相比具有少量计算->您不必担心此类优化

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

知道哪个是运行探查器和运行内核分析的最佳选择。

于 2013-05-18T07:12:12.700 回答