Многоядерный - как объединить локальные группы данных, найденных на каждом ядре? - PullRequest
3 голосов
/ 18 июня 2009

У меня есть большой набор скалярных значений, распределенных по трехмерной сетке (одно значение на вершину.)

Моя цель показать:

  • все точки сетки, где значение превышает пороговое значение.
  • И сгруппируйте точки, которые связаны (для упрощения отображения.)

Итак, мое основное решение было:

  1. Найдите точки, которые проходят пороговое испытание
  2. Для каждой точки, которая не была сгруппирована, создайте новую группу и рекурсивно поместите все связанные точки в эту группу.

Это прекрасно работает, пока я не начал использовать многоядерное решение:

  • Набор данных был разделен на несколько ядер
  • Каждое ядро ​​знает о граничных точках, которые совместно используются другими ядрами.
  • Я использую MPI для связи между ядрами.

Я использовал свой оригинальный алгоритм для поиска "локальных" групп в одном ядре.

Моя задача - объединить «локальные» группы в глобальные группы. Проблема усложняется по ряду причин: связанные группы могут пересекать многие основные границы. Группы, которые кажутся отдельными на одном ядре, могут быть связаны группой на втором ядре.

Заранее спасибо. Джефф

1 Ответ

1 голос
/ 19 июня 2009

пороговое испытание может проводиться локально, поэтому для простоты мы можем исключить его из обсуждения. Вам нужен распределенный алгоритм , который вычисляет подключенные компоненты в вашем графике . Эта статья должна быть очень актуальной:

http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.46.1091

...