首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用cudaMalloc分配的内存显示为‘?’

使用cudaMalloc分配的内存显示为‘?’
EN

Stack Overflow用户
提问于 2017-11-01 21:33:27
回答 1查看 202关注 0票数 1

我下载了NVIDIA计算工具包(包含CUDA 9.0 SDK)。在SDK中,有一个名为cppIntegration的Visual项目。

cppIntegration项目中,有类型为char*的变量使用cudaMalloc()分配内存,然后使用cudaMemcpy()将数据复制到这些变量中。在Visual中调试项目时,我可以看到char*变量指出的内存地址,但是当我试图使用调试器中的内存窗口读取该内存时,我只会反复看到?? ?? ??

.cu项目中的cppIntegration文件如下(仅显示与问题相关的代码):

代码语言:javascript
复制
extern "C" bool
runTest(const int argc, const char **argv, char *data, int2 *data_int2, unsigned int len)
{
    // use command-line specified CUDA device, otherwise use device with highest Gflops/s
    findCudaDevice(argc, (const char **)argv);

    const unsigned int num_threads = len / 4;
    assert(0 == (len % 4));
    const unsigned int mem_size = sizeof(char) * len;
    const unsigned int mem_size_int2 = sizeof(int2) * len;

    // allocate device memory
    char *d_data;
    checkCudaErrors(cudaMalloc((void **) &d_data, mem_size));
    // copy host memory to device
    checkCudaErrors(cudaMemcpy(d_data, data, mem_size,
                               cudaMemcpyHostToDevice));
    ...
    ...
    ...
}

runTest()是从main()调用的。

我试着查看d_data指出的数据,但它显示为?? ?? ??。如何查看char***?** 所指向的实际内存数据?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 21:43:16

您无法在主机(= CPU)调试器中查看此内存。cudaMalloc分配设备(= GPU)内存,因此指针返回到GPU内存中,在主机上没有任何意义。从主机的角度来看,设备内存指针只是一个黑匣子值.只有设备代码才能取消引用。

要想在调试时查看设备内存的内容,必须使用设备调试器(如NSight或cuda)并在设备代码中放置断点。我没有这方面的经验,虽然,所以我不能提供更多的信息。

如果要在主机上查看此类内存,则必须将其复制到主机内存中。cudaMemcpy(..., cudaMemcpyDeviceToHost)和类似的函数就是这样做的。

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

https://stackoverflow.com/questions/47064031

复制
相关文章

相似问题

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