DVMH-Indirect (Раздаточные материалы)

2019-09-18СтудИзба

Описание файла

Файл "DVMH-Indirect" внутри архива находится в папке "Раздаточные материалы". Документ из архива "Раздаточные материалы", который расположен в категории "". Всё это находится в предмете "модели параллельных вычислений и dvm технология разработки параллельных программ" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .

Онлайн просмотр документа "DVMH-Indirect"

Текст из документа "DVMH-Indirect"

Расширение модели DVMH для неструктурных сеток и разреженных матриц.

Новые конструкции.

1) Расширен набор допустимых правил распределения измерений массива:

distribute-axis-rule ::= [ * ] | [ block ] | [ wgtblock ( var-name , int-expr ) ] | [ genblock ( var-name ) ] | [ indirect ( var-name ) ] | derived ( derived-rule )

derived-rule ::= derived-elem-spec-list with derived-templ-spec [ + overlay ] [ overlay = name ]

derived-elem-spec ::= [ int-range-expr ]

int-range-expr ::= прозвольное целочисленное выражение + в индексных выражениях допустимы диапазоны (но не вложенные), использование align-dummy переменных (не ограниченное линейной формой) из правой части или пустые скобки. Пустые скобки - все измерение.

derived-templ-spec ::= var-name derived-templ-axis-spec...

derived-templ-axis-spec ::= [ ] | [ @ align-dummy ] | [ int-expr ]

При использовании indirect или derived никакие другие методы распределения применяться не могут (т. е. все остальные измерения обязаны быть со звездочками).

indirect. Нумерация процессоров начинается с нуля. var-name — одномерный массив (обычный или DVM-массив), размер которого равен (или больше) размера распределяемого измерения и имеющий базовый тип int или long.

derived. Перед align-dummy добавлена собачка для возможности отличить этот случай от случая указания константного индекса. Все ссылки на распределенные массивы в int-range-expr обязаны быть доступны (элемент входит в расширенную локальную часть) для соответствующего элемента шаблона (перебор элементов шаблона осуществляется по его локальной части и, если указано, его overlay-теневой грани). В overlay указывается имя теневой грани, к которой будут автоматически отнесены элементы, подлежащие к распределению указанным правилом на более, чем один процессор. При этом принадлежать каждый такой элемент будет к локальной части только одного процессора (какого – не регламентируется), а на остальных он будет включен в теневую грань с указанным в overlay названием. Если правило распределения приводит к наложению, то указание overlay с именем обязательно (иначе – ошибка времени выполнения). Элементов, не распределенных ни на один процессор, быть не должно, такие случаи являются ошибкой времени выполнения и приводят к останову. Вычисленные несуществующие индексы распределяемого массива игнорируются, не приводя к ошибке.

Rationale. Наложение вводится для возможности распределять связанные объекты, такие как треугольные ячейки с вершинами сетки. В таком случае появляется возможность построить одно распределение на основе другого, причем в обе стороны (в зависимости от того, что первично распределялось).

2) Добавлен иной вид указания теневых граней. Место этого указания там же, где и было – в директиве описания распределенного массива. Теневая грань — это набор элементов, не принадлежащих текущему процессу (требование принадлежности соседнему процессу снимается), для которых, во-первых, возможен доступ без специальных указаний откуда угодно, и, во-вторых, введены специальные средства работы с ними: обновление указанием shadow_renew, расширение параллельного цикла указанием shadow_compute, огранизация выполнения циклов с зависимостями указанием across и т. п.

shadow-spec ::= shadow subscript-range... | shadow ( irreg-shadow-spec-list )

subscript-range ::= [ int-expr [ : int-expr ] ]

irreg-shadow-spec ::= irreg-shadow-elem-spec-list with derived-templ-spec [ add-shadow... ] [ name = name ]

irreg-shadow-elem-spec ::= irreg-shadow-axis-spec...

irreg-shadow-axis-spec ::= [ ] | [ int-range-expr ]

add-shadow ::= + shadow-name

Слово with, возможно, не очень удачное. Только один из irreg-shadow-axis-spec может быть непустыми скобочками. В целом все так же, как и при поэлементном derived выравнивании, однако добавляется возможность построения теневой грани с использованием других теневых граней (это обстоятельство снова склоняет к введению исполняемой директивы добавления теневой грани). Из полученного множества элементов массива вычитается локальная часть (overlay грань не вычитается на всякий случай тоже), а тому, что осталось, опционально (в отличие от overlay грани, по причине важности понимания ее наличия) можно дать имя, чтобы при обновлении (shadow_renew) можно было бы обновлять только ее. В правой и левой части допустимо ссылаться на самого себя, считая, что теневые грани к массиву добавляются вторым шагом непосредственно после его распределения. Таких теневых граней можно (в отличие от блочных) указывать несколько. Указанные старым способом теневые грани могут тоже приниматься, т.к. для них есть полный аналог в новом синтаксисе. Пример интерпретации старого указания в новом виде (распределено только второе измерение, массив называется A):

shadow[0:0][1:2]shadow([][i-1:i+2] with A[][i])

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

1-2) Общие заметки о распределенных массивах.

Стоит отметить, что массив считается блочно-распределенным, если 1) или он сам распределен одним из старых методов, или выравнен на блочно-распределенный массив и 2) у него указанные (или не указанные вовсе) в старом виде теневые грани. Т.е., иначе говоря, выравнивание линейным правилом на поэлементно-распределенный массив делает выравниваемый массив поэлементно-распределенным, равно как и указание теневых граней в новом виде делает его поэлементно-распределенным. Отсюда следует необходимость соблюдения ограничения на не более, чем одно распределенное измерение, которое, в случае использования неотличимого от старого синтаксиса директив (что является допустимым), сможет быть проконтролировано только во время выполнения. При этом если фактически поэлементное распределение является блочным (и теневые грани тоже могут быть интерпретированы как блочные), то система поддержки оставляет за собой право считать такой массив блочно-распределенным.

Выравнивание существующими линейными правилами на поэлементно-распределенные массивы допускается.

3) Связывание поэлементно-распределенных массивов. Требования на группу связанных распределенных массивов: совпадение для распределенного измерения (а оно всегда одно) набора локальных для процесса глобальных индексов (а так как это требование накладывается на все процессы, то это означает одинаковое выравнивание распределенного измерения), монотонность по включению индексов по распределенному измерению теневых граней (имена теневых граней значения не имеют, важен лишь набор элементов массива, туда входящих).

#pragma dvm tie ( var-name-list )

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

#pragma dvm untie ( var-name-list )

Отвязывает указанные массивы. Каждый из них становится не связанным ни с каким другим.

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

4) Простая замена индексации на локальную в циклах.

parallel-clause ::= private ( var-name-list ) | reduction ( red-spec-list ) | shadow_renew ( shadow-spec-list ) | across ( across-spec-list ) | remote_access ( rma-spec-list ) | cuda_block ( int-expr [ , int-expr [ , int-expr ] ] ) | stage ( int-expr ) | reference ( irreg-ref-list <= loop-var-name )

irreg-ref ::= var-name irreg-axis-ref...

irreg-axis-ref ::= [ ] | [ : ]

reference означает, что указанная переменная цикла loop-var-name используется исключительно как ссылка на массивы из irreg-ref-list и массивы из irreg-ref-list индексируются исключительно указанной переменной цикла. Следовательно, такой цикл ведется в локальных индексах. В правой части допустимо указывать только переменную цикла. В левой части допустимо указывать несколько массивов, но требуется выполнение свойства связанности (см. директивы tie и untie). Двоеточие должно стоять ровно в одном измерении каждого массива из списка. При этом неявного приведения в связанное состояние не производится и отсутствие связанности приводит к ошибке времени выполнения. Важно отметить, что только одно указание reference допустимо при цикле, а значит и только для одной переменной из гнезда циклов есть возможность указать это свойство. Также следует сказать, что нет смысла делать такое указание для размноженных измерений массива или же для блочно-распределенных массивов (но нельзя игнорировать требование «указанная переменная цикла loop-var-name используется исключительно как ссылка на массивы из irreg-ref-list »).

5) Более сложная замена индексации на локальную в циклах.

#pragma dvm reference_region ref-spec-list

compound-statement

ref-spec ::= reference ( irreg-ref-list <= origin-spec-list )

origin-spec ::= var-name [ add-op primary-expr ] [ : var-name [ add-op primary-expr ] ] [ except ( except-rel-op int-constant ) ]

except-rel-op ::= < | <= | == | >= | >

Конструкция говорит о том, что следует подготовить косвенную индексацию по локальным индексам для указанных в ней сочетаний. reference означает, что указанные в origin-spec-list переменные используются исключительно как ссылки на массивы из irreg-ref-list и массивы из irreg-ref-list индексируются (косвенно) исключительно значениями указанных в origin-spec-list массивов (или значениями из указанных диапазонов). Допустимо указание смещений в индексации, диапазонов и исключений. Допускается указание различных массивов в качестве левой и правой границ диапазона, но они должны иметь одинаковый набор локально доступных элементов (локальная часть + все теневые грани), при этом их связанность не требуется. Ограничения на массивы из списка irreg-ref-list такие же, как и в указании reference при параллельном цикле. Каждый массив может быть упомянут не более одного раза в левой части и независимо от этого не более одного раза (диапазон с самим собой считается одним разом) в правой части. Следует отметить, что связанные массивы нужно перечислять в левой части в полном объеме, т. е. недостаточно указать только один из связанных массивов для оптимизации доступа к другим связанным с ним массивам.

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

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

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