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

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

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

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

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

Примеры.

  1. Отображение F((I1,I2)) = {I1} {I2} означает, что виток двухмерного цикла должен быть выполнен на тех же процессорах, на которые отображён элемент двухмерного образца, если их индексы совпадают.

  2. Отображение F((I1,I2)) = {*} {I1 + 5} {*} означает, что виток двухмерного цикла будет выполнен на тех же процессорах, на которые отображён элемент трёхмерного образца, если индекс по 2-му измерению образца на 5 больше индекса по 1-му измерению параллельного цикла (вне зависимости от значения индекса параллельного цикла по 2-му измерению и от значений индексов образца по 1-му и 3-му измерениям).

  3. Отображение F((I1,I2,I3)) = {*} {*} означает, что каждый виток трёхмерного цикла будет выполнен на каждом процессоре, на который отображён хотя бы один элемент двухмерного образца (вне зависимости от значений индексов отображаемого цикла и образца).

  4. Отображение F((I1,I2)) = {0} {1} {2} означает, что каждый виток двухмерного цикла (вне зависимости от значений его индексов) будет выполнен на тех процессорах, на которые отображён элемент трёхмерного образца с индексами (0,1,2).

Определяя отображение параллельного цикла в пространство образца (т.е. задавая функции F1, ... ,Fm), необходимо учитывать, что его витки не должны выходить за пределы пространства образца. Сочетание корректного отображения цикла и корректного отображения образца обеспечит, в конечном результате, верное распределение витков цикла по процессорам. Отметим, что если образец не является представлением абстрактной машины, то отображение параллельного цикла на представление абстрактной машины является суперпозицией отображения параллельного цикла в пространство образца и выравнивания образца по абстрактной машине (см.п.7.2).

При обращении к функции mappl_ правило отображения Fj(I1,...,In) = Aj*Ik + Bj для j-го измерения образца задается следующим образом:

AxisArray[j-1] содержит значение k;

CoeffArray[j-1] содержит значение Aj;

ConstArray[j-1] содержит значение Bj.

Для задания правила Fj(I1, ... ,In), значением которого для любых I1, ... ,In является множество всех значений индексной переменной j-го измерения образца, значение AxisArray[j-1] (значение k) должно быть установлено равным -1. Значения CoeffArray[j-1] и ConstArray[j-1] (значения Aj и Bj) в этом случае несущественны.

Число правил отображения, заданных при обращении к функции mappl_ , должно быть равно размерности образца.

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

9.3Изменение порядка выполнения витков цикла

long exfrst_ (

LoopRef
ShadowGroupRef

*LoopRefPtr,
*ShadowGroupRefPtr );

*LoopRefPtr

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

*ShadowGroupRefPtr

ссылка на группу границ, обмен которыми будет запущен после вычисления экспортируемых элементов локальных частей распределённых массивов.

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

Указанный выше порядок выполнения витков достигается разбиением их на каждом процессоре на 2*n+1 частей (порций) (n – размерность цикла). Информация о каждой порции витков опрашивается с помощью функции dopl_ (см. п. 9.4) и помещается при её выполнении в массивы OutInitIndexArray, OutLastIndexArray и OutStepArray, являющиеся параметрами функции mappl_ . Обращение к функции exfrst_ влечёт следующий порядок опроса порций витков функцией dopl_ : первые 2*n опросов помещают в массивы OutInitIndexArray, OutLastIndexArray и OutStepArray инфомацию о витках цикла, соответствующих экспортируемым элементам распределённых массивов; последний положительный опрос соответствует внутренним элементам распределённых массивов.

Обращение к функции exfrst_ должно предшествовать отображению параллельного цикла функцией mappl_ .

Группа границ, заданная ссылкой *ShadowGroupRefPtr, должна быть создана в текущей подзадаче.

При разбиении выполнения параллельного цикла на части с помощью функции exfrst_ результирующие ширины границ распределённых массивов, необходимые для создания порций витков, вычисляются следующим образом (вычисление осуществляет функция отображения параллельного цикла mappl_). Пусть ShadowArrayGroup – совокупность распределённых массивов, границы которых включены в группу, заданную ссылкой *ShadowGroupRefPtr. Пусть также AMView – представление абстрактной машины, в которое отображён (непосредственно или косвенно) параллельный цикл, а PLAxis – измерение цикла, которое отображено в измерение AMVAxis этого представления. Тогда результирующая нижняя (верхняя) ширина границы для измерения цикла PLAxis равна максимальному значению ширин нижних (верхних) границ тех измерений массивов из совокупности ShadowArrayGroup, которые выравнены по измерению AMVAxis представлений, эквивалентных представлению AMView.

Если системе поддержки не удалось найти ни одного распределённого массива из совокупности ShadowArrayGroup, измерение которого выравнено по измерению AMVAxis представления, эквивалентного представлению AMView, то результирующие ширины нижних и верхних границ для измерения PLAxis полагаются нулевыми. Для измерений параллельного цикла, не отображённых ни в какое измерение представления AMView, ширины нижних и верхних границ также полагаются равными нулю.

Подробно вопрос о границах локальных частей распределённых массивов рассмотрен в п.12.

Функция возвращает нулевое значение.

Замечание. Представления одной и той же абстрактной машины считаются эквивалентными, если они:

  • имеют одни и те же размерности и размеры по каждому измерению;

  • одинаково отображены в эквивалентные процессорные подсистемы.

Процессорные подсистемы системы одной и той же процессорной системы эквивалентны, если они:

  • имеют одинаковые размерности и размеры по каждому измерению;

  • состоят из одних и тех же процессоров.

long imlast_ (

LoopRef
ShadowGroupRef

*LoopRefPtr,
*ShadowGroupRefPtr );

*LoopRefPtr

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

*ShadowGroupRefPtr

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

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

Как и для функции exfrst_ , требуемый порядок выполнения витков достигается разбиением их на каждом процессоре на 2*n+1 частей (порций) (n – размерность цикла). Информация о каждой порции витков опрашивается с помощью функции dopl_ (см. п. 9.4) и помещается при её выполнении в массивы OutInitIndexArray, OutLastIndexArray и OutStepArray, являющиеся параметрами функции mappl_ . Обращение к функции imlast_ влечёт следующий порядок опроса порций витков функцией dopl_ : первый опрос помещает в массивы OutInitIndexArray, OutLastIndexArray и OutStepArray инфомацию о витках цикла, соответствующих внутренним элементам распределённых массивов; следующие 2*n опросов соответствуют экспортируемым элементам распределённых массивов.

Обращение к функции imlast_ должно предшествовать отображению параллельного цикла функцией mappl_ .

Группа границ, заданная ссылкой *ShadowGroupRefPtr, должна быть создана в текущей подзадаче.

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

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

9.4Опрос необходимости продолжения выполнения параллельного цикла

long dopl_ (LoopRef *LoopRefPtr);

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

Функция dopl_ позволяет установить, выполнены ли все части параллельного цикла, на которые разбито его выполнение посредством функций exfrst_ или imlast_. При каждом очередном обращении к функции dopl_ производится корректировка параметров цикла, содержащихся в массивах OutInitIndexArray, OutLastIndexArray и OutStepArray (выходные параметры функции mappl_).

Функция возвращает значение:

0

выполнение всех частей параллельного цикла завершено;

1

выполнение цикла требуется продолжить (в массивы OutInitIndexArray, OutLastIndexArray и OutStepArray помещена информация об очередной порции витков).

При изменённом порядке выполнения витков функция dopl_ последовательно возвращает 2*n+1 положительных значений (см. п. 9.3). Если выполнение цикла не разбивалось на части функциями exfrst_ и imlast_ , то функция dopl_ возвращает ненулевое значение только один раз. При этом информация, помещённая в массивы OutInitIndexArray, OutLastIndexArray и OutStepArray функцией mappl_ и соответствующая локальной части цикла, не меняется.

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

Обращение к функции dopl_ допустимо только для отображённого параллельного цикла.

9.5Завершение параллельного цикла

long endpl_ (LoopRef *LoopRefPtr);

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

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

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

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