2016-10-27 6 views
1

Это изображение с CUDA руководство по программированию: enter image description hereПочему блок/индекс потока в cuda не похож на два размера массива в C?

Это может быть очень глупый вопрос, но это звучит очень запутанной для меня. В этом случае не должно быть:

Block (0,0) --> Block (0,1) --> Block (0,2) // This is supposedly row 0 
Block (1,0) --> Block (1,1) --> Block (1,2) // This is supposedly row 1 

Это ли это по намерению?

ответ

3

CUDA threadblock или индекс сетки упорядочение х, у, г

Например, блок (1,0) является вторым блоком в й-измерении, первый блок в у-размерности

Если вы предположите, что (0,0), (0,1), (0,2) все принадлежат одной и той же строке, вы просто отражаете конкретный вид (строка, столбец) расположения индекса.

Не требуется сопоставления между столбцами x, y и row, column. Вы можете организовать его любым способом.

В CUDA C/C++ принято использовать размер потока/блока x для ссылки на столбец матрицы, поскольку это способствует хорошему объединению для доступа к памяти в пределах основы. Однако в CUDA fortran может быть принято обращать их (для хорошего коалесценции), поскольку основной шаблон хранения матрицы в памяти для массива fortran отличается от массива C.

Смежные вопросы