2016-04-05 36 views
-1

Bunu ana bilgisayar belleğinden aygıt belleğine nasıl kopyalayacağınız konusunda emin değilseniz, şu an üzerinde bir süredir çalışıyor ve hiçbir işlem yapmadan büyük ya da küçük her şeyden büyük mutluluk duyacağız .Ana bilgisayar belleğinden CUDA birimine bir aygıt eşlemesi kopyalama

unsigned char map[256] = { 

    8,0,2,0,0,0,0,0,0,0,2,0,2,0,0,0, 
    0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,7,0,0, 
    0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,2,0,0,0,1,0,0,0,0,0,0,0,1,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0, 
    0,1,1,1,0,0,0,0,0,0,0,0,3,0,0,0, 
    0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
    0,0,0,1,0,0,0,5,0,0,0,3,0,0,0,0, 
    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 
}; 

Buna benzer mi? kodunuzda bir segfault yaşıyorsanız

cudaMalloc(&d_n, sizeof(int)); 

    cudaMemcpy(d_n, &h_n, sizeof(int), cudaMemcpyHostToDevice); 

    kernel <<<16,16>>>(d_n); 

    cudaThreadSynchronize(); 

    cudaMemcpy(&h_n, d_n, sizeof(int), cudaMemcpyDeviceToHost); 

    cudaFree(d_n); 
+2

Tam olarak sorunuz nedir? Örneğin bir dizi nasıl kopyalanacağını biliyor musun? Değilse, o zaman [programlama kılavuzunu] okuyarak başlamalıdır (http://docs.nvidia.com/cuda/cuda-c-programming-guide/#device-memory). – havogt

+0

Eğer global belleğe sahip olmak istiyorsanız evet, cudaMemcpy'yi kullanabilirsiniz. Hangi hata oluyor? –

cevap

1

, bu durum aşağıdaki hata olabilir: Sen unsigned char dizisi kopyalamak için sizeof(int) kullanıyor

  1. .

  2. "map" adlı diziniz h_n mu? Bir unsigned char[] işaretçisidir, doğrudan cudaMemcpy yönteminde kullanabilirsiniz.

cudaMemcpy(d_n, map, 256 * sizeof(unsigned char), cudaMemcpyHostToDevice);

çalışmalıdır.