В.Д. Корнеев - Параллельное программирование в MPI (1162616), страница 35
Текст из файла (страница 35)
Следующие функции возвращают информацию относителыю типов данных: ИР1 ТУРЕ ЕХТЕМТ(басасуре, ехсепс) 1М баСаСуре тип данных ООТ ехсепс диапазон типа басасуре кпс МР1 туре ехсепс(иР1 Оасасуре басасуре, иР1 Аапс ьехсепс) ИР1 ТУРЕ ЕХТЕМТ(ОАТАТУРЕ, ЕХТЕМТ, 1Еййбй) 1МТЕОЕЕ РАТАТУРЕ, ЕХТЕМТ, 1ЕйЮй ИР1 ТУРЕ ЕХТЕМТ возвращает диапазон типа басасуре. В дополнение к его исполыо. ванию с производным басасурев она может использоваться, чтобы найти диапазон примитивного дасасуреэ. Например, ИР1 ТУРЕ ЕХТЕМТ(ИР1 1МТ,ехсепс) возвратит в ехсеак размер в байтах, кпс — то же самое значение, которое было бы возвращено в С функцпе$ ваиеоХ(апс). Замечание.
Имена типов данных в МР1 — непрозрачные, поэтому нужно использовать функцию ИР1 ТУРЕ ЕХТЕМТ, чтобы определить размер ("зьзе") типа. Нельзя использовать, 7.8. Строители типов 135 как в С, функцию вкиео1йасасуре), например, вйиеот(МР1 000ВЕЕ). Она возвратит размер непрозрачного заголовка, который является размером указателя и, конечно же, отличается от значения вйкео1(боцЫе). ИР1 ТУРЕ Я1ЕЕИасаСуре, вйхе) 1М дасасуре тип данных 00Т в1хе размер типа данных 1пс ИР1 туре в1хе(мР1 Расасуре басасуре, Апс ев1хе) МР1 ТУРЕ Я1ЕЕ(РАТАТУРЕ, Я12Е, 1ЕКВОК) 1МТЕОЕВ РАТАТУРЕ, Я1ЕЕ, 1ЕКВОК МР1 ТУРЕ Я1ЕЕ возвращает полный размер (в байтах) входов в сигнатуре типа, связанной с т)асасуре; т. е.
полный размер данных в сообщении, которое было бы создано с этим йасасуре. Элементы, которые многократно встречаются в басасуре, учитываются с их кратностью. Лля примитивного басасурев эта функция возвращает ту же самую информацию как МР1 ТУРЕ ЕХТЕМТ. Пример 7.3. Лопустим басасуре имеет тип отображения Туре, определенный в примере 7.2. Тогда запрос к МР1 ТУРЕ ЕХТЕМТИасасуре,й) возвратит 1=1б; запрос к МР1 ТУРЕ Я12ЕЙаСасуре, 1) возвратит 1=9 (8 байт (боцЫе) + 1 байт (сваг)=9). 7.3. Строители типов В этом пункте представлены функции МР1 для строительства производных типов данных. Функции представлены в порядке от самых простых строителей до сложных.
7.3.1. Строитель смежных типов данных СЮИТ?ОООттн ИР1 ТУРЕ СОМТ10000Я(соипС, о1бСуре, пеиСуре) 1М соцпс количество копий 1М о1бсуре старый тип данных 00Т пенсуре новый (сконструированный) тип данных (пс МР1 Туре сопс1Ецоцв(1пс соцпс, МР1 Расасуре о1йсуре, МР1 Расасуре епеысуре) ИР1 ТУРЕ СОМТ10000Я(СОРМТ, ОЮТУРЕ, МЕЫТУРЕ, 1ЕКВОН) 1МТЕСЕК СООМТ, 0(.РТУРЕ, МЕИТУРЕ, 1ЕВИЖ МР1 ТУРЕ СОМТ10000Я самый простой строитель типа данных. Он конструирует новый тип данных путем размножения соцпс копий исходного типа в смежные поля. Аргумент пеисуре — новый полученный тип, представляющий собой соипс смежных копий исходного типа о1бсуре.
При сочленении копий, используется ехсепс(о1бсуре) (диапазон исходного типа) как размер составных копий. Лействие СОМТ10000Я-строителя представлено схематично на рис. 7.3. отнптре сооап 4 пеептре Рис. 7.3. Построение типа данных функцией строителя типов ИР1 ТУРЕ СОМТ10000Я 136 7. Опрсдслясл>мс аальасвас>алел> с>ааы даииыс а упаковка дамка>с (>(боцЫе, 0) > (сЬаг, 8), (боцЫе, 16), (сЬаг, 24), (боцЫе, 32), (сЬаг, 40)), т.е. чередуются боцЫе и сЬаг элементы со смещениями О, 8, 16, 24, 32, 40. Вообще, допустим, что отображение типа о1бсуре = ((сурео, бтяра), ..., (сурен 1„бйярп 1)) с диа- пазоном ех.
Тогда пентуре имеет отображение типа из соппсеп элементов, определенных как ((сурео> бйяро) >, (суре„м ббяр„1), (суреш б1яро + ех), ..., (аурел 1, бтяр„г+ ех), ..., (сУРео, б1ЯРо + ех е (соила — 1)), ..., (сУРе„1, б1ЯРп г + ех * (соппс — 1))). 7.3.2. Векторный строитель типов данных ЧНСтои ЫосййепЕСЬ, ясгтбе, о1бсуре, пеытуре) количество конструируемых блоков количество элементов в каждом блоке расстояние межпу началами последовательных блоков, выраженное в количестве исходных элементов исхолный тип данных новый тип ланных МР1 ТУРЕ ЧЕСТОК(соцпс, 1М соцпс 1И Ыосй1епЕСЬ 1Х ясггбе 1И о1бсуре СОТ пенсуре 1пт МР1 Туре сеспог(1пс соцпс, 1пс Ыосй1епбсЬ, 1пс ясг1бе, МР1 Оасатуре о1бсуре, МР1 Оасасуре епенсуре) МР1 ТУРЕ ЧЕСТОК(СООМТ, В1ОСКЬЕИОТН, ЯТК10Е, 010ТУРЕ, МЕЧТУРЕ, 1ЕККОК) 1МТЕОЕК СООМТ, ВЬОСКЬЕИОТН, ЯТК10Е, 010ТУРЕ, МЕИТУРЕ, 1ЕККОК МР1 ТУРЕ ЧЕСТОК-строитель размножает копии исходного типа о1бсуре в поля, которые являются равно отстоящими друг от друга блоками.
Каждый блок получен из заданного количества (Ыос)г1епбсЬ) смежных копий исходного типа о1бсуре. Расстояние между блоками здесь задается, как расстояние между началами двух соседних блоков, и измеряетса в единицах о1бСуре диапазона и одинаково для всех рядом стоящих блоков. В отображении типы смещения блоков даются относительно базового адреса.
Например, смешение даа нулевого в последовательности блока равно Оеясгтбе, для пятого блока равно беясгабе а т.д. Действие ЧЕСТОК-строителя представлено схематично на рис. 7.4. о1йсуре со»се 3, Ьгоса1епяаа = 2, »асане 3 пе»суре Рис. 7.4. Построение типа данных функцией строителя типов ИР1 ТУРЕ ЧЕСТОК Пример 7.5. Как прежде, допустим, что о1бсуре имеет отображение типа 1(бопЫе, 0), (сЬаг, 8) ) с лиапазоном 16. Запрос к МР1 ТУРЕ ЧЕСТОК(2, 3, 4, о1бсуре, пенсуре) создаст новый тип данных не»суре с отображением: ((боцЫе, 0), (сЬаг,8), (бопЫе, 16), (сЬаг,24), (бопЫе,32), (сЬаг,40), (бопЫе, 64), (сЬаг,72), (боцЫе, 80), (сЬаг, 88), (бопЫе, Эб), (сЬаг, 104) 1, Пример 7.4.
Допустим, о1бсуре имеет отображение типа ((боцЫе, 0), (сЬаг,8) ) с диа- пазоном 16 и соцпсс3. Отображение типа бапасуре, возвращенного пеытуре есть 7.3. Строители типов 137 г. е. два блока с тремя копиями каждый из исходного типа, с расстояниями между началами гюследовательных блоков в четыре исходных (о16суре) элемента (4х16 байт = 64). Пример 7,6. Запрос к МР1 ТУРЕ ЧЕСТОН(3, 1,-2,о16Суре,пеиСуре) создаст тип данных с зтображением: ((попЫе, О), (сЬаг, 8), (НопЫе,-32), (сваг, -24), (бопЫе, -64), (сваг, -Бб) ) Вообше, допустим, что о14суре = ((сурео,бтзро), ..., (суреи 1,дтзри 1)) с диапазоном ех. Допустим, Ы есть Ыосй1еппсЬ.
Новый тин данных пеигуре имеет отображение с соппсхЫхп элементами Запрос к МР1 ТУРЕ СОМТ100008(соппс, о16Суре, пеисуре) эквивалентен запросу к МР1 ТУРЕ ЧЕСТОН(соппС, 1, 1, о16Суре, пенСуре) или запросу к МР1 ТУРЕ ЧЕСТОН (1, соппс, пни, о1г)суре, пенсуре) с произвольным пшп. 7.3.3. Модифинированный векторный строитель тинов данных нчестон Векторный строитель типа, описанный в». 7.3.2, задает расстояние между началами соседних блоков в едннипах о1г1суре диапазона. Иногда полезно ослабить это предположение и допускать расстояние, измеряемое в байтах.
Строитель типа Нчессог задает расстояния между началами соседних блоков в байтах. Использование Чессог- и Нчессог-строителей иллюстрируется в примерах 7.7 — 7.10. МР1 ТУРЕ НЧЕСТОН(соипС, 1М соппс 1М Ыос)г1епЕсЬ 1М зсгзбе Ыоск1епЕсЬ, зсгз4е, о1г)суре, пенсуре) количество конструируемых блоков количество элементов в каждон блоке расстояние между начапани соседних блоков, выраженное в байтах исходный тип данных новый тип данных 1М о1дсуре ОМТ пенсуре 1пс МР1 Туре Ьчессог(1пс соппс, 1пс Ыос)г1еппсЬ, МР1 Атис зсг1г1е, МР1 Оасасуре о16суре, МР1 Оасасуре хпеисуре) МР1 ТУРЕ НЧЕСТОН(СООМТ, ВЮСК1.ЕМОТН, БТН10Е, 01,0ТУРЕ, МЕНТУРЕ, 1ЕННОН) 1МТЕСЕН СООМТ, ВЮСК(.ЕМСТН, БТН10Е, ОЕОТУРЕ, МЕНТУРЕ, 1ЕНВОН МР1 ТУРЕ НЧЕСТОН идентичен МР1 ТУРЕ ЧЕСТОН за исключением того, что расстояние (вгг1г)е) дается в байтах.
(Н олипетворяет иЪеСегойепеоиз" системы.) Действие НчесСогстроителя представлено схематично на рис. 7.5. ((сурео бтзро) ..., (суре„1161зри 1), (сурео, пззро + ех), „(суре„м 61зри 1+ ех), ..., (сурео, бгзро + (ы — 1) х ех), ..., (суре„ы бтзри 1+ (ы — 1) х ех), сурео, г(эзро + зсгтбе х ех), ..., (суреи и Нтзри ~ + зсгтбе х ех), ..., (СУРЕО, 61ЗРО + (ЗСГтбЕ + Ы вЂ” 1) * ЕХ), ..., (СУРЕ„Ы 61ЗРи 1+ (ЗСГ16Е + Ы вЂ” 1) Х ЕХ), .„, (г урез, 61зро+зсг16е х (соппс — 1) хех), ..., (суре„м бт зри 1+зсг16е х (соппс — 1) хех), ..., (СурЕО, 41ЗРО + (ЗСГ16Е Х (СОППС вЂ” 1) + Ы вЂ” 1) * ЕХ), ..., (СурЕ„Ы пт Зри 1 + (ЗСГ16Е Х (соппс — 1) + Ы вЂ” 1) * ех)). 138 7.
Определяемые пользоватвлвм типы данных и упаковка данных о1асуре сопля 3, Ьтоси1епясь=2, ввгще87 певсуре Рис. 7.5. Построение типа данных функцией строителя типов ИР1 ТУРЕНЧЕСТОН Пример 7.7. Рассмотрим запрос к МР1 ТУРЕ НЧЕСТОН, используя те же самые аргументы как в запросе к МР1 ТУРЕ ЧЕСТОН в примере 7.5. Как прежде, допустим, что о1бсуре имеет отображение типа (ЙоцЫ, О), (спаг, 8) ) с диапазоном 16.
Запрос к МР1 ТУРЕ НЧЕСТОЕ(2,3,4,о1дсуре,пенсуре) создаст тип данных с отображением: 1 ИоцЫе, О), (спаг, 8), ИоцЫе, 16), (сваг,24), (доцЫе, 32), (сйаг, 40), ИоцЫе,4), (спаг, 12), (с1оцЫе,20), (спаг,28), (йоцЫе,36), (сваг,44) У Такое построение типа определяет накладываюшиеся элементы. Начала вещественных (с)оцЫе) не могут располагаться и в нуле смещения, и в смешении четыре. Использо.
ванне этого типа данных в посылающей функции приведет к ошибке, Лля построения того же отображения типа, как в примере 7.5, нужно использовать здесь (расстояние) всгнде=64(4в16). Вообще, допустим, что о1бсуре имеет отображение типа 1(сурео,бнвро), (сУРеп и дтвРп 1)) с диапазоном ех.
ДопУстим, Ы есть ЫосК1епЕсп. Новый тип данных имеет отображение типа с соцпсвЫвп элементами ((Сурео,с1квро), ...,(суре„м дквра я), (сурео, бквро+ ех), ..., (суре„м анара я+ ех), ..., (Сурее, дзвре+ (Ы вЂ” 1) * ех), ..., (Суре„ыйявр„1+ (Ы вЂ” 1) в ех), (сурео, дн про + всгкбе), ..., (суре„м дя ври я + всгкбе), ..., (гурео, озеро+ всгзбе+ (Ы вЂ” 1) в ех), ...,(суре„м бкврп я+ всгябе+ (Ы вЂ” 1) *ех), ..., (сурео, дтвро + всгзбе * (соцпс — 1)), ..., (сурен-и бнврп я + всгнбе * (соцпс — 1)), ..., (Суреа, днвре + вСгябе в (соцпп — 1) + (Ы вЂ” 1) * ех), ..., (Суре„ы сунврп 1+ вСгнбе в (социо — 1) + (Ы вЂ” 1) в ех)).
Пример 7.8. Посылка и получение секции 2Р (двумерного) массива. Расположение этой секции 21) массива (заштрихованные квадраты) показано на рис. 7.6. Рис. 7.6. Представление массива а в примере 7.8. Заштрихованные блоки посланы Первый запрос к МР1 ТУРЕ ЧЕСТОЕ определяет тип данных, который описывает одну колонку секции: 11Э секция массива, которая состоит нз трех чисел 11оас с расстоянием н два элемента друг от друга.