Мне нужно использовать полиморфизм в моих ядрах. Единственный способ сделать это - создать эти объекты на устройстве (чтобы сделать виртуальную таблицу mehod доступной на устройстве). Вот объект создаетсяCUDA - Создание объектов в ядре и использование их на хосте
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();
}
Вопрос в том, как я могу получить обе левые и правые вершины производства создали на устройстве обратно на хост? Я знаю, что использование указателей в классах делает их очень трудными для обработки, но ... нет другого способа создания такой древовидной структуры.
Ваш вопрос непонятен. Разве описанный метод уже не создает левую и правую вершины на устройстве? Вы спрашиваете «когда-то созданный, как переместить левую и правую вершины обратно на хост?» Я думаю, что ваша настройка 'dProd' немного странная, но, похоже, это не влияет ни на что. –
Я хотел бы разыменовать leftChild и rightChild на хосте. Они созданы на устройстве, и они мне нужны на хосте. – kboom