-5

使用驱动程序 api 会阻止在同一应用程序中使用运行时 api ([1])。不幸的是,cublas、cufft 等都是基于运行时 api。如果想要同时在 cuModuleLoad 和 cublas 中定义动态内核,有哪些选择?我有这些,但也许还有更多:

A. 等待传闻支持驱动程序和运行时 API 在同一应用程序中和平共存的计算能力 3.5。

B. 将内核编译为 .so 文件并 dlopen。他们会在 dlcose 上卸载吗?

C. 尝试使用驱动程序 api 中的 cuModuleLoad,但其他一切都来自运行时 api。不知道这是否有任何希望。

我没有屏住呼吸,因为 jcuda 或 pycuda 几乎处于相同的状态,他们可能已经知道了。

[1] CUDA 驱动程序 API 与 CUDA 运行时

4

1 回答 1

6

总而言之,您在这里向风车倾斜。通过依赖极其过时的信息,您似乎已经得出结论,CUDA 不支持运行时和驱动程序 API 互操作性,而事实上,自 2009 年发布 CUDA 3.0 测试版以来就一直如此。引用发行说明该版本的:

CUDA Toolkit 3.0 Beta 现已推出。

此版本的亮点包括:

  • CUDA 驱动程序/运行时缓冲区互操作性,它允许使用 CUDA 驱动程序 API 的应用程序也可以使用使用 CUDA C 运行时实现的库。

这里有文档简洁地描述了驱动程序和运行时 API 如何交互。

具体回答您的主要问题:

如果想要同时在 cuModuleLoad 和 cublas 中定义动态内核,有哪些选择?

基本方法是这样的:

  1. 像往常一样使用驱动程序 API 在设备上建立上下文。
  2. 调用运行时 API 例程cudaSetDevice()。运行时 API 将自动绑定到现有的驱动程序 API 上下文。请注意,设备枚举在两个 API 之间是相同且通用的,因此如果您在驱动程序 API 中的给定设备编号上建立上下文,相同的编号将在驱动程序 API 中选择相同的 GPU
  3. 您现在可以自由使用任何 CUDA 运行时 API 调用或任何基于 CUDA 运行时 API 构建的库。行为与您依赖运行时 API“惰性”上下文建立相同
于 2013-12-12T20:19:56.630 回答