c++ - tutorial - cuda ubuntu
CUDA-Creando objetos en kernel y usándolos en el host (1)
Esta pregunta ya tiene una respuesta aquí:
Necesito usar polimorfismo en mis kernels. La única forma de hacerlo es crear esos objetos en el dispositivo (para hacer que una tabla de mehod virtual 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 que 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 puedo obtener los vértices izquierdo y derecho de la producción creada en el dispositivo 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.
No puedes hacer eso.
Las API de administración de la memoria del controlador y del tiempo de ejecución del host no se pueden usar para acceder a las asignaciones realizadas en el montón de tiempo de ejecución utilizando new
o malloc
. No hay forma de que el host copie esas instancias de Vertex
desde el dispositivo.