CUDA - 在内核中创建对象并在主机上使用它们

CUDA - Creating objects in kernel and using them at host

我需要在内核中使用多态性。这样做的唯一方法是在设备上创建这些对象(使虚拟方法 table 在设备上可用)。这是正在创建的对象

class Production {
    Vertex * boundVertex;
}


class Vertex {
    Vertex * leftChild;
    Vertex * rightChild;
}

然后我在主机上做:

Production* dProd;
cudaMalloc(&dProd, sizeof(Production *));
createProduction<<<1,1>>>(dProd);

哪里

__global__ void createProduction(Production * prod) {
    prod = new Production();
    prod->leftChild = new Vertex();
    prod->rightChild = new Vertex();
}

问题是如何将在设备上创建的产品的左右顶点都返回到主机上?我知道在 类 中使用指针会使它们很难处理,但是...没有其他方法可以创建这种树结构。

你不能那样做。

主机运行时和驱动程序内存管理 API 不能用于访问使用 newmalloc 在运行时堆上进行的分配。主机无法从设备复制那些 Vertex 实例。