1 REAL FUNCTION SOPBL2( SUBNAM, M, N, KKL, KKU ) 2* 3* -- LAPACK timing routine (version 3.0) -- 4* Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd., 5* Courant Institute, Argonne National Lab, and Rice University 6* March 31, 1993 7* 8* .. Scalar Arguments .. 9 CHARACTER*6 SUBNAM 10 INTEGER KKL, KKU, M, N 11* .. 12* 13* Purpose 14* ======= 15* 16* SOPBL2 computes an approximation of the number of floating point 17* operations used by a subroutine SUBNAM with the given values 18* of the parameters M, N, KL, and KU. 19* 20* This version counts operations for the Level 2 BLAS. 21* 22* Arguments 23* ========= 24* 25* SUBNAM (input) CHARACTER*6 26* The name of the subroutine. 27* 28* M (input) INTEGER 29* The number of rows of the coefficient matrix. M >= 0. 30* 31* N (input) INTEGER 32* The number of columns of the coefficient matrix. 33* If the matrix is square (such as in a solve routine) then 34* N is the number of right hand sides. N >= 0. 35* 36* KKL (input) INTEGER 37* The lower band width of the coefficient matrix. 38* KL is set to max( 0, min( M-1, KKL ) ). 39* 40* KKU (input) INTEGER 41* The upper band width of the coefficient matrix. 42* KU is set to max( 0, min( N-1, KKU ) ). 43* 44* ===================================================================== 45* 46* .. Local Scalars .. 47 CHARACTER C1 48 CHARACTER*2 C2 49 CHARACTER*3 C3 50 REAL ADDS, EK, EM, EN, KL, KU, MULTS 51* .. 52* .. External Functions .. 53 LOGICAL LSAME, LSAMEN 54 EXTERNAL LSAME, LSAMEN 55* .. 56* .. Intrinsic Functions .. 57 INTRINSIC MAX, MIN 58* .. 59* .. Executable Statements .. 60* 61* Quick return if possible 62* 63 IF( M.LE.0 .OR. 64 $ .NOT.( LSAME( SUBNAM, 'S' ) .OR. LSAME( SUBNAM, 'D' ) .OR. 65 $ LSAME( SUBNAM, 'C' ) .OR. LSAME( SUBNAM, 'Z' ) ) ) THEN 66 SOPBL2 = 0 67 RETURN 68 END IF 69* 70 C1 = SUBNAM( 1: 1 ) 71 C2 = SUBNAM( 2: 3 ) 72 C3 = SUBNAM( 4: 6 ) 73 MULTS = 0 74 ADDS = 0 75 KL = MAX( 0, MIN( M-1, KKL ) ) 76 KU = MAX( 0, MIN( N-1, KKU ) ) 77 EM = M 78 EN = N 79 EK = KL 80* 81* ------------------------------- 82* Matrix-vector multiply routines 83* ------------------------------- 84* 85 IF( LSAMEN( 3, C3, 'MV ' ) ) THEN 86* 87 IF( LSAMEN( 2, C2, 'GE' ) ) THEN 88* 89 MULTS = EM*( EN+1. ) 90 ADDS = EM*EN 91* 92* Assume M <= N + KL and KL < M 93* N <= M + KU and KU < N 94* so that the zero sections are triangles. 95* 96 ELSE IF( LSAMEN( 2, C2, 'GB' ) ) THEN 97* 98 MULTS = EM*( EN+1. ) - ( EM-1.-KL )*( EM-KL ) / 2. - 99 $ ( EN-1.-KU )*( EN-KU ) / 2. 100 ADDS = EM*( EN+1. ) - ( EM-1.-KL )*( EM-KL ) / 2. - 101 $ ( EN-1.-KU )*( EN-KU ) / 2. 102* 103 ELSE IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR. 104 $ LSAMEN( 3, SUBNAM, 'CHE' ) .OR. 105 $ LSAMEN( 3, SUBNAM, 'ZHE' ) .OR. 106 $ LSAMEN( 3, SUBNAM, 'CHP' ) .OR. 107 $ LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN 108* 109 MULTS = EM*( EM+1. ) 110 ADDS = EM*EM 111* 112 ELSE IF( LSAMEN( 2, C2, 'SB' ) .OR. 113 $ LSAMEN( 3, SUBNAM, 'CHB' ) .OR. 114 $ LSAMEN( 3, SUBNAM, 'ZHB' ) ) THEN 115* 116 MULTS = EM*( EM+1. ) - ( EM-1.-EK )*( EM-EK ) 117 ADDS = EM*EM - ( EM-1.-EK )*( EM-EK ) 118* 119 ELSE IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) 120 $ THEN 121* 122 MULTS = EM*( EM+1. ) / 2. 123 ADDS = ( EM-1. )*EM / 2. 124* 125 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN 126* 127 MULTS = EM*( EM+1. ) / 2. - ( EM-EK-1. )*( EM-EK ) / 2. 128 ADDS = ( EM-1. )*EM / 2. - ( EM-EK-1. )*( EM-EK ) / 2. 129* 130 END IF 131* 132* --------------------- 133* Matrix solve routines 134* --------------------- 135* 136 ELSE IF( LSAMEN( 3, C3, 'SV ' ) ) THEN 137* 138 IF( LSAMEN( 2, C2, 'TR' ) .OR. LSAMEN( 2, C2, 'TP' ) ) THEN 139* 140 MULTS = EM*( EM+1. ) / 2. 141 ADDS = ( EM-1. )*EM / 2. 142* 143 ELSE IF( LSAMEN( 2, C2, 'TB' ) ) THEN 144* 145 MULTS = EM*( EM+1. ) / 2. - ( EM-EK-1. )*( EM-EK ) / 2. 146 ADDS = ( EM-1. )*EM / 2. - ( EM-EK-1. )*( EM-EK ) / 2. 147* 148 END IF 149* 150* ---------------- 151* Rank-one updates 152* ---------------- 153* 154 ELSE IF( LSAMEN( 3, C3, 'R ' ) ) THEN 155* 156 IF( LSAMEN( 3, SUBNAM, 'SGE' ) .OR. 157 $ LSAMEN( 3, SUBNAM, 'DGE' ) ) THEN 158* 159 MULTS = EM*EN + MIN( EM, EN ) 160 ADDS = EM*EN 161* 162 ELSE IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR. 163 $ LSAMEN( 3, SUBNAM, 'CHE' ) .OR. 164 $ LSAMEN( 3, SUBNAM, 'CHP' ) .OR. 165 $ LSAMEN( 3, SUBNAM, 'ZHE' ) .OR. 166 $ LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN 167* 168 MULTS = EM*( EM+1. ) / 2. + EM 169 ADDS = EM*( EM+1. ) / 2. 170* 171 END IF 172* 173 ELSE IF( LSAMEN( 3, C3, 'RC ' ) .OR. LSAMEN( 3, C3, 'RU ' ) ) THEN 174* 175 IF( LSAMEN( 3, SUBNAM, 'CGE' ) .OR. 176 $ LSAMEN( 3, SUBNAM, 'ZGE' ) ) THEN 177* 178 MULTS = EM*EN + MIN( EM, EN ) 179 ADDS = EM*EN 180* 181 END IF 182* 183* ---------------- 184* Rank-two updates 185* ---------------- 186* 187 ELSE IF( LSAMEN( 3, C3, 'R2 ' ) ) THEN 188 IF( LSAMEN( 2, C2, 'SY' ) .OR. LSAMEN( 2, C2, 'SP' ) .OR. 189 $ LSAMEN( 3, SUBNAM, 'CHE' ) .OR. 190 $ LSAMEN( 3, SUBNAM, 'CHP' ) .OR. 191 $ LSAMEN( 3, SUBNAM, 'ZHE' ) .OR. 192 $ LSAMEN( 3, SUBNAM, 'ZHP' ) ) THEN 193* 194 MULTS = EM*( EM+1. ) + 2.*EM 195 ADDS = EM*( EM+1. ) 196* 197 END IF 198 END IF 199* 200* ------------------------------------------------ 201* Compute the total number of operations. 202* For real and double precision routines, count 203* 1 for each multiply and 1 for each add. 204* For complex and complex*16 routines, count 205* 6 for each multiply and 2 for each add. 206* ------------------------------------------------ 207* 208 IF( LSAME( C1, 'S' ) .OR. LSAME( C1, 'D' ) ) THEN 209* 210 SOPBL2 = MULTS + ADDS 211* 212 ELSE 213* 214 SOPBL2 = 6*MULTS + 2*ADDS 215* 216 END IF 217* 218 RETURN 219* 220* End of SOPBL2 221* 222 END 223