CUDA - Создание объектов в ядре и использование их на хосте [duplicate]

На этот вопрос уже есть ответ здесь:

Как скопировать память, выделенную в функции устройства, обратно в основную память 1 ответ

Мне нужно использовать полиморфизм в моих ядрах. Единственный способ сделать это - создать эти объекты на устройстве (сделать виртуальную таблицу методов доступной на устройстве). Вот объект, который создается

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)

Ваш ответ на вопрос