CUDA - Creando objetos en el kernel y usándolos en el host [duplicado]

Esta pregunta ya tiene una respuesta aquí:

Cómo copiar la memoria asignada en la función del dispositivo a la memoria principal 1 respuesta

Necesito usar polimorfismo en mis núcleos. La única forma de hacerlo es crear esos objetos en el dispositivo (para hacer que una tabla virtual de mehod esté disponible en el dispositivo). Aquí está el objeto que se está creando.

class Production {
    Vertex * boundVertex;
}


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

Luego en el host hago:

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

dónde

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

La pregunta es ¿cómo obtengo los vértices izquierdo y derecho de la producción creada en el dispositivo nuevamente en el host? Sé que usar punteros en las clases los hace muy difíciles de manejar, pero ... no hay otra forma de crear esa estructura de árbol.

Respuestas a la pregunta(1)

Su respuesta a la pregunta