581
582
583
584
585
586
587
588 INTEGER IAM, LDPVAL, LDQVAL, LDVAL, NGRIDS, NMAT, NOUT,
589 $ NPROCS
590 COMPLEX ALPHA
591
592
593 CHARACTER*( * ) SUMMRY
594 LOGICAL LTEST( * )
595 INTEGER CSCXVAL( LDVAL ), CSCYVAL( LDVAL ),
596 $ IMBXVAL( LDVAL ), IMBYVAL( LDVAL ),
597 $ INBXVAL( LDVAL ), INBYVAL( LDVAL ),
598 $ INCXVAL( LDVAL ), INCYVAL( LDVAL ),
599 $ IXVAL( LDVAL ), IYVAL( LDVAL ), JXVAL( LDVAL ),
600 $ JYVAL( LDVAL ), MBXVAL( LDVAL ),
601 $ MBYVAL( LDVAL ), MXVAL( LDVAL ),
602 $ MYVAL( LDVAL ), NBXVAL( LDVAL ),
603 $ NBYVAL( LDVAL ), NVAL( LDVAL ), NXVAL( LDVAL ),
604 $ NYVAL( LDVAL ), PVAL( LDPVAL ), QVAL( LDQVAL ),
605 $ RSCXVAL( LDVAL ), RSCYVAL( LDVAL ), WORK( * )
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
798 INTEGER NIN, NSUBS
799 parameter( nin = 11, nsubs = 10 )
800
801
802 LOGICAL LTESTT
803 INTEGER I, ICTXT, J
804
805
806 CHARACTER*7 SNAMET
807 CHARACTER*79 USRINFO
808
809
810 EXTERNAL blacs_abort, blacs_get, blacs_gridexit,
811 $ blacs_gridinit, blacs_setup, cgebr2d, cgebs2d,
812 $
icopy, igebr2d, igebs2d, sgebr2d, sgebs2d
813
814
816
817
818 CHARACTER*7 SNAMES( NSUBS )
819 COMMON /snamec/snames
820
821
822
823
824
825
826
827 IF( iam.EQ.0 ) THEN
828
829
830
831 OPEN( nin, file='PCBLAS1TIM.dat', status='OLD' )
832 READ( nin, fmt = * ) summry
833 summry = ' '
834
835
836
837 READ( nin, fmt = 9999 ) usrinfo
838
839
840
841 READ( nin, fmt = * ) summry
842 READ( nin, fmt = * ) nout
843 IF( nout.NE.0 .AND. nout.NE.6 )
844 $ OPEN( nout, file = summry, status = 'UNKNOWN' )
845
846
847
848
849
850 READ( nin, fmt = * ) ngrids
851 IF( ngrids.LT.1 .OR. ngrids.GT.ldpval ) THEN
852 WRITE( nout, fmt = 9998 ) 'Grids', ldpval
853 GO TO 100
854 ELSE IF( ngrids.GT.ldqval ) THEN
855 WRITE( nout, fmt = 9998 ) 'Grids', ldqval
856 GO TO 100
857 END IF
858
859
860
861 READ( nin, fmt = * ) ( pval( i ), i = 1, ngrids )
862 READ( nin, fmt = * ) ( qval( i ), i = 1, ngrids )
863
864
865
866 READ( nin, fmt = * ) alpha
867
868
869
870 READ( nin, fmt = * ) nmat
871 IF( nmat.LT.1 .OR. nmat.GT.ldval ) THEN
872 WRITE( nout, fmt = 9998 ) 'Tests', ldval
873 GO TO 100
874 END IF
875
876
877
878 READ( nin, fmt = * ) ( nval( i ), i = 1, nmat )
879 READ( nin, fmt = * ) ( mxval( i ), i = 1, nmat )
880 READ( nin, fmt = * ) ( nxval( i ), i = 1, nmat )
881 READ( nin, fmt = * ) ( imbxval( i ), i = 1, nmat )
882 READ( nin, fmt = * ) ( inbxval( i ), i = 1, nmat )
883 READ( nin, fmt = * ) ( mbxval( i ), i = 1, nmat )
884 READ( nin, fmt = * ) ( nbxval( i ), i = 1, nmat )
885 READ( nin, fmt = * ) ( rscxval( i ), i = 1, nmat )
886 READ( nin, fmt = * ) ( cscxval( i ), i = 1, nmat )
887 READ( nin, fmt = * ) ( ixval( i ), i = 1, nmat )
888 READ( nin, fmt = * ) ( jxval( i ), i = 1, nmat )
889 READ( nin, fmt = * ) ( incxval( i ), i = 1, nmat )
890 READ( nin, fmt = * ) ( myval( i ), i = 1, nmat )
891 READ( nin, fmt = * ) ( nyval( i ), i = 1, nmat )
892 READ( nin, fmt = * ) ( imbyval( i ), i = 1, nmat )
893 READ( nin, fmt = * ) ( inbyval( i ), i = 1, nmat )
894 READ( nin, fmt = * ) ( mbyval( i ), i = 1, nmat )
895 READ( nin, fmt = * ) ( nbyval( i ), i = 1, nmat )
896 READ( nin, fmt = * ) ( rscyval( i ), i = 1, nmat )
897 READ( nin, fmt = * ) ( cscyval( i ), i = 1, nmat )
898 READ( nin, fmt = * ) ( iyval( i ), i = 1, nmat )
899 READ( nin, fmt = * ) ( jyval( i ), i = 1, nmat )
900 READ( nin, fmt = * ) ( incyval( i ), i = 1, nmat )
901
902
903
904
905 DO 10 i = 1, nsubs
906 ltest( i ) = .false.
907 10 CONTINUE
908 20 CONTINUE
909 READ( nin, fmt = 9996, END = 50 ) SNAMET, ltestt
910 DO 30 i = 1, nsubs
911 IF( snamet.EQ.snames( i ) )
912 $ GO TO 40
913 30 CONTINUE
914
915 WRITE( nout, fmt = 9995 )snamet
916 GO TO 100
917
918 40 CONTINUE
919 ltest( i ) = ltestt
920 GO TO 20
921
922 50 CONTINUE
923
924
925
926 CLOSE ( nin )
927
928
929
930
931 IF( nprocs.LT.1 ) THEN
932 nprocs = 0
933 DO 60 i = 1, ngrids
934 nprocs =
max( nprocs, pval( i )*qval( i ) )
935 60 CONTINUE
936 CALL blacs_setup( iam, nprocs )
937 END IF
938
939
940
941
942 CALL blacs_get( -1, 0, ictxt )
943 CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
944
945
946
947 CALL cgebs2d( ictxt, 'All', ' ', 1, 1, alpha, 1 )
948
949 work( 1 ) = ngrids
950 work( 2 ) = nmat
951 CALL igebs2d( ictxt, 'All', ' ', 2, 1, work, 2 )
952
953 i = 1
954 CALL icopy( ngrids, pval, 1, work( i ), 1 )
955 i = i + ngrids
956 CALL icopy( ngrids, qval, 1, work( i ), 1 )
957 i = i + ngrids
958 CALL icopy( nmat, nval, 1, work( i ), 1 )
959 i = i + nmat
960 CALL icopy( nmat, mxval, 1, work( i ), 1 )
961 i = i + nmat
962 CALL icopy( nmat, nxval, 1, work( i ), 1 )
963 i = i + nmat
964 CALL icopy( nmat, imbxval, 1, work( i ), 1 )
965 i = i + nmat
966 CALL icopy( nmat, inbxval, 1, work( i ), 1 )
967 i = i + nmat
968 CALL icopy( nmat, mbxval, 1, work( i ), 1 )
969 i = i + nmat
970 CALL icopy( nmat, nbxval, 1, work( i ), 1 )
971 i = i + nmat
972 CALL icopy( nmat, rscxval, 1, work( i ), 1 )
973 i = i + nmat
974 CALL icopy( nmat, cscxval, 1, work( i ), 1 )
975 i = i + nmat
976 CALL icopy( nmat, ixval, 1, work( i ), 1 )
977 i = i + nmat
978 CALL icopy( nmat, jxval, 1, work( i ), 1 )
979 i = i + nmat
980 CALL icopy( nmat, incxval, 1, work( i ), 1 )
981 i = i + nmat
982 CALL icopy( nmat, myval, 1, work( i ), 1 )
983 i = i + nmat
984 CALL icopy( nmat, nyval, 1, work( i ), 1 )
985 i = i + nmat
986 CALL icopy( nmat, imbyval, 1, work( i ), 1 )
987 i = i + nmat
988 CALL icopy( nmat, inbyval, 1, work( i ), 1 )
989 i = i + nmat
990 CALL icopy( nmat, mbyval, 1, work( i ), 1 )
991 i = i + nmat
992 CALL icopy( nmat, nbyval, 1, work( i ), 1 )
993 i = i + nmat
994 CALL icopy( nmat, rscyval, 1, work( i ), 1 )
995 i = i + nmat
996 CALL icopy( nmat, cscyval, 1, work( i ), 1 )
997 i = i + nmat
998 CALL icopy( nmat, iyval, 1, work( i ), 1 )
999 i = i + nmat
1000 CALL icopy( nmat, jyval, 1, work( i ), 1 )
1001 i = i + nmat
1002 CALL icopy( nmat, incyval, 1, work( i ), 1 )
1003 i = i + nmat
1004
1005 DO 70 j = 1, nsubs
1006 IF( ltest( j ) ) THEN
1007 work( i ) = 1
1008 ELSE
1009 work( i ) = 0
1010 END IF
1011 i = i + 1
1012 70 CONTINUE
1013 i = i - 1
1014 CALL igebs2d( ictxt, 'All', ' ', i, 1, work, i )
1015
1016
1017
1018 WRITE( nout, fmt = 9999 )
1019 $ 'Level 1 PBLAS timing program.'
1020 WRITE( nout, fmt = 9999 ) usrinfo
1021 WRITE( nout, fmt = * )
1022 WRITE( nout, fmt = 9999 )
1023 $ 'Timing of the complex single precision '//
1024 $ 'Level 1 PBLAS'
1025 WRITE( nout, fmt = * )
1026 WRITE( nout, fmt = 9999 )
1027 $ 'The following parameter values will be used:'
1028 WRITE( nout, fmt = * )
1029 WRITE( nout, fmt = 9993 ) nmat
1030 WRITE( nout, fmt = 9992 ) ngrids
1031 WRITE( nout, fmt = 9990 )
1032 $
'P', ( pval(i), i = 1,
min(ngrids, 5) )
1033 IF( ngrids.GT.5 )
1034 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 6,
1035 $
min( 10, ngrids ) )
1036 IF( ngrids.GT.10 )
1037 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 11,
1038 $
min( 15, ngrids ) )
1039 IF( ngrids.GT.15 )
1040 $ WRITE( nout, fmt = 9991 ) ( pval(i), i = 16, ngrids )
1041 WRITE( nout, fmt = 9990 )
1042 $
'Q', ( qval(i), i = 1,
min(ngrids, 5) )
1043 IF( ngrids.GT.5 )
1044 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 6,
1045 $
min( 10, ngrids ) )
1046 IF( ngrids.GT.10 )
1047 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 11,
1048 $
min( 15, ngrids ) )
1049 IF( ngrids.GT.15 )
1050 $ WRITE( nout, fmt = 9991 ) ( qval(i), i = 16, ngrids )
1051 WRITE( nout, fmt = 9994 ) alpha
1052 IF( ltest( 1 ) ) THEN
1053 WRITE( nout, fmt = 9989 ) snames( 1 ), ' ... Yes'
1054 ELSE
1055 WRITE( nout, fmt = 9989 ) snames( 1 ), ' ... No '
1056 END IF
1057 DO 80 i = 2, nsubs
1058 IF( ltest( i ) ) THEN
1059 WRITE( nout, fmt = 9988 ) snames( i ), ' ... Yes'
1060 ELSE
1061 WRITE( nout, fmt = 9988 ) snames( i ), ' ... No '
1062 END IF
1063 80 CONTINUE
1064 WRITE( nout, fmt = * )
1065
1066 ELSE
1067
1068
1069
1070 IF( nprocs.LT.1 )
1071 $ CALL blacs_setup( iam, nprocs )
1072
1073
1074
1075
1076 CALL blacs_get( -1, 0, ictxt )
1077 CALL blacs_gridinit( ictxt, 'Row-major', 1, nprocs )
1078
1079 CALL cgebr2d( ictxt, 'All', ' ', 1, 1, alpha, 1, 0, 0 )
1080
1081 CALL igebr2d( ictxt, 'All', ' ', 2, 1, work, 2, 0, 0 )
1082 ngrids = work( 1 )
1083 nmat = work( 2 )
1084
1085 i = 2*ngrids + 23*nmat + nsubs
1086 CALL igebr2d( ictxt, 'All', ' ', i, 1, work, i, 0, 0 )
1087
1088 i = 1
1089 CALL icopy( ngrids, work( i ), 1, pval, 1 )
1090 i = i + ngrids
1091 CALL icopy( ngrids, work( i ), 1, qval, 1 )
1092 i = i + ngrids
1093 CALL icopy( nmat, work( i ), 1, nval, 1 )
1094 i = i + nmat
1095 CALL icopy( nmat, work( i ), 1, mxval, 1 )
1096 i = i + nmat
1097 CALL icopy( nmat, work( i ), 1, nxval, 1 )
1098 i = i + nmat
1099 CALL icopy( nmat, work( i ), 1, imbxval, 1 )
1100 i = i + nmat
1101 CALL icopy( nmat, work( i ), 1, inbxval, 1 )
1102 i = i + nmat
1103 CALL icopy( nmat, work( i ), 1, mbxval, 1 )
1104 i = i + nmat
1105 CALL icopy( nmat, work( i ), 1, nbxval, 1 )
1106 i = i + nmat
1107 CALL icopy( nmat, work( i ), 1, rscxval, 1 )
1108 i = i + nmat
1109 CALL icopy( nmat, work( i ), 1, cscxval, 1 )
1110 i = i + nmat
1111 CALL icopy( nmat, work( i ), 1, ixval, 1 )
1112 i = i + nmat
1113 CALL icopy( nmat, work( i ), 1, jxval, 1 )
1114 i = i + nmat
1115 CALL icopy( nmat, work( i ), 1, incxval, 1 )
1116 i = i + nmat
1117 CALL icopy( nmat, work( i ), 1, myval, 1 )
1118 i = i + nmat
1119 CALL icopy( nmat, work( i ), 1, nyval, 1 )
1120 i = i + nmat
1121 CALL icopy( nmat, work( i ), 1, imbyval, 1 )
1122 i = i + nmat
1123 CALL icopy( nmat, work( i ), 1, inbyval, 1 )
1124 i = i + nmat
1125 CALL icopy( nmat, work( i ), 1, mbyval, 1 )
1126 i = i + nmat
1127 CALL icopy( nmat, work( i ), 1, nbyval, 1 )
1128 i = i + nmat
1129 CALL icopy( nmat, work( i ), 1, rscyval, 1 )
1130 i = i + nmat
1131 CALL icopy( nmat, work( i ), 1, cscyval, 1 )
1132 i = i + nmat
1133 CALL icopy( nmat, work( i ), 1, iyval, 1 )
1134 i = i + nmat
1135 CALL icopy( nmat, work( i ), 1, jyval, 1 )
1136 i = i + nmat
1137 CALL icopy( nmat, work( i ), 1, incyval, 1 )
1138 i = i + nmat
1139
1140 DO 90 j = 1, nsubs
1141 IF( work( i ).EQ.1 ) THEN
1142 ltest( j ) = .true.
1143 ELSE
1144 ltest( j ) = .false.
1145 END IF
1146 i = i + 1
1147 90 CONTINUE
1148
1149 END IF
1150
1151 CALL blacs_gridexit( ictxt )
1152
1153 RETURN
1154
1155 100 WRITE( nout, fmt = 9997 )
1156 CLOSE( nin )
1157 IF( nout.NE.6 .AND. nout.NE.0 )
1158 $ CLOSE( nout )
1159 CALL blacs_abort( ictxt, 1 )
1160
1161 stop
1162
1163 9999 FORMAT( a )
1164 9998 FORMAT( ' Number of values of ',5a, ' is less than 1 or greater ',
1165 $ 'than ', i2 )
1166 9997 FORMAT( ' Illegal input in file ',40a,'. Aborting run.' )
1167 9996 FORMAT( a7, l2 )
1168 9995 FORMAT( ' Subprogram name ', a7, ' not recognized',
1169 $ /' ******* TESTS ABANDONED *******' )
1170 9994 FORMAT( 2x, 'Alpha : (', g16.6,
1171 $ ',', g16.6, ')' )
1172 9993 FORMAT( 2x, 'Number of Tests : ', i6 )
1173 9992 FORMAT( 2x, 'Number of process grids : ', i6 )
1174 9991 FORMAT( 2x, ' : ', 5i6 )
1175 9990 FORMAT( 2x, a1, ' : ', 5i6 )
1176 9989 FORMAT( 2x, 'Routines to be tested : ', a, a8 )
1177 9988 FORMAT( 2x, ' ', a, a8 )
1178
1179
1180
subroutine icopy(n, sx, incx, sy, incy)