Я не уверен в источнике ваших данных, но вы могли бы использовать плоское пространство памяти и использовать смещение индекса в качестве индекса для доступа к памяти.
т.е.
Узел будетбыть определенным как:
struct Node
{
unsigned int name;
unsigned int number_of_children;
unsigned int parent;
unsigned int children;
}
Вы бы поместили один большой блок памяти и построили там свое дерево.(Сохраняйте счетчик памяти последнего места, куда вы вставили элемент).
Вы также делаете это для добавления строк.
Таким образом, у вас будет один непрерывный кусок памяти, и он будетбыть простой копией памяти.Доступ к элементам, с которыми будет работать простое приведение.
Означает переписывание кода дерева и строки, но будет поддерживать его согласованность.Если вы не знаете, насколько большой будет ваша память, вы можете сделать это на страницах и изменить ссылки на пары целых, которые облегчат выделение памяти.
Питер.
PS: инженер по встраиванию не программист CUDA, но столкнулся с похожими проблемами, перемещая деревья по процессорам без необходимости разбора.