我已经为其他应用做了这个,但出于某种原因,它无法在我当前的应用中使用。
这是一个使用Cuda 4.2在VS2010中工作的代码片段。我已经在VS内部和VS外部编译了ptx文件而没有解决问题:
CUmodule Module = NULL;
int rc7 = cuModuleLoad(&Module, CubinName); // needs bin
if (rc7 == 0) {
rc = cuModuleGetFunction( &cuF_makeProcFrame, Module, "makeProcFrame" );
}
我得到rc = 500 - 找不到功能。
当我在文本编辑器中打开ptx文件时,我看到:
.entry _Z13makeProcFrame14cudaPitchedPtriiii(
.param .align 4 .b8 _Z13makeProcFrame14cudaPitchedPtriiii_param_0[16],
.param .u32 _Z13makeProcFrame14cudaPitchedPtriiii_param_1,
.param .u32 _Z13makeProcFrame14cudaPitchedPtriiii_param_2,
.param .u32 _Z13makeProcFrame14cudaPitchedPtriiii_param_3,
.param .u32 _Z13makeProcFrame14cudaPitchedPtriiii_param_4
)
最后在CUDA代码中,这里是被调用的行:
__global__ void makeProcFrame(
cudaPitchedPtr YProcBasePtr,
int numFrames,
int width,
int height,
int lineBytes
)
任何人都可以告诉我为什么我得到错误返回而不是找到功能?
编辑:这是用于编译的批处理文件:
“C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v4.2 \ bin \ nvcc.exe” -gencode = arch = compute_20,code = sm_20 -ccbin“C:\ Program Files(x86)\ Microsoft Visual Studio 10.0 \ VC \ bin”-I“C:\ Program Files \ NVIDIA GPU Computing Toolkit \ CUDA \ v4.2 \ include“-O -G --machine 32 --maxrregcount = 0 -ptx -o =“filterKernelHand.ptx”filterKernel.cu
答案 0 :(得分:7)
在声明CUDA内核时使用“extern”C“” - 这样编译器就不会破坏函数名。