CUDA - Objekte im Kernel erstellen und auf dem Host verwenden [duplizieren]
Diese Frage hat hier bereits eine Antwort:
Wie kopiere ich den in der Gerätefunktion zugewiesenen Speicher zurück in den Hauptspeicher? 1 AntwortIch muss Polymorphismus in meinen Kerneln verwenden. Die einzige Möglichkeit besteht darin, diese Objekte auf dem Gerät zu erstellen (um eine virtuelle Mehod-Tabelle auf dem Gerät verfügbar zu machen). Hier wird das Objekt erstellt
class Production {
Vertex * boundVertex;
}
class Vertex {
Vertex * leftChild;
Vertex * rightChild;
}
Dann auf dem Host, den ich mache:
Production* dProd;
cudaMalloc(&dProd, sizeof(Production *));
createProduction<<<1,1>>>(dProd);
w
__global__ void createProduction(Production * prod) {
prod = new Production();
prod->leftChild = new Vertex();
prod->rightChild = new Vertex();
}
Die Frage ist, wie ich die linken und rechten Eckpunkte der auf dem Gerät erstellten Produktion auf den Host zurückbringe. Ich weiß, dass die Verwendung von Zeigern in Klassen die Handhabung sehr erschwert, aber es gibt keine andere Möglichkeit, eine solche Baumstruktur zu erstellen.