Передача структуры на основе указателя в CUDA - PullRequest
1 голос
/ 06 ноября 2011

У меня есть код C, который использует указатель на struct.Я пытаюсь выяснить, как передать его в Cuda без особой удачи.

У меня есть

typedef struct node {        /* describes a tip species or an ancestor */
  struct node *next, *back;  /* pointers to nodes                      */
 etc...
} node;

Затем

typedef node **pointptr;
static pointptr treenode;

В моем коде я перебираювсе это, и я пытаюсь выяснить, как передать их ядру, чтобы я мог выполнить следующую операцию:

for (i = 1; i <= nonodes; i++) {
    treenode[i - 1]->back = NULL;
    etc....
}

Но я не могу понять, как это передать.Есть идеи?

Ответы [ 2 ]

1 голос
/ 06 ноября 2011

Проблема в том, что для того, чтобы использовать ваше дерево внутри ядра, ваши 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 вместо указателей (возможно, при необходимости заменяя их на указатели в коде устройства).

0 голосов
/ 06 ноября 2011

Проверьте этот вопрос:

Копирование дерева с несколькими ветвями в память графического процессора

Хотя это не отвечает на ваш вопрос точно , я думаю, что это может прояснить некоторые вещи и в конечном итоге поможет вам решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...