Предиктор.
Детальный дизайн (продолжение) |
- дата последнего обновления 22.05.01 -
Приложение 1. Связь имен полей в выходном HTML-файле и имен полей в структуре _IntervalResult
Имя поля | Якорь | Переменная inter | ||
Efficiency | effic | Efficiency | ||
Execution time | exec | Execution_time | ||
Total time | total | Total_time | ||
Productive time | ptime | Productive_time | ||
CPU | ptimec | Productive_CPU_time | ||
SYS | ptimes | Productive_SYS_time | ||
I/O | ptimei | IO_time | ||
Lost time | lost | Lost_time | ||
Insufficient parallelism | insuf | Insuff_parallelism | ||
USR | iuser | Insuff_parallelism_sys | ||
SYS | isyst | Insuff_parallelism_usr | ||
Communications | comm | Communication | ||
SYN | csyn | Communication_SYNCH | ||
Idle time | idle | Idle | ||
Load imbalance | imbal | Load_imbalance | ||
Synchronization | synch | Synchronization | ||
Time variation | vary | Time_variation | ||
Overlap | over | Overlap | ||
IO |
# op | nopi | num_op_io | |
Communications | comi | IO_comm | ||
Real synch | synchi | IO_synch | ||
Overlap | overi | IO_overlap | ||
Reduction | # op | nopr | num_op_reduct | |
Communications | comr | Wait_reduction | ||
Real synch | synchr | Reduction_synch | ||
Overlap | overr | Reduction_overlap | ||
Shadow | # op | nops | num_op_shadow | |
Communications | coms | Wait_shadow | ||
Real synch | synchs | Shadow_synch | ||
Overlap | overs | Shadow_overlap | ||
Remote access | # op | nopa | num_op_remote | |
Communications | coma | Remote_access | ||
Real synch | syncha | Remote_synch | ||
Overlap | overa | Remote_overlap | ||
Redistribution | # op | nopd | num_op_redist | |
Communications | comd | Redistribution | ||
Real synch | synchd | Redistribution_synch | ||
Overlap | overd | Redistribution_overlap |
Приложение 2. Описание вспомогательных функций и классов
Ниже приводится описание функций и классов, используемых при реализации алгоритмов описанных в предыдущей главе.
Базовый класс для большинства классов.
class Space { protected: long Rank; // Размерность пространства vector<long> SizeArray; // Размер каждого измерения vector<long> MultArray; // Множитель для каждого измерения public: Space(); Space(long ARank,vector<long> ASizeArray,vector<long> MultArray); Space(long ARank, long *ASizeArray); Space(const Space &); ~Space(); Space & operator= (const Space &x); long GetRank(); long GetSize(long AAxis); void GetSI(long LI, vector<long> & SI); long GetLI(const vector<long> & SI); long GetCenterLI(); long GetSpecLI(long LI, long dim, int shift); long GetLSize(); long GetNumInDim(long LI, long dimNum); long GetDistance(long LI1, long LI2); };
GetRank | – | возвращает размерность пространства. |
GetSize | – | возвращает размер измерения с номером AAxis. |
GetSI | – | вычисляет координаты SI в данном пространстве по линейному индексу LI. |
GetLI | – | вычисляет линейный индекс по координатам в данном пространстве. |
GetCenterLI | – | возвращает линейный индекс элемента, являющегося геометрическим центром пространства. |
GetSpecLI | – | функция возвращает линейный индекс элемента, который смещён на shift по измерению dim от элемента заданного линейным индексом LI. |
GetLSize | – | возвращает линейный размер (число элементов) пространства. |
GetNumInDim | – | возвращает координату элемента, заданного линейным индексом LI, в данном измерении dimNum. |
GetDistance | – | расстояние между двумя элементами пространства заданными линейными индексами LI1 и LI2. |
Класс “Виртуальная машина”
(“Процессорная система”).
class VM : public Space { int MType; // Тип распределенной системы процессоров // 0 – сеть с шинной организацией, 1 – транспьютерная система double TStart; // Время старта операции обмена double TByte; // Время пересылки одного байта public: // конструктор VM(vector<long>& ASizeArray, int AMType, double ATStart, double ATByte,double AProcPower); ~VM(); double getTByte(); double getTStart(); int getMType(); };
Класс “Представление абстрактной машины”.
class AMView : public Space { public: VM *VM_Dis; // Система процессоров, на которую отображен шаблон list<DArray *> AlignArrays; // Список выравненных на данный шаблон массивов vector<DistAxis> DistRule; // Правило отображения шаблона в систему процессоров vector<long> FillArr; // Массив с информацией о заполнении процессорной // системы элементами шаблона AMView(long ARank, long *ASizeArray); AMView(const AMView &); ~AMView(); void DelDA(DArray *RAln_da); void AddDA(DArray *Aln_da); void DisAM(VM *AVM_Dis, long AParamCount, long *AAxisArray, long *ADistrParamArray); double RDisAM(long AParamCount, long *AAxisArray, long *ADistrParamArray, long ANewSign); bool IsDistribute(); };
DelDA | - | удаляет распределенный массив DArray из списка выравненных массивов. |
AddDA | - | добавляет распределенный массив DArray в список выравненных массивов. |
DisAM | - | функция отображения шаблона в систему процессоров. Производится инициализация указателя на систему процессоров, правила отображения и массив с информацией о заполнении процессорной системы элементами шаблона в соответствии с параметрами функции. |
RdisAM | - | функция определения времени затрачиваемого на обмены при изменении отображения шаблона в систему процессоров (перераспределение шаблона). Алгоритм, реализуемый ею, описан в п.3.2. |
IsDistribute | - | проверяет, распределен ли уже шаблон на систему процессоров. |
Класс “ распределенный массив”.
class DArray : public Space { private: void PrepareAlign(long& TempRank, long *AAxisArray, long *ACoeffArray, long *AConstArray, vector<AlignAxis>& IniRule); long CheckIndex(long *InitIndexArray, long *LastIndexArray, long *StepArray); public: long TypeSize; // Размер в байтах одного элемента массива AMView *AM_Dis; // Шаблон по которому выравнен данный массив vector<AlignAxis> AlignRule // Правило выравнивания массива на шаблон int Repl; // признак полностью размноженного по шаблону массива DArray(); DArray(long ARank, long *ASizeArray, long ATypeSize); DArray(const DArray &); ~DArray(); DArray & operator= (DArray &x); void AlnDA(AMView *APattern, long *AAxisArray, long *ACoeffArray, long *AConstArray); void AlnDA(DArray *APattern, long *AAxisArray, long *ACoeffArray, long *AConstArray); double RAlnDA(AMView *APattern, long *AAxisArray, long *ACoeffArray, long *AConstArray, long ANewSign); double RAlnDA(DArray *APattern, long *AAxisArray, long *ACoeffArray, long *AConstArray, long ANewSign); friend double ArrayCopy(DArray *AFromArray, long *AFromInitIndexArray, long *AFromLastIndexArray, long *AFromStepArray, DArray *AToArray, long *AToInitIndexArray, long *AToLastIndexArray, long *AToStepArray, long ACopyRegim); long GetMapDim(long arrDim, int &dir); bool IsAlign(); };
PrepareAlign | – | инициализирует правило выравнивания массива на образец выравнивания. |
CheckIndex | – | возвращает число элементов в секции данного массива, заданной параметрами функции ( 0 – если она пуста или индексы вышли за пределы массива). |
AlnDA | – | функции задания расположения (выравнивания) распределенного массива. Во второй функции производится косвенное задание шаблона через распределенный массив. Производится инициализация указателя на шаблон. В первой функции производится определение признака полностью размноженного по шаблону массива, во второй же он наследуется у массива, выступающего в качестве образца отображения. Также в первой функции производится инициализация правила выравнивания массива на шаблон при помощи функции PrepareAlign, а во второй, кроме этого, производится изменение полученного правила с учетом того, как выравнен образец, по которому выравнивается данный массив (т.е. осуществляется суперпозиция выравниваний, для получения результирующего выравнивания массива на шаблон). |
RAlnDA | – | функция определения времени затрачиваемого на обмены при повторного выравнивания массива на шаблон. Алгоритм, реализуемый ею, описан в п.3.2. |
ArrayCopy | – | функция определения времени затрачиваемого на обмены при загрузке буферов удаленными элементами массива. (Алгоритм описан в п.3.5.) |
GetMapDim | – | функция возвращает номер измерения системы процессоров, на которое в итоге отображено указанное измерение массива arrDim. Если измерение массива размножено по всем направлениям матрицы процессоров, то возвращается 0. В dir заносится 1 или -1 в зависимости от направления разбиения измерения массива. |
IsAlign | – | проверяет, выравнен ли уже массив на шаблон. |
Класс ”Группа границ”.
class BoundGroup { AMView *amPtr; // Шаблон, по которому выравнены массивы, чьи границы // добавлены в данную группу CommCost boundCost; // Информация об обменах между процессорами public: BoundGroup(); virtual ~BoundGroup(); void AddBound(DArray *ADArray, long *ALeftBSizeArray, long *ARightBSizeArray, long ACornerSign); double StartB(); };
AddBound | – | включение границы распределенного массива в группу границ. (Алгоритм описан в п.3.3.) |
StartB | – | функция определения времени затрачиваемого на обмены границами распределенных массивов, включенными в данную группу. (Алгоритм описан в п.3.3.) |
Класс “Редукционная переменная”.
class RedVar { public: long RedElmSize; //Размер элемента редукционной переменной - массива в //байтах long RedArrLength; //Число элементов в редукционной переменной-массиве long LocElmSize; //Размер в байтах одного элемента массива с дополнительной //информацией RedVar(long ARedElmSize, long ARedArrLength, long ALocElmSize); RedVar(); virtual ~RedVar(); long GetSize(); };
GetSize | – | возвращает размер в байтах редукционной переменной-массива вместе с массивом дополнительной информации. |
Класс “Редукционная группа”.
class RedGroup { public: VM *vmPtr; // Указатель на систему процессоров vector<RedVar *> redVars; // Массив редукционных переменных long TotalSize; // Общий размер в байтах редукционных переменных // включенных в группу с их дополнительной информации long CentralProc; // Линейный индекс геометрического центра системы // процессоров RedGroup(VM *AvmPtr); virtual ~RedGroup(); void AddRV(RedVar *ARedVar); double StartR(DArray *APattern, long ALoopRank, long *AAxisArray); };
void AddRV | – | функция включения редукционной переменной в редукционную группу.( Алгоритм описан в п.3.4). |
StartR | – | функция возвращающая время затрачиваемое на обмены при выполнении операций редукции. (Алгоритм описан в п.3.4). |
Класс “Распределение измерения
массива”.
class DistAxis { public: long Attr; // Тип распределения long Axis; // Номер измерения шаблона long PAxis; // Номер измерения системы процессоров DistAxis(long AAttr, long AAxis, long APAxis); DistAxis(); virtual ~DistAxis(); DistAxis& operator= (const DistAxis&); };
Класс “Выравнивание измерения распределенного массива на шаблон”.
class AlignAxis { public: long Attr; // Тип выравнивания long Axis; // Номер измерение массива long TAxis; // Номер измерения шаблона long A; // Коэффициент для индексной переменной распределенного // массива в линейном правиле выравнивания TAxis-го // измерения шаблона long B; // Константа линейного правила выравнивания для TAxis-го // измерения шаблона long Bound; // Размер измерения массива выступающего в качестве образца // выравнивания при частично размножении выравниваемого // массива AlignAxis(long AAttr, long AAxis, long ATAxis, long AA = 0, long AB = 0, long ABound = 0); AlignAxis(); virtual ~AlignAxis(); AlignAxis& operator= (const AlignAxis&); };
Класс “Теневая грань по одному измерению распределенного массива”.
class DimBound { public: long arrDim; // Номер измерения массива long vmDim; // Номер измерения системы процессоров int dir; // Равно 1 или -1 в зависимости от направления разбиения // измерения массива long LeftBSize; // Ширина левой границы для arrDim-го измерения массива long RightBSize; // Ширина правой границы для arrDim-го измерения массива DimBound(long AarrDim, long AvmDim, int Adir, long ALeftBSize, long ARightBSize); DimBound(); virtual ~DimBound(); };
Класс “Секция массива”.
class Block { vector<LS> LSDim; // Вектор, содержащий соответствующие линейные сегменты, // для каждого измерения массива, описывающие данную секцию public: Block(vector<LS> &v); Block(DArray *da, long ProcLI); Block(); virtual ~Block(); Block & operator =(const Block & x); long GetRank(); long GetBlockSize(); long GetBlockSizeMult(long dim); long GetBlockSizeMult2(long dim1, long dim2); bool IsLeft(long arrDim, long elem); bool IsRight(long arrDim, long elem); bool IsBoundIn(long *ALeftBSizeArray,long *ARightBSizeArray); bool empty(); friend Block operator^ (Block &x, Block &y); };
Block | – | создает секцию массива da, лежащую на процессоре с линейным индексом ProcLI. |
GetRank | – | возвращает размерность секции. |
GetBlockSize | – | число элементов в секции. |
GetBlockSizeMult, GetBlockSizeMult2 |
– | данные функции возвращают произведение размеров секции по каждому измерению кроме указанных при обращении к ним. |
IsLeft, IsRight | – | проверка того, что по данному измерению arrDim элемент elem находится левее (правее) данной секции |
IsBoundIn | – | проверка на не выход границы распределенного массива за пределы данной секции. |
Empty | – | проверка секции на отсутствие элементов. |
Block operator^ | – | возвращает секцию, являющуюся пересечением секций заданных при обращении к функции. |
Класс “Линейный сегмент”.
class LS { public: long Lower; // Нижнее значение индекса long Upper; // Верхнее значение индекса LS(long ALower, long AUpper); LS(); virtual ~LS(); long GetLSSize(); void transform(long A, long B, long daDimSize); bool IsLeft(long elem); bool IsRight(long elem); bool IsBoundIn(long ALeftBSize, long ARightBSize); bool empty(); LS operator^ (LS &x); };
GetLSSize | – | возвращает размер линейного сегмента. |
Transform | – | преобразует линейный сегмент шаблона в линейный сегмент распределенного массива выравненного по данному шаблону. |
IsLeft, IsRight | – | проверка того, что элемент elem находится левее (правее) данного сегмента. |
IsBoundIn | – | проверка на не выход заданной границы за пределы сегмента. |
empty | – | проверка сегмента на отсутствие элементов. |
LS operator | – | оператор пересечения сегментов. |
Класс “Оценка обменов между
процессорами”.
class CommCost { public: Dim2Array transfer; // Массив содержащий информацию о количестве байтов // пересылаемых между парой процессоров VM *vm; // Указатель на систему процессоров CommCost(VM *Avm); CommCost(); virtual ~CommCost(); CommCost & operator =(const CommCost &); double GetCost(); void Update(DArray *oldDA, DArray *newDA); void BoundUpdate(DArray *daPtr, vector<DimBound> & dimInfo, bool IsConer); void CopyUpdate(DArray *FromArray, Block & readBlock); };
GetCost | – | функция возвращает время, затрачиваемое на обмены между процессорами системы. (Алгоритм описан в п.3.2). |
Update | – | функция для изменения массива transfer в соответствии с обменами, возникающими между процессорами при переходе от одного распределения массива к другому. Алгоритм, реализуемый ею, описан в п.3.2. |
BoundUpdate | – | функция для изменения массива transfer в соответствии с пересылками, возникающими при обмене границей заданного распределенного массива. (Алгоритм описан в п.3.3). |
CopyUpdate | – | функция изменения массива transfer в соответствии с обменами, возникающими при размножении секции readBlock массива FromArray по всем процессорам. |
Приложение 3. Основные функции экстраполятора времени
Конструктор объекта “Виртуальная машина”
VM::VM( vector<long> ASizeArray, int AMType, double
ATStart, double ATByte,
double AProcPower );
ASizeArray | – | вектор, i-й элемент которого содержит размер данной системы процессоров по измерению i + 1 (0 <= i <= ARank – 1); |
AMType | – | тип распределенной системы процессоров (0 – сеть с шинной организацией, 1 – транспьютерная система); |
ATStart | – | время старта операции обмена; |
ATByte | – | время пересылки одного байта; |
AProcPower | – | относительная производительность процессора. |
Конструктор объекта
“Представление абстрактной
машины”
AMView::AMView( vector< long> ASizeArray );
ASizeArray | – | вектор, i-й элемент которого содержит размер данного шаблона по измерению i + 1 (0 <= i <= ARank – 1); |
Отображение шаблона
void AMView::DisAM (ImLastVM *AVM_Dis, vector<long>
AAxisArray,
vector<long>
*ADistrParamArray );
AVM_Dis | – | ссылка на систему процессоров, на которую отображается шаблон. |
AAxisArray | – | вектор, j-й элемент которого содержит номер измерения шаблона, используемый в правиле отображения для (j+1)-го измерения системы процессоров. |
ADistrParamArray | – | игнорируется (т.е. обеспечиваются только два правила отображения: 1 и 2 (см. описание Lib-DVM). Причем в 1-ом правиле размер блока вычисляется, а не берется из ADistrParamArray). |
Задание перераспределения шаблона на систему процессоров и определение времени такого перераспределения.
double AMView::RdisAM( vector<long> AAxisArray,
vector<long>
ADistrParamArray, long ANewSign );
AAxisArray | – | массив, j-й элемент которого содержит номер измерения шаблона, используемый в правиле отображения для (j+1)-го измерения системы процессоров. |
ADistrParamArray | – | игнорируется (т.е. обеспечиваются только два правила отображения: 1 и 2 (см. описание Lib-DVM). Причем в 1-ом правиле размер блока вычисляется, а не берется из ADistrParamArray). |
ANewSign | – | задаваемый единицей признак обновления содержимого всех перераспределяемых массивов. |
Конструктор объекта “ Распределенный массив”
DArray::DArray( vector<long> ASizeArray,
vector<long> AlowShdWidthArray,
vector<long>
AhiShdWidthArray, long ATypeSize );
ASizeArray | – | вектор, i-й элемент которого содержит размер создаваемого массива по измерению i+1 (0 <= i <= ARank–1). |
AlowShdWidthArray | – | вектор, i-ый элемент которого содержит ширину левой границы по измерению i+1. |
AHiShdWidthArray | – | вектор, i-ый элемент которого содержит ширину правой границы по измерению i+1. |
ATypeSize | – | размер в байтах одного элемента массива. |
Выравнивание распределенного массива
void DArray::AlnDA( AMView *APattern, vector<long>
AAxisArray,
vector<long>
ACoeffArray, vector<long> AConstArray );
void DArray::AlnDA( DArray *APattern, vector<long>
AAxisArray,
vector<long>
ACoeffArray, vector<long> AConstArray );
APattern | – | ссылка на образец выравнивания. |
AAxisArray | – | вектор, j-й элемент которого содержит номер индексной переменной (номер измерения) распределенного массива для линейного правила выравнивания (j+1)-го измерения образца. |
ACoeffArray | – | вектор, j-й элемент которого содержит коэффициент для индексной переменной распределенного массива в линейном правиле выравнивания (j+1)-го измерения образца. |
AConstArray | – | вектор, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца. |
Повторное выравнивание распределенного массива и определение времени выполнения этой операции.
double DArray::RAlnDA( AMView *APattern, vector<long>
AAxisArray,
vector<long>
ACoeffArray, vector<long> AConstArray,
long
ANewSign );
double DArray::RAlnDA( DArray *APattern, vector<long>
AAxisArray,
vector<long>
ACoeffArray, vector<long> AConstArray,
long ANewSign );
APattern | – | ссылка на образец выравнивания (массив или шаблон). |
AAxisArray | – | вектор, j-й элемент которого содержит номер индексной переменной (номер измерения) распределенного массива для линейного правила выравнивания (j+1)-го измерения образца. |
ACoeffArray | – | вектор, j-й элемент которого содержит коэффициент для индексной переменной распределенного массива в линейном правиле выравнивания (j+1)-го измерения образца. |
AconstArray | – | вектор, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца. |
ANewSign | – | задаваемый единицей признак обновления содержимого распределенного массива. |
Функция возвращает время повторного выравнивания массива.
Конструктор объекта “ параллельный цикл”
ParLoop::ParLoop( long ARank );
ARank | – | размерность параллельного цикла. |
Создание параллельного цикла.
void ParLoop::MapPL( AMView *APattern, vector<long>
AAxisArray,
vector<long>
ACoeffArray, vector<long> AConstArray,
vector<long>
AInitIndexArray,
vector<long>
ALastIndexArray, vector<long> AStepArray );
void ParLoop::MapPL( DArray *APattern, vector<long>
AAxisArray,
vector<long>
ACoeffArray, vector<long>AConstArray,
vector<long>AInitIndexArray,
vector<long>
ALastIndexArray, vector<long>AStepArray );
APattern | – | ссылка на образец отображения параллельного цикла. |
AAxisArray | – | вектор, j-й элемент которого содержит номер индексной переменной (номер измерения) параллельного цикла для линейного правила выравнивания (j+1)-го измерения образца. |
ACoeffArray | – | вектор, j-й элемент которого содержит коэффициент для индексной переменной параллельного цикла в линейном правиле выравнивания (j+1)-го измерения образца. |
AConstArray | – | вектор, j-й элемент которого содержит константу линейного правила выравнивания для (j+1)-го измерения образца. |
AInitIndexArray | – | вектор, i-ый элемент которого содержит начальное значение индексной переменной (i+1)-го измерения параллельного цикла. |
ALastIndexArray | – | вектор, i-ый элемент которого содержит конечное значение индексной переменной (i+1)-го измерения параллельного цикла. |
AStepArray | – | вектор, i-ый элемент которого содержит значение шага для индексной переменной (i+1)-го измерения параллельного цикла. |
Отображение параллельного цикла.
void ParLoop::ExFirst( ParLoop *AParLoop, BoundGroup *ABoundGroup)ImLast;
AParLoop | – | ссылка на параллельный цикл. |
ABoundGroup | – | ссылка на группу границ, обмен которыми должен быть запущен после вычисления экспортируемых элементов локальных частей распределенных массивов. |
Выставить флаг изменения порядка выполнения витков циклов.
void ParLoop::ImLast( ParLoop *AParLoop, BoundGroup *ABoundGroup)ImLast;
AParLoop | – | ссылка на параллельный цикл. |
ABoundGroup | – | ссылка на группу границ, обмен которыми должен быть запущен после вычисления экспортируемых элементов локальных частей распределенных массивов. |
Функция выставляет флаг изменения порядка выполнения витков циклов.
Определение времени затрачиваемого на обмены при загрузке буферов удаленными элементами массива
double ArrayCopy( DArray *AFromArray, vector<long>
AFromInitIndexArray,
vector<long>
AFromLastIndexArray,
vector<long>
AFromStepArray, DArray *AToArray,
vector<long>
AToInitIndexArray,
vector<long>
AToLastIndexArray,
vector<long>
AToStepArray, long ACopyRegim );
AFromArray | – | ссылка на читаемый распределенный массив. |
AFromInitIndexArray | – | вектор, i-й элемент которого содержит начальное значение индекса для (i+1)-го измерения читаемого массива. |
AFromLastIndexArray | – | вектор, i-й элемент которого содержит конечное значение индекса для (i+1)-го измерения читаемого массива. |
AFromStepArray | – | вектор, i-й элемент которого содержит шаг изменения индекса для (i+1)-го измерения читаемого массива. |
AToArray | – | заголовок записываемого распределенного массива. |
AToInitIndexArray | – | вектор, j-й элемент которого содержит начальное значение индекса для (j+1)-го измерения записываемого массива. |
AToLastIndexArray | – | вектор, j-й элемент которого содержит конечное значение индекса для (j+1)-го измерения записываемого массива. |
AToStepArray | – | вектор, j-й элемент которого содержит шаг изменения индекса для (j+1)-го измерения записываемого массива. |
ACopyRegim | – | режим копирования. |
Функция возвращает искомое время.
Конструктор объекта “Группа границ”
BoundGroup::BoundGroup( );
Создание группы границ. Создается пустая группа границ (не содержащая ни одной границы).
Добавить границы массива в группу.
void BoundGroup::AddBound( DArray *ADArray,
vector<long> ALeftBSizeArray,
vector<long>
ARightBSizeArray,
long
ACornerSign);
ADArray | – | ссылка на распределенный массив. |
ALeftBSizeArray | – | вектор, i-й элемент которого содержит ширину нижней границы для (i+1)-го измерения массива. |
ARightBSizeArray | – | вектор, i-й элемент которого содержит ширину верхней границы для (i+1)-го измерения массива. |
ACornerSign | – | признак включения в границу угловых элементов. |
Определение времени затрачиваемого на обмены границами распределенных массивов, включенных в данную группу.
double BoundGroup::StartB( );
Функция возвращает искомое время.
Конструктор объекта “Редукционная переменная”
RedVar::RedVar( long ARedElmSize, long ARedArrLength, long ALocElmSize);
AredElmSize | – | размер одного элемента редукционной переменной-массива в байтах. |
ARedArrLength | – | число элементов в редукционной переменной-массиве. |
ALocElmSize | – | размер в байтах одного элемента массива с дополнительной информацией. |
Конструктор объекта “Редукционная группа”
RedGroup::RedGroup( VM *AvmPtr );
AvmPtr | – | ссылка на систему процессоров. |
Создание редукционной группы. Создается пустая редукционная группа (не содержащая ни одной редукционной переменной).
Включение редукционной переменной в редукционную группу.
void RedGroup::AddRV( RedVar *AredVar );
ARedVar | – | ссылка на редукционную переменную. |
Определение времени затрачиваемого на обмены при выполнении операций редукции.
double RedGroup::StartR( ParLoop *AParLoop );
AParLoop | – | ссылка на параллельный цикл, в котором вычисляются значения редукционных переменных из данной группы. |
Приложение 4. Фрагменты трассы и параметры моделируемых Предиктором функций Lib-DVM
ПОСТРОЕНИЕ ПРЕДСТАВЛЕНИЙ АБСТРАКТНОЙ МАШИНЫ
getamr_ 3.3 Опрос ссылки на элемент представления абстрактной машины
AMRef getamr_ (AMViewRef *AMViewRefPtr, long IndexArray[]);
*AMViewRefPtr | – | ссылка на представление абстрактной машины. |
IndexArray | – | массив, i-й элемент которого содержит значение индекса опрашиваемого элемента (т.е. абстрактной машины) по измерению i+1. |
call_getamr_ TIME=0.000000 LINE=6 FILE=tasks.fdv AMViewRefPtr=4dff90; AMViewRef=9024c0; IndexArray[0]=0; ret_getamr_ TIME=0.000000 LINE=6 FILE=tasks.fdv AMRef=903350;
МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ
genblk_ Веса элементов многопроцессорной системы
long genblk_(PSRef *PSRefPtr, AMViewRef *AMViewRefPtr,
AddrType
AxisWeightAddr[], long *AxisCountPtr,
long *DoubleSignPtr
);
*PSRefPtr | – | ссылка на многопроцессорную систему, для элементов которой устанавливаются веса. |
*AMViewRefPtr | – | ссылка на представление абстрактной машины, при oтображении которой в заданную процессорную систему будут использованы устанавливаемые веса координат. |
AxisWeightAddr[] | – | веса координат процессоров задаются в отдельном для каждого измерения процессорной системы. |
*AxisCountPtr | – | (неотрицательное целое число) задаёт количество элементов в массиве AxisWeightAddr. |
*DoubleSignPtr | – | ненулевой признак представления весов координат процессоров в виде вещественных положительных чисел (double). |
call_genblk_ TIME=0.000000 LINE=7 FILE=gausgb.fdv PSRefPtr=4d4c48; PSRef=8417d0; AMViewRefPtr=4d4c60; AMViewRef=842860; AxisCount=1; DoubleSign=0 AxisWeightAddr[0][0] = 3 ret_genblk_ TIME=0.000000 LINE=7 FILE=gausgb.fdv
crtps_ 4.2 Создание подсистемы заданной многопроцессорной системы
PSRef crtps_ (PSRef *PSRefPtr, long InitIndexArray[], long
LastIndexArray[],
long
*StaticSignPtr);
*PSRefPtr | – | ссылка на процессорную систему (исходную), подсистему которой требуется создать. |
InitIndexArray | – | массив, i-й элемент которого содержит начальное значение индекса исходной процессорной системы по измерению i+1. |
LastIndexArray | – | массив, i-й элемент которого содержит конечное значение ндекса исходной процессорной системы по измерению i+1. |
*StaticSignPtr | – | признак создания статической подсистемы. |
call_crtps_ TIME=0.000000 LINE=15 FILE=tasks.fdv PSRefPtr=4ded68; PSRef=902450; StaticSign=0; InitIndexArray[0]=0; LastIndexArray[0]=0; SizeArray[0]=1; CoordWeight[0]= 1.00(1.00) ret_crtps_ TIME=0.000000 LINE=15 FILE=tasks.fdv PSRef=903950;
psview_ 4.3 Реконфигурация (изменение формы) многопроцессорной системы
PSRef psview_ (PSRef *PSRefPtr, long *RankPtr, long
SizeArray[],
long
*StaticSignPtr);
*PSRefPtr | – | ссылка на исходную (реконфигурируемую) процессорную систему. |
*RankPtr | – | размерность результирующей (реконфигурированной) процессорной системы. |
SizeArray | – | массив, i-й элемент которого содержит размер результирующей процессорной системы по измерению i+1. |
*StaticSignPtr | – | признак статической результирующей процессорной системы. |
call_psview_ TIME=0.000000 LINE=6 FILE=tasks.fdv PSRefPtr=4dff84; PSRef=901330; Rank=1; StaticSign=0; SizeArray[0]=1; SizeArray[0]=1; CoordWeight[0]= 1.00(1.00) ret_psview_ TIME=0.000000 LINE=6 FILE=tasks.fdv PSRef=902450;
ОТОБРАЖЕНИЕ РАСПРЕДЕЛЕННОГО МАССИВА
getamv_ 7.8 Опрос ссылки на представление абстрактной машины, в которое отображён заданный распределённый массив
AMViewRef getamv_ (long * ArrayHeader);
ArrayHeader | – | заголовок распределённого массива. |
call_getamv_ TIME=0.000000 LINE=16 FILE=tasks.fdv ArrayHeader=4dfee8; ArrayHandlePtr=903530; ret_getamv_ TIME=0.000000 LINE=16 FILE=tasks.fdv AMViewRef=0;
ПРЕДСТАВЛЕНИЕ
ПРОГРАММЫ В ВИДЕ СОВОКУПНОСТИ
ПАРАЛЛЕЛЬНО ВЫПОЛНЯЮЩИХСЯ
ПОДЗАДАЧ
mapam_ 10.1 Отображение абстрактной машины (создание подзадачи)
long mapam_ (AMRef *AMRefPtr, PSRef *PSRefPtr );
*AMRefPtr | – | ссылка на отображаемую абстрактную машину. |
*PSRefPtr | – | ссылка на процессорную подсистему, определяющую состав выделяемых абстрактной машине процессоров (область выполнения создаваемой подзадачи). |
call_mapam_ TIME=0.000000 LINE=51 FILE=tsk_ra.cdv AMRefPtr=4b3cc0; AMRef=823210; PSRefPtr=4b3ec4; PSRef=8231a0; ret_mapam_ TIME=0.000000 LINE=51 FILE=tsk_ra.cdv
runam_ 10.2 Начало выполнения (активизация, пуск) подзадачи
long runam_ (AMRef *AMRefPtr);
*AMRefPtr | – | ссылка на абстрактную машину запускаемой подзадачи. |
call_runam_ TIME=0.000000 LINE=102 FILE=tsk_ra.cdv AMRefPtr=4b3cc0; AMRef=823210; ret_runam_ TIME=0.000000 LINE=102 FILE=tsk_ra.cdv
stopam_ 10.3 Завершение выполнения (останов) текущей подзадачи
long stopam_ (void);
call_stopam_ TIME=0.000000 LINE=104 FILE=tsk_ra.cdv ret_stopam_ TIME=0.000000 LINE=104 FILE=tsk_ra.cdv
РЕДУКЦИЯ
strtrd_ 11.5 Запуск редукционной группы
long strtrd_ (RedGroupRef *RedGroupRefPtr);
*RedGroupRefPtr | – | ссылка на редукционную группу. |
call_strtrd_ TIME=0.000000 LINE=129 FILE=tsk_ra.cdv RedGroupRefPtr=6ffcdc; RedGroupRef=8291f0; rf_MAX; rt_DOUBLE; RVAddr = 6ffd24; RVVal = 7.000000 ret_strtrd_ TIME=0.000000 LINE=129 FILE=tsk_ra.cdv
waitrd_ 11.6 Ожидание завершения редукции
long waitrd_ (RedGroupRef *RedGroupRefPtr);
*RedGroupRefPtr | – | ссылка на редукционную группу. |
call_waitrd_ TIME=0.000000 LINE=129 FILE=tsk_ra.cdv RedGroupRefPtr=6ffcdc; RedGroupRef=8291f0; rf_MAX; rt_DOUBLE; RVAddr = 6ffd24; RVVal = 7.000000 rf_MAX; rt_DOUBLE; RVAddr = 6ffd24; RVVal = 7.000000 ret_waitrd_ TIME=0.000000 LINE=129 FILE=tsk_ra.cdv
ОБМЕН ГРАНИЦАМИ РАСПРЕДЕЛЕННЫХ МАССИВОВ
recvsh_ 12.4 Инициализация приема импортируемых элементов заданной группы границ
long recvsh_(ShadowGroupRefPtr *ShadowGroupRefPtr);
*ShadowGroupRefPtr | – | ссылка на группу границ. |
call_recvsh_ TIME=0.000000 LINE=20 FILE=sor.fdv ShadowGroupRefPtr=4cf6b8; ShadowGroupRef=8433c0; ret_recvsh_ TIME=0.000000 LINE=20 FILE=sor.fdv
sendsh_ 12.5 Инициализация передачи экспортируемых элементов заданной группы границ
long sendsh_(ShadowGroupRefPtr *ShadowGroupRefPtr);
*ShadowGroupRefPtr | – | ссылка на группу границ. |
call_sendsh_ TIME=0.000000 LINE=29 FILE=sor.fdv ShadowGroupRefPtr=4cf6b8; ShadowGroupRef=8433c0; ret_sendsh_ TIME=0.000000 LINE=29 FILE=sor.fdv
РЕГУЛЯРНЫЙ ДОСТУП К УДАЛЕННЫМ ДАННЫМ
crtrbl_ 14.1 Создание буфера удалённых элементов распределённого массива
long crtrbl_(long RemArrayHeader[], long BufferHeader[],
void *BasePtr,
long *StaticSignPtr,
LoopRef *LoopRefPtr, long AxisArray[],
long CoeffArray[], long
ConstArray[]);
RemArrayHeader | – | заголовок удалённого распределённого массива. |
BufferHeader | – | заголовок создаваемого буфера удалённых элементов. |
BasePtr | – | базовый указатель для доступа к буферу удалённых элементов. |
*StaticSignPtr | – | признак создания статического буфера. |
*LoopRefPtr | – | ссылка на параллельный цикл, при выполнении которого необходимы размещённые в буфере элементы удалённого массива. |
AxisArray | – | массив i-й элемент которого содержит номер измерения параллельного цикла (k(i+1)), соответствующего (i+1)-му измерению удалённого массива. |
CoeffArray | – | массив, i-й элемент которого содержит коэффициент индексной переменной линейного правила выборки для (i+1)-го измерения удалённого массива A(i+1). |
ConstArray | массив, i-й элемент которого содержит константу линейного правила выборки для (i+1)-го измерения удалённого массива B(i+1). |
call_crtrbl_ TIME=0.000000 LINE=45 FILE=tasks.fdv RemArrayHeader=4dfd2c; RemArrayHandlePtr=9057c0; BufferHeader=4dfd48; BasePtr=4e1200; StaticSign=1; LoopRefPtr=4dffd0; LoopRef=906b70; AxisArray[0]=1; AxisArray[1]=0; CoeffArray[0]=1; CoeffArray[1]=0; ConstArray[0]=-1; ConstArray[1]=1; SizeArray[0]=8; LowShdWidthArray[0]=0; HiShdWidthArray[0]=0; Local[0]: Lower=0 Upper=7 Size=8 Step=1 ret_crtrbl_ TIME=0.000000 LINE=45 FILE=tasks.fdv BufferHandlePtr=906e70; IsLocal=1
loadrb_ 14.2 Запуск загрузки буфера удаленных элементов распределенного массива
long loadrb_ (long BufferHeader[], long *RenewSignPtr);
BufferHeader | – | заголовок буфера удаленных элементов. |
*RenewSignPtr | – | признак повторной перезагрузки уже загруженного буфера. |
call_loadrb_ TIME=0.000000 LINE=45 FILE=tasks.fdv BufferHeader=4dfd48; BufferHandlePtr=906e70; RenewSign=0; FromInitIndexArray[0]=0; FromInitIndexArray[1]=1; FromLastIndexArray[0]=7; FromLastIndexArray[1]=1; FromStepArray[0]=1; FromStepArray[1]=1; ToInitIndexArray[0]=0; ToLastIndexArray[0]=7; ToStepArray[0]=1; ResInitIndexArray[0]=0; ResInitIndexArray[1]=1; ResLastIndexArray[0]=7; ResLastIndexArray[1]=1; ResStepArray[0]=1; ResStepArray[1]=1; ResInitIndexArray[0]=0; ResLastIndexArray[0]=7; ResStepArray[0]=1; ret_loadrb_ TIME=0.000000 LINE=45 FILE=tasks.fdv
waitrb_ 14.3 Ожидание завершения загрузки буфера удаленных элементов распределенного массива
long waitrb_ (long BufferHeader[]);
BufferHeader | – | заголовок буфера удаленных элементов. |
call_waitrb_ TIME=0.000000 LINE=45 FILE=tasks.fdv BufferHeader=4dfd48; BufferHandlePtr=906e70; ret_waitrb_ TIME=0.000000 LINE=45 FILE=tasks.fdv
crtbg_ 14.6 Создание группы буферов удаленных элементов
RegularAccessGroupRef crtbg_(long *StaticSignPtr, long *DelBufSignPtr );
*StaticSignPtr | – | признак создания статической группы буферов. |
*DelBufSignPtr | – | признак уничтожения всех буферов, входящих в группу, при её уничтожении. |
call_crtbg_ TIME=0.000000 LINE=43 FILE=tasks.fdv StaticSign=0; DelBufSign=1; ret_crtbg_ TIME=0.000000 LINE=43 FILE=tasks.fdv RegularAccessGroupRef=906310;
insrb_ Включение в группу буфера удаленных элементов
long insrb_(RegularAccessGroupRef
*RegularAccessGroupRefPtr,
long BufferHeader[]);
*RegularAccessGroupRefPtr | – | ссылка на группу буферов. |
BufferHeader | – | заголовок включаемого буфера. |
call_insrb_ TIME=0.000000 LINE=45 FILE=tasks.fdv RegularAccessGroupRefPtr=4e1210; RegularAccessGroupRef=906310; BufferHeader=4dfd48; BufferHeader[0]=906e70 ret_insrb_ TIME=0.000000 LINE=45 FILE=tasks.fdv
loadbg_ Запуск загрузки буферов удаленных элементов заданной группы
long loadbg_(RegularAccessGroupRef
*RegularAccessGroupRefPtr,
long
*RenewSignPtr);
*RegularAccessGroupRefPtr | – | ссылка на группу буферов. |
*RenewSignPtr | – | признак повторной перезагрузки уже загруженной группы буферов. |
call_loadbg_ TIME=0.000000 LINE=43 FILE=tasks.fdv RegularAccessGroupRefPtr=4e1210; RegularAccessGroupRef=906310; RenewSign=1 FromInitIndexArray[0]=0; FromInitIndexArray[1]=1; FromLastIndexArray[0]=7; FromLastIndexArray[1]=1; FromStepArray[0]=1; FromStepArray[1]=1; ToInitIndexArray[0]=0; ToLastIndexArray[0]=7; ToStepArray[0]=1; ResInitIndexArray[0]=0; ResInitIndexArray[1]=1; ResLastIndexArray[0]=7; ResLastIndexArray[1]=1; ResStepArray[0]=1; ResStepArray[1]=1; ResInitIndexArray[0]=0; ResLastIndexArray[0]=7; ResStepArray[0]=1; FromInitIndexArray[0]=0; FromInitIndexArray[1]=3; FromLastIndexArray[0]=7; FromLastIndexArray[1]=3; FromStepArray[0]=1; FromStepArray[1]=1; ToInitIndexArray[0]=0; ToLastIndexArray[0]=7; ToStepArray[0]=1; ResInitIndexArray[0]=0; ResInitIndexArray[1]=3; ResLastIndexArray[0]=7; ResLastIndexArray[1]=3; ResStepArray[0]=1; ResStepArray[1]=1; ResInitIndexArray[0]=0; ResLastIndexArray[0]=7; ResStepArray[0]=1; ret_loadbg_ TIME=0.010000 LINE=43 FILE=tasks.fdv
waitbg_ Ожидание завершения загрузки буферов удаленных элементов заданной группы
long waitbg_ (RegularAccessGroupRef *RegularAccessGroupRefPtr);
*RegularAccessGroupRefPt | – | ссылка на группу буферов. |
call_waitbg_ TIME=0.000000 LINE=45 FILE=tasks.fdv RegularAccessGroupRefPtr=4e1210; RegularAccessGroupRef=906310; ret_waitbg_ TIME=0.000000 LINE=45 FILE=tasks.fdv