2013-10-09 77 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碰巧存储在它后面,它也会覆盖它。