2015-06-15 4 views
2

Я пытаюсь понять архитектуру графического процессора и оценить латентность одного арифметического оператора без его компиляции или запуска.Сколько потоков/рабочих элементов используется?

Я полагаю, что следующий код будет использовать только один поток/рабочий элемент, хотя я указываю локальный размер = 32. Правильно ли это?

int k = 0; 
for (; k < 32000; k++){ 
    A = C * (B + D); 
} 

Если я запускаю программу, используя двойной точности блок (DPU), и есть 1 ППН в СМ на NVIDIA Tesla GPU, что размер перекоса? Это все еще 32 потока (1 поток использует DPU, плюс 31 поток использует SP)?

Еще один вопрос: в соответствии с этим GPU architecture, на реальном GPU нет потоков. Является ли поток виртуальной концепцией для программистов?

+0

Как работает HW, это совсем другое из-за перекосов и особых функций. Но в «абстрактном» термине, если размер локальной группы равен 32, вы можете рассмотреть 32 «потока», которые работают параллельно. Для кода, который вы указали, если вы установите значение local на 32, он будет использовать 32 потока, независимо от кода. – DarkZeros

+0

Да, правда. Операция с двойным поплавком всегда будет использовать 1 поток для оценки и 31 поток, чтобы ничего не делать. Поэтому мои вопросы таковы, что 31 запасной поток будет потреблять SP или DPU? – g919

+0

Нет, если вы установите значение local на 32, тогда этот код будет запущен 32 рабочими элементами. С эффектами гонки, в которых работает 32 рабочих элемента в одной и той же памяти (возможно, вывод полностью недействителен). – DarkZeros

ответ

2

Я пытаюсь понять архитектуру графического процессора и оценить задержку одного арифметического оператора без его компиляции или запуска.

Я не считаю, что это общедоступно, и оно варьируется между поставщиками и моделями. Современные дискретные графические процессоры AMD и NVIDIA обычно имеют конвейеры около 20 этапов.

Я полагаю, что следующий код будет использовать только один поток/рабочий элемент, хотя я указываю локальный размер = 32. Правильно ли это?

Если вы указали NDRange из 32 рабочих элементов, независимо от местного размера, вы получите 32 рабочих элемента. Вы не показали, как вы запускаете ядро, поэтому ваш вопрос здесь неясен.

Если я запускаю программу с использованием блока двойной точности (DPU), и есть 1 DPU на SM на графическом процессоре NVIDIA Tesla, каков размер основы?

Размер warp не зависит от типа выполняемой команды. Деформации - это физическая концепция, сродни SIMD-полосам. Вы не можете его изменить. На оборудовании NVIDIA это всегда 32.

Это не имеет никакого отношения к SPU и DPU. Количество SPU и DPU ограничивает количество команд с одной точностью и двойной точностью, которые могут выдаваться/удаляться в каждом цикле (точные ограничения различаются между аппаратными средствами, не всегда возможно выдавать оба типа инструкций в одном цикле).

Предполагая фиктивный SM с 32 SPU и 1 DPU, это означает, что вы можете выпустить 32 команды с одной точностью и 1 инструкцию с двойной точностью в каждом цикле.

Если все ваши 32 потока должны выполнять инструкцию с одной точностью, оно будет выдаваться за один цикл. Если все они должны выполнить двойную точность, он будет выпущен более чем за 32 цикла. И если мы предположим, что SM может делать оба параллельно, то он может выдавать 1 инструкцию двойной точности и 31 инструкцию с одной точностью за один цикл.

Есть ли виртуальная концепция для программистов?

Да, термин «нить» при разговоре на языке CUDA полностью не связан с обычным значением, он сродни «SIMD-полосе».Обратите внимание, однако, что OpenCL не использует термин thread, это рабочий элемент. Основополагающий механизм выполнения не указан и не нуждается в сопоставлении с какой-либо концепцией оборудования.

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