Мне нужно получить квадратный корень для каждого элемента матрицы (который в основном представляет собой вектор значений с плавающей запятой один раз в памяти), используя CUDA.
Размеры матрицы не известны «a priori» и могут варьироваться [2-20.000].
Мне было интересно: я мог бы использовать (как предложил здесь Джонатан) одно измерение блока, например:
int thread_id = blockDim.x * block_id + threadIdx.x;
и проверьте, есть ли thread_id ниже, чем строки * столбцов ... это довольно просто и прямо.
Но есть ли какая-то конкретная причина производительности, почему я должен использовать два (или даже три) измерения сетки блока для выполнения такого вычисления (имея в виду, что у меня есть матрица в конце концов) вместо одного?
Я думаю о проблемах коалесценции, таких как последовательное чтение всех потоков значениями