4 CHARACTER*7 SNAMES( NSUBS )
6 DATA snames/
'PCGEMM ', 'pcsymm
', 'pchemm
',
7 $ 'pcsyrk
', 'pcherk
', 'pcsyr2k
',
8 $ 'pcher2k
', 'pctrmm
', 'pctrsm ',
9 $ 'pcgeadd
', 'pctradd
'/
122 INTEGER MAXTESTS, MAXGRIDS, CPLXSZ, TOTMEM, MEMSIZ,
125 PARAMETER ( MAXTESTS = 20, MAXGRIDS = 20, CPLXSZ = 8,
126 $ ONE = ( 1.0E+0, 0.0E+0 ), TOTMEM = 2000000,
127 $ NSUBS = 11, MEMSIZ = TOTMEM / CPLXSZ )
128 INTEGER BLOCK_CYCLIC_2D_INB, CSRC_, CTXT_, DLEN_,
129 $ DTYPE_, IMB_, INB_, LLD_, MB_, M_, NB_, N_,
131 PARAMETER ( BLOCK_CYCLIC_2D_INB = 2, DLEN_ = 11,
132 $ DTYPE_ = 1, CTXT_ = 2, M_ = 3, N_ = 4,
133 $ IMB_ = 5, INB_ = 6, MB_ = 7, NB_ = 8,
134 $ RSRC_ = 9, CSRC_ = 10, LLD_ = 11 )
137 CHARACTER*1 ADIAGDO, AFORM, CFORM, DIAG, SIDE, TRANSA,
139 INTEGER CSRCA, CSRCB, CSRCC, I, IA, IAM, IASEED, IB,
140 $ IBSEED, IC, ICSEED, ICTXT, IMBA, IMBB, IMBC,
141 $ IMIDA, IMIDB, IMIDC, INBA, INBB, INBC, IPA,
142 $ IPB, IPC, IPOSTA, IPOSTB, IPOSTC, IPREA, IPREB,
143 $ IPREC, J, JA, JB, JC, K, L, M, MA, MB, MBA,
144 $ MBB, MBC, MC, MEMREQD, MPA, MPB, MPC, MYCOL,
145 $ MYROW, N, NA, NB, NBA, NBB, NBC, NC, NCOLA,
146 $ NCOLB, NCOLC, NGRIDS, NOUT, NPCOL, NPROCS,
147 $ NPROW, NQA, NQB, NQC, NROWA, NROWB, NROWC,
148 $ NTESTS, OFFDA, OFFDC, RSRCA, RSRCB, RSRCC
149 DOUBLE PRECISION CFLOPS, NOPS, WFLOPS
150 COMPLEX ALPHA, BETA, SCALE
153 LOGICAL LTEST( NSUBS ), BCHECK( NSUBS ),
155 CHARACTER*1 DIAGVAL( MAXTESTS ), SIDEVAL( MAXTESTS ),
156 $ TRNAVAL( MAXTESTS ), TRNBVAL( MAXTESTS ),
157 $ UPLOVAL( MAXTESTS )
159 INTEGER CSCAVAL( MAXTESTS ), CSCBVAL( MAXTESTS ),
160 $ CSCCVAL( MAXTESTS ), DESCA( DLEN_ ),
161 $ DESCB( DLEN_ ), DESCC( DLEN_ ),
162 $ IAVAL( MAXTESTS ), IBVAL( MAXTESTS ),
163 $ ICVAL( MAXTESTS ), IERR( 3 ),
164 $ IMBAVAL( MAXTESTS ), IMBBVAL( MAXTESTS ),
165 $ IMBCVAL( MAXTESTS ), INBAVAL( MAXTESTS ),
166 $ INBBVAL( MAXTESTS ), INBCVAL( MAXTESTS ),
167 $ JAVAL( MAXTESTS ), JBVAL( MAXTESTS ),
168 $ JCVAL( MAXTESTS ), KVAL( MAXTESTS ),
169 $ MAVAL( MAXTESTS ), MBAVAL( MAXTESTS ),
170 $ MBBVAL( MAXTESTS ), MBCVAL( MAXTESTS ),
171 $ MBVAL( MAXTESTS ), MCVAL( MAXTESTS ),
172 $ MVAL( MAXTESTS ), NAVAL( MAXTESTS ),
173 $ NBAVAL( MAXTESTS ), NBBVAL( MAXTESTS ),
174 $ NBCVAL( MAXTESTS ), NBVAL( MAXTESTS ),
175 $ NCVAL( MAXTESTS ), NVAL( MAXTESTS ),
176 $ PVAL( MAXTESTS ), QVAL( MAXTESTS ),
177 $ RSCAVAL( MAXTESTS ), RSCBVAL( MAXTESTS ),
178 $ RSCCVAL( MAXTESTS )
179 DOUBLE PRECISION CTIME( 1 ), WTIME( 1 )
180 COMPLEX MEM( MEMSIZ )
183 EXTERNAL BLACS_BARRIER, BLACS_EXIT, BLACS_GET,
184 $ BLACS_GRIDEXIT, BLACS_GRIDINFO, BLACS_GRIDINIT,
185 $ BLACS_PINFO, IGSUM2D, PB_BOOT, PB_COMBINE,
186 $ PB_TIMER, PCBLA3TIMINFO, PCGEADD, PCGEMM,
187 $ PCHEMM, PCHER2K, PCHERK, PCLAGEN, PCLASCAL,
188 $ PCSYMM, PCSYR2K, PCSYRK, PCTRADD, PCTRMM,
189 $ PCTRSM, PMDESCCHK, PMDIMCHK
193 DOUBLE PRECISION PDOPBL3
194 EXTERNAL LSAME, PDOPBL3
197 INTRINSIC CMPLX, DBLE, MAX, REAL
200 CHARACTER*7 SNAMES( NSUBS )
203 COMMON /SNAMEC/SNAMES
204 COMMON /INFOC/INFO, NBLOG
205 COMMON /PBERRORC/NOUT, ABRTFLG
208 DATA BCHECK/.TRUE., .TRUE., .TRUE., .FALSE.,
209 $ .FALSE., .TRUE., .TRUE., .TRUE., .TRUE.,
211 DATA CCHECK/.TRUE., .TRUE., .TRUE., .TRUE., .TRUE.,
212 $ .TRUE., .TRUE., .FALSE., .FALSE., .TRUE.,
232 CALL BLACS_PINFO( IAM, NPROCS )
233 CALL PCBLA3TIMINFO( OUTFILE, NOUT, NTESTS, DIAGVAL, SIDEVAL,
234 $ TRNAVAL, TRNBVAL, UPLOVAL, MVAL, NVAL,
235 $ KVAL, MAVAL, NAVAL, IMBAVAL, MBAVAL,
236 $ INBAVAL, NBAVAL, RSCAVAL, CSCAVAL, IAVAL,
237 $ JAVAL, MBVAL, NBVAL, IMBBVAL, MBBVAL,
238 $ INBBVAL, NBBVAL, RSCBVAL, CSCBVAL, IBVAL,
239 $ JBVAL, MCVAL, NCVAL, IMBCVAL, MBCVAL,
240 $ INBCVAL, NBCVAL, RSCCVAL, CSCCVAL, ICVAL,
241 $ JCVAL, MAXTESTS, NGRIDS, PVAL, MAXGRIDS,
242 $ QVAL, MAXGRIDS, NBLOG, LTEST, IAM, NPROCS,
246 $ WRITE( NOUT, FMT = 9984 )
258.LT.
IF( NPROW1 ) THEN
260 $ WRITE( NOUT, FMT = 9999 ) 'grid size
', 'nprow
', NPROW
262.LT.
ELSE IF( NPCOL1 ) THEN
264 $ WRITE( NOUT, FMT = 9999 ) 'grid size
', 'npcol
', NPCOL
266.GT.
ELSE IF( NPROW*NPCOLNPROCS ) THEN
268 $ WRITE( NOUT, FMT = 9998 ) NPROW*NPCOL, NPROCS
272.GT.
IF( IERR( 1 )0 ) THEN
274 $ WRITE( NOUT, FMT = 9997 ) 'grid
'
280 CALL BLACS_GET( -1, 0, ICTXT )
281 CALL BLACS_GRIDINIT( ICTXT, 'row-major
', NPROW, NPCOL )
282 CALL BLACS_GRIDINFO( ICTXT, NPROW, NPCOL, MYROW, MYCOL )
287.GE..OR..GE.
IF( MYROWNPROW MYCOLNPCOL )
298 TRANSA = TRNAVAL( J )
299 TRANSB = TRNBVAL( J )
341 WRITE( NOUT, FMT = * )
342 WRITE( NOUT, FMT = 9996 ) J, NPROW, NPCOL
343 WRITE( NOUT, FMT = * )
345 WRITE( NOUT, FMT = 9995 )
346 WRITE( NOUT, FMT = 9994 )
347 WRITE( NOUT, FMT = 9995 )
348 WRITE( NOUT, FMT = 9993 ) M, N, K, SIDE, UPLO, TRANSA,
351 WRITE( NOUT, FMT = 9995 )
352 WRITE( NOUT, FMT = 9992 )
353 WRITE( NOUT, FMT = 9995 )
354 WRITE( NOUT, FMT = 9991 ) IA, JA, MA, NA, IMBA, INBA,
355 $ MBA, NBA, RSRCA, CSRCA
357 WRITE( NOUT, FMT = 9995 )
358 WRITE( NOUT, FMT = 9990 )
359 WRITE( NOUT, FMT = 9995 )
360 WRITE( NOUT, FMT = 9991 ) IB, JB, MB, NB, IMBB, INBB,
361 $ MBB, NBB, RSRCB, CSRCB
363 WRITE( NOUT, FMT = 9995 )
364 WRITE( NOUT, FMT = 9989 )
365 WRITE( NOUT, FMT = 9995 )
366 WRITE( NOUT, FMT = 9991 ) IC, JC, MC, NC, IMBC, INBC,
367 $ MBC, NBC, RSRCC, CSRCC
369 WRITE( NOUT, FMT = 9995 )
370 WRITE( NOUT, FMT = 9980 )
376.NOT.
IF( LSAME( SIDE, 'l.AND.
' )
377.NOT.
$ LSAME( SIDE, 'r
' ) ) THEN
379 $ WRITE( NOUT, FMT = 9997 ) 'side
'
383.NOT.
IF( LSAME( UPLO, 'u.AND.
' )
384.NOT.
$ LSAME( UPLO, 'l
' ) ) THEN
386 $ WRITE( NOUT, FMT = 9997 ) 'uplo
'
390.NOT.
IF( LSAME( TRANSA, 'n.AND.
' )
391.NOT.
$ LSAME( TRANSA, 't.AND.
' )
392.NOT.
$ LSAME( TRANSA, 'c
' ) ) THEN
394 $ WRITE( NOUT, FMT = 9997 ) 'transa
'
398.NOT.
IF( LSAME( TRANSB, 'n.AND.
' )
399.NOT.
$ LSAME( TRANSB, 't.AND.
' )
400.NOT.
$ LSAME( TRANSB, 'c
' ) ) THEN
402 $ WRITE( NOUT, FMT = 9997 ) 'transb
'
406.NOT.
IF( LSAME( DIAG , 'u.AND.
' )
407.NOT.
$ LSAME( DIAG , 'n
' ) )THEN
409 $ WRITE( NOUT, FMT = 9997 ) 'diag
'
415 CALL PMDESCCHK( ICTXT, NOUT, 'a
', DESCA,
416 $ BLOCK_CYCLIC_2D_INB, MA, NA, IMBA, INBA,
417 $ MBA, NBA, RSRCA, CSRCA, MPA, NQA, IPREA,
418 $ IMIDA, IPOSTA, 0, 0, IERR( 1 ) )
420 CALL PMDESCCHK( ICTXT, NOUT, 'b
', DESCB,
421 $ BLOCK_CYCLIC_2D_INB, MB, NB, IMBB, INBB,
422 $ MBB, NBB, RSRCB, CSRCB, MPB, NQB, IPREB,
423 $ IMIDB, IPOSTB, 0, 0, IERR( 2 ) )
425 CALL PMDESCCHK( ICTXT, NOUT, 'c
', DESCC,
426 $ BLOCK_CYCLIC_2D_INB, MC, NC, IMBC, INBC,
427 $ MBC, NBC, RSRCC, CSRCC, MPC, NQC, IPREC,
428 $ IMIDC, IPOSTC, 0, 0, IERR( 3 ) )
430.GT..OR..GT..OR.
IF( IERR( 1 )0 IERR( 2 )0
431.GT.
$ IERR( 3 )0 ) THEN
439 IPB = IPA + DESCA( LLD_ )*NQA
440 IPC = IPB + DESCB( LLD_ )*NQB
444 MEMREQD = IPC + DESCC( LLD_ )*NQC - 1
446.GT.
IF( MEMREQDMEMSIZ ) THEN
448 $ WRITE( NOUT, FMT = 9987 ) MEMREQD*CPLXSZ
454 CALL IGSUM2D( ICTXT, 'all
', ' ', 1, 1, IERR, 1, -1, 0 )
456.GT.
IF( IERR( 1 )0 ) THEN
458 $ WRITE( NOUT, FMT = 9988 )
468.NOT.
IF( LTEST( L ) )
479 IF( LSAME( TRANSA, 'n
' ) ) THEN
486 IF( LSAME( TRANSB, 'n
' ) ) THEN
493.EQ..OR..EQ.
ELSE IF( L2 L3 ) THEN
501 IF( LSAME( SIDE, 'l
' ) ) THEN
508.EQ..OR..EQ.
ELSE IF( L4 L5 ) THEN
514 IF( LSAME( TRANSA, 'n
' ) ) THEN
523.EQ..OR..EQ.
ELSE IF( L6 L7 ) THEN
529 IF( LSAME( TRANSA, 'n
' ) ) THEN
540.EQ..OR..EQ.
ELSE IF( L8 L9 ) THEN
546 IF( LSAME( SIDE, 'l
' ) ) THEN
555.EQ..OR..EQ.
ELSE IF( L10 L11 ) THEN
559 IF( LSAME( TRANSA, 'n
' ) ) THEN
575 CALL PMDIMCHK( ICTXT, NOUT, NROWA, NCOLA, 'a
', IA, JA,
577 CALL PMDIMCHK( ICTXT, NOUT, NROWB, NCOLB, 'b
', IB, JB,
579 CALL PMDIMCHK( ICTXT, NOUT, NROWC, NCOLC, 'c
', IC, JC,
582.NE..OR..NE..OR.
IF( IERR( 1 )0 IERR( 2 )0
583.NE.
$ IERR( 3 )0 ) THEN
590.EQ..OR..EQ.
IF( L4 L6 ) THEN
591.NOT.
IF( LSAME( TRANSA, 'n.AND.
' )
592.NOT.
$ LSAME( TRANSA, 't
' ) ) THEN
594 $ WRITE( NOUT, FMT = 9983 ) SNAMES( L ), 'transa
'
597.EQ..OR..EQ.
ELSE IF( L5 L7 ) THEN
598.NOT.
IF( LSAME( TRANSA, 'n.AND.
' )
599.NOT.
$ LSAME( TRANSA, 'c
' ) ) THEN
601 $ WRITE( NOUT, FMT = 9983 ) SNAMES( L ), 'transa
'
618.EQ.
ELSE IF( L3 ) THEN
628.EQ..OR..EQ.
ELSE IF( L4 L6 ) THEN
638.EQ..OR..EQ.
ELSE IF( L5 L7 ) THEN
648.EQ..AND.
ELSE IF( ( L9 )( LSAME( DIAG, 'n
' ) ) ) THEN
670 CALL PCLAGEN( .FALSE., AFORM, ADIAGDO, OFFDA, MA, NA,
671 $ 1, 1, DESCA, IASEED, MEM( IPA ),
673.EQ..AND..NOT.
IF( ( L9 )( ( LSAME( DIAG, 'n' ) ) ).AND.
674 $ (
max( nrowa, ncola ).GT.1 ) )
THEN
675 scale = one /
cmplx( real(
max( nrowa, ncola ) ) )
676 IF(
lsame( uplo
'L' ) )
THEN
677 CALL pclascal(
'Lower', nrowa-1, ncola-1, scale,
678 $ mem( ipa ), ia+1, ja, desca )
680 CALL pclascal(
'Upper', nrowa-1, ncola-1, scale,
681 $ mem( ipa ), ia, ja+1, desca )
687 $
CALL pclagen( .false.,
'None',
'No diag', 0, mb, nb,
688 $ 1, 1, descb, ibseed, mem( ipb ),
692 $
CALL pclagen( .false., cform,
'No diag', offdc, mc,
693 $ nc, 1, 1, descc, icseed, mem( ipc ),
698 CALL blacs_barrier( ictxt,
'All' )
706 nops =
pdopbl3( snames( l ), m, n, k )
709 CALL pcgemm( transa, transb, m, n, k,
alpha,
710 $ mem( ipa ), ia, ja, desca, mem( ipb ),
711 $ ib, jb, descb, beta, mem( ipc ), ic,
jc,
715 ELSE IF( l.EQ.2 )
THEN
719 IF(
lsame( side,
'L' ) )
THEN
720 nops =
pdopbl3( snames( l ), m, n, 0 )
722 nops =
pdopbl3( snames( l ), m, n, 1 )
726 CALL pcsymm( side, uplo, m, n,
alpha, mem( ipa ), ia,
727 $ ja, desca, mem( ipb ), ib, jb, descb,
728 $ beta, mem( ipc ), ic,
jc, descc )
731 ELSE IF( l.EQ.3 )
THEN
735 IF(
lsame( side,
'L' ) )
THEN
736 nops =
pdopbl3( snames( l ), m, n, 0 )
738 nops =
pdopbl3( snames( l ), m, n, 1 )
742 CALL pchemm( side, uplo, m, n,
alpha, mem( ipa ), ia,
743 $ ja, desca, mem( ipb ), ib, jb, descb,
744 $ beta, mem( ipc ), ic,
jc, descc )
754 CALL pcsyrk( uplo, transa, n, k,
alpha, mem( ipa ),
755 $ ia, ja, desca, beta, mem( ipc ), ic,
jc,
759 ELSE IF( l.EQ.5 )
THEN
763 nops =
pdopbl3( snames( l ), n, n, k )
766 CALL pcherk( uplo, transa, n, k, real(
alpha ),
767 $ mem( ipa ), ia, ja, desca, real( beta ),
768 $ mem( ipc ), ic,
jc, descc )
771 ELSE IF( l.EQ.6 )
THEN
775 nops =
pdopbl3( snames( l ), n, n, k )
778 CALL pcsyr2k( uplo, transa, n, k,
alpha, mem( ipa ),
779 $ ia, ja, desca, mem( ipb ), ib, jb,
780 $ descb, beta, mem( ipc ), ic,
jc,
784 ELSE IF( l.EQ.7 )
THEN
788 nops =
pdopbl3( snames( l ), n, n, k )
791 CALL pcher2k( uplo, transa, n, k,
alpha, mem( ipa ),
792 $ ia, ja, desca, mem( ipb ), ib, jb,
793 $ descb, real( beta ), mem( ipc ), ic,
jc,
797 ELSE IF( l.EQ.8 )
THEN
801 IF(
lsame( side,
'L' ) )
THEN
802 nops =
pdopbl3( snames( l ), m, n, 0 )
804 nops =
pdopbl3( snames( l ), m, n, 1 )
808 CALL pctrmm( side, uplo, transa, diag, m, n,
alpha,
809 $ mem( ipa ), ia, ja, desca, mem( ipb ),
813 ELSE IF( l.EQ.9 )
THEN
817 IF(
lsame( side,
'L' ) )
THEN
818 nops =
pdopbl3( snames( l ), m, n, 0 )
820 nops =
pdopbl3( snames( l ), m, n, 1 )
824 CALL pctrsm( side, uplo, transa, diag, m, n,
alpha,
825 $ mem( ipa ), ia, ja, desca, mem( ipb ),
829 ELSE IF( l.EQ.10 )
THEN
833 nops =
pdopbl3( snames( l ), m, n, m )
836 CALL pcgeadd( transa, m, n,
alpha, mem( ipa ), ia, ja,
837 $ desca, beta, mem( ipc ), ic,
jc, descc )
840 ELSE IF( l.EQ.11 )
THEN
844 IF(
lsame( uplo,
'U' ) )
THEN
845 nops =
pdopbl3( snames( l ), m, n, 0 )
847 nops =
pdopbl3( snames( l ), m, n, 1 )
851 CALL pctradd( uplo, transa, m, n,
alpha, mem( ipa ),
852 $ ia, ja, desca, beta, mem( ipc ), ic,
jc,
862 $
WRITE( nout, fmt = 9982 ) info
866 CALL pb_combine( ictxt,
'All',
'>',
'W', 1, 1, wtime )
867 CALL pb_combine( ictxt,
'All',
'>',
'C', 1, 1, ctime )
875 IF( wtime( 1 ).GT.0.0d+0 )
THEN
876 wflops = nops / ( wtime( 1 ) * 1.0d+6 )
883 IF( ctime( 1 ).GT.0.0d+0 )
THEN
884 cflops = nops / ( ctime( 1 ) * 1.0d+6 )
889 WRITE( nout, fmt = 9981 ) snames( l ), wtime( 1 ),
890 $ wflops, ctime( 1 ), cflops
896 40
IF( iam.EQ.0 )
THEN
897 WRITE( nout, fmt = 9995 )
898 WRITE( nout, fmt = * )
899 WRITE( nout, fmt = 9986 ) j
909 WRITE( nout, fmt = * )
910 WRITE( nout, fmt = 9985 )
911 WRITE( nout, fmt = * )
916 9999
FORMAT(
'ILLEGAL ', a,
': ', a,
' = ', i10,
917 $
' should be at least 1' )
918 9998
FORMAT(
'ILLEGAL GRID: NPROW*NPCOL = ', i4,
919 $
'. It can be at most', i4 )
920 9997
FORMAT(
'Bad ', a,
' parameters: going on to next test case.' )
921 9996
FORMAT( 2x,
'Test number ', i2 ,
' started on a ', i4,
' x ',
922 $ i4,
' process grid.' )
923 9995
FORMAT( 2x,
' ------------------------------------------------',
924 $
'-------------------' )
925 9994
FORMAT( 2x,
' M N K SIDE UPLO TRANSA ',
927 9993
FORMAT( 5x,i6,1x,i6,1x,i6,6x,a1,5x,a1,7x,a1,7x,a1,5x,a1 )
928 9992
FORMAT( 2x,
' IA JA MA NA IMBA INBA',
929 $
' MBA NBA RSRCA CSRCA' )
930 9991
FORMAT( 5x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,1x,i6,
932 9990
FORMAT( 2x,
' IB JB MB NB IMBB INBB',
933 $
' MBB NBB RSRCB CSRCB' )
934 9989
FORMAT( 2x,
' IC JC MC NC IMBC INBC',
935 $
' MBC NBC RSRCC CSRCC' )
936 9988
FORMAT(
'Not enough memory for this test: going on to',
937 $
' next test case.' )
938 9987
FORMAT(
'Not enough memory. Need: ', i12 )
939 9986
FORMAT( 2x, 'test number
', I2, ' completed.
' )
940 9985 FORMAT( 2X, 'End of Tests.
' )
941 9984 FORMAT( 2X, 'Tests started.
' )
942 9983 FORMAT( 5X, A, ' *****
', A, ' has an incorrect value:
',
944 9982 FORMAT( 2X, ' ***** Operation not supported, error code:
',
946 9981 FORMAT( 2X, '|
', A, 2X, F13.3, 2X, F13.3, 2X, F13.3, 2X, F13.3 )
947 9980 FORMAT( 2X, ' WALL time (s) WALL Mflops
',
948 $ ' CPU time (s) CPU Mflops
' )
955 SUBROUTINE PCBLA3TIMINFO( SUMMRY, NOUT, NMAT, DIAGVAL, SIDEVAL,
956 $ TRNAVAL, TRNBVAL, UPLOVAL, MVAL,
957 $ NVAL, KVAL, MAVAL, NAVAL, IMBAVAL,
958 $ MBAVAL, INBAVAL, NBAVAL, RSCAVAL,
959 $ CSCAVAL, IAVAL, JAVAL, MBVAL, NBVAL,
960 $ IMBBVAL, MBBVAL, INBBVAL, NBBVAL,
961 $ RSCBVAL, CSCBVAL, IBVAL, JBVAL,
962 $ MCVAL, NCVAL, IMBCVAL, MBCVAL,
963 $ INBCVAL, NBCVAL, RSCCVAL, CSCCVAL,
964 $ ICVAL, JCVAL, LDVAL, NGRIDS, PVAL,
965 $ LDPVAL, QVAL, LDQVAL, NBLOG, LTEST,
966 $ IAM, NPROCS, ALPHA, BETA, WORK )
974 INTEGER IAM, LDPVAL, LDQVAL, LDVAL, NBLOG, NGRIDS,
979 CHARACTER*( * ) SUMMRY
980 CHARACTER*1 DIAGVAL( LDVAL ), SIDEVAL( LDVAL ),
981 $ TRNAVAL( LDVAL ), TRNBVAL( LDVAL ),
984 INTEGER CSCAVAL( LDVAL ), CSCBVAL( LDVAL ),
985 $ CSCCVAL( LDVAL ), IAVAL( LDVAL ),
986 $ IBVAL( LDVAL ), ICVAL( LDVAL ),
987 $ IMBAVAL( LDVAL ), IMBBVAL( LDVAL ),
988 $ IMBCVAL( LDVAL ), INBAVAL( LDVAL ),
989 $ INBBVAL( LDVAL ), INBCVAL( LDVAL ),
990 $ JAVAL( LDVAL ), JBVAL( LDVAL ), JCVAL( LDVAL ),
991 $ KVAL( LDVAL ), MAVAL( LDVAL ), MBAVAL( LDVAL ),
992 $ MBBVAL( LDVAL ), MBCVAL( LDVAL ),
993 $ MBVAL( LDVAL ), MCVAL( LDVAL ), MVAL( LDVAL ),
994 $ NAVAL( LDVAL ), NBAVAL( LDVAL ),
995 $ NBBVAL( LDVAL ), NBCVAL( LDVAL ),
996 $ NBVAL( LDVAL ), NCVAL( LDVAL ), NVAL( LDVAL ),
997 $ PVAL( LDPVAL ), QVAL( LDQVAL ),
998 $ RSCAVAL( LDVAL ), RSCBVAL( LDVAL ),
999 $ RSCCVAL( LDVAL ), WORK( * )
1271 PARAMETER ( NIN = 11, NSUBS = 11 )
1279 CHARACTER*79 USRINFO
1282 EXTERNAL BLACS_ABORT, BLACS_GET, BLACS_GRIDEXIT,
1283 $ BLACS_GRIDINIT, BLACS_SETUP, CGEBR2D, CGEBS2D,
1284 $ ICOPY, IGEBR2D, IGEBS2D, SGEBR2D, SGEBS2D
1287 INTRINSIC CHAR, ICHAR, MAX, MIN
1290 CHARACTER*7 SNAMES( NSUBS )
1291 COMMON /SNAMEC/SNAMES
1302 OPEN( NIN, FILE='PCBLAS3TIM.dat
', STATUS='OLD
' )
1303 READ( NIN, FMT = * ) SUMMRY
1308 READ( NIN, FMT = 9999 ) USRINFO
1312 READ( NIN, FMT = * ) SUMMRY
1313 READ( NIN, FMT = * ) NOUT
1314.NE..AND..NE.
IF( NOUT0 NOUT6 )
1315 $ OPEN( NOUT, FILE = SUMMRY, STATUS = 'UNKNOWN
' )
1321 READ( NIN, FMT = * ) NBLOG
1327 READ( NIN, FMT = * ) NGRIDS
1328.LT..OR..GT.
IF( NGRIDS1 NGRIDSLDPVAL ) THEN
1329 WRITE( NOUT, FMT = 9998 ) 'Grids
', LDPVAL
1331.GT.
ELSE IF( NGRIDSLDQVAL ) THEN
1332 WRITE( NOUT, FMT = 9998 ) 'Grids
', LDQVAL
1338 READ( NIN, FMT = * ) ( PVAL( I ), I = 1, NGRIDS )
1339 READ( NIN, FMT = * ) ( QVAL( I ), I = 1, NGRIDS )
1343 READ( NIN, FMT = * ) ALPHA
1344 READ( NIN, FMT = * ) BETA
1348 READ( NIN, FMT = * ) NMAT
1349.LT..OR..GT.
IF( NMAT1 NMATLDVAL ) THEN
1350 WRITE( NOUT, FMT = 9998 ) 'Tests
', LDVAL
1356 READ( NIN, FMT = * ) ( DIAGVAL( I ), I = 1, NMAT )
1357 READ( NIN, FMT = * ) ( SIDEVAL( I ), I = 1, NMAT )
1358 READ( NIN, FMT = * ) ( TRNAVAL( I ), I = 1, NMAT )
1359 READ( NIN, FMT = * ) ( TRNBVAL( I ), I = 1, NMAT )
1360 READ( NIN, FMT = * ) ( UPLOVAL( I ), I = 1, NMAT )
1361 READ( NIN, FMT = * ) ( MVAL ( I ), I = 1, NMAT )
1362 READ( NIN, FMT = * ) ( NVAL ( I ), I = 1, NMAT )
1363 READ( NIN, FMT = * ) ( KVAL ( I ), I = 1, NMAT )
1364 READ( NIN, FMT = * ) ( MAVAL ( I ), I = 1, NMAT )
1365 READ( NIN, FMT = * ) ( NAVAL ( I ), I = 1, NMAT )
1366 READ( NIN, FMT = * ) ( IMBAVAL( I ), I = 1, NMAT )
1367 READ( NIN, FMT = * ) ( INBAVAL( I ), I = 1, NMAT )
1368 READ( NIN, FMT = * ) ( MBAVAL ( I ), I = 1, NMAT )
1369 READ( NIN, FMT = * ) ( NBAVAL ( I ), I = 1, NMAT )
1370 READ( NIN, FMT = * ) ( RSCAVAL( I ), I = 1, NMAT )
1371 READ( NIN, FMT = * ) ( CSCAVAL( I ), I = 1, NMAT )
1372 READ( NIN, FMT = * ) ( IAVAL ( I ), I = 1, NMAT )
1373 READ( NIN, FMT = * ) ( JAVAL ( I ), I = 1, NMAT )
1374 READ( NIN, FMT = * ) ( MBVAL ( I ), I = 1, NMAT )
1375 READ( NIN, FMT = * ) ( NBVAL ( I ), I = 1, NMAT )
1376 READ( NIN, FMT = * ) ( IMBBVAL( I ), I = 1, NMAT )
1377 READ( NIN, FMT = * ) ( INBBVAL( I ), I = 1, NMAT )
1378 READ( NIN, FMT = * ) ( MBBVAL ( I ), I = 1, NMAT )
1379 READ( NIN, FMT = * ) ( NBBVAL ( I ), I = 1, NMAT )
1380 READ( NIN, FMT = * ) ( RSCBVAL( I ), I = 1, NMAT )
1381 READ( NIN, FMT = * ) ( CSCBVAL( I ), I = 1, NMAT )
1382 READ( NIN, FMT = * ) ( IBVAL ( I ), I = 1, NMAT )
1383 READ( NIN, FMT = * ) ( JBVAL ( I ), I = 1, NMAT )
1384 READ( NIN, FMT = * ) ( MCVAL ( I ), I = 1, NMAT )
1385 READ( NIN, FMT = * ) ( NCVAL ( I ), I = 1, NMAT )
1386 READ( NIN, FMT = * ) ( IMBCVAL( I ), I = 1, NMAT )
1387 READ( NIN, FMT = * ) ( INBCVAL( I ), I = 1, NMAT )
1388 READ( NIN, FMT = * ) ( MBCVAL ( I ), I = 1, NMAT )
1389 READ( NIN, FMT = * ) ( NBCVAL ( I ), I = 1, NMAT )
1390 READ( NIN, FMT = * ) ( RSCCVAL( I ), I = 1, NMAT )
1391 READ( NIN, FMT = * ) ( CSCCVAL( I ), I = 1, NMAT )
1392 READ( NIN, FMT = * ) ( ICVAL ( I ), I = 1, NMAT )
1393 READ( NIN, FMT = * ) ( JCVAL ( I ), I = 1, NMAT )
1399 LTEST( I ) = .FALSE.
1402 READ( NIN, FMT = 9996, END = 50 ) SNAMET, LTESTT
1404.EQ.
IF( SNAMETSNAMES( I ) )
1408 WRITE( NOUT, FMT = 9995 )SNAMET
1424.LT.
IF( NPROCS1 ) THEN
1427 NPROCS = MAX( NPROCS, PVAL( I )*QVAL( I ) )
1429 CALL BLACS_SETUP( IAM, NPROCS )
1435 CALL BLACS_GET( -1, 0, ICTXT )
1436 CALL BLACS_GRIDINIT( ICTXT, 'Row-major
', 1, NPROCS )
1440 CALL CGEBS2D( ICTXT, 'All
', ' ', 1, 1, ALPHA, 1 )
1441 CALL CGEBS2D( ICTXT, 'All
', ' ', 1, 1, BETA, 1 )
1446 CALL IGEBS2D( ICTXT, 'All
', ' ', 3, 1, WORK, 3 )
1450 WORK( I ) = ICHAR( DIAGVAL( J ) )
1451 WORK( I+1 ) = ICHAR( SIDEVAL( J ) )
1452 WORK( I+2 ) = ICHAR( TRNAVAL( J ) )
1453 WORK( I+3 ) = ICHAR( TRNBVAL( J ) )
1454 WORK( I+4 ) = ICHAR( UPLOVAL( J ) )
1457 CALL ICOPY( NGRIDS, PVAL, 1, WORK( I ), 1 )
1459 CALL ICOPY( NGRIDS, QVAL, 1, WORK( I ), 1 )
1461 CALL ICOPY( NMAT, MVAL, 1, WORK( I ), 1 )
1463 CALL ICOPY( NMAT, NVAL, 1, WORK( I ), 1 )
1465 CALL ICOPY( NMAT, KVAL, 1, WORK( I ), 1 )
1467 CALL ICOPY( NMAT, MAVAL, 1, WORK( I ), 1 )
1469 CALL ICOPY( NMAT, NAVAL, 1, WORK( I ), 1 )
1471 CALL ICOPY( NMAT, IMBAVAL, 1, WORK( I ), 1 )
1473 CALL ICOPY( NMAT, INBAVAL, 1, WORK( I ), 1 )
1475 CALL ICOPY( NMAT, MBAVAL, 1, WORK( I ), 1 )
1477 CALL ICOPY( NMAT, NBAVAL, 1, WORK( I ), 1 )
1479 CALL ICOPY( NMAT, RSCAVAL, 1, WORK( I ), 1 )
1481 CALL ICOPY( NMAT, CSCAVAL, 1, WORK( I ), 1 )
1483 CALL ICOPY( NMAT, IAVAL, 1, WORK( I ), 1 )
1485 CALL ICOPY( NMAT, JAVAL, 1, WORK( I ), 1 )
1487 CALL ICOPY( NMAT, MBVAL, 1, WORK( I ), 1 )
1489 CALL ICOPY( NMAT, NBVAL, 1, WORK( I ), 1 )
1491 CALL ICOPY( NMAT, IMBBVAL, 1, WORK( I ), 1 )
1493 CALL ICOPY( NMAT, INBBVAL, 1, WORK( I ), 1 )
1495 CALL ICOPY( NMAT, MBBVAL, 1, WORK( I ), 1 )
1497 CALL ICOPY( NMAT, NBBVAL, 1, WORK( I ), 1 )
1499 CALL ICOPY( NMAT, RSCBVAL, 1, WORK( I ), 1 )
1501 CALL ICOPY( NMAT, CSCBVAL, 1, WORK( I ), 1 )
1503 CALL ICOPY( NMAT, IBVAL, 1, WORK( I ), 1 )
1505 CALL ICOPY( NMAT, JBVAL, 1, WORK( I ), 1 )
1507 CALL ICOPY( NMAT, MCVAL, 1, WORK( I ), 1 )
1509 CALL ICOPY( NMAT, NCVAL, 1, WORK( I ), 1 )
1511 CALL ICOPY( NMAT, IMBCVAL, 1, WORK( I ), 1 )
1513 CALL ICOPY( NMAT, INBCVAL, 1, WORK( I ), 1 )
1515 CALL ICOPY( NMAT, MBCVAL, 1, WORK( I ), 1 )
1517 CALL ICOPY( NMAT, NBCVAL, 1, WORK( I ), 1 )
1519 CALL ICOPY( NMAT, RSCCVAL, 1, WORK( I ), 1 )
1521 CALL ICOPY( NMAT, CSCCVAL, 1, WORK( I ), 1 )
1523 CALL ICOPY( NMAT, ICVAL, 1, WORK( I ), 1 )
1525 CALL ICOPY( NMAT, JCVAL, 1, WORK( I ), 1 )
1529 IF( LTEST( J ) ) THEN
1537 CALL IGEBS2D( ICTXT, 'All
', ' ', I, 1, WORK, I )
1541 WRITE( NOUT, FMT = 9999 )
1542 $ 'Level 3 PBLAS timing program.
'
1543 WRITE( NOUT, FMT = 9999 ) USRINFO
1544 WRITE( NOUT, FMT = * )
1545 WRITE( NOUT, FMT = 9999 )
1546 $ 'Tests of the complex single precision
'//
1548 WRITE( NOUT, FMT = * )
1549 WRITE( NOUT, FMT = 9992 ) NMAT
1550 WRITE( NOUT, FMT = 9986 ) NBLOG
1551 WRITE( NOUT, FMT = 9991 ) NGRIDS
1552 WRITE( NOUT, FMT = 9989 )
1553 $ 'P
', ( PVAL(I), I = 1, MIN(NGRIDS, 5) )
1555 $ WRITE( NOUT, FMT = 9990 ) ( PVAL(I), I = 6,
1556 $ MIN( 10, NGRIDS ) )
1558 $ WRITE( NOUT, FMT = 9990 ) ( PVAL(I), I = 11,
1559 $ MIN( 15, NGRIDS ) )
1561 $ WRITE( NOUT, FMT = 9990 ) ( PVAL(I), I = 16, NGRIDS )
1562 WRITE( NOUT, FMT = 9989 )
1563 $ 'Q
', ( QVAL(I), I = 1, MIN(NGRIDS, 5) )
1565 $ WRITE( NOUT, FMT = 9990 ) ( QVAL(I), I = 6,
1566 $ MIN( 10, NGRIDS ) )
1568 $ WRITE( NOUT, FMT = 9990 ) ( QVAL(I), I = 11,
1569 $ MIN( 15, NGRIDS ) )
1571 $ WRITE( NOUT, FMT = 9990 ) ( QVAL(I), I = 16, NGRIDS )
1572 WRITE( NOUT, FMT = 9994 ) ALPHA
1573 WRITE( NOUT, FMT = 9993 ) BETA
1574 IF( LTEST( 1 ) ) THEN
1575 WRITE( NOUT, FMT = 9988 ) SNAMES( 1 ), ' ... Yes
'
1577 WRITE( NOUT, FMT = 9988 ) SNAMES( 1 ), ' ... No
'
1580 IF( LTEST( I ) ) THEN
1581 WRITE( NOUT, FMT = 9987 ) SNAMES( I ), ' ... Yes
'
1583 WRITE( NOUT, FMT = 9987 ) SNAMES( I ), ' ... No
'
1586 WRITE( NOUT, FMT = * )
1593 $ CALL BLACS_SETUP( IAM, NPROCS )
1598 CALL BLACS_GET( -1, 0, ICTXT )
1599 CALL BLACS_GRIDINIT( ICTXT, 'Row-major
', 1, NPROCS )
1601 CALL CGEBR2D( ICTXT, 'All
', ' ', 1, 1, ALPHA, 1, 0, 0 )
1602 CALL CGEBR2D( ICTXT, 'All
', ' ', 1, 1, BETA, 1, 0, 0 )
1604 CALL IGEBR2D( ICTXT, 'All
', ' ', 3, 1, WORK, 3, 0, 0 )
1609 I = 2*NGRIDS + 38*NMAT + NSUBS
1610 CALL IGEBR2D( ICTXT, 'All
', ' ', I, 1, WORK, I, 0, 0 )
1614 DIAGVAL( J ) = CHAR( WORK( I ) )
1615 SIDEVAL( J ) = CHAR( WORK( I+1 ) )
1616 TRNAVAL( J ) = CHAR( WORK( I+2 ) )
1617 TRNBVAL( J ) = CHAR( WORK( I+3 ) )
1618 UPLOVAL( J ) = CHAR( WORK( I+4 ) )
1621 CALL ICOPY( NGRIDS, WORK( I ), 1, PVAL, 1 )
1623 CALL ICOPY( NGRIDS, WORK( I ), 1, QVAL, 1 )
1625 CALL ICOPY( NMAT, WORK( I ), 1, MVAL, 1 )
1627 CALL ICOPY( NMAT, WORK( I ), 1, NVAL, 1 )
1629 CALL ICOPY( NMAT, WORK( I ), 1, KVAL, 1 )
1631 CALL ICOPY( NMAT, WORK( I ), 1, MAVAL, 1 )
1633 CALL ICOPY( NMAT, WORK( I ), 1, NAVAL, 1 )
1635 CALL ICOPY( NMAT, WORK( I ), 1, IMBAVAL, 1 )
1637 CALL ICOPY( NMAT, WORK( I ), 1, INBAVAL, 1 )
1639 CALL ICOPY( NMAT, WORK( I ), 1, MBAVAL, 1 )
1641 CALL ICOPY( NMAT, WORK( I ), 1, NBAVAL, 1 )
1643 CALL ICOPY( NMAT, WORK( I ), 1, RSCAVAL, 1 )
1645 CALL ICOPY( NMAT, WORK( I ), 1, CSCAVAL, 1 )
1647 CALL ICOPY( NMAT, WORK( I ), 1, IAVAL, 1 )
1649 CALL ICOPY( NMAT, WORK( I ), 1, JAVAL, 1 )
1651 CALL ICOPY( NMAT, WORK( I ), 1, MBVAL, 1 )
1653 CALL ICOPY( NMAT, WORK( I ), 1, NBVAL, 1 )
1655 CALL ICOPY( NMAT, WORK( I ), 1, IMBBVAL, 1 )
1657 CALL ICOPY( NMAT, WORK( I ), 1, INBBVAL, 1 )
1659 CALL ICOPY( NMAT, WORK( I ), 1, MBBVAL, 1 )
1661 CALL ICOPY( NMAT, WORK( I ), 1, NBBVAL, 1 )
1663 CALL ICOPY( NMAT, WORK( I ), 1, RSCBVAL, 1 )
1665 CALL ICOPY( NMAT, WORK( I ), 1, CSCBVAL, 1 )
1667 CALL ICOPY( NMAT, WORK( I ), 1, IBVAL, 1 )
1669 CALL ICOPY( NMAT, WORK( I ), 1, JBVAL, 1 )
1671 CALL ICOPY( NMAT, WORK( I ), 1, MCVAL, 1 )
1673 CALL ICOPY( NMAT, WORK( I ), 1, NCVAL, 1 )
1675 CALL ICOPY( NMAT, WORK( I ), 1, IMBCVAL, 1 )
1677 CALL ICOPY( NMAT, WORK( I ), 1, INBCVAL, 1 )
1679 CALL ICOPY( NMAT, WORK( I ), 1, MBCVAL, 1 )
1681 CALL ICOPY( NMAT, WORK( I ), 1, NBCVAL, 1 )
1683 CALL ICOPY( NMAT, WORK( I ), 1, RSCCVAL, 1 )
1685 CALL ICOPY( NMAT, WORK( I ), 1, CSCCVAL, 1 )
1687 CALL ICOPY( NMAT, WORK( I ), 1, ICVAL, 1 )
1689 CALL ICOPY( NMAT, WORK( I ), 1, JCVAL, 1 )
1693.EQ.
IF( WORK( I )1 ) THEN
1696 LTEST( J ) = .FALSE.
1703 CALL BLACS_GRIDEXIT( ICTXT )
1707 120 WRITE( NOUT, FMT = 9997 )
1709.NE..AND..NE.
IF( NOUT6 NOUT0 )
1711 CALL BLACS_ABORT( ICTXT, 1 )
1716 9998 FORMAT( ' Number of values of
',5A, ' is less than 1 or greater
',
1718 9997 FORMAT( ' Illegal input in file
',40A,'. Aborting run.
' )
1719 9996 FORMAT( A7, L2 )
1720 9995 FORMAT( ' Subprogram name
', A7, ' not recognized
',
1721 $ /' ******* TESTS ABANDONED *******
' )
1722 9994 FORMAT( 2X, 'Alpha : (
', G16.6,
1724 9993 FORMAT( 2X, 'Beta : (
', G16.6,
1726 9992 FORMAT( 2X, 'Number of Tests :
', I6 )
1727 9991 FORMAT( 2X, 'Number of process grids :
', I6 )
1728 9990 FORMAT( 2X, ' :
', 5I6 )
1729 9989 FORMAT( 2X, A1, ' :
', 5I6 )
1730 9988 FORMAT( 2X, 'Routines to be tested :
', A, A8 )
1731 9987 FORMAT( 2X, ' ', A, A8 )
1732 9986 FORMAT( 2X, 'Logical block size :
', I6 )
logical function lsame(ca, cb)
LSAME
subroutine blacs_gridexit(cntxt)
subroutine pctrsm(side, uplo, transa, diag, m, n, alpha, a, ia, ja, desca, b, ib, jb, descb)
subroutine pb_combine(ictxt, scope, op, tmtype, n, ibeg, times)
double precision function pdopbl3(subnam, m, n, k)
subroutine pclagen(inplace, aform, diag, offa, m, n, ia, ja, desca, iaseed, a, lda)
subroutine pclascal(type, m, n, alpha, a, ia, ja, desca)
subroutine jc(p, t, a, b, cm, cn, tref, tm, epsm, sigmam, jc_yield, tan_jc)