Векторизация (SIMD) дерева операций - PullRequest
9 голосов
/ 27 августа 2011

Каковы некоторые общие советы / указатели по векторизации операций с деревом? Расположение памяти, алгоритм и т. Д.

Некоторые специфичные для домена вещи:

  • У каждого родительского узла будет довольно много (20–200) дочерних узлов.
  • У каждого узла низкая вероятность наличия дочерних узлов.
  • Операции на дереве в основном условные прогулки.
  • Производительность обхода дерева важнее скорости вставки / удаления / поиска.

Ответы [ 3 ]

7 голосов
/ 27 августа 2011

Осторожно, это очень сложно реализовать. В прошлом году команда Intel, Oracle и UCSC представила удивительное решение "FAST: быстрый поиск по архитектуре, чувствительный к дереву на современных процессорах и графических процессорах ". Они выиграли " Best Paper Award 2010 "от ACM SIGMOD .

2 голосов
/ 27 августа 2011

Из-за случайной природы деревьев не сразу очевидно, как векторизация прогулок будет для вас большим плюсом.

Я бы выложил дерево как плоский массив «узловых» элементов (parentid, data node), отсортированных по parentid, чтобы вы могли по крайней мере вместе посещать дочерние элементы узла.Конечно, это не даст вам много, если ваше дерево не «толстое» (т. Е. Небольшое количество детей в среднем на узел).

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

Редактировать: Я бы не выбрасывал обычный класс дерева, который у вас, скорее всего, есть, реализуйте способ SIMD и посмотритеесли ты действительно что-то получишь, я не уверен, что ты получишь ...

0 голосов
/ 13 февраля 2012

Как насчет использования алгоритмов теории спектральных графов?Их должно быть очень легко векторизовать, так как они имеют дело с матрицами.

...