cuda运行时api和动态内核定义

mel*_*sgl -5 cuda pycuda jcuda cublas

使用驱动程序api可以排除在同一个应用程序中使用运行时api([1]).不幸的是,cublas,cufft等都基于运行时api.如果想要同时在cuModuleLoad和cublas中进行动态内核定义,有哪些选项?我记得这些,但也许还有更多:

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

B.将内核编译为.so文件并将其删除.他们在dlcose上卸载了吗?

C.尝试从驱动程序api使用cuModuleLoad,但运行时api中的所有其他内容.不知道这是否有任何希望.

我没有屏住呼吸,因为jcuda或pycuda几乎是相同的绑定,他们可能已经想到了它.

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

tal*_*ies 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"懒惰"上下文建立的行为相同