В.Д. Корнеев - Параллельное программирование в MPI (1162616), страница 29
Текст из файла (страница 29)
Она также допускает большую гибкость относительно того, где данные размещаются ка корне, обеспечивая новый аргумент о(зр1з. Результат выглядит так, как будто каждый пропесс, включая процесс корня, посыпает сообшение корню функцией МР1 Яепб(зепиЬиХ, зепбсоипс, зепбсуре, гоос, ...) я корень выполняет и приемов функцией МР1Кесч(гесчЬит+61зр1з Ы«ехсепс(гесчсуре), гесчсоипсзЫ , гесчсуре,1,...). Данные, посланные из процесса ), размешаются в )-м блоке в буфере приема гесчЬит па процессе корня. )-й блок в буфере гесчЬиХ начинается в смещении от начала предыдущего пакета в к(1зр1з Ц3 элементов (в терминах гесчсуре). Буфер приема игнорируется для всех процессов, не принадлежащих корню.
Аргументы зепосоипи и зепк(туре на процессе 1 должны быть равны аргументам гесчсоипсзЫ и гесчсуре в корне. Это подразумевает, что количество посланных данных должно быть равно сумме полученных данных, попарно между каждым процессом и корнем. Различные >тображения типа между передающим и принимаюшим процессами все еще допуска, ются, как иллюстрируется в примере 6.5. Все аргументы в функции на корне процесса значимы, в то время как на других процессах значимы только аргументы зепиЬит, зепк)соипс, зепцсуре, гоос и совпь Аргументы колжны иметь идентичные значения на всех процессах, и соппп должна представлять ту же =амую )пФга-Егоир область связи. Спецификации количества, типов и смешений не должны быть написаны больше, чеи зцин раз. Такой запрос будет ошибочен.
Последовательные смещения в массиве 61зр1з пе збязательно должны быть монотонной последовательностью. 3.6.3. Примеры использования Мит ШтВВКУ Пример 6.5. Каждый процесс посылает 100 элементов. В принимающем процессе пакеты ,'в 100 элементов) нужно разместить на расстоянии с некоторым шагом. Используется рункция МР1 САТНЕКЧ и аргумент о1зр1з, чтобы достичь этого эффекта.
Допустим шаг «сгйк(е > 100 (рис. 6.3). 4Р1 Соппп соппп; (пс Езйне, зепйаггаук1003; (пс гоос, «гЬиХ, зсг1бе; (пс «бйзр1з, 1, «гсоипсз; 4Р1 Сова з(хе(соппп, АЕзйхе); ."Ьит = (1пс «)та11ос(Взйхе«зсг(ие«зйхеоу(1пт)); 11зр1з = (Тпг «)ва11ос(из(хе«з(неоХ(1пс)); .-соипсз = (Тпс «)ва11ос(Езяхе«зяхеот(кпс)); Гог(1 = 0; 1 < Езйхе; ++1) ( 61зр1з[1) = 1«зсг1йе; гсоиптзГ1) = 100; ) ФР1 ОасЬегч(велиаггау, 100, МР1 1МТ, гЬи1, гсоипсз, 61зр1з, МР1 1МТ, .-оос, соппп); Программа ошибочна, если -100 < зсггбе < 100.
6.6. Сбор декньи. 107 Все процессы Процесс корня еегЫе Рис. 6.3. Процесс корня принимает 100 элементов от каждого процесса в группе; каждый набор размешается с шагом зсггйе элементов друг от друга Пример 6.6. Аналогичен примеру 6.5 приемом данных, но посылаются 100 элементов иэ о-й колонки массива 100*150 (рис. 6.4). МР1 Сопап соин; 1пс Мвйзе, вепбаггау ~1003 ~1503; зпС гооС, »гЬи1, вСг1бе; МР1 Эасасуре зсуре; (пс »61вр1з, 1, »гсоипсв; МР1 Сопаа вйзе(сопап, йбв1зе); гЬи1 = (1пс »)иа11ос(6з1зе»зсг1ое»в1зеот(1пс)); 61зр1з = (1пс »)ва11ос(6з1зе»з1зеоХ(1пс)); гсоипсз = (1пс »)на11ос(йз1зе»з1зеоХ(гпс)); 1ог(1 = 0; 1 < 6з1зе; ++1) ( 61зр1зЫ = 1»всгЫе; гсоипсв Ш = 100; /» Создание типа ланных лля одной колонки пассива »/ МР1 Туре еесСог(100, 1, 150, МР1 1ИТ, кзсуре); МР1 Туре сопап1С(йзСуре); мР1 Оасьегч(зепйаггау, 1, зсуре, гьих, гсоипсв, ывр1з, мР1 1мт, гоос, сопи); гпо 1ЗО гзо Все процессы 1ОО гоо гоо зоо Процесс корня вегЫе Рис.
6.4. Процесс корня принимает нулевые колонки из массива 100»150, каждый набор размещается с шагом есгзйе элементов друг от друга Пример 6.7. Процесс 1 посылает (100-1) элементов из 1-й колонки иэ массива 100»150. 1акеты получаются в буфер с большим шагом, чем в предыдуших двух примерах (рис. 6.5).
(Р1 Соппп сопел; .пс бз1зе, зепдаггаус1003 ~1503, »врсг; .пс гоос, »гЬи1, зсг1бе, иугапК; 1Р1 Расасуре зсуре„. 6. йолиентивные взиимодепсгииия 1пс »61зр1з, 1, »гсоппсз; ИРТ Совв з1ле(совв, йбззле): ИР1 Сопка гапК(совв, йвугапК); гЬпХ = (1пс »)ва11ос(6з1ле»зсгЫе»з1кеоХ(1пс)); 11зр1з = (1пС »)ва11ос(6з1хе«з1хео1(1пС)); гсоцпСз = (1пС »)ва11ос(йз1хе»зтхеот(1пС)); Еог(1 = 0; 1 < кз1ле; ++1) ( б1зр1з[11 = 1«зсг1бе; гсоппсз[11 = 100-1; ~» Создание типа данных пля передаваемой колонки »/ ИР1 Туре чесСог(100-вугапй, 1, 1БО, ИР1 1МТ, йзСуре); ИР1 Туре соввйс(йзсуре); l« зрсг — адрес начала колонки "вугапК" «/ зрсг = йзецбаггау[01[вугапК1; ИР1 ОасЬегч(зрсг, 1, зсуре, гЬп1, гсоапсз, 01зр1з, ИР1 1МТ, гоос, сопап); Заметьте, что различное количество данных получено от каждого процесса.
1БО 150 1ао Все процессы 1ОО 100 99 98 Процесс корня яаг1Е» Рвс. 6.5. Процесс корня принимает 100-1 элементов иэ колонки )массива 100»150, каждый набор размещается с шагом всггйе элементов друг от друга Пример 6.8. Тот же самый как пример 6.7, но различным способом выполнена передача з конце. Создается тип данных, и размешаются пакеты с разным-шагом.
ИР1 Совв сопка; (пс кз1ке, зеп<$аггау[1003 [1501, «зрсг; (пс гоос, »гЬцХ, зсг16е, вугапК, 61зрЫ , Ь1осК1еп[23; ИР1 ОаСаСуре зСуре, Суре[23; (пс »61зр19, 1, »гсоппсз; ИР1 Совв„зйле(сопап, йбзйке); 4Р1 Сопка гапК(савв, йвугапК); гЬаг = (1пс »)ваПос(6з1ке»зсг1ое»з1леог(1пс)); 11зр1з = (1пс »)ваПос(6з1ле»з1хеот(1пс)); асоппсз = (1пс «)ваПос(6з1ке»з1леот(1пс)); Рог(1 = 0; 1 < яз1хе; ++1) ( 61зр1зШ = 1»зсг16е; гсоппсзШ = 100-1; '» Создание типа данных для одного элемента, со смешением в конце строки »/ 11зр[01 = О; 11зр[1) = 150»з1кеот(1пс); 109 б б Сбор данные суре[03 = ИР1 1МТ, суре М = ИР? ОВ, Ь?осК1еп[03 = 1. 51осК1еп[13 = 1, ИР1„Туре впгцсл(2, Ь?осК1еп, 61яр, Фуре, йяпуре), ИР1 Туре совазп(йвпуре), зрсг = йвепбаггау[03[вугапК3, ИР1 ОасЬегч(зрсг, 100-вугапК, ясуре, гЬцХ, гсоцпсв, 61яр?я, ИР1 1МТ, гоос, сова), Пример 6.9.
Аналогичен примеру 6.7 в посылаюшей стороне, но в получаюшей стороне делается разный шаг между полученными блоками (рис. 6.6). ИР1 Сова сова, 1пс пззке, зепбаггау[1003[1503, еврсг, 1дп гоос, ьгЬц1, ьзпгзбе, вугапК, ЬцХвзяе, ИР? ?)асасуре зсуре, 1пп ьбззр1в, 1, ьгсоцпов, 011вес, ИР1 Соппп язве(сова, ййязяе), ИР1 Сова гапК(сова, йвугапК), зсгзбе = (1пп ь)ва11ос(йвтяеьвзяеоХ(1пс)), /ь установлен япгзбеЫ от з = 0 до пззяе-1 ь/ азер?з = (1пп Ф)аа?1ос(691яеевзкео1(1пп))„ гсоцппз = (1пп *)ва11ос(691яеьвтяео1(1пп)), огтвес = О, 1ог(1 = О, 1 < пятке, ++т) ( дзвр19[13 = 011зес, оттяес += всгзбе[13, гсоцпсзЫ = 100-1, ) Ьпгязяе = 61зр1в [цязяе-13+гсоцппз [пвзке-11, гЬцХ = (1пс ь)ва??ос(Ь01взвеьззяео1(зпс)), ?* Создание типа данных для перепаваеной колонки э/ ИР1 Туре чессог(100-аугапК, 1, 160, ИР1 1МТ, йвсуре), ИР? Туре соавтп(йзьуре), зрсг = йяепбаггау[ОЗ [вугапК1, 1Р? СасЬегч(врсг, 1, зсуре, гЬц1, гсоцпсв, бззр10, ИР1 1МТ, гоос, сова), 190 150 190 Все процессы 1ОО 100 99 99 Процесс корня ° Ю Рис.
6.6. Процесс корня принимает 100-з элементов нз колонки з массива 100ь160, каждый набор размещается с изменяющимся шагом есгзбе Ы элементов 6. Ковлективиые взаииодезееивия МР1 Сошш сошш; 1пс ивдге, зепбаггау[100][1БО), «зрсг; 1пс гоос, «гЬп1, зсг1бе, шугапК, Жир[2], Ь1оск1еп[2]; МР1 ВаСапуре вСуре, Сурея[2]; гпс «бгвр1в, 1, «гсоппсз, пшп; МР1 Сошш зйге(соппп, йиз1ге); МР1 Соппп гапк(сошш, йшугапк); /» Собрать числа в корне «/ гсоппсз = (йпс «)ша11ос(изгге«в1гео1(1пс)); мР1 Сасьег(йппш, 1, мР1 1мт, гсоппсз, 1, мР1 1ят, гоос, сошш); бйвр1я = (1пс «)ша11ос(кя1ге«з1гео1(1пс)); бгзр1я[0] = О; Хог(1 = 1; з с Пя1ге; ++т) ( дйяр1з[1] = бйзр1в[1-1]+гсоппсз[1-1]; /« Сознается буфер приема »/ гЬп1 = (1пС «)ша11ос(яв1ге«(б1зр1з[яз1ге-1)+гсопппз[пзгге-1))«з1геоХ(1пС)); /« Создается тип данных ппя одного числа, со расширением в конце строки «/ 61вр[О] = 0; бзвр[1) = 150«з1геог(1пс); суре[О) = МР1 1МТ; суре[1] = МР1 7УВ; Ь1ос)с1еп [О) = 1; Ь1осК1еп[1) = 1, МР1 Туре всгпсс(2, Ь1оск1еп, бйзр, суре, йзсуре); МР1 Туре сошшйс(йвсуре); зрсг = йвепбаггау[0)[шугапй]; мр1 Сасьегч(ярсг, ппш, зсуре, гьпх, гсоппсз, б1вр1з, мр1 1мт, гоос, саппп); 6.Т.
Разброс данных МР1 ЯСйТТЕВ.(зепбЬп1, зепбсоппс, зепбсуре„ гесчЬп1, гесчсоппс, гесчсуре, гоос, сошш) 1М зепбЬпХ 1И яепбсоппС 1М зепбсуре ОУТ гесчЬпу 1М гесчсоппс 1М гесчсуре 1М гоос 1М сошш апрес передаваемого буфера количество перепаваемых элементов каипому процессу тип перепаваемых данных адрес буфера приема количество принимаемых элементов тип принимаемых данных ранг передающего процесса коммуникатор (сошшпп1сасог) 1пс МР1 Ясассег(чо1б» зепбЬп1, 1пс зепбсоппс, МР1 Оасасуре яепбсуре, чо1б» гесчЬпт, 1пс гесчсоппс, МР1 Оасасуре гесчсуре, 1пс гоос, МР1 Сошш соппп) Пример 6.10.