CUDA:在内核中使用 realloc

kil*_*kil 3 cuda

我知道可以malloc在内核内部使用GPU的全局内存来分配内存。是不是也可以使用呢realloc

Yes*_*ame 5

您可以为您的数据类型编写自己的重新分配设备函数。

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

大概像下面的代码片段:

__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;
}
Run Code Online (Sandbox Code Playgroud)

但如果您确实需要的话,请务必调用它。还要添加适当的错误检查。

  • 如果 newsize &lt; oldsize,则循环应该直到 newsize 对吗?另外,旧的可以为空。 (2认同)