【问题标题】:cudaMemcpy throwing error during simple copy简单复制期间 cudaMemcpy 抛出错误
【发布时间】:2012-01-13 15:23:13
【问题描述】:

下面是一小段代码,它将 4 个元素从一个数组复制到 GPU。我真的不明白为什么 cudaMemcpy 在这种情况下会抛出错误。请帮忙

int size = 5;
float *a = (float*)malloc(size * sizeof(float));
a[0] = 1.0;
a[1] = 2.0;
a[2] = 3.0;
a[3] = 4.0;
a[4] = 5.0;

float *g;
cudaMalloc((void**)g, 4 * sizeof(float));
float *tem = a+2;
cudaError_t err = cudaMemcpy(g,a,4 * sizeof(float), cudaMemcpyHostToDevice);
if(err !=0){
    printf("Cudamemcpy threw error\n");
    getchar();  
}

【问题讨论】:

  • 到底抛出了什么错误? cudaGetErrorString 会将任何运行时 API 函数的返回状态解析为人类可读的字符串。
  • 我看到您在 GPU 上分配了一个大小为 4 的浮点数数组,并将一个大小为 5 个浮点数的数组复制到其中。
  • @Jay:内存副本只是将4*sizeof(float) 字节复制到数组中。这不是缓冲区溢出。

标签: cuda gpgpu nvidia


【解决方案1】:

我认为您缺少一个&符号:

cudaMalloc((void**)&g, 4 * sizeof(float));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-08
    • 2017-04-13
    相关资源
    最近更新 更多