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();
}
Вопрос в том, как вернуть на хост как левые, так и правые вершины производства, созданного на устройстве? Я знаю, что использование указателей в классах делает их очень сложными в обращении, но ... нет другого способа создать такую древовидную структуру.