Вопрос SIMT warp

#gpu

Вопрос:

У меня возникли некоторые проблемы с пониманием выполнения SIMT на графическом процессоре. До сих пор у меня было, что потоки помещаются в «перекосы» (например, 32 потока/деформация). Эти потоки будут одного типа и могут выполняться параллельно (но могут разветвляться и выполняться независимо).

Книга, которую я читаю, продолжает сбивать меня с толку. 'It is then up to the instruction unit to select warps that are ready to execute their next instruction, and this instruction is then issued to the active threads of the warp. Each SP core executes an instruction for four individual threads of a warp using four clocks'.

Выбранная архитектура имела 8 SP и 32 потока на основу. Поэтому каждому SP назначается 4 потока. Почему бы просто не назначить 1 поток/SP? Что означает «использование четырех часов»? каждая инструкция занимает 1 такт и выполняется 4 раза (по 1 для каждого потока)?

Еще одна проблема, с которой я сталкиваюсь, заключается в том, что если у вас есть основа с 32 потоками, каждый из которых содержит условное условие. Что, если половина ответвляется в одну сторону, а половина-в другую? Из того, что я прочитал, потоки выполняют оба результата? Как это работает? т. е. как это подчиняется правилам программы

Ответ №1:

Часть «использование четырех часов» (в контексте семейства графических процессоров NVIDIA g80/g90/g200) возникает потому, что каждое ядро фактически является скалярным ALU. Он может обрабатывать только одну инструкцию из одного потока за такт. Таким образом, чтобы удалить инструкцию для основы из 32 потоков, каждая инструкция выполняется четыре раза за четыре такта (или в четыре раза больше тактов для выполнения инструкции, некоторые занимают больше времени, чем один цикл). Это немного сложнее, чем это, потому что некоторые комбинации команд могут быть выданы дважды, но, надеюсь, вы поняли идею. В вычислительных частях Ферми 2.0 два полукривления выдаются дважды за цикл, поэтому 32 ядра удаляют два перекоса за два цикла. В компонентах compute 2.1 Fermi имеется 48 ядер с той же схемой двойного выпуска, а также дополнительная инструкция от одного из активных искажений, если таковая имеется, что выводит мультипроцессор из строя.

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