我想创建一个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跳过主机集成步骤,但我找不到办法做到这一点。有谁知道是否/如何做到这一点?
答案 0 :(得分:2)
看起来没有像你想要的方法。我将使用`nvcc --keep --ptx code.cu'编译并逐步完成编译。这样做我无法看到使用nvcc可以做你想做的事情的证据。