变量在一个函数中有值,在传递给另一个函数时为0?

时间:2012-04-05 18:39:37

标签: c cuda

所以我的问题是,我将一个变量值(它是一个浮点数)从我的C代码中的一个函数传递给另一个函数。由于某种原因,传递后变量为0。我有多个其他浮点数通过值传递,不是0(所有在同一个函数调用中),所以我不明白为什么这个。它可能就像我刚才看不到的一些错字一样简单:

int cuda_call(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W){

    printf("\n What am I here?: %f \n", kernelSum);
    convolutionProgram(h_DataA, h_Kernel, numSmooths, kernelSum, KERNEL_R, KERNEL_W, DATA_W);
    return 1;
}

extern "C" void convolutionProgram(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W);


void convolutionProgram(float *h_DataA, float *h_Kernel, int numSmooths, float kernelSum, int KERNEL_R, int KERNEL_W, int DATA_W){

    printf("\n what am I now? %f \n", kernelSum);
    float
        *d_DataA,
        *d_DataB,
        *d_Temp,
    *d_Kernel;
       .......
}

到达被调用函数中的第二个打印时,它为0。

2 个答案:

答案 0 :(得分:1)

也许你最终混淆了呼叫约定(ABI)。例如,第一个编译单元可能正在执行cdecl调用,而第二个编译单元则使用fastcall进行编译。

http://en.wikipedia.org/wiki/X86_calling_conventions

答案 1 :(得分:0)

您是否有可能没有为其中一个c文件重建目标文件?这看起来像签名不匹配,可以通过函数签名更改而不重建两个目标文件。