Pointers cudaMemcpy会影响其他变量

Pointers cudaMemcpy会影响其他变量,pointers,memory,cuda,copy,device,Pointers,Memory,Cuda,Copy,Device,这是我为一个程序编写的代码,该程序对图像进行直方图扫描,然后对直方图进行前缀和扫描。问题出在第396行,它正确地输出1024处的numBins(直方图的箱数)值。然后将直方图从设备内存复制回主机内存。这会以某种方式更改numBins的值,其下一个输出为0。这似乎很奇怪。我没有对numBins进行任何特定的修改,但它还是改变了值。我觉得如果我能弄明白这一点,它会让我明白为什么我的程序不工作。这是错误的: unsigned int* h_histogram; h_histogram = (unsig

这是我为一个程序编写的代码,该程序对图像进行直方图扫描,然后对直方图进行前缀和扫描。问题出在第396行,它正确地输出1024处的numBins(直方图的箱数)值。然后将直方图从设备内存复制回主机内存。这会以某种方式更改numBins的值,其下一个输出为0。这似乎很奇怪。我没有对numBins进行任何特定的修改,但它还是改变了值。我觉得如果我能弄明白这一点,它会让我明白为什么我的程序不工作。

这是错误的:

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
(唯一的更改是删除
h\u直方图前面的符号

我真的不知道为什么
numBins
被破坏了,但是这个错误的
cudaMemcpy
操作不会复制到您期望的目标,相反它会覆盖存储在
h_直方图中的指针值以及它之后的任何内容。如果
numBins
恰好是在它之后,它也会覆盖它

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