首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在cudaMemcpyFromSymbol中使用指针声明全局设备数组

在cudaMemcpyFromSymbol中使用指针声明全局设备数组
EN

Stack Overflow用户
提问于 2016-04-13 22:35:47
回答 2查看 424关注 0票数 2

当我使用下面的代码时,它显示了正确的值3345。

代码语言:javascript
复制
#include <iostream>
#include <cstdio>

__device__ int d_Array[1];

__global__ void foo(){
    d_Array[0] = 3345;
}

int main()
{
    foo<<<1,1>>>();
    cudaDeviceSynchronize();
    int h_Array[1];
    cudaMemcpyFromSymbol(&h_Array, d_Array, sizeof(int));
    std::cout << "values: " << h_Array[0] << std::endl;
}

但是如果我们用__device__ int *d_Array;替换__device__ int d_Array[1];这行代码,它会显示一个错误的值。为什么?

EN

回答 2

Stack Overflow用户

发布于 2016-04-14 01:08:02

问题出在内存分配上。在C++上(在主机上)尝试相同的操作,您将得到一个错误或意外的值。此外,您可以在内核之后调用cudaGetLastError()来检查Cuda错误。在第一种情况下,一切都很好,结果是cudaSuccess。在第二种情况下,出现cudaErrorLaunchFailure错误。以下是对此错误的解释(来自cuda工具包文档):

“执行内核时设备上发生异常。常见原因包括取消引用无效的设备指针和访问超出界限的共享内存。在调用cudaThreadExit()之前,无法使用该设备。所有现有的设备内存分配都是无效的,如果程序要继续使用CUDA,则必须重新构造。”

票数 2
EN

Stack Overflow用户

发布于 2018-06-01 07:27:48

请注意,cudaMemcpyToSymbol还支持用于数组索引的offset参数

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

https://stackoverflow.com/questions/36601727

复制
相关文章

相似问题

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