这是我的程序代码,该程序对图像进行直方图,然后对直方图进行前缀和扫描http://codepad.org/4RMtWn1e。问题出在第 396 行,它在 1024 处正确输出了 numBins(直方图的 bin 数)的值。我将直方图从设备内存复制回主机内存。这以某种方式改变了 numBins 的值,下一个输出是 0。这看起来很奇怪。我没有对 numBins 进行任何具体修改,但无论如何它都会改变值。我觉得如果我能弄清楚这一点,我就会明白为什么我的程序不起作用。
问问题
201 次
1 回答
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
碰巧存储在它之后,它也会覆盖它。
于 2013-10-10T02:16:57.277 回答