CUDA - 在内核中创建对象并在主机上使用它们
CUDA - Creating objects in kernel and using them at host
我需要在内核中使用多态性。这样做的唯一方法是在设备上创建这些对象(使虚拟方法 table 在设备上可用)。这是正在创建的对象
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();
}
问题是如何将在设备上创建的产品的左右顶点都返回到主机上?我知道在 类 中使用指针会使它们很难处理,但是...没有其他方法可以创建这种树结构。
你不能那样做。
主机运行时和驱动程序内存管理 API 不能用于访问使用 new
或 malloc
在运行时堆上进行的分配。主机无法从设备复制那些 Vertex
实例。
我需要在内核中使用多态性。这样做的唯一方法是在设备上创建这些对象(使虚拟方法 table 在设备上可用)。这是正在创建的对象
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();
}
问题是如何将在设备上创建的产品的左右顶点都返回到主机上?我知道在 类 中使用指针会使它们很难处理,但是...没有其他方法可以创建这种树结构。
你不能那样做。
主机运行时和驱动程序内存管理 API 不能用于访问使用 new
或 malloc
在运行时堆上进行的分配。主机无法从设备复制那些 Vertex
实例。