使用驱动程序api可以排除在同一个应用程序中使用运行时api([1])。不幸的是,cublas,cufft等都基于运行时api。如果想要同时在cuModuleLoad和cublas中进行动态内核定义,有哪些选项?我有这些想法,但也许还有更多:
一个。等待计算能力3.5,传闻在同一个应用程序中支持驱动程序和运行时api的和平共存。
B中。将内核编译为.so文件并将其删除。他们是否在dlcose上卸载了?
℃。尝试从驱动程序api使用cuModuleLoad,但运行时api中的所有其他内容。不知道是否有任何希望。
我没有屏住呼吸,因为jcuda或pycuda几乎是相同的绑定,他们可能已经想到了它。
答案 0 :(得分:6)
总而言之,你在这里倾向于风车。通过依赖极其过时的信息,您似乎得出结论,CUDA不支持运行时和驱动程序API互操作性,事实上,自2009年CUDA 3.0测试版发布以来,它一直是来自{{{该版本的3}}:
现在可以使用CUDA Toolkit 3.0 Beta。
此版本的亮点包括:
- CUDA驱动程序/运行时缓冲区互操作性,允许使用CUDA驱动程序API的应用程序也使用使用CUDA C运行时实现的库。
有文档release notes,它简洁地描述了驱动程序和运行时API的交互方式。
具体回答你的主要问题:
如果需要动态内核定义,如cuModuleLoad和cublas 同时,有哪些选择?
基本方法是这样的:
cudaSetDevice()
。运行时API将自动绑定到现有的驱动程序API上下文。请注意,设备枚举在两个API之间是相同且通用的,因此如果您在驱动程序API中的给定设备编号上建立上下文,则相同的编号将在驱动程序API中选择相同的GPU