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