假设我在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编译器按列主要顺序排列?
答案 0 :(得分:2)
为什么不直接交换正在使用的索引?
而不是使用arr[x][y]
使用arr[y][x]
。
有趣的是你想要这样做的原因。也许使用缓存可能会有所帮助,但如果没有细节,我无法确定。
希望有所帮助。
答案 1 :(得分:1)
转置矩阵。 arr[4][4]
表示arr
是一个包含4个大小为4的数组的数组。以“row-major”顺序存储值的原因是arr[0]
,例如,必须给我们指向这四个数组中第一个的指针,单个数组的元素应放在连续的内存位置,以便通过向唯一标识符添加索引来单独引用它们。