CUDA - Criando objetos no kernel e usando-os no host [duplicado]

Esta pergunta já tem uma resposta aqui:

Como copiar a memória alocada na função do dispositivo de volta para a memória principal 1 resposta

Eu preciso usar o polimorfismo em meus núcleos. A única maneira de fazer isso é criar esses objetos no dispositivo (para disponibilizar uma tabela mehod virtual no dispositivo). Aqui está o objeto que está sendo criado

class Production {
    Vertex * boundVertex;
}


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

Então, no host, eu faço:

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

Onde

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

A questão é como faço para obter os vértices esquerdo e direito da produção criada no dispositivo novamente no host? Eu sei que usar ponteiros nas classes os torna muito difíceis de manusear, mas ... nenhuma outra maneira de criar essa estrutura de árvore.