|
|
| |
| # lines: |
187 | | # code: |
187 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 32 |
| # Callers: | 0 |
| # Callings: | 0 |
| # Words: | 67 |
| # Keywords: | 43 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PSLATRA computes the trace of an N-by-N distributed matrix sub( A )
denoting A( IA:IA+N-1, JA:JA+N-1 ). The result is left on every
process of the grid.
Notes
=====
Each global data object is described by an associated description
vector. This vector stores the information required to establish
the mapping between an object element and its corresponding process
and memory location.
Let A be a generic term for any 2D block cyclicly distributed array.
Such a global array has an associated description vector DESCA.
In the following comments, the character _ should be read as
"of the global array".
NOTATION STORED IN EXPLANATION
--------------- -------------- --------------------------------------
DTYPE_A(global) DESCA( DTYPE_ )The descriptor type. In this case,
DTYPE_A = 1.
CTXT_A (global) DESCA( CTXT_ ) The BLACS context handle, indicating
the BLACS process grid A is distribu-
ted over. The context itself is glo-
bal, but the handle (the integer
value) may vary.
M_A (global) DESCA( M_ ) The number of rows in the global
array A.
N_A (global) DESCA( N_ ) The number of columns in the global
array A.
MB_A (global) DESCA( MB_ ) The blocking factor used to distribute
the rows of the array.
NB_A (global) DESCA( NB_ ) The blocking factor used to distribute
the columns of the array.
RSRC_A (global) DESCA( RSRC_ ) The process row over which the first
row of the array A is distributed.
CSRC_A (global) DESCA( CSRC_ ) The process column over which the
first column of the array A is
distributed.
LLD_A (local) DESCA( LLD_ ) The leading dimension of the local
array. LLD_A >= MAX(1,LOCr(M_A)).
Let K be the number of rows or columns of a distributed matrix,
and assume that its process grid has dimension p x q.
LOCr( K ) denotes the number of elements of K that a process
would receive if K were distributed over the p processes of its
process column.
Similarly, LOCc( K ) denotes the number of elements of K that a
process would receive if K were distributed over the q processes of
its process row.
The values of LOCr() and LOCc() may be determined via a call to the
ScaLAPACK tool function, NUMROC:
LOCr( M ) = NUMROC( M, MB_A, MYROW, RSRC_A, NPROW ),
LOCc( N ) = NUMROC( N, NB_A, MYCOL, CSRC_A, NPCOL ).
An upper bound for these quantities may be computed by:
LOCr( M ) <= ceil( ceil(M/MB_A)/NPROW )*MB_A
LOCc( N ) <= ceil( ceil(N/NB_A)/NPCOL )*NB_A
Arguments
=========
N (global input) INTEGER
The number of rows and columns to be operated on i.e the
order of the distributed submatrix sub( A ). N >= 0.
A (local input) REAL pointer into the local memory
to an array of dimension ( LLD_A, LOCc(JA+N-1) ). This array
contains the local pieces of the distributed matrix the trace
is to be computed.
IA (global input) INTEGER
The row index in the global array A indicating the first
row of sub( A ).
JA (global input) INTEGER
The column index in the global array A indicating the
first column of sub( A ).
DESCA (global and local input) INTEGER array of dimension DLEN_.
The array descriptor for the distributed matrix A.
====================================================================
.. Parameters ..
|
|
|
|
01 REAL FUNCTION PSLATRA( N , A , IA , JA , DESCA )
02
03 * -- ScaLAPACK auxiliary routine(version 1.7) --
04 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
05 * and University of California , Berkeley.
06 * May 1 , 1997
07
08 * .. Scalar Arguments ..
09 INTEGER IA , JA , N
10 INTEGER BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ ,
11 $LLD_ , MB_ , M_ , NB_ , N_ , RSRC_
12 PARAMETER( BLOCK_CYCLIC_2D = 1 , DLEN_ = 9 , DTYPE_ = 1 ,
13 $CTXT_ = 2 , M_ = 3 , N_ = 4 , MB_ = 5 , NB_ = 6 ,
14 $RSRC_ = 7 , CSRC_ = 8 , LLD_ = 9 )
15 REAL ZERO
16 PARAMETER( ZERO = 0.0E + 0 )
17 * ..
18 * .. Local Scalars ..
19 INTEGER ICURCOL , ICURROW , II , IOFFA , J , JB , JJ , JN ,
20 $LDA , LL , MYCOL , MYROW , NPCOL , NPROW
21 REAL TRACE
22 * ..
23 * .. External Subroutines ..
24 EXTERNAL BLACS_GRIDINFO , INFOG2L , SGSUM2D
25 * ..
26 * .. External Functions ..
27 INTEGER ICEIL
28 EXTERNAL ICEIL
29 * ..
30 * .. Intrinsic Functions ..
31 INTRINSIC MIN , MOD
32 * ..
33 * .. Executable Statements ..
34
35 * Get grid parameters
36
37 CALL BLACS_GRIDINFO( DESCA( CTXT_ ) , NPROW , NPCOL , MYROW , MYCOL )
38
39 TRACE = ZERO
40 IF( N.EQ.0 ) THEN
40
41 PSLATRA = TRACE
42 RETURN
43 END IF
44
45 CALL INFOG2L( IA , JA , DESCA , NPROW , NPCOL , MYROW , MYCOL , II , JJ ,
46 $ICURROW , ICURCOL )
47
48 JN = MIN( ICEIL( JA , DESCA( NB_ ) ) * DESCA( NB_ ) , JA + N - 1 )
49 JB = JN - JA + 1
50 LDA = DESCA( LLD_ )
51 IOFFA = II + ( JJ - 1 ) * LDA
52
53 * Handle first diagonal block separately
54
55 IF( MYROW.EQ.ICURROW .AND. MYCOL.EQ.ICURCOL ) THEN
55
56 DO 10 LL = IOFFA , IOFFA + (JB - 1)*(LDA + 1) , LDA + 1
56
57 TRACE = TRACE + A( LL )
58 10 CONTINUE
59 END IF
60 IF( MYROW.EQ.ICURROW )
60
61 $ IOFFA = IOFFA + JB
62 IF( MYCOL.EQ.ICURCOL )
62
63 $ IOFFA = IOFFA + JB*LDA
64 ICURROW = MOD( ICURROW + 1 , NPROW )
65 ICURCOL = MOD( ICURCOL + 1 , NPCOL )
66
67 * Loop over the remaining block of columns
68
69 DO 30 J = JN + 1 , JA + N - 1 , DESCA( NB_ )
69
70 JB = MIN( JA + N - J , DESCA( NB_ ) )
71
72 IF( MYROW.EQ.ICURROW .AND. MYCOL.EQ.ICURCOL ) THEN
72
73 DO 20 LL = IOFFA , IOFFA + (JB - 1)*(LDA + 1) , LDA + 1
73
74 TRACE = TRACE + A( LL )
75 20 CONTINUE
75
76 END IF
77 IF( MYROW.EQ.ICURROW )
77
78 $ IOFFA = IOFFA + JB
79 IF( MYCOL.EQ.ICURCOL )
79
80 $ IOFFA = IOFFA + JB*LDA
81 ICURROW = MOD( ICURROW + 1 , NPROW )
82 ICURCOL = MOD( ICURCOL + 1 , NPCOL )
83 30 CONTINUE
84
84
85 CALL SGSUM2D( DESCA( CTXT_ ) , 'All' , ' ' , 1 , 1 , TRACE , 1 , - 1 ,
86 $ MYCOL )
87
88 PSLATRA = TRACE
89
90 RETURN
91
92 * End of PSLATRA
93
94 END17
12
|
|
Variables in Routine PSLATRA()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| INTEGER | 29 | 116 |
| REAL | 3 | 12 |
| TOTAL | 32 | 128 |
List of Variables
INTEGER
| BLOCK_CYCLIC_2D | CSRC_ | CTXT_ | DLEN_ | DTYPE_ |
| IA | ICEIL | ICURCOL | ICURROW | II |
| IOFFA | J | JA | JB | JJ |
| JN | LDA | LL | LLD_ | M_ |
| MB_ | MYCOL | MYROW | N | N_ |
| NB_ | NPCOL | NPROW | RSRC_ | |
REAL
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | ICURCOL | <--- | NPCOLICURCOL = MOD( ICURCOL+1, NPCOL ){2ICURCOL = MOD( ICURCOL+1, NPCOL )}, ICURCOLICURCOL = MOD( ICURCOL+1, NPCOL ){2ICURCOL = MOD( ICURCOL+1, NPCOL )} |
| ICURROW | <--- | NPROWICURROW = MOD( ICURROW+1, NPROW ){2ICURROW = MOD( ICURROW+1, NPROW )}, ICURROWICURROW = MOD( ICURROW+1, NPROW ){2ICURROW = MOD( ICURROW+1, NPROW )} |
| IOFFA | <--- | IIIOFFA = II + ( JJ - 1 ) * LDA, JJIOFFA = II + ( JJ - 1 ) * LDA, LDAIOFFA = II + ( JJ - 1 ) * LDA |
| J | <--- | JADO 30 J = JN+1, JA+N-1, DESCA( NB_ ), JNDO 30 J = JN+1, JA+N-1, DESCA( NB_ ), NDO 30 J = JN+1, JA+N-1, DESCA( NB_ ), NB_DO 30 J = JN+1, JA+N-1, DESCA( NB_ ) |
| JB | <--- | JJB = MIN( JA+N-J, DESCA( NB_ ) ), JAJB = JN-JA+1{2JB = MIN( JA+N-J, DESCA( NB_ ) )}, JNJB = JN-JA+1, NJB = MIN( JA+N-J, DESCA( NB_ ) ), NB_JB = MIN( JA+N-J, DESCA( NB_ ) ) |
| JN | <--- | JAJN = MIN( ICEIL( JA, DESCA( NB_ ) ) * DESCA( NB_ ), JA+N-1 ), NJN = MIN( ICEIL( JA, DESCA( NB_ ) ) * DESCA( NB_ ), JA+N-1 ), NB_JN = MIN( ICEIL( JA, DESCA( NB_ ) ) * DESCA( NB_ ), JA+N-1 ), ICEILJN = MIN( ICEIL( JA, DESCA( NB_ ) ) * DESCA( NB_ ), JA+N-1 ) |
| LDA | <--- | LLD_LDA = DESCA( LLD_ ) |
| LL | <--- | IOFFADO 10 LL = IOFFA, IOFFA + (JB-1)*(LDA+1), LDA+1{2DO 20 LL = IOFFA, IOFFA + (JB-1)*(LDA+1), LDA+1}, JBDO 10 LL = IOFFA, IOFFA + (JB-1)*(LDA+1), LDA+1{2DO 20 LL = IOFFA, IOFFA + (JB-1)*(LDA+1), LDA+1}, LDADO 10 LL = IOFFA, IOFFA + (JB-1)*(LDA+1), LDA+1{2DO 20 LL = IOFFA, IOFFA + (JB-1)*(LDA+1), LDA+1} |
| PSLATRA | <--- | TRACEPSLATRA = TRACE{2PSLATRA = TRACE} |
| TRACE | <--- | LLTRACE = TRACE + A( LL ){2TRACE = TRACE + A( LL )}, TRACETRACE = TRACE + A( LL ){2TRACE = TRACE + A( LL )}, ZEROTRACE = ZERO |
|
|
Analysis elements of the routine PSLATRA() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , ICURCOL , ICURROW , IOFFA , J , JB , JN , LDA , LL , LLD_ , M_ , MB_ , N_ , NB_ , PSLATRA , RSRC_ , TRACE , ZERO |
|
Active variables |
| | | A , BLOCK_CYCLIC_2D , CSRC_ , CTXT_ , DESCA , DLEN_ , DTYPE_ , IA , ICEIL , ICURCOL , ICURROW , II , IOFFA , J , JA , JB , JJ , JN , LDA , LL , LLD_ , M_ , MB_ , MYCOL , MYROW , N , N_ , NB_ , NPCOL , NPROW , PSLATRA , RSRC_ , TRACE , ZERO |
|
Accessed arrays [ array name : associated index ] |
| | A | : LL , LL |
| | DESCA | : CTXT_ , CTXT_ , LLD_ , NB_ , NB_ , NB_ |
| | ICEIL | : JA, DESCA( NB_ ) |
| | PSLATRA | : N, A, IA, JA, DESCA |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 10 LL = IOFFA , IOFFA + (JB - 1)*(LDA + 1) , LDA + 1 ) , ( 30 J = JN + 1 , JA + N - 1 , DESCA( NB_ ) ) , ( 20 LL = IOFFA , IOFFA + (JB - 1)*(LDA + 1) , LDA + 1 ) |
| | if | : ( N.EQ.0 ) , ( MYROW.EQ.ICURROW .AND. MYCOL.EQ.ICURCOL ) , ( MYROW.EQ.ICURROW ) , ( MYCOL.EQ.ICURCOL ) , ( MYROW.EQ.ICURROW .AND. MYCOL.EQ.ICURCOL ) , ( MYROW.EQ.ICURROW ) , ( MYCOL.EQ.ICURCOL ) |
|
| List of variables | BLOCK_CYCLIC_2D CSRC_ CTXT_ DLEN_ DTYPE_ IA ICEIL
| ICURCOL ICURROW II IOFFA J JA JB JJ
| JN LDA LL LLD_ M_ MB_ MYCOL MYROW
| N N_ NB_ NPCOL NPROW PSLATRA RSRC_ TRACE
| ZERO | | close
| |
BLOCK_CYCLIC_2D
CSRC_
CTXT_
DLEN_
DTYPE_
IA
ICEIL
ICURCOL
ICURROW
II
IOFFA
J
JA
JB
JJ
JN
LDA
LL
LLD_
M_
MB_
MYCOL
MYROW
N
N_
NB_
NPCOL
NPROW
PSLATRA
RSRC_
TRACE
ZERO
| |