DEB_pdes (1158459), страница 2
Текст из файла (страница 2)
The content of a special file (loop description file) determines detailing of the trace. This file contains description of all program loops.
To decrease trace size the following accumulation levels are provided:
-
Only the information about loops and iterations are accumulated.
-
In addition to the previous level the information about variable modifications are accumulated.
-
In addition to the previous level the information about all usage of the variables are accumulated.
Furthermore, you can specify for each loop an iteration range, which the information about variable usage will be accumulated for.
Trace comparing.
In the comparing mode the trace-file is read into the memory before program startup. The structure of trace in the memory is formed by the same functions that are used in the accumulation mode. As result, we have the same trace structure in the memory both after accumulating and after reading the trace.
Then during program execution the occurred events are compared with reference ones.
There are the following singularities of parallel program execution:
-
Values of reduction variables can be different in the sequential and parallel modes. Therefore comparing values of reduction variables inside a parallel loop isn’t performed.
-
In the parallel mode an order of parallel loop iterations can be changed. Therefore at the iteration beginning the corresponding reference trace record is searched for and set as current.
-
In the parallel mode a sequential branch can miss statements, which calculate and assign values to non-local elements of distributed arrays.
-
Inside the parallel loop some references to variables used for calculation of reduction maximum or minimum may be missed in the sequential or parallel modes.
Checking reduction operations
Reduction variable accumulation has a special implementation. The values of reduction variables inside a parallel loop aren’t compared with reference ones. Comparison is performed only for reduction result.
There are two ways to calculate a reduction operation. The first way is a standard method of reduction performance. Program statements inside an iteration perform all computations of a reduction variable on the its own processor. The final result of reduction operation between processors is computed by Lib-DVM. If a program is performed on a single processor only program statements will compute the reduction.
The second way is emulation of performing each iteration on a separate processor. At the beginning of iteration the initial value is assigned to reduction variable. The initial value is stored before loop beginning. Upon end of iteration the reduction is performed by Lib-DVM according to specified reduction function.
If a program specify the reduction function correctly the reduction results will the same for both ways.