|
|
| |
| # lines: |
172 | | # code: |
172 | | # comment: | 0 | |
# blank: | 0 |
| # Variables: | 27 |
| # Callers: | 6 |
| # Callings: | 0 |
| # Words: | 42 |
| # Keywords: | 26 |
|
|
|
|
|
..
.. Array Arguments ..
..
Purpose
=======
PSLARED1D redistributes a 1D array
It assumes that the input array, BYCOL, is distributed across
rows and that all process columns contain the same copy of
BYCOL. 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 BYCOL()
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 BYCOL
BYCOL (local input) distributed block cyclic REAL array
global dimension (N), local dimension (NP)
BYCOL is distributed across the process rows
All process columns 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 BYCOL, but it is replicated
across all processes rather than being distributed
BYALL(i) = BYCOL( NUMROC(i,DESC( NB_ ),MYROW,0,NPROW ) on the procs
whose MYROW == mod((i-1)/DESC( NB_ ),NPROW)
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( NB_ ), 0, 0, NPCOL)
.. Parameters ..
|
|
|
|
01 SUBROUTINE PSLARED1D( N , IA , JA , DESC , BYCOL , 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 , MYCOL , MYROW , NB , NPCOL ,
18 $NPROW , PCOL
19 * ..
20 * .. External Functions ..
21
22 INTEGER NUMROC
23 EXTERNAL NUMROC
24 * ..
25 * .. External Subroutines ..
26
27 EXTERNAL BLACS_GRIDINFO , SCOPY , SGEBR2D , SGEBS2D
28 * ..
29 * .. Intrinsic Functions ..
30 INTRINSIC MIN
31 * ..
32 * .. Executable Statements ..
33 * This is just to keep ftnchek happy
34 IF( BLOCK_CYCLIC_2D*CSRC_*CTXT_*DLEN_*DTYPE_*LLD_*MB_*M_*NB_*N_*
34
35 $ RSRC_.LT.0 )RETURN
36
37 CALL BLACS_GRIDINFO( DESC( CTXT_ ) , NPROW , NPCOL , MYROW , MYCOL )
38 NB = DESC( MB_ )
39
40 DO 30 PCOL = 0 , NPCOL - 1
40
41 BUFLEN = NUMROC( N , NB , PCOL , 0 , NPCOL )
42 IF( MYCOL.EQ.PCOL ) THEN
42
43 CALL SCOPY( BUFLEN , BYCOL , 1 , WORK , 1 )
44 CALL SGEBS2D( DESC( CTXT_ ) , 'R' , ' ' , 1 , BUFLEN , WORK , 1 )
45 ELSE
45
46 CALL SGEBR2D( DESC( CTXT_ ) , 'R' , ' ' , 1 , BUFLEN , WORK , 1 ,
47 $ MYROW , PCOL )
48 END IF
49
50 ALLI = PCOL*NB
51 DO 20 II = 1 , BUFLEN , NB
51
52 DO 10 I = 1 , MIN( NB , BUFLEN - II + 1 )
52
53 BYALL( ALLI + I ) = WORK( II - 1 + I )
54 10 CONTINUE
54
55 ALLI = ALLI + NB*NPCOL
56 20 CONTINUE
57 30 CONTINUE
58
58
59 RETURN
60
61 * End of PSLARED1D
62
63 END10
8
|
|
Variables in Routine PSLARED1D()
| 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_ |
| MYCOL | MYROW | N | N_ | NB |
| NB_ | NPCOL | NPROW | NUMROC | PCOL |
| 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 + NB*NPCOL, NBALLI = PCOL*NB{2ALLI = ALLI + NB*NPCOL}, NPCOLALLI = ALLI + NB*NPCOL, PCOLALLI = PCOL*NB |
| BUFLEN | <--- | NBUFLEN = NUMROC( N, NB, PCOL, 0, NPCOL ), NBBUFLEN = NUMROC( N, NB, PCOL, 0, NPCOL ), NPCOLBUFLEN = NUMROC( N, NB, PCOL, 0, NPCOL ), NUMROCBUFLEN = NUMROC( N, NB, PCOL, 0, NPCOL ), PCOLBUFLEN = NUMROC( N, NB, PCOL, 0, NPCOL ) |
| BYALL | <--- | IIBYALL( ALLI+I ) = WORK( II-1+I ), IBYALL( ALLI+I ) = WORK( II-1+I ) |
| I | <--- | IIDO 10 I = 1, MIN( NB, BUFLEN-II+1 ), NBDO 10 I = 1, MIN( NB, BUFLEN-II+1 ), BUFLENDO 10 I = 1, MIN( NB, BUFLEN-II+1 ) |
| II | <--- | NBDO 20 II = 1, BUFLEN, NB, BUFLENDO 20 II = 1, BUFLEN, NB |
| NB | <--- | MB_NB = DESC( MB_ ) |
| PCOL | <--- | NPCOLDO 30 PCOL = 0, NPCOL - 1 |
|
|
Analysis elements of the routine PSLARED1D() 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_ , N_ , NB , NB_ , PCOL , RSRC_ |
|
Active variables |
| | | ALLI , BLOCK_CYCLIC_2D , BUFLEN , BYALL , BYCOL , CSRC_ , CTXT_ , DESC , DLEN_ , DTYPE_ , I , IA , II , JA , LLD_ , LWORK , M_ , MB_ , MYCOL , MYROW , N , N_ , NB , NB_ , NPCOL , NPROW , NUMROC , PCOL , RSRC_ , WORK |
|
Accessed arrays [ array name : associated index ] |
| | BYALL | : ALLI+I |
| | DESC | : CTXT_ , CTXT_ , CTXT_ , MB_ |
| | NUMROC | : N, NB, PCOL, 0, NPCOL |
| | WORK | : II-1+I |
|
Conditional statements [ statement : associated predicate ] |
| | do | : ( 30 PCOL = 0 , NPCOL - 1 ) , ( 20 II = 1 , BUFLEN , NB ) , ( 10 I = 1 , MIN( NB , BUFLEN - II + 1 ) ) |
| | if | : ( BLOCK_CYCLIC_2D*CSRC_*CTXT_*DLEN_*DTYPE_*LLD_*MB_*M_*NB_*N_* ) , ( MYCOL.EQ.PCOL ) |
|
| List of variables | ALLI BLOCK_CYCLIC_2D BUFLEN BYALL CSRC_ CTXT_ DLEN_
| DTYPE_ I IA II JA LLD_ LWORK M_
| MB_ MYCOL MYROW N N_ NB NB_ NPCOL
| NPROW NUMROC PCOL RSRC_ | | close
| |
ALLI
BLOCK_CYCLIC_2D
BUFLEN
BYALL
CSRC_
CTXT_
DLEN_
DTYPE_
I
IA
II
JA
LLD_
LWORK
M_
MB_
MYCOL
MYROW
N
N_
NB
NB_
NPCOL
NPROW
NUMROC
PCOL
RSRC_
| |