fdvmDDe (1158418), страница 3
Текст из файла (страница 3)
The statements of procedure are scanned in lexical order until last statement of procedure. The specification statements and directives are omitted.
If the user specify non-zero level of debugging in compiler run command, the statements containing expressions (assignment, CALL , arithmetical IF and so on) are surrounded with Debugger functions for controlling values of variables.
The function inserts Debugger calls at the beginning and the end of each parallel and sequential loop and Performance Analyzer calls at the beginning and the end of each interval.
List of called functions:
| TempVarDVM | DebugVarArrayRef |
| RTLInit | DebugVarArrayRef_Left |
| RTLExit | DebugArg_VarArrayRef |
| InsertNewStatementBefore | SkipParLoopNest |
| InsertNewStatementAfter | ReplaceContext |
| doAssignStmtAfter | ParallelLoop_Debug |
| Extract_Stmt | isParallelLoopEndStmt |
| addToStmtList | AddToGroupNameList |
| ReplaceDoNestLabel_Above | CreateReductionGroup |
| CloseDoInParLoop | ReductionList |
| CloseParLoop | D_Lnumb |
| isDoEndStmt | D_Fname |
| ReplaceFuncCall | D_Skpbl |
| InitRemoteGroups | D_Iter_ON |
| CloseLoop | St_Binter |
| DebugLoop | St_Einter |
| SeqLoopBegin | St_Biof |
| SeqLoopEndInParLoop | St_Eiof |
| OverLoopAnalyze | St_Eloop |
| SeqLoopEnd | DeclareVarDVM |
| OpenInterval | DeleteObject |
| CloseInterval | Error |
| Value | err |
| initMask | InitGroups |
| isLIFReductionOp | IsReductionOp |
| IEXLoopAnalyze | IndependentLoop_Debug |
| BeginDebugFragment | SkipIndepLoopNest |
| EndDebugFragment | DebugTaskRegion |
| INDReductionDebug | CloseTaskRegion |
void initialize ( )
This function initializes the variables of compiler used in the mode of generating Debugger and Performance Analyzer calls.
void initVariantNames ( )
This function initializes the table of variant tags.
void initLibNames ( )
This function initializes the Lib-DVM function name table.
void initDVM ( )
This function inserts the Lib-DVM function symbols in the Symbol Table.
void initMask ( )
This function cleans the mask of using Lib-DVM functions. The functions generating Lib-DVM library calls reset the corresponding mask element to 1. The declaration statement is created only for masked (used in procedure) Lib-DVM functions.
void TempVarDVM ( SgStatement *func )
| func | - pointer to the procedure header statement |
The function puts in the Symbol Table the following symbols of reserved variables:
| integer | dvm000(...) | - array for storing Lib-DVM function results |
| integer | hpf000(...) | - array for storing Lib-DVM function results (it is used for HPF-DVM program) |
| integer | i0000m(0:0) | - base for addressing distributed arrays of type integer |
| real | r0000m(0:0) | - base for addressing distributed arrays of type real |
| double precision | d0000m(0:0) | - base for addressing distributed arrays of type double precision |
| logical | l0000m(0:0) | - base for addressing distributed arrays of type logical |
| complex | c0000m(0:0) | - base for addressing distributed arrays of type complex |
| integer | i000io(1000) | - buffer for I/O of distributed arrays of type integer |
| real | r000io(1000) | - buffer for I/O of distributed arrays of type real |
| double precision | d000io(1000) | - buffer for I/O of distributed arrays of type double precision |
| logical | l000io(1000) | - buffer for I/O of distributed arrays of type logical |
| complex | c000io(1000) | - buffer for I/O of distributed arrays of type complex |
| integer | idvm00 | - do-variables of loops implementing I/O of |
| idvm01 | distributed arrays | |
| . . . | ||
| idvm07 | ||
| integer | i000bf(...) | - buffer for storing remote data of type integer |
| real | r000bf(...) | - buffer for storing remote data of type real |
| double precision | d000bf(1000) | - buffer for storing remote data of type double precision |
| logical | l000bf(1000) | - buffer for storing remote data of type logical |
| complex | c000bf(1000) | - buffer for storing remote data of type complex |
void DeclareVarDVM ( SgStatement *lstat )
| lstat | - pointer to the statement |
Creates the declaration statements of reserved variables used in procedure:
-
headers of distributed arrays,
-
do-variables of loops implementing I/O of distributed arrays,
-
variables for addressing distributed arrays(DVM memory variables),
-
common block for DVM memory variables,
-
buffer arrays for remote access data,
-
buffer arrays for I/O of distributed arrays,
-
variables of type group (SHADOW_GROUP,REDUCTION_GROUP, so on),
-
processor and task arrays
-
arrays for storing Lib-DVM function results,
-
Lib-DVM functions,
and inserts them in procedure after the statement lstat (last declaration statement or the statement preceding DATA statement.
(See TempVarDVM( )).
5.1.1Distributed array creation and remapping
| void GenDistArray ( | SgSymbol | *das, | ||
| das | - pointer to the symbol of distributed array | |||
| idisars | - the mapping rules (distribution formats) are stored in the elements of reserved array dvm000 : dvm000(idisars), dvm000(idisars+1),... | |||
| ps | - pointer to the processor array reference | |||
| stdis | - pointer to the DISTRIBUTE statement | |||
Generates the statements to create Lib-DVM object and allocate a memory for array declared with DISTRIBUTE attribute and for all the arrays immediately or ultimately aligned with it, and inserts these statements before first executable statement of the procedure.
| void GenAlignArray ( | align | *node, | ||
| node | - pointer to the alignment tree node that corresponds to the aligned array | |||
| root | - pointer to the alignment tree node that corresponds to the array node is aligned with | |||
| nr | - the number of aligning rules | |||
| iaxis | - the aligning rules (AxisArray(nr), CoefArray(nr), ConstArray(nr)) are stored in the elements of reserved array dvm000 : dvm000(iaxis), dvm000(iaxis+1),... | |||
Generates the statements to create Lib-DVM object and allocate a memory for array declared with ALIGN attribute and inserts these statements before first executable statement of the procedure.
void doAlignRule_1 ( int rank )
| rank | - rank of array |
Generates the statements to initialize 3 arrays of aligning rules:
AxisArray(i) = 1
CoeffArray(i) = 1
ConstArray(i) = 1 , i=1, rank
that are used as arguments of Lib-DVM function align( ).
| int doAlignRule ( | SgSymbol | *alignee, | ||
| alignee | - pointer to the symbol of aligned array | |||
| algn_st | - pointer to the ALIGN statement | |||
| iaxis | - index of reserved array dvm000 where the AxisArray(1) is stored | |||
The function generates the statements to create arrays of aligning rules that are used as arguments of Lib-DVM function align( ).
The function returns the number of aligning rules (the length of align-source-list in ALIGN directive).
void AlignTree ( align *root )
| root | - pointer to the alignment tree root |
Traverses the alignment tree and calls the function GenAlignArray() for creating distributed array for each aligned array (node of tree).
| int doDisRuleArrays ( | SgExpression | *dist_format, | ||
| dist_format | - distribution format list | |||
| aster | - pointer to the expression * or null pointer | |||
The function generates the statements to create 2 arrays of mapping rules that are used as arguments (AxisArray, DistrParamArray) of distr( ) and redis( ) Lib-DVM functions.
The function returns the index of array dvm000 element storing the first mapping rule (AxisArray(1)).
| void RedistributeArray ( | SgSymbol | *das, | ||
| das | - pointer to the symbol of redistributed array | |||
| idisars | - the mapping rules (distribution formats) are stored in the elements of reserved array dvm000 : dvm000(idisars), dvm000(idisars+1),... | |||
| ps | - pointer to the processor array reference | |||
| sign | - the flag that defines whether to update contents of redistributed array or not | |||
| dasref | - pointer to the redistributed array reference | |||
| stdis | - pointer to the REDISTRIBUTE directive | |||
Generates statement to redistribute array:
dvm000(i) = redis(...)
and inserts it in procedure in place of REDISTRIBUTE directive.
For array that is specified by directive ALIGN and DISTRIBUTE of the form















