Я читаю книгу о C ++ AMP и не совсем понимаю некоторые термины:
Всегда выбирайте размер плитки так, чтобы количество нитей в
наименее значимое измерение составляет не менее 16, и используйте 32 или даже 64, если
вы можете.
Я видел подобную терминологию, используемую в документации Eigen, поэтому я подозреваю, что это довольно распространенное использование.
Итак, давайте предположим, что у меня есть 2D-индекс, массив, что угодно:
// construct it:
ArrayType my2DArray(rows,columns);
// now index it:
float element = my2DArray[rowIdx,colIdx];
Забыв на мгновение тип из ArrayType
и больше думать о терминологии, которая будет самый а также наименее значительный размер этого массива?
При логическом распределении потоков в нескольких измерениях обычно происходит сопоставление этого N-мерного пространства с линейным пространством. Измерение, которое меньше всего изменяет линейное пространство, является наименее значимым измерением.
В качестве примера, отображение двумерной (X, Y) координаты в линейное пространство может быть определено с использованием выражения (Y * ширина + X). Здесь X — наименее значимое измерение, а Y — наиболее значимое измерение. Аналогично, для трехмерного (X, Y, Z) пространства выражение может быть (Z * ширина * высота + Y * ширина + X). Здесь X все еще наименее значимый, но Z является наиболее значимым. Ваш макет может не совпадать, например, вы можете выбрать отображение линейного пространства на (Z * ширина * высота + X * высота + Y), и в этом случае Y является наименее значимым измерением.
Других решений пока нет …