2016-05-03 3 views
1

У меня есть в основном тот же вопрос, что и заданный in this discussion. В частности, я хочу обратиться к этому окончательный ответ:Мотивация для многомерной сетки блоков CUDA

Я думаю, что есть два разных вопроса смешиваются вместе в этой теме:

  1. Есть ли выигрыш в производительности с помощью отображения 2D или 3D ввода или вывода данных в потоки? Ответ «абсолютно» для всех причин , которые вы и другие описали. Если данные или расчет имеют пространственную локальность, то так же должно быть задание работы на потоки в деформацией.

  2. Есть ли преимущество в производительности для использования многомерных сетей CUDA для выполнения этого задания? В этом случае я не думаю, что с вы можете сделать вычисление индекса тривиально себе в верхней части ядра . Это сжигает несколько арифметических инструкций, но это должно быть пренебрежимо мало по сравнению с издержками запуска ядра.

Вот почему я думаю, что многомерные сетки предназначены как удобство в программиста, а не способ повышения производительности. Вам действительно нужно думать о каждом шаблоне доступа к памяти warp, .

Я хочу знать, сохраняется ли эта ситуация сегодня. Я хочу знать, почему существует необходимость в многомерной «внешней» сетке.

То, что я пытаюсь понять, заключается в том, есть ли для этого существенная цель (например, фактическая выгода от пространственной локальности) или она существует для удобства (например, в контексте обработки изображений, существует ли она только так что мы можем иметь CUDA знать о «патче x/y», который обрабатывает конкретный блок, чтобы он мог сообщить об этом в Visual Profiler CUDA или что-то в этом роде)?

Третий вариант заключается в том, что это не более чем удержание от более ранних версий CUDA, где это было обходным путем для ограничений аппаратного индексирования.

ответ

6

Существует определенная польза в использовании многомерной сетки. Различные записи (tid, ctaid) являются переменными только для чтения, видимыми как специальные регистры. См PTX ISA

PTX включает в себя ряд предопределенных, предназначенных только для чтения переменных, которые видны как специальные регистры и доступны через Mov или CVT инструкции. специальные регистры:

%tid 
%ntid 
%laneid 
%warpid 
%nwarpid 
%ctaid 
%nctaid 

Если некоторые из этих данных могут быть использованы без дальнейшей обработки, не только вы можете получить арифметические инструкции - возможно, на каждом шаге индексации многомерных данных, но что более важно вы сохраняете регистры, которые являются очень скудным ресурсом на любом оборудовании.

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