0

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

4

1 回答 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 回答