【问题标题】:CUDA: Using realloc inside kernelCUDA:在内核中使用 realloc
【发布时间】:2011-07-16 09:46:21
【问题描述】:

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

【问题讨论】:

  • 你从哪里得到这些信息的? AFAIK 内核中没有内存管理之类的东西。你必须提前准备好一切。
  • malloc 和 free 根据 3.2 编程指南支持。
  • 还有newdelete,从4.0开始

标签: cuda


【解决方案1】:

在 Cuda 编程指南中,当他们介绍 mallocfree 函数时,没有提到 realloc。我会假设它不存在。

如果你想肯定知道,不如写个简单的内核试试看?

【讨论】:

    【解决方案2】:

    您可以为您的数据类型编写自己的 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;
    }
    

    但是如果你真的需要它,一定要调用它。还要添加适当的错误检查。

    【讨论】:

    • 如果 newsize
    猜你喜欢
    • 2021-02-07
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-12-09
    • 2011-08-09
    • 2018-01-07
    • 1970-01-01
    • 2019-07-26
    相关资源
    最近更新 更多