你能改变在C ++ / CUDA中排序2d数组的方式吗?

时间:2012-09-27 14:56:42

标签: c++ arrays matrix cuda

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

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

默认情况下,C ++会以{-1}}的形式对行主格式中的元素进行排序。

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

有没有办法告诉C ++ / CUDA编译器按列主要顺序排列?

2 个答案:

答案 0 :(得分:2)

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

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

有趣的是你想​​要这样做的原因。也许使用缓存可能会有所帮助,但如果没有细节,我无法确定。

希望有所帮助。

答案 1 :(得分:1)

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