2015-05-08 4 views
1

Я хочу построить двоичное дерево из 4 процессоров в MPI. В корне все процессоры работают вместе, на следующем уровне я разделяю процессоры на 2 группы, и таким образом в листе каждый процессор отвечает за построение локального дерева.Как построить параллельное двоичное дерево в MPI?

Я использовал mpi_comm_slpit для развязывания коммуникатора тока на 2 части. Но проблема в том, как мне отслеживать отношения между родителями и детьми? например, последовательное программирование, мы используем указатель на левый-правый левый элемент? Как я могу справиться с этим в MPI? Благодарю.

 [1-4]  <-- root 
[1-2] [2-3] 
[1] [2] [3] [4] 
+1

Возможно, вы слишком усложнили работу, разделив коммуникатор по умолчанию. Нарисуйте изображение бинарного дерева с 4 узлами, назовите узлы 0-3. Объявите, что это канонический способ разложения двоичного дерева на 4 процессора, напишите функцию, чтобы процессор, зная его собственный ранг, мог определить, где в двоичном дереве это. Продолжайте общаться. –

+0

Спасибо. Японял твою точку зрения. – user3328775

ответ

0

Не нужно разделять коммуникатор. В двоичном дереве работа равна 2^n, где n - уровень. В зависимости от того, пересекаетесь ли вы вверх или вниз, у вас будет увеличение количества простаивающих процессоров или увеличение количества процессоров (попробуйте представить это). Так, например, если вы начинаете с вершины, можете разделить свою работу, выполненную root, на 2. Теперь W1 - root (proc0) и W2 - (proc1). Следующий шаг proc0 и proc1 разделит W1 и W2 на 2 части. W11 до proc0, W12 до proc3, W21 до proc1 W22 до proc4 и т. Д.

Надеюсь, это поможет. Игра с коммуникаторами усложняла бы вещи;)

+0

Спасибо. Японял твою точку зрения. – user3328775

Смежные вопросы