Главная Случайная страница


Полезное:

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


Категории:

АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника






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();

Date: 2016-02-19; view: 333; Нарушение авторских прав; Помощь в написании работы --> СЮДА...



mydocx.ru - 2015-2024 year. (0.006 sec.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав - Пожаловаться на публикацию