2017-01-15 17 views
-2

Мне хотелось бы знать, как аппаратная/временная система CUDA обрабатывает следующий случай.Как именно CUDA обрабатывает доступ к памяти?

Если инструкция warp (warp1 in following) включает доступ к глобальной памяти (загрузка/сохранение); система времени выполнения планирует следующую готовую деформацию для выполнения.

Когда новый перекос выполняется,

  1. Будет ли «доступ к памяти» из warp1 проводиться параллельно, то есть в то время как новый перекос работает?

  2. Будет ли система времени выполнения помещать warp1 в очередь ожидания доступа к памяти; как только запрос памяти будет завершен, деформация затем перемещается в очередь выполнения?

  3. Будет ли указатель инструкции, связанный с исполнением warp1, автоматически увеличиваться и параллельно новому исполнению warp, чтобы аннотировать, что запрос на память завершен?

Например, рассмотрит этот псевдокод, где output=input+array[i];output и input оба являются скалярным переменным, отображенной в регистры, в то время как array сохраняется в глобальной памяти.

Для выполнения вышеуказанной инструкции нам необходимо загрузить значение array[i] в (временный) регистр перед обновлением вывода; т.е. приведенная выше инструкция может быть переведена на 2 команды макросъемки load reg, reg=&array[i], output_register=input_register+reg.

Я хотел бы знать, как аппаратные средства и выполнение системы обработки исполнения выше 2 макроса инструкции по сборке, учитывая, что нагрузка не может немедленно вернуться

ответ

3

Я не уверен, я понимаю ваши вопросы правильно, так что я будет просто попытаться ответить на них, как я прочитал их:

  1. Да, в то время как транзакция памяти находится в полете далее независимые инструкции будут продолжать выдаваться. Однако нет необходимости переключаться на другую деформацию - хотя инструкции из других оснований всегда будут независимыми, следующие инструкции из одного и того же варпа могут также быть независимыми, и один и тот же warp может продолжать работать (то есть дальнейшие инструкции могут быть выданы из тот же самый варп).

  2. № Как объясняется в п.1, warp может и будет продолжать выполнять инструкции до тех пор, пока не будет получена необходимость в нагрузке по зависимой инструкции или инструкция по ограждению памяти/барьера требует, чтобы она дождалась эффекта хранилища будучи видимым для других потоков.
    Это может привести к выдаче дополнительных (независимых) инструкций по загрузке или хранению, так что транзакции с несколькими операциями могут одновременно находиться в полете для одного и того же варпа. Таким образом, состояние warp после выдачи загрузки/хранения не изменяется принципиально и не приостанавливается до тех пор, пока это не будет необходимо.

  3. Указатель инструкций всегда будет автоматически увеличиваться (нет ситуации, когда вы когда-либо делаете это вручную, а также инструкции, позволяющие это делать). Однако, как следует из 2., это не обязательно указывает на то, что доступ к памяти был выполнен - ​​есть отдельное аппаратное обеспечение для отслеживания хода доступа к памяти.

Обратите внимание, что реализация оборудования полностью недокументирована Nvidia. Вы можете найти некоторые признаки возможных реализаций, если будете искать в патентных заявках Nvidia.

GPU до поколения Fermi (вычислительная способность 2.x) полностью отслеживает транзакцию памяти в аппаратном обеспечении. Несмотря на отсутствие документов Nvidia, общий механизм отслеживания (памяти) транзакций в полете составляет scoreboarding.

Графические процессоры от более новых поколений, начиная с Kepler (вычислительная способность 3.x), используют некоторую помощь в виде управляющих слов, встроенных в код сборки шейдера. В то время как снова недокументированный, Скотт Грей обратил свое внимание на его ассемблер Максвелла Maxas. Он обнаружил, что (среди прочего) контрольные слова содержат барьерные инструкции для отслеживания транзакций памяти и были достаточно любезны, чтобы задокументировать его выводы на его вики-странице Control-Codes.

+0

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

+0

Я обновил ответ, чтобы ответить на измененные вопросы. – tera

+0

Спасибо, Тера, все поняли. У меня есть еще один вопрос. ядра LDST в SMX, они только рассчитывают эффективный адрес для извлечения? могут ли они использоваться для арифметического сложения и вычитания с фиксированной точкой? –