Это не выглядит правильным для моих глаз.Индексы (i,j)
любого потока в двумерной сетке CUDA равны
int idx_i = blockIdx.x * blockDim.x + threadIdx.x;
int idx_j = blockIdx.y * blockDim.y + threadIdx.y;
Если вы обращаетесь к массиву, хранящемуся в линейной памяти, эквивалентный индекс (i,j)
равен либо
int mindex_colmajor = idx_i + idx_j * LDA;
или
int mindex_rowmajor = idx_j + idy_i * LDA;
в зависимости от того, хранится ли массив в мажорной строке или мажорном порядке столбца с первым измерением в памяти (или эквивалентным шагом), равным LDA
.Затем вы получаете доступ к памяти как
value = array[mindex]
, где mindex
- это индекс основной или основной строки, рассчитанный выше.