【发布时间】:2015-05-01 13:28:41
【问题描述】:
我正在编写一段 CUDA C++ 代码,并且基本上需要每个线程通过行优先和列优先访问全局内存中的二维数组。具体来说,我需要每个线程块:
- 生成它自己的一维数组(比如说,gridDim # of elements)
- 将这些写入全局内存
- 读取每个写入数组的第 n 个元素,其中 n 是块 ID。
在我看来,只有写入或读取可以合并,另一个将访问每个元素的单独缓存行(并且执行得非常糟糕)。我读过纹理内存有二维缓存机制,但不知道它是否可以用来改善这种情况。
顺便说一句,我使用的是 GTX 770,因此它是具有计算能力 3.0 的 GK104 Kepler 卡。
任何帮助或建议将不胜感激!谢谢。
【问题讨论】:
-
有一个使用共享内存的选项,但实施起来很困难,并不适合所有应用程序。能否请您说一下您正在研究的方法是什么?
-
我正在对 GPU 上的算法进行一些研究。我正在研究搜索/排序算法并尝试优化当前的前缀总和部分(以避免使用原子)。我想要完成的本质上是一个全局内存转置,以便每个块从每个其他块中获取 1 个元素。这将让我以合并模式读写,并对每个块的元素执行前缀求和。
标签: c++ arrays cuda gpgpu nvidia