如何有效地将内核 malloc 数据返回到 CPU

How do I efficiently return kernel malloc data back to cpu

本文关键字:数据 返回 CPU malloc 内核 有效地      更新时间:2023-10-16

假设我在内核中malloc一些结构,在那里我执行了一些计算。然后我想返回这些变量,但是当我初始化内核时它们没有作为指针发送,所以如果我想返回这些值。我将如何去做?示例代码如下。

我只是作为一个一般性问题来问这个问题,而不是解决下面的代码。我还有其他问题,我遇到了这个问题,我不知道最好的方法是什么。我知道你可以扔一个指针并将结果复制到上面。但是,如果结果的大小不是预先确定的,则很难有效地做到这一点。所以我问是否有更好的方法。

__global__ void addKernel()
{
    int* c = (int*)malloc(sizeof(int) * 32);
#pragma unroll
    for (int i = 0; i < 32; i++){
        c[i] += 1;
    }
}

使用设备端分配(newmalloccudaMalloc)分配的指针不能由主机端 API 调用使用。因此,传输存储在设备运行时分配的内存中的数据的唯一方法是将其复制到内核中由主机分配的内存并传递给正在运行的内核。

设备

运行时支持设备到设备内存副本的memcpycudaMemcpyAsync。我怀疑在这种情况下,这些将是你最好的选择。应仔细研究文档的这一部分,以便了解设备运行时 API 的限制。