如果我启动一个2D内核,其中每个线程在2D数组的单个元素上运行,那么访问该元素的方式是合并的?是数组[x] [y]还是数组[y] [x]?
如果x = threadIdx.x和y = 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.