fdvmDDr (1158419), страница 4

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

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

Вызываются функции AlignTreeAlloc( ) и AlignAllocArray( ).

void AlignTreeAlloc ( align *root )

root

- указатель на корень дерева выравнивания

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

void AlignAllocArray(

align
align
int
int
SgExpression

*node,
*root,
nr
iaxis
*desc );

node

- указатель на вершину дерева выравнивания, соответствующую
выравниваемому массиву с атрибутом POINTER

root

- указатель на вершину дерева выравнивания, соответствующую
массиву, на который выравнивается node

nr

- число правил выравнивания

iaxis

- правила выравнивания (AxisArray(nr), CoefArray(nr),
ConstArray(nr)) хранятся в элементах служебного массива
dvm000 : dvm000(iaxis),

dvm000(iaxis+1),...

desc

- указатель на дескриптор (дескриптор –
вектор размеров измерений динамического массива)

Генерирует операторы для создания объекта системы Lib-DVM и отведения памяти для динамического массива с атрибутом ALIGN и вставляет эти операторы в процедуру вместо оператора: pointer = ALLOCATE(desc,...).

void ArrayHeader (

SgSymbol
int

*ar,
ind );

ar

- указатель на символ массива

ind

- 0, если ar имеет атрибут POINTER
1, если ar – распределенный массив
n, где dvm000(n) – элемент служебного массива, хранящий
указатель на представление абстрактной машины,
если ar - TEMPLATE
-1, если ar объявлен как массив с отложенным распределением

Добавляет атрибут ARRAY_HEADER к символу распределенного объекта ar (ind – значение атрибута).

5.1.2Ссылки на распределенные массивы

void DistArrayRef (

SgExpression
int
SgStatement

*e,
modified
*st );

e

- указатель на выражение, являющееся ссылкой на массив

modified

- признак, определяющий в правой или левой части оператора
присваивания находится ссылка на массив e

st

- указатель на оператор, где встретилась ссылка e

Линеаризует ссылку на элемент распределенного массива в правой части оператора присваивания, т.е. заменяет ссылку

A(I1,I2, ..., IN)

выражением

N

base(A(N+2) + I1 +  A(N-j+2) * Ij )

i=2

где base - i0000m , если A имеет тип integer

r0000m , если A имеет тип real

d0000m , если A имеет тип double precision

c0000m , если A имеет тип complex

l0000m , если A имеет тип logical

SgExpression *LinearForm (

SgSymbol
SgExpression

*ar,
*el );

ar

- указатель на символ распределенного массива

el

- указатель на список индексов (I1,I2, ..., IN) ссылки на массив

Генерирует выражение

N

A(N+2) + I1 +  A(N-j+2) * Ij

i=2

где A - имя распределенного массива.

void ChangeDistArrayRef ( SgExpression *e )

e

- указатель на выражение

Просматривает выражение e и линеаризует каждую ссылку на элемент распределенного массива (вызывает DistArrayRef( )).

void ChangeDistArrayRef_Left ( SgExpression *e )

e

- указатель на выражение

Просматривает выражение e в левой части оператора присваивания и линеаризует ссылку на элемент распределенного массива (вызывает DistArrayRef( )).

void ChangeArg_DistArrayRef ( SgExpression *ele )

ele

- указатель на выражение, которое является фактическим аргументом
процедуры

Просматривает выражение ele и линеаризует ссылки на распределенные массивы, за исключением ссылок на весь массив.

void DebugVarArrayRef(

SgExpression
SgStatement

*e,
*stmt );

e

- указатель на выражение

stmt

- указатель на оператор, содержащий выражение e

Функция просматривает выражение e и линеаризует каждую ссылку на элемент распределенного массива (вызывает DistArrayRef( )). Если задан режим отладки, эта функция вставляет перед оператором stmt операторы для проверки значений переменных во время выполнения программы в отладочном режиме.

void DebugVarArrayRef_Left (

SgExpression
SgStatement
SgStatement

*e,
*stmt
*stcur );

e

- указатель на выражение в левой части оператора присваивания

stmt

- указатель на оператор, содержащий выражение e

stcur

- указатель на оператор, вслед за котором новые операторы
должны быть вставлены

Функция просматривает выражение e и линеаризует каждую ссылку на элемент распределенного массива. Если задан режим отладки, эта функция вставляет вслед за операторами stcur и stmt обращения к функциям отладчика для проверки значений переменных во время выполнения программы в отладочном режиме.

void DebugArg_VarArrayRef (

SgExpression
SgStatement

*ele,
*stmt );

ele

- указатель на выражение, которое является фактическим аргументом
процедуры

stmt

- указатель на оператор, содержащий выражение e

Функция просматривает выражение ele и линеаризует ссылки на распределенные массивы, за исключением ссылок на весь массив. Если задан режим отладки, эта функция вставляет перед оператором stmt операторы для проверки значений переменных во время выполнения программы в отладочном режиме.

5.1.3Параллельный цикл

void ParallelLoop ( SgStatement *stmt )

stmt

- указатель на директиву PARALLEL

Параллельный цикл:

*DVM$ PARALLEL (I1, ..., In) ON A(…)...

DO label I1 = ...

. . .

DO label In = ...

тело-цикла

label CONTINUE

транслируется в последовательность операторов:

[ ACROSS-block-1 ]

[ REDUCTION-block-1 ]

* создание параллельного цикла

ipl = crtpl(n)

[ SHADOW-RENEW-block-1 ]

[ SHADOW-START-block ]

[ SHADOW-WAIT-block ]

* отображение параллельного цикла (1)

it = mappl(ipl,A,...)

[ SHADOW-RENEW-block-2 ]

[ REDUCTION-block-2 ]

[ REMOTE-ACCESS-block ]

* запрос о продолжении выполнения параллельного цикла

lab1 if(dopl(ipl) .eq. 0) go to lab2

DO label I1 = ...

. . .

DO label In = ...

тело-цикла

label CONTINUE

go to lab1

* завершение параллельного цикла

lab2 it = endpl(ipl)

[ ACROSS-block-2 ]

[ REDUCTION-block-3 ]

Функция генерирует и вставляет в процедуру те операторы, которые предшествуют гнезду DO операторов. Кроме того, заменяются начальное значение, конечное значение и шаг управляющих переменных параллельного цикла. Операторы, следующие за последним оператором параллельного цикла

label CONTINUE

генерируются функцией TransFunc( ) во время обработки данного оператора.

Если задан режим отладки, создаются операторы CALL:

call dbegpl(...)

call diter(...)

call dendl(...)

, которые вставляются в блок (1) перед оператором IF, перед первым оператором тела параллельного цикла и после оператора

go to lab1

, соответственно.

Если задан режим анализа производительности, создаются операторы CALL:

call bploop(...)

call eloop(...)

, которые вставляются перед первым и вслед за последним операторами блока (1).

Для генерации блоков реализации спецификаций ACROSS, SHADOW_RENEW, REDUCTION и REMOTE_ACCESS, вызываются следующие функции:

DepList

ShadowList

doIfForReduction

ReductionList

RemoteVariableList

void ParallelLoop_Debug ( SgStatement *stmt )

stmt

- указатель на директиву PARALLEL

Если задан режим отладки, создаются операторы CALL:

call dbegpl(...)

call diter(...)

, которые вставляются перед гнездом операторов DO и перед первым оператором тела параллельного цикла, соответственно. Эта функция генерирует блоки операторов REDUCTION‑block-1 и REDUCTION-block-2, если необходимо.

Если задан режим анализа производительности, создаются операторы CALL:

call bploop(...)

call eloop(...)

, которые вставляются, соответственно, перед и после гнезда циклов DO.

void ReductionList (

SgExpression
SgExpression
SgStatement
SgStatement
SgStatement

*el,
*gref
*st
*stmt1
*stmt2 );

el

- список редукций

gref

- указатель на выражение, являющееся ссылкой на группу редукций

st

- указатель на директиву PARALLEL со спецификацией REDUCTION,
содержащей список редукций el

stmt1

- указатель на оператор, вслед за которым вставляются новые
операторы

stmt2

- указатель на оператор, вслед за которым вставляются новые
операторы

Для каждой редукции в списке el, функция генерирует и вставляет в процедуру следующие операторы:

* создание редукционной переменной

dvm000(irv) = crtrgf(reduction-function, red-var,…)

* включение редукционной переменной в группу

dvm000(i) = insred(gref,dvm000(irv),…)

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

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

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