cdvmDDr (1158400), страница 5

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

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

Выход компилятора.

DVM_PAR_SHADOW_START(n,sg); // in loop header

Реализация.

Функция wfLXIsg проверяет sh-group-id и выдает сообщение, если он не определен или не специфицирован как SHADOW_GROUP.

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

3.3.7Директива SHADOW_WAIT

Контекст и синтаксис.

DVM(SHADOW_WAIT sh-group-id);

Выход компилятора.

DVM_SHADOW_WAIT(sg);

Замечание. Выполнимая директива конвертируется в оператор.

Реализация.

Функция wfLXIsg проверяет sh-group-id и выдает сообщение, если он не определен или не специфицирован как SHADOW_GROUP.

Требуемые поддеревья строит функция wfSHWAIT().

3.3.8Поддиректива SHADOW_WAIT

Контекст и синтаксис.

DVM(PARALLEL ... ; SHADOW_WAIT sh-group-id ...) ...

Выход компилятора.

DVM_PAR_SHADOW_WAIT(n,sg); // in loop header

Реализация.

Функция wfLXIsg проверяет sh-group-id и выдает сообщение, если он не определен или не специфицирован как SHADOW_GROUP.

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

3.4Удаленный доступ

3.4.1Директива и поддиректива REMOTE_ACCESS

Контекст и синтаксис.

DVM(REMOTE_ACCESS ra-reference...)

C-statement

DVM(PARALLEL ... ;

REMOTE_ACCESS [ ra-group : ] ra-reference...

...) ...

ra-reference ::= array [ "["[expr]"]"... ]

Выход компилятора.

DVM_BLOCK_BEG();

DVM_REMOTE20(arr,buf,k,as,bs);

statements using remote referencies

DVM_BLOCK_END();

Реализация.

Функция wfREMOTE() проверяет индексные выражения и выдает сообщение, если они некорректны. Она также сохраняет информацию, необходимую для распознавания и преобразования удаленных ссылок.

Требуемые поддеревья строит функция mk_remote(dir,oper). Она использует функции:

  • mk_rabufid(lx,n) генерирует идентификатор буфера удаленного доступа;

  • mk_radcl(ra) порождает описания буферов;

  • mk_racrt(ra,rg) порождает операторы для создания буферов.

3.4.2Директива REMOTE_GROUP

Контекст и синтаксис.

DVM(REMOTE_GROUP) void * ra-group-id;

Выход компилятора.

RegularAccessGroupRef ra-group-id;

long RMG_ra-group-id;

Замечание. Исходное описание заменено. Для операций PREFETCH и RESET требуется вспомогательная переменная, управляющая операциями обновления буферов.

Реализация.

Функция ISWFdcltr проверяет (кроме прочего), что ra-group-id описан как void *, и выдает сообщение, если это не так.

Функция crRef(N,type) заменяет тип "void*" на тип "RegularAccessGroupRef" и порождает описание вспомогательной переменной "RMG_...". Функция crRMGdcltrs(N) генерирует ее декларатор.

3.4.3Директива PREFETCH

Контекст и синтаксис.

DVM(PREFETCH ra-group-id );

Выход компилятора.

DVM_PREFETCH(rg);

Замечание. Выполнимая директива конвертируется в оператор.

Реализация.

Функция wfLXIag проверяет ra-group-id и выдает сообщение, если он не определен или не специфицирован как REMORE_GROUP.

Требуемые поддеревья строит функция wfPREFETCH().

3.4.4Директива RESET

Контекст и синтаксис.

DVM(RESET ra-group-id );

Выход компилятора.

DVM_RESET(rg);

Замечание. Выполнимая директива конвертируется в оператор.

Реализация.

Функция wfLXIag проверяет ra-group-id и выдает сообщение, если он не определен или не специфицирован как REMORE_GROUP.

Требуемые поддеревья строит функция wfRESET().

3.4.5Удаленные ссылки

Удаленные ссылки заменяются на ссылки к соответствующему буферу.

Реализация.

  • Функция inRemote() ищет объемлющую директиву REMOTE_ACCESS;

  • RAfind(N,ra) ищет в директиве подходящий образец удаленной ссылки;

  • RAcmpR(N,ra) сравнивает ссылку с образцом;

  • RAsubstR(N,ra,bufid) создает ссылку на буфер удаленного доступа bufid.

3.5Редукционные операции

3.5.1Директива REDUCTION_GROUP

Контекст и синтаксис.

DVM(REDUCTION_GROUP) void * red-group-id;

Выход компилятора.

RedGroupRef red-group-id;

Замечание. Исходное описание заменено.

Реализация.

Функция ISWFdcltr проверяет (кроме прочего), что red-group-id описан как void *, и выдает сообщение, если это не так.

Функция crRef(N,type) заменяет тип "void*" на тип "RedGroupGroupRef".

3.5.2Поддиректива REDUCTION

Контекст и синтаксис.

DVM( PARALLEL | TASK_REGION ... ;

REDUCTION [ red-group-id : ] red-operation...

... ) ...

Выход компилятора.

DVM_CREATE_RG(rg, (

DVM_RVAL(...) | DVM_RLOC(...) // for each operation

...

));

loop creation and mapping

DVM_REDUCTION20(loopid,rg); // insert to the group

loop headers and body

[ DVM_END_REDUCTION(); ] // synchronous reduction

Реализация.

Требуемые поддеревья строит функция wfREDUCTION, а именно, создается список макрокоманд DVM_RVAR или DVM_RLOC для всех редукционных операций в директиве. Окончательное построение выполняется функцией Ploop, когда цикл полностью разобран. Она вставляет ранее построенное поддерево в нужное место оболочки параллельного цикла, в зависимости от того, является ли редукция синхронной или асинхронной.

3.5.3Редукционные переменные и операции

Контекст и синтаксис.

DVM(...; REDUCTION ... MAX(red-var) ... )

DVM(...; REDUCTION ... MIN(red-var) ... )

DVM(...; REDUCTION ... SUM(red-var) ... )

DVM(...; REDUCTION ... PROD(red-var) ... )

DVM(...; REDUCTION ... AND(red-var) ... )

DVM(...; REDUCTION ... OR(red-var) ... )

DVM(...; REDUCTION ... MAXLOC(red-var,loc-var) ... )

DVM(...; REDUCTION ... MINLOC(red-var,loc-var) ... )

Выход компилятора.

DVM_RVAR(rf_MAX,var,t,l)

DVM_RVAR(rf_MIN,var,t,l)

DVM_RVAR(rf_SUM,var,t,l)

DVM_RVAR(rf_PROD,var,t,l)

DVM_RVAR(rf_AND,var,t,l)

DVM_RVAR(rf_OR,var,t,l)

DVM_RLOC(rf_MAX,var,t,l,loc-var)

DVM_RLOC(rf_MIN,var,t,l,loc-var)

Замечание. Параметр t - это код типа переменной (rt_INT, rt_LONG, rt_FLOAT, rt_DOUBLE). Параметр l - это число элементов в red-var (если это массив) или 1.

Реализация.

Функция cRG0() строит макрокоманду DVM_RVAR или DVM_RLOC для одной операции в списке. Ее первый параметр - имя операции - порождается функцией rts_name(t). Функция cRG(Ad,N) создает список макрокоманд для всех операций в директиве.

3.5.4Директива REDUCTION_START

Контекст и синтаксис.

DVM(REDUCTION_START red-group-id);

Выход компилятора.

DVM_REDUCTION_START(red-group-id);

Замечание. Выполнимая директива конвертируется в оператор.

Реализация.

Функция wfLXIrg проверяет red-group-id и выдает сообщение, если он не определен или не специфицирован как REDUCTION_GROUP.

Требуемые поддеревья строит функция wfRSTART().

3.5.5Директива REDUCTION_WAIT

Контекст и синтаксис.

DVM(REDUCTION_WAIT red-group-id);

Выход компилятора.

DVM_REDUCTION_WAIT(red-group-id);

Замечание. Выполнимая директива конвертируется в оператор.

Реализация.

Функция wfLXIrg проверяет red-group-id и выдает сообщение, если он не определен или не специфицирован как REDUCTION_GROUP.

Требуемые поддеревья строит функция wfRWAIT().

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

3.6.1Создание и удаление распределенных массивов

Контекст и синтаксис.

array = malloc(dim1 *...* dimr * elem-size);

free( array );

Выход компилятора. Генерируются все или часть следующих операторов в зависимости от описания массива array.

[ DVM_CREATE_TEMPLATE(am,t,r,di); // implicit template ]

[ DVM_ONTO(ps,k,ls,hs); // target system ]

[ DVM_DISTRIBUTE(amv,ps,k,axs); // distribute template ]

[ DVM_GENBLOCK(am,ps,k,gbs); // GENBLOCK parameters ]

DVM_MALLOC(arr,r,len,dim,lw,hw,redis) // initialize array handler

[ DVM_ALIGN(arr,base,k,i,a,b) // align with template ]

Реализация.

Функция ISWF проверяет параметр malloc, левую часть присваивания и выдает сообщение, если:

  • параметр не записан в виде произведения;

  • слишком много или слишком мало сомножителей-размерностей;

  • последний сомножитель не записан в форме sizeof(...) (предупреждение).

Требуемые поддеревья строит функция mk_alloc(lhs,parm). Она вызывает функции mk_templ и mk_genblock, и использует поддерево, построенное для предложения ONTO директивы DISTRIBUTE.

3.6.2Статические распределенные массивы

Контекст и синтаксис.

DVM(DISTRIBUTE | ALIGN...)

element-type array-id "["const-dim"]"...;

Выход компилятора. Обычная последовательность действий, как в случае malloc.

Замечание. Для глобальных описаний неявный malloc вставляется в начало функции main. Для локальных -- перед первым оператором блока.

Реализация.

Функция ISWFdcltr (кроме прочего) определяет, не является ли декларатор "статическим". В этом случае она строит поддерево для неявного создания и с помощью функции addIMloc сохраняет его во временном глобальном или локальном списке и выдает сообщение, если точка вставки уже пройдена. Операторы будут вставлены в нужное место функцией genIMglob или genIMloc

3.6.3Доступ к распределенным данным

Контекст и синтаксис. Обычные ссылки на элементы массивов array[ind1]...[indr] с распределенным array. Допускается также специальная форма ссылок в виде макрокоманд array(ind1,...,indr) для моделирования динамических массивов.

Выход компилятора.

DAElm<r>(type,array-id,ind1,...indr)

Замечание. Это макрокоманды RTL.

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

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

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