所以我的问题是,我将一个变量值(它是一个浮点数)从我的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。
答案 0 :(得分:1)
也许你最终混淆了呼叫约定(ABI)。例如,第一个编译单元可能正在执行cdecl
调用,而第二个编译单元则使用fastcall
进行编译。
答案 1 :(得分:0)
您是否有可能没有为其中一个c文件重建目标文件?这看起来像签名不匹配,可以通过函数签名更改而不重建两个目标文件。