CUDA: что делает поток абстрактным? - PullRequest
0 голосов
/ 17 октября 2018

В руководстве по программированию cuda C поток определяется очень абстрактно: последовательность операций cuda, которые выполняются в порядке их выполнения кодом.

Я понимаю, как выполняются инструкции в графическом процессоре Nvidia.: при запуске ядра блоки распределяются между SM в устройстве.Затем основы (группы из 32 потоков) планируются планировщиком основы в SM для инструкций, которые должны обрабатываться в зависимости от основы.

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

  2. И вообще, как аппаратно реализованы потоки?Я предполагаю, что это обеспечивает упорядочение планировщику деформации (но тогда планировщик деформации основывается на SM, так как же это позволит ядрам с несколькими SM использовать поток?).

1 Ответ

0 голосов
/ 21 октября 2018

Поток CUDA - это просто очередь действий, выполняемых графическим процессором.Каждая функция через API может быть выполнена асинхронным способом - код процессора продолжается, пока инструкция ожидает выполнения независимо от кода хоста.Тем не менее, он выполняется синхронно относительно других инструкций в очереди / потоке.

Если вы хотите, чтобы несколько операций на GPU выполнялись асинхронно, вам нужно две или более очередей / потоков,Например, в руководстве CUDA есть глава о том, как смешать выполнение ядра (первый поток) с передачей памяти (второй поток).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...