0

したがって、私の問題は、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;
       .......
}

呼び出された関数でその 2 番目の出力に到達するまでに、それは 0 です。

4

2 に答える 2

1

たぶん、あなたはどういうわけか呼び出し規約(ABI)を混ぜ合わせてしまったのでしょう。たとえば、最初のコンパイルユニットがcdecl呼び出しを実行しているのに対し、2番目のコンパイルユニットはでコンパイルされている場合がありfastcallます。

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

于 2012-04-05T19:29:18.627 に答える
0

いずれかのcファイルのオブジェクトファイルを再構築していない可能性はありますか?これは、両方のオブジェクトファイルを再構築せずに関数の署名の変更から生じる可能性のある署名の不一致のように見えます。

于 2012-04-05T18:44:44.773 に答える