1

我的不同内核将使用一些常量数据。为了优化我的代码,我正在考虑使用纹理内存而不是常量内存,因为每个线程将加载不同的数据(尽管每个块都相同)。

对于每个线程,我的数据涉及浮点数 ( M )、大小为 3 的浮点数向量 ( K ) 或 3×3 浮点数矩阵 ( J )。

我至少有两个选择:

  • M存储在一维数组中,将K存储在 2D 数组中,将J存储在 3D 数组中。
  • 通过一些映射将MKJ存储在线性内存中。

由于线程数非常少(N = 32),哪种解决方案最好?它是等效的,还是tex1Dfetchtex2Dand更快tex3D?我不需要CUDA数组带来的特性(硬件插值等),内存限制显然不是问题。

4

1 回答 1

1

您的访问模式M完美结合,因此在计算能力设备的缓存层次结构的帮助下全局内存 > 2.x 将为该阵列提供最佳性能。

您在 K 和 J 中具有相同的访问模式,因此访问也被合并。因此,没有理由不使用全局内存并获得最佳性能

正如您所评论的那样,内存限制显然不是问题,我知道数组的大小会很小,因此您会期望缓存层次结构的良好行为。

如果您想更进一步,您可以将K数组复制到 1D 纹理内存并比较两种方法的性能。

于 2012-12-13T17:53:04.250 回答