2016-02-11 53 views
0

我正在写一个执行cuda内核的单个头文件库。我想知道是否有办法解决这个问题,或者从nvcc获得C源代码输出?我可以在我的主机代码上使用cuda而不使用nvcc吗?

+2

您可以避免必须通过将内核编译为CUBIN或PTX文件来调用nvcc,然后使用驱动程序API加载并执行此操作,最终将调用运行时API的'<<<...> >>'语法调用替换为['cuLaunchKernel'](http://docs.nvidia.com/cuda/cuda-driver-api/group__CUDA__EXEC.html#group__CUDA__EXEC_1gb8f3dc3031b40da29d5f9a7139e52e15)。 (如果这足够了,我会详细说明它并将其转换为答案) – Marco13

+3

一句答案是“使用CUDA驱动程序API”。 – talonmies

+0

谢谢,那就是我一直在寻找的! –

回答

4

您可以使用CUDA driver API来避免主机语言扩展。它稍微冗长一点,你需要更多的样板代码来管理上下文,但这并不难。

通常情况下,您可以编译为PTX或二进制有效负载以在运行时加载,但是NVIDIA现在还提供了一个实验JIT CUDA C编译器库libNVVM,如果您想从源代码获取JIT,则可以尝试。

+0

如果仍然想依赖运行时API,还不够:在主机代码中使用cuLaunchKernel,手动包含正确的运行时头文件,使用nvcc来链接设备和主机代码? – pszilard

+1

@pszilard:不。运行时API依赖大量nvcc生成的样板文件和几个未公开的API调用来执行惰性上下文初始化工作。如果你不使用nvcc进行编译,你不会得到这个,没有任何工作。除非您使用驱动程序API并自己明确管理上下文和模块。 – talonmies

相关问题