Передача контекста cuda рабочим потокам - PullRequest
1 голос
/ 29 июля 2011

У меня есть несколько ядер CUDA, которые я хочу запустить в отдельных потоках.

Мне нужно, чтобы каждый pthread выполнял, скажем, 3 ядра cuda, и они должны выполняться последовательно.

Я подумал, что попытаюсь передать каждому pthread ссылку на поток, и поэтому каждое из этих трех ядер cuda будет выполняться последовательно в одном потоке.

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

Так как мне заставить каждую pthread работать в одном контексте одновременно с другими pthreads?

Спасибо

1 Ответ

2 голосов
/ 30 июля 2011

До CUDA 4.0 для доступа к данному контексту из разных потоков ЦП использовалось cuCtxPopCurrent () / cuCtxPushCurrent () .Контекст может быть текущим только для одного потока ЦП за один раз.

В CUDA 4.0 вы можете вызывать cudaSetDevice () в каждом pthread, и он может быть актуальным для более чем одного потока ввремя.

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

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