CUDA 2D内核合并内存

Pet*_*ter 1 cuda

如果我启动一个2D内核,其中每个线程在2D数组的单个元素上运行,那么访问该元素的方式是合并的?是数组[x] [y]还是数组[y] [x]?

ter*_*era 8

如果x = threadIdx.xy = threadIdx.y

array[y][x]
Run Code Online (Sandbox Code Playgroud)

会合并但是

array[x][y]
Run Code Online (Sandbox Code Playgroud)

不.原因是C使用行主顺序,即最后一个索引是运行速度最快的索引,array[y][x]然后array[y][x+1]转到内存中的相邻位置.并且CUDA块中的线程被安排为threadIdx.x运行最快,然后是y,最后是z.