2017-02-03 18 views
2

В мире ЦП можно сделать это через карту памяти. Могут ли подобные вещи сделать для GPU?может ли процесс совместного использования одной и той же памяти GPU? (CUDA)

Если два процесса могут совместно использовать один и тот же контекст CUDA, я думаю, что это будет тривиально - просто пройдите указатель памяти GPU. Можно ли использовать один и тот же контекст CUDA между двумя процессами?

Еще одна возможность, о которой я мог думать, - сопоставить память устройства с памятью с памятью. Так как это карта памяти, она может быть разделена между двумя процессами. Это имеет смысл/возможно, и есть ли накладные расходы?

+0

@RobertCrovella: это, вероятно, такой же хороший ответ, как и любой другой. если вы хотите добавить его, я с радостью продолжу его – talonmies

ответ

2

CUDA MPS эффективно разрешает активность CUDA, исходящую от двух или более процессов, для совместного использования одного и того же контекста на графическом процессоре. Однако это не будет предусматривать того, что вы запрашиваете:

Может ли два процесса совместно использовать одну и ту же память GPU?

Один из способов достижения этого - через API CUDA IPC (interprocess communication).

Это позволит вам совместно использовать выделенную область памяти устройства (то есть область памяти, выделенную через cudaMalloc) между несколькими процессами. This answer содержит дополнительные ресурсы, чтобы узнать о CUDA IPC.

Однако, согласно моим испытаниям, это не позволяет совместно использовать регионы памяти, закрепленные хостом (например, регион, выделенный через cudaHostAlloc) между несколькими процессами. Сама область памяти может использоваться совместно с обычными механизмами IPC, доступными для вашей конкретной ОС, но она не может быть представлена ​​как «закрепленная» память в 2 или более процессах (согласно моему тестированию).

+0

Не могли бы вы объяснить, почему совместное использование cuda-контекста не позволяет использовать память устройства? Разве что даже контекст cuda тот же, значение указателя памяти устройства A в процессе B все еще бессмысленно? –

+0

Я не сказал, что «совместное использование контекста cuda не позволяет обмениваться памятью устройств». Я сказал, что * CUDA MPS * не позволяет использовать память устройства. Если вы хотите понять, разрешает ли совместное использование контекста cuda совместное использование памяти устройства, вам нужно быть более конкретным. Для двух потоков в одном процессе они могут использовать один и тот же контекст. CUDA не предоставляет метод AFAIK для двух отдельных процессов для совместного использования одного и того же контекста. Если вы считаете, что есть один, пожалуйста, будьте конкретными и укажите, как вы собираетесь делиться одним и тем же контекстом cuda между двумя отдельными процессами. –