2013-11-06 4 views
1

Я пытаюсь понять межпроцессное общение в CUDA. Я хотел бы помочь вам понять эту концепцию и попытаться применить ее к проекту, который я делаю.Interprocess Communication CUDA

У меня есть система сбора изображений, которая обеспечивает N количество входных изображений. Каждое исходное исходное изображение сначала обрабатывается, а затем сохраняется в одной переменной под названием «Результат». Есть четыре функции, которые обрабатывают изображение, Aprocess, Bprocess, Cprocess и Dprocess. Каждый раз, когда новое изображение приобретается системой, четыре функции, упомянутые выше, вызываются для выполнения обработки. Окончательное изображение «Результат» хранится в Dprocess.

То, что я хотел бы сделать, это: Создать новый процесс, «Process2», где я могу передать от одного (окончательный) изображение, сохраненное в «Result», каждый раз получается, что изображение, и положить его в буфере под названием «Изображения». Я хотел бы сделать это для 10 изображений. «process2» должен ждать, пока новое изображение будет передано ему, а не завершится, потому что первый процесс должен продолжать вызывать четыре функции и получать окончательное обработанное изображение.

Что я сталкивался до сих пор: cudaIpcGetMemHandle, cudaIpcOpenMemHandle и cudaIpcCloseMemHandle

Вопрос: Как использовать вышеуказанные имена функций для достижения IPC?

+0

И в чем ваш вопрос, в точности? – talonmies

+0

О, простите об этом. Я еще не закончил писать, прежде чем отправил свой вопрос. – Eagle

+1

@Tejas Вы уверены, что вам действительно нужны несколько процессов ОС? Если вы не намереваетесь использовать некоторые из процессов нисходящего потока для работы в качестве служб, с несколькими экземплярами процессов восходящего потока (например, клиентскими приложениями), тот же результат может быть достигнут с помощью нескольких потоков в одном процессе. В качестве альтернативы, если вы не ограничены ЦП (маловероятно при эффективном использовании CUDA), однопоточный процесс должен быть одинаково подходящим. – MooseBoys

ответ

1

Вопрос: Как использовать вышеуказанные имена функций для достижения IPC?

CUDA simpleIPC образец кода демонстрирует это.

Существует также краткое упоминание о том, как использовать API CUDA IPC в .

Наконец, сама по API документирован в выполнения API reference manual

Обратите внимание, что эта функциональность требует куб.см 2.0 или выше, и 64-битной ОС Linux.

+0

Я не использую 64-разрядную ОС Linux, и ограничено только использованием 64-разрядной ОС Windows. Есть ли другой способ, которым я могу это реализовать? – Eagle

+1

Я предполагаю, что есть много способов одновременно обрабатывать вещи на компьютере. Я отвечал на ваш вопрос о API cudaIPC. Как указано в комментариях, вместо этого вы можете рассмотреть многопоточную программу. [Многопоточность Windows] (например, http://stackoverflow.com/questions/8446757/how-can-i-create-a-multithread-in-c-for-windows). –

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