Проблема в том, что для того, чтобы использовать ваше дерево внутри ядра, ваши next
и back
должны, вероятно, указывать где-то в памяти устройства.Предполагая, что вы создаете свое дерево на хосте и затем передаете его, вы можете сделать что-то вроде:
node* traverse(node*n){
if (n==NULL)
return NULL;
node x, *d;
x.back = traverse(n->back);
x.next = traverse(n->next);
cudaMalloc(&d, sizeof(node));
cudaMemcpy(d, &x, sizeof(node), cudaMemcpyHostToDevice);
return d;
}
и, вызвав его в корне, вы получите указатель на корень дерева впамять устройства, которую вы можете передать непосредственно в ваше ядро.Я не тестировал этот код, и вам нужно было бы написать что-то похожее для последующего удаления дерева.
В качестве альтернативы, вы можете хранить узлы дерева непрерывно внутри массива с индексами в back
иnext
вместо указателей (возможно, при необходимости заменяя их на указатели в коде устройства).