2016-01-31 2 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-интерфейсы управления загрузкой хоста и драйверами не могут использоваться для доступа к распределениям, выполненным в куче времени выполнения, с использованием new или malloc. У хоста нет способа скопировать экземпляры Vertex с устройства.

Смежные вопросы