0

我目前正在设计一个 dll(等等)库,它将为 CUDA、SYCL、OpenCL 或 Vulkan(尚未决定)构建卸载任务。由于不知道应用程序将做什么(也可能使用相同的 API),我的问题是,在 DLL 和应用程序中使用其中一个 API 时是否会出现运行时问题。

我猜想,在 SYCL/OpenCL/Vulkan 中创建两个上下文不会受到伤害,并且应该相应地分离 API 调用。这是对的吗?仅仅在 DLL 中显式地创建一个上下文/流(在 CUDA 中)就足够了吗?

是否还可以将 DLL 中的缓冲区对象传递给应用程序,以便调用应用程序可以直接在其上下文中使用相同的缓冲区,还是需要先复制到主机?

4

1 回答 1

0

我觉得如果您继续使用相同的 API,它应该可以工作。

当然,如果你混合了很多 API,它可能会更加复杂。

例如,如果您有一个带有 OpenCL 后端的 SYCL 实现,您可以在一些 SYCL 和 OpenCL 用例之间共享设备上的缓冲区。如果您想在与 CUDA 和 CUDA 不兼容的 SYCL 实现之间使用相同的数据,那么您可能需要涉及一些中间主机存储。

于 2019-10-11T17:16:22.293 回答