2013-05-18 6 views
1

Можно ли использовать буфер GPU cudaMalloc в разных контекстах (потоки ЦП), которые используют тот же GPU? Каждый контекст выделяет входной буфер, который необходимо заполнить ядром предварительной обработки, которое будет использовать весь графический процессор, а затем распределить его.Поделиться буферами GPU в разных контекстах CUDA

Этот сценарий идеально подходит для избежания множественной передачи данных на и с графических процессоров. Приложение представляет собой формирователь луча, который объединяет несколько сигналов антенны и генерирует несколько лучей, где каждый луч будет обрабатываться с помощью другого контекста графического процессора. Весь обрабатывающий трубопровод для балок уже на месте, мне просто нужно добавить элемент формирования луча. Если каждый поток генерирует собственный луч, он будет дублировать входные данные, поэтому я бы хотел избежать этого (также, гораздо эффективнее генерировать несколько лучей за один раз).

ответ

3

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

С учетом того, что по умолчанию CUDA 4.0 имеет один контекст, созданный для каждого процесса, а не для потока. Если у вас несколько потоков, работающих с одним и тем же контекстом CUDA, совместное использование указателей устройств между потоками должно работать без проблем.

0

Я не думаю, что несколько потоков могут работать с одним и тем же контекстом CUDA. Я сделал эксперименты, родительский поток cpu создавал контекст, а затем вил дочерний поток. Детский поток запускает ядро ​​с использованием контекста (cuCtxPushCurrent (ctx)), созданного родительским потоком. Программа просто висит там.

+0

Если вы используете fork, вы имеете в виду функцию fork для процесса OS, вы путаете потоки и процессы. 'fork()' создает новый процесс, и контекст не может быть разделен между двумя процессами. Однако контекст может быть разделен между двумя потоками ЦП в одном и том же процессе. Взгляните [здесь] (http://stackoverflow.com/questions/22950047/cuda-intialization-error-after-fork/22950549?s=1|3.2403#22950549) –

+0

Вы правы. Проблема вызвана fork(). – 770966796

Смежные вопросы