fdvmDDr (1158419), страница 3
Текст из файла (страница 3)
void initVariantNames ( )
Функция инициализирует таблицу признаков вершин дерева разбора.
void initLibNames ( )
Функция инициализирует таблицу имен функций системы поддержки Lib‑DVM.
void initDVM ( )
Функция вставляет символы функций Lib-DVM в Таблицу символов.
void initMask ( )
Эта функция обнуляет маску использования функций Lib-DVM. Функции компилятора, генерирующие вызовы функций библиотеки Lib-DVM устанавливают соответствующий элемент маски равным 1. Операторы объявления создаются только для замаскированных (используемых в процедуре) функций Lib-DVM.
void TempVarDVM ( SgStatement *func )
| func | - указатель на заголовок процедуры |
Функция помещает в Таблицу символов символы следующих служебных переменных:
| integer | dvm000(...) | - массив, используемый для подготовки аргументов и |
| integer | hpf000(...) | - массив, используемый для подготовки аргументов и |
| integer | i0000m(0:0) | - база для адресации распределенных массивов типа |
| real | r0000m(0:0) | - база для адресации распределенных массивов типа |
| double precision | d0000m(0:0) | - база для адресации распределенных массивов типа |
| logical | l0000m(0:0) | - база для адресации распределенных массивов типа |
| complex | c0000m(0:0) | - база для адресации распределенных массивов типа |
| integer | i000io(1000) | - буфер для ввода-вывода распределенных массивов |
| real | r000io(1000) | - буфер для ввода-вывода распределенных массивов |
| double precision | d000io(1000) | - буфер для ввода-вывода распределенных массивов |
| logical | l000io(1000) | - буфер для ввода-вывода распределенных массивов |
| complex | c000io(1000) | - буфер для ввода-вывода распределенных массивов |
| integer | idvm00 | - do-переменные для реализации ввода-вывода |
| idvm01 | распределенных массивов | |
| . . . | ||
| idvm07 | ||
| integer | i000bf(...) | - буфер удаленных данных типа integer |
| real | r000bf(...) | - буфер удаленных данных типа real |
| double precision | d000bf(1000) | - буфер удаленных данных типа double precision |
| logical | l000bf(1000) | - буфер удаленных данных типа logical |
| complex | c000bf(1000) | - буфер удаленных данных типа complex |
void DeclareVarDVM ( SgStatement *lstat )
| lstat | - указатель на оператор |
Создает операторы объявления служебных переменных, используемых в процедуре:
-
заголовков распределенных массивов,
-
do-переменных, используемых для реализации ввода-вывода распределенных массивов,
-
переменных для адресации распределенных массивов (память DVM),
-
common блока для памяти DVM,
-
буферных массивов для удаленных данных,
-
буферных массивов для ввода-вывода распределенных массивов,
-
переменных типа группа (SHADOW_GROUP,REDUCTION_GROUP, и т.п.),
-
массивов процессоров и задач,
-
массивов для аргументов и результатов функций Lib-DVM,
-
функций Lib-DVM,
и вставляет их в процедуру вслед за оператором lstat (последним оператором спецификации или оператором, предшествующем DATA ).
(См. TempVarDVM( )).
5.1.1Создание распределенного массива и его перераспределение
| void GenDistArray ( | SgSymbol | *das, | ||
| das | - указатель на символ распределенного массива | |||
| idisars | - правила отображения (форматы распределения) хранятся в | |||
| ps | - указатель на выражение, являющееся ссылкой на массив | |||
| stdis | - указатель на оператор DISTRIBUTE | |||
Генерирует операторы для создания объекта системы Lib-DVM и размещения в памяти массива, объявленного с атрибутом DISTRIBUTE, а также всех массивов, непосредственно или косвенно выровненных на него, и вставляет эти операторы перед первым исполняемым оператором процедуры.
| void GenAlignArray ( | align | *node, | ||
| node | - указатель на вершину дерева выравнивания, которая | |||
| root | - указатель на вершину дерева выравнивания, на который | |||
| nr | - число правил выравнивания | |||
| iaxis | - правила выравнивания (AxisArray(nr), CoefArray(nr), dvm000(iaxis+1),... | |||
Генерирует операторы для создания объекта системы Lib-DVM и отведения памяти для массива с атрибутом ALIGN и вставляет эти операторы перед первым исполняемым оператором процедуры.
void doAlignRule_1 ( int rank )
| rank | - размерность массива |
Генерирует операторы для инициализации 3 массивов правил выравнивания:
AxisArray(i) = 1
CoeffArray(i) = 1
ConstArray(i) = 1 , i=1, rank
, которые используются как аргументы функции align( ) системы поддержки Lib‑DVM.
| int doAlignRule ( | SgSymbol | *alignee, | ||
| alignee | - указатель на символ выравниваемого массива | |||
| algn_st | - указатель на оператор ALIGN | |||
| iaxis | - индекс элемента служебного массива dvm000 , в котором | |||
Функция генерирует операторы для создания массивов правил выравнивания, которые используются в качестве аргументов функции align( ) системы поддержки Lib-DVM.
Функция возвращает число правил выравнивания (длину списка align-source-list в директиве ALIGN).
void AlignTree ( align *root )
| root | - указатель на корень дерева выравнивания |
Осуществляет просмотр дерева выравнивания, создает распределенный массив для каждой вершины дерева, вызывая функцию GenAlignArray().
| int doDisRuleArrays ( | SgExpression | *dist_format, | ||
| dist_format | - список форматов распределения | |||
| aster | - указатель на выражение * или нулевой указатель | |||
Функция генерирует операторы для создания 2 массивов правил отображения, которые используются как аргументы (AxisArray, DistrParamArray) функций distr( ) и redis( ) системы поддержки Lib-DVM.
Функция возвращает индекс элемента массива dvm000 , хранящего первое правило отображения (AxisArray(1)).
| void RedistributeArray ( | SgSymbol | *das, | |||
| das | - указатель на символ перераспределяемого массива | ||||
| idisars | - правила отображения (форматы распределения) хранятся в | ||||
| ps | - указатель на выражение, являющееся ссылкой на массив | ||||
| sign | - признак, определяющий надо ли обновлять значения элементов | ||||
| dasref | - указатель на выражение, являющееся ссылкой на | ||||
| stdis | - указатель на директиву REDISTRIBUTE | ||||
Генерирует оператор для перераспределения массива:
dvm000(i) = redis(...)
и вставляет его в процедуру вместо директивы REDISTRIBUTE.
Для массива, объявленного директивой ALIGN или DISTRIBUTE в форме
*DVM$ DISTRIBUTE :: …
генерируется последовательность операторов для создания распределенного массива.
| void RealignArray ( | SgSymbol | *als, | ||
| als | - указатель на символ массива, который выравнивается заново | |||
| tgs | - указатель на символ массива, на который выравнивается als | |||
| iaxis | - правила выравнивания хранятся в элементах служебного массива dvm000(iaxis+1),... | |||
| nr | - число правил выравнивания | |||
| new_sign | - признак, определяющий надо ли обновлять значения элементов | |||
| stal | - указатель на директиву REALIGN | |||
Генерирует оператор, для того чтобы заново выровнять массив:
dvm000(i) = realn(...)
и вставляет его в процедуру вместо директивы REALIGN.
| void AllocateArray ( | SgStatement | *stmt, | ||
| stmt | - указатель на оператор с вызовом функции ALLOCATE | |||
| distribute_list | - список директив DISTRIBUTE | |||
Анализируется POINTER-переменная в левой части оператора присваивания stmt. Если она имеет атрибут DISTRIBUTE, тогда вызывается функция AllocDistArray( ), иначе вызывается функция AllocAlignArray( ).
| void AllocateDistArray ( | SgSymbol | *p, | |
| p | - указатель на символ POINTER-переменной | ||
| desc | - указатель на дескриптор (дескриптор – | ||
| stdis | - указатель на директиву DISTRIBUTE, специфицирующую p | ||
| stmt | - указатель на оператор с вызовом функции ALLOCATE: | ||
Генерирует операторы для создания объекта системы Lib-DVM и отведения памяти для динамического массива с атрибутом DISTRIBUTE, а также для всех массивов, непосредственно или косвенно выровненных на него, и вставляет эти операторы вместо оператора stmt.
| void AllocateAlignArray( | SgSymbol | *p, | |||
| p | - указатель на символ POINTER-переменной | ||||
| desc | - указатель на дескриптор (дескриптор – | ||||
| stmt | - указатель на оператор с вызовом функции ALLOCATE: | ||||
Генерирует операторы для создания объекта системы Lib-DVM и отведения памяти для массива, объявленного с атрибутами ALIGN и POINTER, а также для всех массивов, выровненных на него, и вставляет эти операторы в процедуру вместо оператора stmt.















