cudaMemcpyToSymbol の使用に問題があります。うまく動作するコードがあります。私のコードの削減バージョンは次のとおりです。
mykernel.h file:
__global__
void foo(float* out);
mykernel.cu file:
#include "kernels.h"
__global__
void foo(float* out)
{
uint32_t idx = blockIdx.x * blockDim.x + threadIdx.x;
out[idx] = 10;
}
main.cu file:
#include "kernels.h"
main()
{
// initialization and declaration stuff here
foo<<<1,1,1>>>(my_global_memory);
// read back global memory and investigate values
}
上記のコードは完璧に機能します。ここで、この「10」の値を定数メモリからの値に置き換えたいと思います。だから私がしたことは:
__constant__ float my_const_var;
mykernel.h ファイルに追加します。- カーネルの最後の行を
out[idx] = my_const_var;
mykenel.cu に置き換えます float value = 10.0f; cudaMemcpyToSymbol(my_const_var,&value);
main.cu の呼び出しの前に追加
すべてを実行した後、「10」ではなく「0」の結果が得られるため、cudaMemcpyToSymbol が実際の値をコピーしていないように見えます。さらに、私は常に CUDA エラーをチェックしていますが、エラーはありません。誰かが私が間違っていることを教えてもらえますか? cudaMemcpyToSymbol が値をシンボルにコピーしないのはなぜですか? Debian Linux と CUDA SDK 5.0 の最新ドライバーで GeForce9600M (コンピューティング機能 1.1) を使用しています。cuda-memcheck も実行してみましたが、エラーは発生しません。