rtsIDr (1158449), страница 9

Файл №1158449 rtsIDr (Раздаточные материалы) 9 страницаrtsIDr (1158449) страница 92019-09-18СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 9)

ArrayHeader

заголовок заново выравниваемого распределённого массива.

*AMViewRefPtr

ссылка на представление абстрактной машины, являющееся образцом выравнивания.

*ArrayMapRefPtr

ссылка на карту отображения распределённого массива.

*NewSignPtr

задаваемый единицей признак обновления содержимого распределённого массива.

Функция mrealn_ отменяет расположение, установленное ранее с помощью функции malign_ (или align_ , см.п.7.1) для распределённого массива с заголовком *ArrayHeaderPtr, и задаёт для этого массива новое расположение в соответствии с указанной при обращении к функции картой отображения. Все распределённые массивы, при выравнивании которых рассматриваемый массив использовался в качестве образца, своё расположение сохранят.

Размерность распределённого массива и размерность представления абстрактной машины должны быть равны соответствующим размерностям, содержащимся в карте отображения.

При равном NULL значении AMViewRefPtr или при нулевом значении *AMViewRefPtr образцом выравнивания будет представление абстрактной машины, ссылка на которое содержится в карте отображения.

Как переотображаемый распределённый массив, так и представление абстрактной машины (заданное ссылкой *AMViewRefPtr или в карте отображения) на момент обращения к функции должны быть отображены в текущую процессорную систему или её подсистему (возможно, каждый в свою).

При ненулевом значении *NewSignPtr содержимое вновь выравненного массива будет обновлено (расписано нулевым кодом), а при нулевом  сохранено. При переотображении массива содержимое его границ (см. п. 12) не сохраняется.

Перераспределение массива с помощью функции mrealn_ возможно лишь в том случае, если при его создании функцией crtda_ значение её параметра *ReDistrParPtr было задано равным 2 или 3 (см.п.6).

Распределённый массив, заданный при обращении к функции, может быть ранее не отображён. В этом случае функция mrealn_ выполняется как функция malign_ , а значение параметра *NewSignPtr несущественно. Значение параметра *ReDistrParPtr, с которым был создан распределённый массив, также не имеет значения.

Функция возвращает ненулевое значение, если переотображённый массив имеет локальную часть на текущем процессоре, и нулевое  в противном случае.

7.7Уничтожение карты отображения

long delarm_(ArrayMapRef *ArrayMapRefPtr);

*ArrayMapRefPtr  ссылка на карту отображения распределённого массива.

Функция уничтожает созданную функцией arrmap_ карту отображения распределённого массива. После уничтожения карты отображения ссылка на неё может использоваться по усмотрению пользовательской программы.

Карта отображения может быть уничтожена функцией delarm_ только в том случае, если она была создана в текущей подзадаче и в текущем программном блоке (или его подблоке) (см. п. 8 и п. 10).

Карта отображения может быть уничтожена также с помощью функции delobj_ (см.п.17.5).

Возвращается нулевое значение.

Замечание. Одним из возможных применений функций выравнивания распределённого массива по карте отображения  сохранение и восстановление расположения массивов в процедурах, обрабатывающих внешние распределённые массивы с их перераспределением.

Отметим, что на момент использования карты отображения для задания или изменения расположения массива массив, являвшийся источником этой карты, может и не существовать.

7.8Опрос ссылки на представление абстрактной машины, в которое отображён заданный распределённый массив

AMViewRef getamv_ (long ArrayHeader[]);

ArrayHeader  заголовок распределённого массива.

Функция getamv_ возвращает ссылку на представление абстрактной машины, по которому выравнен распределённый массив, заданный заголовком ArrayHeader. Нулевое значение возвращённой ссылки означает, что заданный массив не отображён.

8Определение программного блока

long begbl_ (void);

Функция begbl_ определяет начало блока локализации следующих системных объектов:

  • распределённого массива;

  • представления абстрактной машины;

  • многопроцессорной системы;

  • карты отображения представления абстрактной машины;

  • карты отображения распределённого массива;

  • редукционной переменной;

  • редукционной группы;

  • группы границ распределённых массивов;

  • буфера удалённых элементов регулярного доступа;

  • группы буферов удалённых элементов регулярного доступа;

  • буфера удалённых элементов нерегулярного доступа;

  • группы буферов удалённых элементов нерегулярного доступа.

Вышеперечисленные объекты, созданные в блоке локализации, являются локальными и автоматически уничтожаются при выходе из этого блока (кроме объектов, созданных как статические и уничтожаемых только явно). Блоки локализации могут быть вложенными.

Отметим, что при уничтожении представления абстрактной машины уничтожаются все отображённые по нему распределённые массивы, а при уничтожении процессорной подсистемы – все отображённые в неё представления абстрактных машин.

Возвращается нулевое значение.

long endbl_ (void);

Функция endbl_ определяет завершение блока локализации. Возвращается нулевое значение.

9Описание параллельного цикла

9.1Создание параллельного цикла

LoopRef crtpl_ (long *RankPtr);

*RankPtr  размерность параллельного цикла.

Функция crtpl_ создает параллельный цикл (определяет его начало) и возвращает ссылку на него. Завершение параллельного цикла осуществляется с помощью функции endpl_ (см. п. 9.5).

Внутри любого параллельного цикла может быть создан и завершен другой параллельный цикл, т. е. параллельные циклы могут быть вложенными.

9.2Отображение параллельного цикла

long mappl_ (

LoopRef
PatternRef
long
long
long
AddrType
long
long
long
long
long
long
long

*LoopRefPtr,
*PatternRefPtr,
AxisArray[],
CoeffArray[],
ConstArray[],
LoopVarAddrArray[],
LoopVarTypeArray[],
InInitIndexArray[],
InLastIndexArray[],
InStepArray[],
OutInitIndexArray[],
OutLastIndexArray[],
OutStepArray[] );

*LoopRefPtr

ссылка на параллельный цикл.

*PatternRefPtr

ссылка на образец отображения параллельного цикла.

AxisArray

массив, j-й элемент которого содержит номер индексной переменной (номер измерения) параллельного цикла для линейного правила выравнивания (j+1)-го измерения образца.

CoeffArray

массив, j-й элемент которого содержит коэффициент для индексной переменной параллельного цикла в линейном правиле выравнивания (j+1)-го измерения образца.

ConstArray

массив, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца.

LoopVarAddrArray

массив, i-й элемент которого содержит адрес индексной переменой (i+1)-го измерения параллельного цикла, приведённый к типу AddrType.

LoopVarTypeArray

массив, i-й элемент которого содержит тип индексной переменной (i+1)-го измерения параллельного цикла.

InInitIndexArray

входной массив, i-й элемент которого содержит начальное значение индексной переменной (i+1)-го измерения параллельного цикла.

InLastIndexArray

входной массив, i-й элемент которого содержит конечное значение индексной переменной (i+1)-го измерения параллельного цикла.

InStepArray

входной массив, i-й элемент которого содержит значение шага для индексной переменной (i+1)-го измерения параллельного цикла.

OutInitIndexArray

выходной массив, в i-й элемент которого будет записано скорректированное начальное значение индексной переменной (i+1)-го измерения параллельного цикла.

OutLastIndexArray

выходной массив, в i-й элемент которого будет записано скорректированное конечное значение индексной переменной (i+1)-го измерения параллельного цикла.

OutStepArray

выходной массив, в i-й элемент которого будет записано скорректированное значение шага для индексной переменной (i+1)-го измерения параллельного цикла.

Функция mappl_ создает регулярное отображение указанного параллельного цикла на указанное представление абстрактной машины в соответствии с заданными правилами отображения и описаниями измерений цикла. При этом витки цикла распределяются между дочерними абстрактными машинами, которые входят в состав этого представления. Представление абстрактной машины определяется образцом, который может быть как самим представлением, так и, при косвенном отображении, распределённым массивом. В последнем случае ссылка на образец  это первое слово заголовка распределённого массива.

Использование в качестве образца распределённого массива допустимо лишь в том случае, если он уже отображён на некоторое представление абстрактной машины, а использование представления абстрактной машины  если оно уже отображено на некоторую многопроцессорную систему. Поэтому выполнение функции mappl_ сводится к распределению витков отображаемого цикла между процессорами, входящими в состав этой многопроцессорной систем.

Повторное отображение параллельного цикла не допускается.

Каждое описание измерения параллельного цикла содержит начальное и конечное значения индекса, а также шаг его изменения. Функция mappl_ перевычисляет эти характеристики для текущего процессора (выделяет соответствующее подмножество итераций цикла) и записывает их новые значения в массивы OutInitIndex, OutLastIndexArray и OutStepArray. Число описаний измерений параллельного цикла должно быть равно его размерности.

Начальное значение индекса для любого измерения может быть как меньше его конечного значения, так и больше его. В первом случае предполагается задание положительного значения шага, во втором  отрицательного.

В Фортране массив LoopVarAddrArray может быть сформирован с помощью функции dvmadr_ , рассмотренной в п.17.7.

Типы индексных переменных параллельного цикла, задаваемые в массиве LoopVarTypeArray, могут принимать значения:

0 – переменная типа long;

1 – переменная типа int;

2 – переменная типа short;

3 – переменная типа char.

Если LoopVarTypeArray = NULL, то типы индексных переменных всех измерений цикла полагаются равными единице (int).

Рассмотрим отображение параллельного цикла подробнее. Пусть Fмногозначная функция, определённая на индексном пространстве отображаемого цикла и принимающая значения в индексном пространстве образца:

F( (I1, ... ,Ii, ... ,In) ) =

F1(I1, ... ,Ii, ... ,In) 
. . . . . . . . . . . .. . .
Fj(I1, ... ,Ii, ... ,In) 
. . . . . . . . . . . .. . .
Fm(I1, ... ,Ii, ... ,In)
,

где:

символ операции прямого произведения множеств;

n

размерность параллельного цикла;

m

размерность образца;

Ii

индексная переменная i-го измерения параллельного цикла;

Fj

многозначная функция, принимающая значения во множестве значений индексной переменной j-го измерения образца.

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

Функции F1, ... ,Fm называются координатными правилами отображения параллельного цикла. Система поддержки обеспечивает следующие правила отображения.

1.

Fj(I1, ... ,In) = { Aj*Ik + Bj } , где:

k=f(j)

номер измерения параллельного цикла (1 ≤ k ≤ n, f(j1) f(j2) при j1 j2);

Aj, Bj

целые числа.

В этом случае образом элемента (i1, ... ,in) индексного пространства параллельного цикла является множество, содержащее один элемент  Aj*Ik + Bj, принадлежащий множеству значений индексной переменной j-го измерения образца.

Aj и Bj должны удовлетворять условиям:

0 Aj*MAXk + Bj MAXj и 0 Aj*MINk + Bj MAXj , где:

MAXj

максимальное значение индексной переменной j-го измерения образца;

MAXk

максимальное значение индексной переменной k-го измерения параллельного цикла;

MINk

минимальное значение индексной переменной k-го измерения параллельного цикла.

2. Fj(I1, ... ,In) = { q  Mj: 0 ≤ q ≤ MAXj } , где:

Mj

множество значений индексной переменной j-го измерения образца;

MAXj

максимальное значение индексной переменной j-го измерения образца.

В этом случае образом любого элемента (i1, ... ,in) индексного пространства отображаемого цикла является все множество значений индексной переменной j-го измерения образца (в подобных случаях принято использовать символ "*" , т. е. "любой из допустимых").

Характеристики

Список файлов учебной работы

Свежие статьи
Популярно сейчас
А знаете ли Вы, что из года в год задания практически не меняются? Математика, преподаваемая в учебных заведениях, никак не менялась минимум 30 лет. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7038
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее