В.Д. Корнеев - Параллельное программирование в MPI (1162616), страница 16
Текст из файла (страница 16)
Эти передачи могут быть успешно реализованы, только если перед запуском этих функций соответствующая получаюшая функция уже была запущена. Иначе действие ошибочно, и его результат неопределен. Волее подробно семантика реализации указанных способов взаимодействий представлена далее в описаниях самих функций. Ниже приведен небольшой пример (пример 5.1), в котором представлен фрагмент параллельной программы на языке С. В примере процесс 0 посылает сообшение процессу 1. Эта программа выполняется на обоих процессах, Хотя эта программа является копией в одном и в другом процессе, но в разных процессах будут выполняться разные ее участки, явно указываемые с помощью условных операторов г1 Участок программы до первого г1 выполнится в обоих процессах, участок программы, указанный условием г1(иугапК == О) со значением сгау (истина), выполнится в процессе О, а участок, указанный условием 11(иугапК==1) так же со значением хгау, выполнится в процессе 1.
Пропесс 0 посылает строку символов, используя функцию МР1 Яепб(). Первые три параметра функции определяют данные, которые будут посланы: посылаемые данные должны быть взяты из массива изп; они содержат зсг1еп(изп+1) элементов, каждый типа МР1 СНАМ. (Строка "Не11о ног1б" содержит зсг1еп(изп) = 11 символов. Кроме того, посылается знак конца строки '10'.) Четвертый параметр определяет назначение сообшения, которое является процессом 1.
Пятый параметр определяет тег сообщения. В заключение, последний параметр МР1 СОММ ЫОНЮ— переключатель каналов, который определяет область связи для этого взаилшдействия. (Переключатели каналов описаны в гл. 3.) Каждый процесс помечен рангом процесса. Ранги процесса — целые числа и находятся они функцией МР1 Соппп гапК(). Пример 5.1. Процесс 0 посылает сообщение процессу 1: сваг изб(201, 1пс иугапК, сап = 99, МР1 Яхаспз зсасиз, /* Каждая ветвь находит свой ранг е/ МР1 Сопля гапК(МР1 СОНМ ЫОй0, аиугапК), г1(иугапК == 0) ( зсгсру(изб, "Не11о иог16"), МР1 Яепб(изб, зсг1еп(изб)+1, МР1 СНАЯ, 1, Пап, МР1 СОИМ НОЕВО), е1зе д1(иугапК == 1) ( МР1 Неси(изя, 20, МР1 СНАМ, О, хай, МР1 СОММ НОНЫ, азпаспз), 5. Роепоео-Роте вэоимодеоствия Процесс 1 получает поступающие данные в массив ювЕ, имеющий максимальный размер в 20 элементов типа МР1 СНАЯ.
Переменная зтатпз дает информацию относительно источника и тега сообщения, и сколько элементов было фактически получено. Например, приемник может исследовать эту переменную, чтобы выяснить фактическую длину полученной строки символов. Соответствие типов данных (в передающем и принимающем процессах) и преобразование данных на гетерогенных системах обсуждены более подробно в п.
7.5. В этом примере используются блокированные посылающая и получающая функции. 5.2. Блокированные посылающая и получающая функции Этот пункт описывает стандартный режим блокированных функций: передачи и получения данных. 5.2.1. Блокированная передача данных йпт МР1 БепИчо1е)е Ьц1, 1пс соппс, МР1 Расасуре йасасуре, тпс е)евс, зпс сая, МР1 Сопип соппп) МР1 БЕМО(ВОР, СОРМТ, РАТАТУРЕ, РЕБТ, ТАО, СОММ, 1ЕВВОВ) <туре> ВРР(в) 1МТЕОЕК СОРИТ, РАТАТУРЕ, 0ЕБТ, ТАС, СОММ, 1ЕВКОК МР1 БЕМО выполняет блокированную передачу данных. Семантика этой функции вместе с примерами описана в п.
5.4. Аргументы МР1 БЕМО описаны в следующих подразделах (1М обозначаются входные параметры, ОВТ вЂ” выходные). 5.2.2. Посылаемый буфер и данные сообщения Сообшаемая здесь информация относится ко всем функциям обмена данными, а не только к рассматриваемому МР1.БЕМО. Посылаемый буфер, указанный в МР1 БЕМО, состоит из соппт последовательных элементов типа, обозначенного е)ататуре, начинающихся по адресу Ьпй Заметьте, что длина сообщения определяется в терминах количества элементов, а не количества байтов. Это связано с тем, что одни и те же типы данных могут иметь разное количество байтов в представлении на ЭВМ с разными архитектурами. Модель обмена данными должна быть независима от машины и облегчать переносимое программирование.
соппт может быть равен нулю, в случае, когда часть данных сообщения пуста. Основные типы данных МР1 соответствуют основным типам данных базового языка. Возможные значения этого аргумента для гогтгап и соответствующие типы гогтгап внесены в список ниже. МР1 БЕМО(Ьп1, 1М Ьц1 1М соппт 1М оатасуре 1М е)евс 1М са5 1М соппп соппс, пасасуре, бент, тая, сова) адрес передаваемого буфера количество передаваемых элементов тип передаваемых элементов ранг (номер) процесса, которому осушествляется передача данных тег сообшения имя переключателя каналов (союшппйсатог) б.й. Блокированные насылаю>иая и нааучаюи>а» функции Возможные значения для этого аргумента для С и соответствующие типы С внесены в список ниже. МР1 оасаФуре С оасасуре Типы МР1 В'>ТЕ и МР1 РАСКЕО не соответствуют типам Гогсгап или С.
Значение типа НР1 ВУТЕ состоит из байта (8 двоичных цифр). Байт не интерпретируется и отличается ит символа (знака). Различные машины могут иметь различные представления символов (разный набор двоичных цифр) или могут использовать больше чем один байт для представления символа. С другой стороны, байт имеет то же самое двоичное значение на всех машинах, а именно, это 8 двоичных цифр.
Использование МР1 РАСКЕ0 объясняется в п. 7.8. МР1 поддерживает типы данных, внесенных в списки выше, которые согласуются с основными типами данных Гог1гап 77 и АР!8! С. Дополнительные типы данных МР! должен >беспечить, если базовый язык имеет дополнительные типы ланных. Некоторые примеры: ЧР1 1.ОИС !.ОИΠ— для целых чисел С, объявленных типом 1оп81опЕ; МР1 0ООВЬЕ СОМРЕЕХ вЂ” для двойной точности в РогСгап, объявленных типом 00081Е СОМРЕЕХ и т.д.
Кроме гого, МР1 обеспечивает механизм для определения новых, производных, типов данных для пользователей. Это описано в гл. 7. $.2.3. Оболочка сообщения Посылаемые (или принимаемые) данные сообщения представляют собой пакет данных, который обозначается набором соответствующих идентификаторов, используемых, чтобы >азличать и избирательно получить эти пакеты данных. Эта информация состоит из фик:ированного количества областей (полей), которые здесь называются новлентивной обовачной сообщения. Это поля: зоигсе (источник), зевс!пас!оп (получатель), саЕ (ярлык :ообшения), и соп>п>ип1сасог (переключатель каналов). Источник сообщения косвенно апрепеляется идентично отправителю сообщения.
Другие поля определяются параметрами из юсылающей функции. Аргумент соп>п> определяет переключатель каналов, используемый посылающей функци>й. Переключатель каналов — локальный объект, который представляет область связи. Под >бластью связи здесь понимается определенное (заданное) множество процессов. Область :вязи глобальная, распределенная структура, которая допускает разбиение процессов на .Руппы. Переключатель каналов обеспечивает связь межлу процессами как внутри одной руппы, так и между процессами из разных групп. Область связи первого типа (связь >нутри группы) представлена Тпсгасазиипйсасог'ом, а область связи второго типа (связь вежду группами) представлена пптегсоппяип>сапог'ом.
Процессы в группе упорядочены > идентифицированы их рангами (номерами) представленными целыми числами. Каждая >бласть связи поддерживает непересекающийся поток связи. Переключатели каналов опи:ываются в гл. 3. МР1 СНАН МР1 ВНОНТ МР1 1ИТ МР1 Х.ОИО МР1 йИЯ16ИЕ0 СНАН МР1 ОИ81ОИЕ0 ЯНОНТ МР1 УИЯ1СИЕ0 МР1 ВИЯ1ОИЕО 1.ОИО МР1 Г|ОАТ МР1 0ОУВ1Е МР1 1.ОИО 0ОВВ1Е МР1 ВУТЕ МР1РАСКЕО з18пес! с!>аг з18пео з!>огт >пс з18пео ппс зйбпес! 1оп8 1пз ипз>бпее! с!>аг ипз18пеа з!>огс Хпс ипз18пео' ппс ипз18пес! 1опЕ Тпь 11оас ооиЫе 1опЕ е!оцЫе б.
Роий-'ео-Роте вэоимодействвия Назначение сообшения определено аргументом оевс. Лиапазон значений для е)евс— ),...,п-1, где и — читало процессов в группе. Этот диапазон включает ранг источника ообшения (воигсе): если переключатель каналов АпСгасоввцпйсасог, то процесс может посылать сообшение самому себе. Если переключатель каналов Тпсегсовпшпйсасог, то пазначения (е)евс) идентифицированы их рангом в другой группе. Целочисленный тег (ярлык) сообщения определен аргументом Саи. Это целое число может использоваться для того, чтобы отличать разные сообшения (пакеты сообщений). Пиапазон значений са8 — О,...,ОВ, где значение ОВ зависимо от конкретнои реализации. Зн находится с помошью функции МР1 ТАО ОВ, это описано в гл.
8. МР! требует, чтобы ОВ Выл не меньше, чем 32767. >.2.4. Некоторые замечания к передаче данных Переключатели каналов обеспечивают важный механизм инкапсуляции для библиотек и модулей. Они обеспечивают модулям их собственный коммуникатор связи и их собственную нумерацию процессов. Для именования области связи для процессов необходимо испольювать предопределенную переменную МР1 СОИМ ЧОКОВО как аргумент связи.
Это позволит збеспечить связь со всеми процессами, доступными после инициализации программы. 5.2.5. Блокированный прием данных !пс МР1 Веси(чоййв Ьц1,1пс соппс,МР1 Оасасуре оасасуре,ппс воцгсе,йпс саи, МР1 Сова соппп,МР1 БСаСцв *вСаСцв) пР1 ВЕСЧ(ВУГ, СООМТ, ОАТАТУРЕ, БООКСЕ, ТАС, СОММ, БТАТОЯ, 1ЕВВОК) псуре> ВОР(*) !МТЕОЕК СООЙТ, 0АТАТУРЕ, БОУЛСЕ, ТАО, СОИМ, БТАТОБ(МР1 ЯТАТУЯ Б12Е), 1ЕВВОК 1Р1ВЕСЧ выполняет блокированный прием данных.
Семантика этой функции вместе с примерами описана в и. 5.4. Аргументы МР1ВЕСЧ описаны в следующих подпунктах, >.2.6. Буфер для приема данных >уфер для получения данных состоит из поля, достаточного вместить соцпс последовательгых элементов типа, указанного оасасуре и начинаюшегося по адресу Ьп1. Ллина полученпого сообшения должна быть меньше или равняться длине буфера для получения данных. Зыдается сообшение об ошибке, если получаемые данные не помещаются в буфере для |риема.
Заметьте, что длина сообщения определяется, как и для функции МР1.БЕЛО, в тервинах количества элементов, а не количества байтов. В гл. 8 описывается, как проверить пшибки. Если полученное сообшение является более коротким, чем буфер получения, то ~лементы поступающего сообшения записываются в начальных полях буфера получения, а ктавшиеся поля не изменяются. !.2,7. Выбор сообшения зыбор сообщения получающей функцией управляется значением его оболочки сообщения. ообщение может быть получено, если его оболочка соответствует источнику сообщения, йР1 ВЕСЧ(Ьи1, эОТ ЬцХ 1И соцпс 1И оасасуре 1М воцгсе 1И са8 1М совв эВТ всасцв соцпс, оасасуре, еопгсе, сай, совв, всаспв) апрес буфера для приема данных максимальное количество принимаемых элементов тип принимаемых элементов ранг (номер) передавшего процесса тег сообшения имя переключателя каналов (сопппппйсасог) статус (состояние) принимаемых данных а.я.
ьлакираеанные посылающая и получающая еуунниии тегу данных и имени переключателя каналов, указанным в получающей функции. Приемник может определять значение яопгсе групповым именем (МР1 АМУ Б00ВСЕ) н/или значение саЕ групповым именем (МР1 АМ1' ТАО), указывая, что любой источник из группы, определенной Апсегсопппппйсасог'ом сони, и/или любой тег данных являются допустимыми. Группового имени для переключателей каналов нет, т.е.