2012-09-25 37 views
3

我已经为其他应用程序完成了这项工作,但由于某种原因,它不适用于我当前的应用程序。在ptx文件中找不到函数

这里是一个代码片段,在VS2010中使用Cuda 4.2。我编了PTX文件内外VS和VS也没有外解决问题:

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计算工具包\ 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 \包括“-O -G - 机器32 --maxrregcount = 0 -ptx -o =”filterKernelHand.ptx“filterKernel.cu

回答

7

声明CUDA内核时使用“extern”C“” - 这样编译器不会破坏函数名称。

+0

非常感谢!我其实知道这一点,忘了我知道。再次非常感谢让我解散。 – JPM