CUDA:在内核中使用realloc

3

我知道在内核中可以使用malloc来分配GPU全局内存。那么能否使用realloc呢?


你从哪里得到这个信息的?据我所知,在内核中没有内存管理这样的东西。你必须提前准备好一切。 - Jonas Bötel
根据3.2编程指南,支持malloc和free函数。 - Ade Miller
1
自4.0版本起,newdelete也可以使用。 - Manolete
2个回答

5

您可以为自己的数据类型编写realloc设备函数。

只需为新数组分配新空间,将旧值复制到新数组中,释放旧数组空间,返回具有更多空间的新数组即可。

代码片段大致如下:

__device__ MY_TYPE* myrealloc(int oldsize, int newsize, MY_TYPE* old)
{
    MY_TYPE* newT = (MY_TYPE*) malloc (newsize*sizeof(MY_TYPE));

    int i;

    for(i=0; i<oldsize; i++)
    {
        newT[i] = old[i];
    }

    free(old);
    return newT;
}

但是如果你真的需要它,请务必调用它。同时添加适当的错误检查。


2
如果newsize < oldsize,循环就应该是到newsize为止,对吧?而且old可以是null。 - shaoyl85

4
在Cuda编程指南中,介绍了mallocfree函数,但没有提到realloc。我认为这个函数不存在。
如果你想确定它是否存在,为什么不写一个简单的内核并尝试使用它呢?

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接