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

时间:2013-12-12 09:17:44

标签: cuda pycuda cublas jcuda

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

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

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

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

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

[1] CUDA Driver API vs. CUDA runtime

1 个答案:

答案 0 :(得分:6)

总而言之,你在这里倾向于风车。通过依赖极其过时的信息,您似乎得出结论,CUDA不支持运行时和驱动程序API互操作性,事实上,自2009年CUDA 3.0测试版发布以来,它一直是来自{{{该版本的3}}:

  

现在可以使用CUDA Toolkit 3.0 Beta。

     

此版本的亮点包括:

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

有文档release notes,它简洁地描述了驱动程序和运行时API的交互方式。

具体回答你的主要问题:

  

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

基本方法是这样的:

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