2016-10-28 34 views
1

私の質問は、GPUメモリに座っている変数に明示的に値を割り当てることができますか、常にcudaMemcpyを使用する必要がありますか?CUDAのGPUメモリの変数に値を代入する

int * a; 
cudaMalloc((void**)&a, sizeof(int)); 
*a = 5; 

するか、私は行うことができます:

例えば私はこれを行うことができ

int * dev_a; 
int a = 5; 
cudaMalloc((void**)&dev_a, sizeof(int)); 
cudaMemcpy(dev_a, &a, sizeof(int) , cudaMemcpyHostToDevice); 

答えて

0

簡単な答えは、デバイスメモリに値を割り当てることができないこと、です。これには2つの理由があります。理由は、デバイスのメモリがRAMにはなく物理的にgpuにあり、pcieブリッジを介して値を転送する必要があるからです。

より複雑な答えは、あなたがやりたいことをやっているcuda 6以降、統一されたメモリを使うことができるということです。転送はバックグラウンドで行われ、時間がかかることに注意してください。

https://devblogs.nvidia.com/parallelforall/unified-memory-in-cuda-6/

関連する問題