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

cuda运行时api和动态内核定义,cuda,pycuda,cublas,jcuda,Cuda,Pycuda,Cublas,Jcuda,使用驱动程序api可避免在同一应用程序中使用运行时api[1]。不幸的是,cublas、cufft等都是基于运行时api的。如果想要同时在cuModuleLoad和cublas中定义动态内核,有哪些选项?我有这些想法,但可能还有更多: A.等待compute capability 3.5,据说它支持驱动程序和运行时API在同一应用程序中和平共存 将内核编译成一个.so文件并打开它。他们在dlcose上卸货吗 C.尝试从驱动程序api使用cuModuleLoad,但从运行时api使用其他所有内容。

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

A.等待compute capability 3.5,据说它支持驱动程序和运行时API在同一应用程序中和平共存

将内核编译成一个.so文件并打开它。他们在dlcose上卸货吗

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

我没有屏住呼吸,因为jcuda或pycuda几乎处于相同的困境,他们可能已经找到了答案


[1]

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

CUDA Toolkit 3.0测试版现已推出

此版本的亮点包括:

CUDA驱动程序/运行时缓冲区互操作性,允许使用CUDA驱动程序API的应用程序也使用使用CUDA C运行时实现的库。 有一些文档简洁地描述了驱动程序和运行时API如何交互

具体回答您的主要问题:

如果想要像cuModuleLoad和cublas那样的动态内核定义 同时,有哪些选择

基本方法如下所示:

像平常一样,使用驱动程序API在设备上建立上下文。 调用运行时API例程cudaSetDevice。运行时API将自动绑定到现有的驱动程序API上下文。请注意,两个API之间的设备枚举相同且通用,因此如果您在驱动程序API中的给定设备编号上建立上下文,相同编号的设备将在驱动程序API中选择相同的GPU 您现在可以自由使用任何CUDA运行时API调用或任何基于CUDA运行时API构建的库。行为与依赖运行时API惰性上下文建立的行为相同
Compute capability 3.5设备自2013年1月起就已经上市。我还无法验证cm 3.5是否确实解决了这个问题,而且这些设备还没有完全普及。大约在4年前CUDA 3.0发布时,运行时API-驱动程序API互操作性已经解决。自2009年以来,它在所有与CUDA兼容的硬件上都工作过。互操作性的解决方案纯粹是上下文管理工作方式的驱动程序级更改。它与GPU硬件本身无关。您的整个问题似乎是以错误的假设为前提的,导致您试图解决一个不存在的问题……您可以在CUDA文档中了解驱动程序和运行时API之间的上下文互操作性。如果这对你来说有点枯燥,从2010年开始试试……很好的答案,鹰爪。非常感谢。