通常情况下,矩阵用行优先的方法在全局内存中进行线性存储。
对一个二维矩阵,需管理以下三种索引:
- 线程和块索引
- 矩阵中给定点的坐标
- 全局线性内存中的偏移量
具体操作如下:
step1:将线程和块索引映射到矩阵坐标上:
ix = threadIdx.x + blockIdx.x * blockDim.x
iy = threadIdx.y + blockIdx.y * blockDim.y
step2: 将矩阵坐标映射到全局内存中的索引/存储单元上:
idx = iy * nx + ix
如下图所示: