2016-01-31 30 views
0

我需要在內核中使用多態。這樣做的唯一方法是在設備上創建這些對象(以在設備上提供虛擬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(); 
} 

的問題是如何得到生產的左側和右側頂點創建在設備上回到主機上?我知道在類中使用指針使得它們很難處理,但是......沒有其他方法來創建這樣的樹結構。

+0

你的問題不清楚。您描述的方法是否已經在設備上創建了左右頂點?你問「一旦創建,如何將左右頂點移回主機?」我認爲你的'dProd'設置有點奇怪,但這似乎並沒有影響任何東西。 –

+0

我想將leftChild和rightChild解除引用回主機上。它們是在設備上創建的,我需要它們在主機上。 – kboom

回答

1

你不能那樣做。

主機運行時和驅動程序內存管理API不能用於訪問在運行時堆上使用newmalloc進行的分配。主機無法從設備複製這些Vertex實例。