проектирование разделяемой памяти для MPI с использованием Boost - PullRequest
0 голосов
/ 24 марта 2011

Я хотел бы спросить, знает ли кто-нибудь документацию boost :: mpi для начинающих? (я уже прочитал документацию Boost.MPI с интернет-сайта).

немного о моей системе, у меня кластер около 90 узлов, каждый узел имеет два процессора с двумя ядрами (4 ядра вместе) и 4 Гб оперативной памяти.

Я хотел бы определить общую память для каждого узла и сохранить там вектор std::vector<bool> occupation;. Затем каждому процессу нужно что-то вычислить, основываясь на его rank() числе.

Теперь всем многопроцессорным процессам нужно дождаться завершения вычислений всех ядер, а затем отправить вектор std::vector<uint32_t> remove; в основной процесс (rank() == 0), который обновит вектор occupation, а затем отправить всем узлы новый occupation вектор.

Может быть, лучше просто использовать mpi.h вместо boost::mpi.

Мне бы хотелось услышать ваше мнение, поскольку у меня нет опыта в этой области MPI.

Ответы [ 2 ]

0 голосов
/ 24 марта 2011

Как уже упоминалось larsmans, вы не можете использовать общую память с MPI.Но, похоже, вам не нужна распределенная общая память;Похоже, что все задачи должны получить копию occupation в начале, выполнить свои вычисления, отправить результаты обратно мастеру в виде remove, и мастер затем передаст обновленную копию occupation.MPI может сделать это просто отлично.

Чтобы начать, нужно, чтобы главный процесс использовал broadcast для начальной отправки данных, чтобы рабочие процессы использовали sendотправьте обновления обратно мастеру и получите от мастера recv данные по каждой задаче;когда это сделано, цикл повторяется.

0 голосов
/ 24 марта 2011

Подумайте об использовании OpenMP для части с общей памятью, если ваш компилятор поддерживает это, затем настройте один процесс на узел, который выполняет четыре процесса, что и в текущей настройке. MPI не был предназначен для общей памяти.

...