|
|
| |
| # lines: |
170 | | # code: |
170 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 27 |
| # Callers: | 2 |
| # Callings: | 0 |
| # Words: | 42 |
| # Keywords: | 26 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PSLARED2D redistributes a 1D array
It assumes that the input array, BYROW, is distributed across
columns and that all process rows contain the same copy of
BYROW. The output array, BYALL, will be identical on all processes
and will contain the entire array.
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
=========
NP = Number of local rows in BYROW()
N (global input) INTEGER
The number of elements to be redistributed. N >= 0.
IA (global input) INTEGER
IA must be equal to 1
JA (global input) INTEGER
JA must be equal to 1
DESC (global/local input) INTEGER Array of dimension DLEN_
A 2D array descriptor, which describes BYROW
BYROW (local input) distributed block cyclic REAL array
global dimension (N), local dimension (NP)
BYROW is distributed across the process columns
All process rows are assumed to contain the same value
BYALL (global output) REAL global dimension( N )
local dimension (N)
BYALL is exactly duplicated on all processes
It contains the same values as BYROW, but it is replicated
across all processes rather than being distributed
BYALL(i) = BYROW( NUMROC(i,DESC( MB_ ),MYCOL,0,NPCOL ) on the procs
whose MYCOL == mod((i-1)/DESC( MB_ ),NPCOL)
WORK (local workspace) REAL dimension (LWORK)
Used to hold the buffers sent from one process to another
LWORK (local input) INTEGER size of WORK array
LWORK >= NUMROC(N, DESC( MB_ ), 0, 0, NPROW)
.. Parameters ..
|
|
|
|
01 SUBROUTINE PSLARED2D( N , IA , JA , DESC , BYROW , BYALL , WORK , LWORK )
02
03 * -- ScaLAPACK routine(version 1.7) --
04 * University of Tennessee , Knoxville , Oak Ridge National Laboratory ,
05 * and University of California , Berkeley.
06 * December 12 , 2005
07
08 * .. Scalar Arguments ..
09 INTEGER IA , JA , LWORK , N
10 INTEGER BLOCK_CYCLIC_2D , DLEN_ , DTYPE_ , CTXT_ , M_ , N_ ,
11 $MB_ , NB_ , RSRC_ , CSRC_ , LLD_
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 * ..
16 * .. Local Scalars ..
17 INTEGER ALLI , BUFLEN , I , II , MB , MYCOL , MYROW , NPCOL ,
18 $NPROW , PROW
19 * ..
20 * .. External Functions ..
21 INTEGER NUMROC
22 EXTERNAL NUMROC
23 * ..
24 * .. External Subroutines ..
25 EXTERNAL BLACS_GRIDINFO , SCOPY , SGEBR2D , SGEBS2D
26 * ..
27 * .. Intrinsic Functions ..
28 INTRINSIC MIN
29 * ..
30 * .. Executable Statements ..
31 * This is just to keep ftnchek happy
32 IF( BLOCK_CYCLIC_2D*CSRC_*CTXT_*DLEN_*DTYPE_*LLD_*MB_*M_*NB_*N_*
32
33 $ RSRC_.LT.0 )RETURN
34
35 CALL BLACS_GRIDINFO( DESC( CTXT_ ) , NPROW , NPCOL , MYROW , MYCOL )
36 MB = DESC( MB_ )
37
38 DO 30 PROW = 0 , NPROW - 1
38
39 BUFLEN = NUMROC( N , MB , PROW , 0 , NPROW )
40 IF( MYROW.EQ.PROW ) THEN
40
41 CALL SCOPY( BUFLEN , BYROW , 1 , WORK , 1 )
42 CALL SGEBS2D( DESC( CTXT_ ) , 'C' , ' ' , BUFLEN , 1 , WORK ,
43 $ BUFLEN )
44 ELSE
44
45 CALL SGEBR2D( DESC( CTXT_ ) , 'C' , ' ' , BUFLEN , 1 , WORK ,
46 $ BUFLEN , PROW , MYCOL )
47 END IF
48
49 ALLI = PROW*MB
50 DO 20 II = 1 , BUFLEN , MB
50
51 DO 10 I = 1 , MIN( MB , BUFLEN - II + 1 )
51
52 BYALL( ALLI + I ) = WORK( II - 1 + I )
53 10 CONTINUE
53
54 ALLI = ALLI + MB*NPROW
55 20 CONTINUE
56 30 CONTINUE
57
57
58 RETURN
59
60 * End of PSLARED2D
61
62 END8
8
|
|
Variables in Routine PSLARED2D()
| Summary Report |
| Data Type | Quantity | Size(byte) |
| INTEGER | 26 | 104 |
| REAL | 1 | 4 |
| TOTAL | 27 | 108 |
List of Variables
INTEGER
| ALLI | BLOCK_CYCLIC_2D | BUFLEN | CSRC_ | CTXT_ |
| DLEN_ | DTYPE_ | I | IA | II |
| JA | LLD_ | LWORK | M_ | MB |
| MB_ | MYCOL | MYROW | N | N_ |
| NB_ | NPCOL | NPROW | NUMROC | PROW |
| RSRC_ | | | | |
REAL
Variables Dependence Graph Put the mouse over a right hand side variable to display the corresponding line of the dependence | | - | | - | - | | ALLI | <--- | ALLIALLI = ALLI + MB*NPROW, MBALLI = PROW*MB{2ALLI = ALLI + MB*NPROW}, NPROWALLI = ALLI + MB*NPROW, PROWALLI = PROW*MB |
| BUFLEN | <--- | MBBUFLEN = NUMROC( N, MB, PROW, 0, NPROW ), NBUFLEN = NUMROC( N, MB, PROW, 0, NPROW ), NPROWBUFLEN = NUMROC( N, MB, PROW, 0, NPROW ), NUMROCBUFLEN = NUMROC( N, MB, PROW, 0, NPROW ), PROWBUFLEN = NUMROC( N, MB, PROW, 0, NPROW ) |
| BYALL | <--- | IIBYALL( ALLI+I ) = WORK( II-1+I ), IBYALL( ALLI+I ) = WORK( II-1+I ) |
| I | <--- | IIDO 10 I = 1, MIN( MB, BUFLEN-II+1 ), MBDO 10 I = 1, MIN( MB, BUFLEN-II+1 ), BUFLENDO 10 I = 1, MIN( MB, BUFLEN-II+1 ) |
| II | <--- | MBDO 20 II = 1, BUFLEN, MB, BUFLENDO 20 II = 1, BUFLEN, MB |
| MB | <--- | MB_MB = DESC( MB_ ) |
| PROW | <--- | NPROWDO 30 PROW = 0, NPROW - 1 |
|
|
Analysis elements of the routine PSLARED2D() Put the mouse over each element to display detailed matching information
Assigned variables |
| | | ALLI , BLOCK_CYCLIC_2D , BUFLEN , CSRC_ , CTXT_ , DLEN_ , DTYPE_ , I , II , LLD_ , M_ , MB , MB_ , N_ , NB_ , PROW , RSRC_ |
|
Active variables |
| | | ALLI , BLOCK_CYCLIC_2D , BUFLEN , BYALL , BYROW , CSRC_ , CTXT_ , DESC , DLEN_ , DTYPE_ , I , IA , II , JA , LLD_ , LWORK , M_ , MB , MB_ , MYCOL , MYROW , N , N_ , NB_ , NPCOL , NPROW , NUMROC , PROW , RSRC_ , WORK |
|
Accessed arrays [ array name : associated index ] |
| | BYALL | : ALLI+I |
| | DESC | : CTXT_ , CTXT_ , CTXT_ , MB_ |
| | NUMROC | : N, MB, PROW, 0, NPROW |
| | WORK | : II-1+I |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 30 PROW = 0 , NPROW - 1 ) , ( 20 II = 1 , BUFLEN , MB ) , ( 10 I = 1 , MIN( MB , BUFLEN - II + 1 ) ) |
| | if | : ( BLOCK_CYCLIC_2D*CSRC_*CTXT_*DLEN_*DTYPE_*LLD_*MB_*M_*NB_*N_* ) , ( MYROW.EQ.PROW ) |
|
| List of variables | ALLI BLOCK_CYCLIC_2D BUFLEN BYALL CSRC_ CTXT_ DLEN_
| DTYPE_ I IA II JA LLD_ LWORK M_
| MB MB_ MYCOL MYROW N N_ NB_ NPCOL
| NPROW NUMROC PROW RSRC_ | | close
| |
ALLI
BLOCK_CYCLIC_2D
BUFLEN
BYALL
CSRC_
CTXT_
DLEN_
DTYPE_
I
IA
II
JA
LLD_
LWORK
M_
MB
MB_
MYCOL
MYROW
N
N_
NB_
NPCOL
NPROW
NUMROC
PROW
RSRC_
| |