2013-10-09 116 views
0

這是我的程序代碼,該程序對圖像執行直方圖,然後對直方圖http://codepad.org/4RMtWn1e進行前綴和掃描。問題出現在第396行,它在1024處正確輸出numBins的值(直方圖的bin數)。我將直方圖從設備內存複製回主機內存。這以某種方式改變了numBins的值,並且下一個輸出爲0.這看起來很奇怪。我沒有對numBins做任何特定的修改,但是它改變了這個值。我覺得如果我能弄明白這一點,我會理解爲什麼我的程序不工作。cudaMemcpy影響其他變量

回答

2

這是錯誤的:

unsigned int* h_histogram; 
h_histogram = (unsigned int*) malloc(sizeof(unsigned int)* 1024); 

std::cout << numBins; 

checkCudaErrors(cudaMemcpy(&h_histogram, d_histogram, sizeof(unsigned int)* numBins, cudaMemcpyDeviceToHost)); 
         ^
          | 
          h_histogram is already a pointer 

而是做到這一點:

checkCudaErrors(cudaMemcpy(h_histogram, d_histogram, sizeof(unsigned int)* numBins, cudaMemcpyDeviceToHost)); 

(唯一的變化是刪除符號在h_histogram

前我不知道爲什麼真的numBins確實被損壞了,但是這個特殊的錯誤cudaMemcpy操作不會被複制到你期望的目的地,而是會結束寫存儲在h_histogram的指針值以及其後的任何內容。如果numBins碰巧存儲在它後面,它也會覆蓋它。