如何在没有主机编译器的情况下创建Cuda模块

时间:2015-05-22 17:58:27

标签: cuda

我想创建一个Cuda模块,用于Cuda驱动程序API,而无需与主机编译器交互。对此的主要推动力是,我的小组关于何时更改主机编译器和cuda编译器版本的决定并不总是在我们的控制范围内。我想防止一方面升级导致主机和cuda编译器不兼容的情况。

例如,我有一个文件,test.cu只包含cuda设备代码。我想把它编译成ptx:

nvcc --ptx kernel.cu

然后将其加载到我执行的程序中,如下所示:

cuModuleLoad(&module, "kernel.ptx");

当我尝试编译cuda文件时,出现以下错误:

In file included from /usr/local/cuda/bin/../include/cuda_runtime.h:59:0,
             from <command-line>:0:
/usr/local/cuda/bin/../include/host_config.h:82:2: 
error: #error -- unsupported GNU version! gcc 4.5 and up are not supported!

由于我的代码中没有包含cuda_runtime.h,因此我在详细模式下编译以查看发生了什么,并看到第一步是使用我的主机编译器并强制包含此文件:

> nvcc --verbose --ptx kernel.cu
#$ gcc -E -x c++ -D__CUDACC__ -C  "-I/usr/local/cuda/bin/../include"
"-I/usr/local/cuda/bin/../include/cudart"   -include "cuda_runtime.h"
-m64 -o "/tmp/tmpxft_00001058_00000000-4_kernel.cpp4.ii" "kernel.cu" 

由于我知道我的.cu文件没有主机代码,我想强迫nvcc跳过主机集成步骤,但我找不到办法做到这一点。有谁知道是否/如何做到这一点?

1 个答案:

答案 0 :(得分:2)

看起来没有像你想要的方法。我将使用`nvcc --keep --ptx code.cu'编译并逐步完成编译。这样做我无法看到使用nvcc可以做你想做的事情的证据。