首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cuda内存分配cudaMalloc

cuda内存分配cudaMalloc
EN

Stack Overflow用户
提问于 2012-10-05 10:32:02
回答 1查看 1.6K关注 0票数 1

我有一个非常简单的问题,但我不明白。我正在使用4.2的cuda。

我有以下代码:

在我的cudaClass.h中:

代码语言:javascript
复制
unsigned char *dev_trimapExpanded;

在我的cudaClass.cpp中:

代码语言:javascript
复制
void cudaClass::expansionTrimap() {
    printf("dev_trimapExpanded %d before function \n", dev_trimapExpanded);
    //Call cuda function
    cudaError_t cudaStatus = expansionTrimapCuda(dev_trimapExpanded, width, height);
    if (cudaStatus != cudaSuccess) {
        fprintf(stderr, "expansionTrimapCuda failed!\n");
    }

    printf("dev_trimapExpanded %d after function \n", dev_trimapExpanded);
}

在我的文件kernel.cu中,我有:

代码语言:javascript
复制
cudaError_t expansionTrimapCuda(unsigned char *dev_trimapExpanded, size_t width, size_t height)
{
    size_t size = width*height;

    cudaError_t cudaStatus;

    // Choose which GPU to run on, change this on a multi-GPU system.
    cudaStatus = cudaSetDevice(0);
    if (cudaStatus != cudaSuccess) {
        fprintf(stderr, "cudaSetDevice failed!  Do you have a CUDA-capable GPU installed?");
        return cudaStatus;
    }

    printf("dev_trimapExpanded %d before cudaMalloc \n", dev_trimapExpanded);
    cudaStatus = cudaMalloc((void**)&dev_trimapExpanded, size);
    if (cudaStatus != cudaSuccess) {
        fprintf(stderr, "cudaMalloc dev_trimapExpanded failed!");
        return cudaStatus;
    }
    printf("dev_trimapExpanded %d after cudaMalloc \n", dev_trimapExpanded);

    return cudaStatus;
}

输出为:

代码语言:javascript
复制
dev_trimapExpanded 0 before function
dev_trimapExpanded 0 before cudaMalloc
dev_trimapExpanded 93323264 after cudaMalloc
dev_trimapExpanded 0 after function

我的指针在cudaMalloc调用前的地址是0,这是正常的,但是我不明白为什么函数之后的地址是0。指针dev_trimapExpanded的地址不应更改。cudaMalloc的作用域是否只在函数中?内存也不是空的。如何在不同内核调用之间跟踪全局内存?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-05 10:51:22

这种行为是绝对正确的,你的问题是,你是“通过值”来传递指针,而不是“通过引用”来调用函数。所以现在发生的事情是,当函数被称为你的指针被复制时,副本的值在函数内部被改变了,但是当函数结束时,旧的指针根本不受影响(因为所有的变化只发生在副本上)。

对你的函数头试试这个:

代码语言:javascript
复制
cudaError_t expansionTrimapCuda(unsigned char *& dev_trimapExpanded, ... )

另请参阅:Pointer to Pointer / Reference to Pointer

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

https://stackoverflow.com/questions/12738711

复制
相关文章

相似问题

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