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