580
581
582
583
584
585
586
587 INTEGER IAM, LDPVAL, LDQVAL, LDVAL, NGRIDS, NMAT, NOUT,
588 $ NPROCS
589 COMPLEX*16 ALPHA
590
591
592 CHARACTER*( * ) SUMMRY
593 LOGICAL LTEST( * )
594 INTEGER CSCXVAL( LDVAL ), CSCYVAL( LDVAL ),
595 $ IMBXVAL( LDVAL ), IMBYVAL( LDVAL ),
596 $ INBXVAL( LDVAL ), INBYVAL( LDVAL ),
597 $ INCXVAL( LDVAL ), INCYVAL( LDVAL ),
598 $ IXVAL( LDVAL ), IYVAL( LDVAL ), JXVAL( LDVAL ),
599 $ JYVAL( LDVAL ), MBXVAL( LDVAL ),
600 $ MBYVAL( LDVAL ), MXVAL( LDVAL ),
601 $ MYVAL( LDVAL ), NBXVAL( LDVAL ),
602 $ NBYVAL( LDVAL ), NVAL( LDVAL ), NXVAL( LDVAL ),
603 $ NYVAL( LDVAL ), PVAL( LDPVAL ), QVAL( LDQVAL ),
604 $ RSCXVAL( LDVAL ), RSCYVAL( LDVAL ), WORK( * )
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797 INTEGER NIN, NSUBS
798 parameter( nin = 11, nsubs = 10 )
799
800
801 LOGICAL LTESTT
802 INTEGER I, ICTXT, J
803
804
805 CHARACTER*7 SNAMET
806 CHARACTER*79 USRINFO
807
808
809 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
810 $ blacs_gridinit, blacs_setup,
icopy, igebr2d,
811 $ igebs2d, sgebr2d, sgebs2d, zgebr2d, zgebs2d
812
813
815
816
817 CHARACTER*7 SNAMES( NSUBS )
818 COMMON /snamec/snames
819
820
821
822
823
824
825
826 IF( iam.EQ.0 ) THEN
827
828
829
830 OPEN( nin, file='PZBLAS1TIM.dat', status='OLD' )
831 READ( nin, fmt = * ) summry
832 summry = ' '
833
834
835
836 READ( nin, fmt = 9999 ) usrinfo
837
838
839
840 READ( nin, fmt = * ) summry
841 READ( nin, fmt = * ) nout
842 IF( nout.NE.0 .AND. nout.NE.6 )
843 $ OPEN( nout, file = summry, status = 'UNKNOWN' )
844
845
846
847
848
849 READ( nin, fmt = * ) ngrids
850 IF( ngrids.LT.1 .OR. ngrids.GT.ldpval ) THEN
851 WRITE( nout, fmt = 9998 ) 'Grids', ldpval
852 GO TO 100
853 ELSE IF( ngrids.GT.ldqval ) THEN
854 WRITE( nout, fmt = 9998 ) 'Grids', ldqval
855 GO TO 100
856 END IF
857
858
859
860 READ( nin, fmt = * ) ( pval( i ), i = 1, ngrids )
861 READ( nin, fmt = * ) ( qval( i ), i = 1, ngrids )
862
863
864
865 READ( nin, fmt = * ) alpha
866
867
868
869 READ( nin, fmt = * ) nmat
870 IF( nmat.LT.1 .OR. nmat.GT.ldval ) THEN
871 WRITE( nout, fmt = 9998 ) 'Tests', ldval
872 GO TO 100
873 END IF
874
875
876
877 READ( nin, fmt = * ) ( nval( i ), i = 1, nmat )
878 READ( nin, fmt = * ) ( mxval( i ), i = 1, nmat )
879 READ( nin, fmt = * ) ( nxval( i ), i = 1, nmat )
880 READ( nin, fmt = * ) ( imbxval( i ), i = 1, nmat )
881 READ( nin, fmt = * ) ( inbxval( i ), i = 1, nmat )
882 READ( nin, fmt = * ) ( mbxval( i ), i = 1, nmat )
883 READ( nin, fmt = * ) ( nbxval( i ), i = 1, nmat )
884 READ( nin, fmt = * ) ( rscxval( i ), i = 1, nmat )
885 READ( nin, fmt = * ) ( cscxval( i ), i = 1, nmat )
886 READ( nin, fmt = * ) ( ixval( i ), i = 1, nmat )
887 READ( nin, fmt = * ) ( jxval( i ), i = 1, nmat )
888 READ( nin, fmt = * ) ( incxval( i ), i = 1, nmat )
889 READ( nin, fmt = * ) ( myval( i ), i = 1, nmat )
890 READ( nin, fmt = * ) ( nyval( i ), i = 1, nmat )
891 READ( nin, fmt = * ) ( imbyval( i ), i = 1, nmat )
892 READ( nin, fmt = * ) ( inbyval( i ), i = 1, nmat )
893 READ( nin, fmt = * ) ( mbyval( i ), i = 1, nmat )
894 READ( nin, fmt = * ) ( nbyval( i ), i = 1, nmat )
895 READ( nin, fmt = * ) ( rscyval( i ), i = 1, nmat )
896 READ( nin, fmt = * ) ( cscyval( i ), i = 1, nmat )
897 READ( nin, fmt = * ) ( iyval( i ), i = 1, nmat )
898 READ( nin, fmt = * ) ( jyval( i ), i = 1, nmat )
899 READ( nin, fmt = * ) ( incyval( i ), i = 1, nmat )
900
901
902
903
904 DO 10 i = 1, nsubs
905 ltest( i ) = .false.
906 10 CONTINUE
907 20 CONTINUE
908 READ( nin, fmt = 9996, END = 50 ) SNAMET, ltestt
909 DO 30 i = 1, nsubs
910 IF( snamet.EQ.snames( i ) )
911 $ GO TO 40
912 30 CONTINUE
913
914 WRITE( nout, fmt = 9995 )snamet
915 GO TO 100
916
917 40 CONTINUE
918 ltest( i ) = ltestt
919 GO TO 20
920
921 50 CONTINUE
922
923
924
925 CLOSE ( nin )
926
927
928
929
930 IF( nprocs.LT.1 ) THEN
931 nprocs = 0
932 DO 60 i = 1, ngrids
933 nprocs =
max( nprocs, pval( i )*qval( i ) )
934 60 CONTINUE
935 CALL blacs_setup( iam, nprocs )
936 END IF
937
938
939
940
941 CALL blacs_get( -1, 0, ictxt )
942 CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
943
944
945
946 CALL zgebs2d( ictxt, 'All', ' ', 1, 1, alpha, 1 )
947
948 work( 1 ) = ngrids
949 work( 2 ) = nmat
950 CALL igebs2d( ictxt, 'All', ' ', 2, 1, work, 2 )
951
952 i = 1
953 CALL icopy( ngrids, pval, 1, work( i ), 1 )
954 i = i + ngrids
955 CALL icopy( ngrids, qval, 1, work( i ), 1 )
956 i = i + ngrids
957 CALL icopy( nmat, nval, 1, work( i ), 1 )
958 i = i + nmat
959 CALL icopy( nmat, mxval, 1, work( i ), 1 )
960 i = i + nmat
961 CALL icopy( nmat, nxval, 1, work( i ), 1 )
962 i = i + nmat
963 CALL icopy( nmat, imbxval, 1, work( i ), 1 )
964 i = i + nmat
965 CALL icopy( nmat, inbxval, 1, work( i ), 1 )
966 i = i + nmat
967 CALL icopy( nmat, mbxval, 1, work( i ), 1 )
968 i = i + nmat
969 CALL icopy( nmat, nbxval, 1, work( i ), 1 )
970 i = i + nmat
971 CALL icopy( nmat, rscxval, 1, work( i ), 1 )
972 i = i + nmat
973 CALL icopy( nmat, cscxval, 1, work( i ), 1 )
974 i = i + nmat
975 CALL icopy( nmat, ixval, 1, work( i ), 1 )
976 i = i + nmat
977 CALL icopy( nmat, jxval, 1, work( i ), 1 )
978 i = i + nmat
979 CALL icopy( nmat, incxval, 1, work( i ), 1 )
980 i = i + nmat
981 CALL icopy( nmat, myval, 1, work( i ), 1 )
982 i = i + nmat
983 CALL icopy( nmat, nyval, 1, work( i ), 1 )
984 i = i + nmat
985 CALL icopy( nmat, imbyval, 1, work( i ), 1 )
986 i = i + nmat
987 CALL icopy( nmat, inbyval, 1, work( i ), 1 )
988 i = i + nmat
989 CALL icopy( nmat, mbyval, 1, work( i ), 1 )
990 i = i + nmat
991 CALL icopy( nmat, nbyval, 1, work( i ), 1 )
992 i = i + nmat
993 CALL icopy( nmat, rscyval, 1, work( i ), 1 )
994 i = i + nmat
995 CALL icopy( nmat, cscyval, 1, work( i ), 1 )
996 i = i + nmat
997 CALL icopy( nmat, iyval, 1, work( i ), 1 )
998 i = i + nmat
999 CALL icopy( nmat, jyval, 1, work( i ), 1 )
1000 i = i + nmat
1001 CALL icopy( nmat, incyval, 1, work( i ), 1 )
1002 i = i + nmat
1003
1004 DO 70 j = 1, nsubs
1005 IF( ltest( j ) ) THEN
1006 work( i ) = 1
1007 ELSE
1008 work( i ) = 0
1009 END IF
1010 i = i + 1
1011 70 CONTINUE
1012 i = i - 1
1013 CALL igebs2d( ictxt, 'All', ' ', i, 1, work, i )
1014
1015
1016
1017 WRITE( nout, fmt = 9999 )
1018 $ 'Level 1 PBLAS timing program.'
1019 WRITE( nout, fmt = 9999 ) usrinfo
1020 WRITE( nout, fmt = * )
1021 WRITE( nout, fmt = 9999 )
1022 $ 'Timing of the complex double precision '//
1023 $ 'Level 1 PBLAS'
1024 WRITE( nout, fmt = * )
1025 WRITE( nout, fmt = 9999 )
1026 $ 'The following parameter values will be used:'
1027 WRITE( nout, fmt = * )
1028 WRITE( nout, fmt = 9993 ) nmat
1029 WRITE( nout, fmt = 9992 ) ngrids
1030 WRITE( nout, fmt = 9990 )
1031 $
'P', ( pval(i), i = 1,
min(ngrids, 5) )
1032 IF( ngrids.GT.5 )
1033 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 6,
1034 $
min( 10, ngrids ) )
1035 IF( ngrids.GT.10 )
1036 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 11,
1037 $
min( 15, ngrids ) )
1038 IF( ngrids.GT.15 )
1039 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 16, ngrids )
1040 WRITE( nout, fmt = 9990 )
1041 $
'Q', ( qval(i), i = 1,
min(ngrids, 5) )
1042 IF( ngrids.GT.5 )
1043 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 6,
1044 $
min( 10, ngrids ) )
1045 IF( ngrids.GT.10 )
1046 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 11,
1047 $
min( 15, ngrids ) )
1048 IF( ngrids.GT.15 )
1049 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 16, ngrids )
1050 WRITE( nout, fmt = 9994 ) alpha
1051 IF( ltest( 1 ) ) THEN
1052 WRITE( nout, fmt = 9989 ) snames( 1 ), ' ... Yes'
1053 ELSE
1054 WRITE( nout, fmt = 9989 ) snames( 1 ), ' ... No '
1055 END IF
1056 DO 80 i = 2, nsubs
1057 IF( ltest( i ) ) THEN
1058 WRITE( nout, fmt = 9988 ) snames( i ), ' ... Yes'
1059 ELSE
1060 WRITE( nout, fmt = 9988 ) snames( i ), ' ... No '
1061 END IF
1062 80 CONTINUE
1063 WRITE( nout, fmt = * )
1064
1065 ELSE
1066
1067
1068
1069 IF( nprocs.LT.1 )
1070 $ CALL blacs_setup( iam, nprocs )
1071
1072
1073
1074
1075 CALL blacs_get( -1, 0, ictxt )
1076 CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
1077
1078 CALL zgebr2d( ictxt, 'All', ' ', 1, 1, alpha, 1, 0, 0 )
1079
1080 CALL igebr2d( ictxt, 'All', ' ', 2, 1, work, 2, 0, 0 )
1081 ngrids = work( 1 )
1082 nmat = work( 2 )
1083
1084 i = 2*ngrids + 23*nmat + nsubs
1085 CALL igebr2d( ictxt, 'All', ' ', i, 1, work, i, 0, 0 )
1086
1087 i = 1
1088 CALL icopy( ngrids, work( i ), 1, pval, 1 )
1089 i = i + ngrids
1090 CALL icopy( ngrids, work( i ), 1, qval, 1 )
1091 i = i + ngrids
1092 CALL icopy( nmat, work( i ), 1, nval, 1 )
1093 i = i + nmat
1094 CALL icopy( nmat, work( i ), 1, mxval, 1 )
1095 i = i + nmat
1096 CALL icopy( nmat, work( i ), 1, nxval, 1 )
1097 i = i + nmat
1098 CALL icopy( nmat, work( i ), 1, imbxval, 1 )
1099 i = i + nmat
1100 CALL icopy( nmat, work( i ), 1, inbxval, 1 )
1101 i = i + nmat
1102 CALL icopy( nmat, work( i ), 1, mbxval, 1 )
1103 i = i + nmat
1104 CALL icopy( nmat, work( i ), 1, nbxval, 1 )
1105 i = i + nmat
1106 CALL icopy( nmat, work( i ), 1, rscxval, 1 )
1107 i = i + nmat
1108 CALL icopy( nmat, work( i ), 1, cscxval, 1 )
1109 i = i + nmat
1110 CALL icopy( nmat, work( i ), 1, ixval, 1 )
1111 i = i + nmat
1112 CALL icopy( nmat, work( i ), 1, jxval, 1 )
1113 i = i + nmat
1114 CALL icopy( nmat, work( i ), 1, incxval, 1 )
1115 i = i + nmat
1116 CALL icopy( nmat, work( i ), 1, myval, 1 )
1117 i = i + nmat
1118 CALL icopy( nmat, work( i ), 1, nyval, 1 )
1119 i = i + nmat
1120 CALL icopy( nmat, work( i ), 1, imbyval, 1 )
1121 i = i + nmat
1122 CALL icopy( nmat, work( i ), 1, inbyval, 1 )
1123 i = i + nmat
1124 CALL icopy( nmat, work( i ), 1, mbyval, 1 )
1125 i = i + nmat
1126 CALL icopy( nmat, work( i ), 1, nbyval, 1 )
1127 i = i + nmat
1128 CALL icopy( nmat, work( i ), 1, rscyval, 1 )
1129 i = i + nmat
1130 CALL icopy( nmat, work( i ), 1, cscyval, 1 )
1131 i = i + nmat
1132 CALL icopy( nmat, work( i ), 1, iyval, 1 )
1133 i = i + nmat
1134 CALL icopy( nmat, work( i ), 1, jyval, 1 )
1135 i = i + nmat
1136 CALL icopy( nmat, work( i ), 1, incyval, 1 )
1137 i = i + nmat
1138
1139 DO 90 j = 1, nsubs
1140 IF( work( i ).EQ.1 ) THEN
1141 ltest( j ) = .true.
1142 ELSE
1143 ltest( j ) = .false.
1144 END IF
1145 i = i + 1
1146 90 CONTINUE
1147
1148 END IF
1149
1150 CALL blacs_gridexit( ictxt )
1151
1152 RETURN
1153
1154 100 WRITE( nout, fmt = 9997 )
1155 CLOSE( nin )
1156 IF( nout.NE.6 .AND. nout.NE.0 )
1157 $ CLOSE( nout )
1158 CALL blacs_abort( ictxt, 1 )
1159
1160 stop
1161
1162 9999 FORMAT( a )
1163 9998 FORMAT( ' Number of values of ',5a, ' is less than 1 or greater ',
1164 $ 'than ', i2 )
1165 9997 FORMAT( ' Illegal input in file ',40a,'. Aborting run.' )
1166 9996 FORMAT( a7, l2 )
1167 9995 FORMAT( ' Subprogram name ', a7, ' not recognized',
1168 $ /' ******* TESTS ABANDONED *******' )
1169 9994 FORMAT( 2x, 'Alpha : (', g16.6,
1170 $ ',', g16.6, ')' )
1171 9993 FORMAT( 2x, 'Number of Tests : ', i6 )
1172 9992 FORMAT( 2x, 'Number of process grids : ', i6 )
1173 9991 FORMAT( 2x, ' : ', 5i6 )
1174 9990 FORMAT( 2x, a1, ' : ', 5i6 )
1175 9989 FORMAT( 2x, 'Routines to be tested : ', a, a8 )
1176 9988 FORMAT( 2x, ' ', a, a8 )
1177
1178
1179
subroutine icopy(n, sx, incx, sy, incy)