代码之家  ›  专栏  ›  技术社区  ›  kboom

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

  •  0
  • kboom  · 技术社区  · 9 年前

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

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

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

    1 回复  |  直到 9 年前
        1
  •  1
  •   talonmies    9 年前

    你不能那样做。

    主机运行时和驱动程序内存管理API不能用于使用 new malloc 。主机无法复制这些 Vertex 实例。