next up previous
Next: Scheduling Summary Up: A Description of Previous: A Description of

Dependence Graph Statistics

The data dependence information reported in the listing can be controlled with the ddsummary switch. When ddsummary is set to 1, the data dependence test pass will print a line for each loop in the program, giving its loop label, the source code line where it starts in the input file, the loop index, and whether the loop is parallel or serial. If the loop is serial, some indication of the source of the dependence is given. For example,

Loop nest summary:
INTRAF0_do1000(1030,i): loop is serial, because:
INTRAF0_do1000(1030,i):   the following variables (may) have loop-carried dependences:
INTRAF0_do1000(1030,i):       FR(), VM()

INTRAF0_do1100(1036,j): loop is parallel
INTRAF0_do1200(1065,j): loop is parallel
INTRAF0_do1300(1096,j): loop is parallel
INTRAF0_do2000(1111,i): loop is parallel

This parallelism information will not necessarily coincide with the actual scheduling of the loops in the source code output. The most obvious reason being that ordinarily parallel machines can run only one loop in a nest in parallel. So, if the ddtest pass finds all loops in the nest parallel, it will report that in the ddsummary (as above), then the postpass will choose only one of those loops to parallelize in the output source code.

If you set ddsummary to the value 2, a table of ``Dependence graph statistics'' will be printed in addition to the information provided when ddsummary is 1. A table of the time taken by each dependence test is also printed when ddsummary is 2.

Dependence graph statistics:
 Dependence test           Ser. Loops   Ser. Vars   Dep. Pairs   LC Deps.
--------------------------------------------------------------------------
                              13        168         14239      28406
Var Spaces                    13        168         14239      28406
Input Dep.                    13         67          2269       4435
Between loop nests            13         67          2269       4435
Read-only call args           13         67          2269       4435
Gcd Test                      13         67          1857       3638
Simple Subscript               6         59          1857       3609
Range Test                     5         51          1685       3088
Self-equal deps.               5         51          1676       3088
Output, back, self-deps.       5         51          1676       3088
Private                        5         11          1578        274
Reduction                      0          0          1445          0
DDgraphArcs builder            0          0          1445          0
Composite                      0          0          1445          0

Dependence tests timings:
 Dependence test           Time taken
-----------------------------------------------
                          0.020u 0.080s 0.087w
Var Spaces                0.180u 0.080s 0.240w
Input Dep.                0.020u 0.080s 0.079w
Between loop nests        0.040u 0.050s 0.105w
Read-only call args       0.100u 0.050s 0.157w
Gcd Test                  2.280u 0.120s 2.533w
Simple Subscript          1.250u 0.070s 1.550w
Range Test                39.230u 1.200s 46.776w
Self-equal deps.          0.950u 0.080s 1.013w
Output, back, self-deps.  0.970u 0.090s 1.084w
Private                   6.640u 0.280s 8.005w
Reduction                 1.160u 0.040s 1.568w
DDgraphArcs builder       0.290u 0.110s 0.488w
Composite                 64.420u 4.250s 79.403w

The first table gives a count (for the whole subroutine) of the number of:

which remain after the given dependence test was carried out. The first line gives a count of the potential number of each before any dependence testing is carried out. The following describes each of the dependence tests carried out:

Var Spaces
Eliminates potential dependences between different variables (for example between A and B) which are not equivalenced together.
Input Dep.
Eliminates input dependences.
Between Loop Nests
Eliminates dependences that do not have any loops in common.
Read-only call args
Uses MAYMOD information at a call-site to eliminate dependence arcs where one of the source or sink accesses is a procedure call argument and is considered a write access.
Gcd Test
The GCD test.
Simple Subscript Test
Eliminates dependences between the same variables or expressions (for example, between I and I).
Range Test
The Polaris Range test.
Self-equal deps.
Eliminates self dependences with an equal direction vector.
Output, back, self-deps.
Eliminates output self-dependences with a backwards direction vector.
Private
Eliminates loop-carried dependences for private variables.
Reduction
Eliminates loop-carried dependences for variables in reductions.
DDgraphArcs builder
Not a dependence test, just builds objects recording the dependence arcs so that later routines can iterate over the dependence arcs efficiently.
Composite
Also not a dependence test. This just is a line to summarize the results of all preceeding tests.



next up previous
Next: Scheduling Summary Up: A Description of Previous: A Description of



Jay Hoeflinger
Mon Apr 21 11:52:18 CDT 1997