Что произойдет, если использовать API-интерфейсы GPGPU в DLL и в вызывающем приложении

В настоящее время я разрабатываю библиотеку dll (и так далее), которая будет создавать задачи разгрузки для CUDA, SYCL, OpenCL или Vulkan (еще не решено). Поскольку неизвестно, что будет делать приложение (может также использовать одни и те же API), мой вопрос заключается в том, могут ли возникнуть проблемы во время выполнения для одного из API при использовании его в DLL и в приложении.

Я предполагаю, что создание двух контекстов в SYCL/OpenCL/Vulkan не повредит и должно соответствующим образом разделить вызовы API. Правильно ли это и достаточно ли просто явно создать контекст/поток (в CUDA) в DLL?

Можно ли дополнительно передать объект буфера из DLL в приложение, чтобы вызывающее приложение могло напрямую использовать тот же буфер в своем контексте, или необходимо сначала скопировать его на хост?


person fodinabor    schedule 06.08.2019    source источник


Ответы (1)


У меня такое ощущение, что это должно работать, если вы продолжите использовать один и тот же API.

Конечно, если вы смешиваете много API, это может быть довольно сложно.

Если, например, у вас есть реализация SYCL с серверной частью OpenCL, вы можете совместно использовать буфер на устройстве между некоторыми вариантами использования SYCL и OpenCL. Купить, если вы хотите использовать одни и те же данные между реализацией SYCL, несовместимой с CUDA, и CUDA, то вам, вероятно, нужно задействовать какое-то промежуточное хост-хранилище.

person Ronan Keryell    schedule 11.10.2019