首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CUDA设备托管数据传输错误

CUDA设备托管数据传输错误
EN

Stack Overflow用户
提问于 2013-12-06 01:53:28
回答 1查看 1.5K关注 0票数 2

我在检索要托管的设备数据时遇到了问题。在下面的示例程序中。我在主机中创建了一个hostData数组,并为其提供了值。然后,我将hostData传递给deviceData变量,并再次将相同的数据传递给新的主机数据数组,即。hostDataFinal。当我打印存储在hostDataFinal中的值时,最多只有几个值,输出是ok,rest显示为垃圾值。所有值都应该与hostData数组中的值相同。请帮我一把。

代码语言:javascript
运行
复制
#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;

}

该方案的产出:

HostData值:1 2 3 4 5 6 7 9 10 11 13 14 15 16 17 18 19 20

设备传输值后的HostDataFinal:

1 2 3 4 5 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451 -842150451-842150451-842150451

实际产出应是:

HostData值:1 2 3 4 5 6 7 9 10 11 13 14 15 16 17 18 19 20

设备传输值后的HostDataFinal:

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

谢谢你的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-06 02:04:33

你的问题就在这些线上。cudaMemcpy中的第三个参数是要复制的字节数。

代码语言:javascript
运行
复制
cudaMemcpy(deviceData,hostData,totalData,cudaMemcpyHostToDevice);
cudaMemcpy(hostDataFinal,deviceData,totalData,cudaMemcpyDeviceToHost);

应该是

代码语言:javascript
运行
复制
cudaMemcpy(deviceData,hostData,totalData *sizeof(int),cudaMemcpyHostToDevice);
cudaMemcpy(hostDataFinal,deviceData,totalData*sizeof(int),cudaMemcpyDeviceToHost);

还要确保处理返回错误代码,如here所示

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20414505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档