如果我启动一个2D内核,其中每个线程在2D数组的单个元素上运行,那么访问该元素的哪种方式会被合并?是数组[x] [y]还是数组[y] [x]?
答案 0 :(得分:8)
如果x = threadIdx.x
和y = threadIdx.y
则
array[y][x]
将合并但
array[x][y]
不。原因是C使用row-major order,即最后一个索引是运行速度最快的索引,因此array[y][x]
和array[y][x+1]
会转到内存中的相邻位置。并且CUDA块中的线程被安排为threadIdx.x
运行最快,然后是y,最后是z。