Hello from process 3

 

Данный порядок обусловлен тем, что нулевой процесс принимает сообщения в порядке очередности их поступления от других процессов. Такой «плавающий» вид получаемых результатов существенным образом усложняет разработку, тестирование и отладку параллельных программ, т.к. в этом случае исчезает один из основных принципов программирования – повторяемость выполняемых вычислительных экспериментов. Как правило, если это не приводит к потере эффективности, следует обеспечивать однозначность расчетов и при использовании параллельных вычислений. Так, для рассматриваемого простого примера можно восстановить постоянство получаемых результатов при помощи задания ранга процесса-отправителя в операции приема сообщения:

 

MPI_Recv (&RecvRank, 1, MPI_INT, i, MPI_ANY_TAG, MPI_COMM_WORLD, &Status).

 

Указание (в четвертом параметре функции) циклически изменяющегося ранга процесса-отправителя задает порядок приема сообщений, и, как результат, строки печати будут появляться строго в порядке возрастания рангов процессов. Однако в тех случаях, когда сообщение от процесса с более низким рангом приходит, в силу технических причин, позже, чем сообщение от процесс с более высоким рангом, возможно замедление выполнения программы.

Следует отметить еще один важный момент – разрабатываемая с использованием MPI программа как в данном примере, так и в общем случае используется для порождения всех процессов параллельной программы. Следовательно, программа должна содержать в себе все действия, которые должны выполняться запускаемыми процессами. Можно сказать, что MPI-программа представляет собой единый программный код, различные части которого используются разными процессами. Так, в приведенном примере участок кода в первом блоке if выполняется только процессом с рангом 0, участок кода внутри второго блока if выполняется всеми процессами, за исключением процесса с рангом 0.

Наличие в одной и той же программе фрагментов кода разных процессов также значительно усложняет понимание и, в целом, разработку MPI-программы. Как результат, можно рекомендовать при увеличении объема разрабатываемых программ выносить программный код разных процессов в отдельные программные модули (функции). Общая схема MPI-программы в этом случае будет иметь вид:

 

MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);

if ( ProcRank == 0 ) DoProcess0();

else if ( ProcRank == 1 ) DoProcess1();

else if ( ProcRank == 2 ) DoProcess2();

 

Во многих случаях, как и в рассмотренном примере, выполняемые действия являются отличающимися только для процесса с рангом 0. В этом случае общая схема MPI-программы принимает более простой вид:

 

MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);

if ( ProcRank == 0 ) DoProcess0();








Дата добавления: 2016-02-02; просмотров: 665;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.004 сек.