Принуждение блока потока CUDA к выходу - PullRequest
0 голосов
/ 04 января 2012

Этот вопрос относится к: Выходит ли Планировщик деформации Nvidia Cuda?

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

В руководстве по PTX v2.3 упоминается (раздел 6.6):

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

Похоже, что этого можно достичь (несмотря на то, что он безобразный хакер). Кто-нибудь пробовал что-то подобное? Возможно, с настройкой типа block_size = warp_size?

РЕДАКТИРОВАТЬ: Я поднял этот вопрос без четкого понимания разницы между резидентными и нерезидентными (но назначенными на один и тот же SM) блоками потоков. Таким образом, вопрос должен заключаться в переключении между двумя резидентными (размером с варп) блоками потоков. Извиняюсь!

1 Ответ

2 голосов
/ 05 января 2012

В модели программирования CUDA в ее нынешнем виде, когда блок потока запускается на многопроцессорном процессоре, он выполняется до завершения, занимая ресурсы до завершения.Блок потока не может выдавать свои ресурсы, кроме как из функции global , которую он выполняет.

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

...