这是矩阵索引的正确表达式(dim3 threadBlock =(A,B,1),dim3 blockGrid =(C,D,1),其中A,B,C,D是某些数字)?
int i = (blockIdx.y * gridDim.x + blockIdx.x) * blockDim.x + threadIdx.x;
int j = (blockIdx.x * gridDim.y + blockIdx.y) * blockDim.y + threadIdx.y;
Run Code Online (Sandbox Code Playgroud)
这对我的眼睛看起来不正确.(i,j)二维CUDA网格中任何线程的索引都是
int idx_i = blockIdx.x * blockDim.x + threadIdx.x;
int idx_j = blockIdx.y * blockDim.y + threadIdx.y;
Run Code Online (Sandbox Code Playgroud)
如果要访问存储在线性存储器中的数组,则等效(i,j)索引也是
int mindex_colmajor = idx_i + idx_j * LDA;
Run Code Online (Sandbox Code Playgroud)
要么
int mindex_rowmajor = idx_j + idy_i * LDA;
Run Code Online (Sandbox Code Playgroud)
取决于数组是以行主要列还是列主要顺序存储,其中第一维在内存中(或等效间距)等于LDA.然后,您将访问内存
value = array[mindex]
Run Code Online (Sandbox Code Playgroud)
其中mindex是上面计算的列主要索引或行主索引.
| 归档时间: |
|
| 查看次数: |
2540 次 |
| 最近记录: |