0

假设我在 CUDA 下的 C++ 中有一个二维数组,存储在共享内存中,如下所示:

__shared__ float arr[4][4]; // C++ has a default row-major ordering

默认情况下,C++ 将以arr行优先格式对元素进行排序。

也就是说,它将分配一个连续的内存块并存储像这样的元素 (0,0), (0,1), (0,2), (0,3), (1,0), (1,1 ), ... 等等...

有没有办法告诉 C++/CUDA 编译器以列优先顺序排列它?

4

2 回答 2

2

你为什么不直接交换你正在使用的索引呢?

而不是使用arr[x][y]use arr[y][x]

有趣的是你为什么要这样做。也许使用缓存内存可能会有所帮助,但如果没有详细信息,我无法确定。

希望它有所帮助。

于 2012-09-27T15:08:13.240 回答
1

转置矩阵。arr[4][4]表示这arr是一个由 4 个大小为 4 的数组组成的数组。以“行优先”顺序存储值的原因是arr[0],例如,必须给我们指向这四个数组中第一个数组的指针,以及单个数组的元素应该放置在连续的内存位置,以便可以通过将索引添加到唯一标识符来单独引用它们。

于 2012-09-27T15:07:43.133 回答