【问题标题】:CUDA - Creating objects in kernel and using them at host [duplicate]CUDA - 在内核中创建对象并在主机上使用它们[重复]
【发布时间】:2016-05-09 01:09:21
【问题描述】:

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

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();
}

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

【问题讨论】:

  • 你的问题不清楚。您描述的方法不是已经在设备上创建了左右顶点吗?您是在问“创建后,如何将左右顶点移回主机?”我认为您对dProd 的设置有点奇怪,但这似乎并没有影响任何事情。
  • 我想在主机上取消引用 leftChild 和 rightChild。它们是在设备上创建的,我需要它们在主机上。

标签: c++ cuda nvidia


【解决方案1】:

你不能那样做。

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

【讨论】:

    猜你喜欢
    • 2015-03-09
    • 2016-02-23
    • 1970-01-01
    • 2015-04-13
    • 2012-04-13
    • 2019-06-03
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多