CUDA设备到主机的数据传输错误



我在将设备数据检索到主机时遇到问题。。在下面的示例程序中。。我在host中制作了一个hostData数组,并为它提供了值。然后,我将hostData传输到deviceData变量,并再次将相同的数据传输到新的主机数据数组,即hostDataFinal。当我打印存储在hostDataFinal中的值时,输出为ok,其余显示为垃圾值。所有值都应与hostData数组中的值相同。请帮我一下。

#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
int main()
{
int totalData = 20;
int *hostData;
hostData = new int[totalData];
std::cout<<std::endl<<std::endl<<"HostData Values : "<<std::endl;
for (int i=0; i<totalData ;i++)
{
    hostData[i]= i+1;
    std::cout<<hostData[i]<<" "; 
}
int *deviceData;
int *hostDataFinal;
cudaMalloc((void**)&deviceData,totalData*sizeof(int));
hostDataFinal = new int[totalData];
cudaMemcpy(deviceData,hostData,totalData,cudaMemcpyHostToDevice);
cudaMemcpy(hostDataFinal,deviceData,totalData,cudaMemcpyDeviceToHost);
std::cout<<std::endl<<std::endl<<"HostDataFinal After Device Transfer Values : "<<std::endl;
for (int i=0; i<totalData ;i++)
{
    std::cout<<hostDataFinal[i]<<" "; 
}
free(hostData);
free(hostDataFinal);
cudaFree(deviceData);
return 0;

}

程序输出:

主机数据值:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

设备传输值后的HostDataFinal:

1 2 3 4 5-842150451-842150452-842150 451-845150 451-842150 451-841 150451-822150 451-82150 451-825150 451 842 150451-842 150452-84215 451-8451

实际输出应为:

主机数据值:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

设备传输值后的HostDataFinal:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

谢谢你的帮助。

您的问题就在这几行。cudaMemcpy中的第三个参数是要复制的字节数。

cudaMemcpy(deviceData,hostData,totalData,cudaMemcpyHostToDevice);
cudaMemcpy(hostDataFinal,deviceData,totalData,cudaMemcpyDeviceToHost);

应该是

cudaMemcpy(deviceData,hostData,totalData *sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(hostDataFinal,deviceData,totalData*sizeof(int),cudaMemcpyDeviceToHost);

此外,请确保处理返回的错误代码,如这里所示

最新更新