Что происходит, если использовать API GPGPU в DLL и в вызывающем приложении
В настоящее время я разрабатываю библиотеку dll (и так далее), которая будет создавать задачи разгрузки для CUDA, SYCL, OpenCL или Vulkan (пока не решено). Поскольку неизвестно, что будет делать приложение (может также использовать те же API-интерфейсы), мой вопрос заключается в том, могут ли возникнуть проблемы во время выполнения для одного из API-интерфейсов при его использовании в DLL и в приложении.
Я предполагаю, что создание двух контекстов в SYCL/OpenCL/Vulkan не повредит и должно соответствующим образом разделять вызовы API. Это правильно, и достаточно ли просто явно создать контекст / поток (в CUDA) в DLL?
Возможно ли дополнительно передать буферный объект из DLL в приложение, чтобы вызывающее приложение могло напрямую использовать тот же буфер в своем контексте, или это необходимо сначала скопировать на хост?
0 ответов
У меня такое чувство, что это должно работать, если вы продолжите использовать тот же API.
Конечно, если вы смешиваете много API, это может быть намного сложнее.
Если, например, у вас есть реализация SYCL с серверной частью OpenCL, вы можете совместно использовать буфер на устройстве между некоторыми вариантами использования SYCL и OpenCL. Купите, если вы хотите использовать одни и те же данные между реализациями SYCL, несовместимыми с CUDA и CUDA, тогда вам, вероятно, потребуется задействовать какое-то промежуточное хранилище хоста.