Files
lapack/TIMING/LIN/stimb2.f
T

1193 lines
44 KiB
FortranFixed

SUBROUTINE STIMB2( LINE, NM, MVAL, NN, NVAL, NK, KVAL, NINC,
$ INCVAL, NLDA, LDAVAL, LA, TIMMIN, A, X, Y,
$ RESLTS, LDR1, LDR2, NOUT )
*
* -- LAPACK timing routine (version 3.1) --
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
* October 2006
*
* .. Scalar Arguments ..
CHARACTER*( * ) LINE
INTEGER LA, LDR1, LDR2, NINC, NK, NLDA, NM, NN, NOUT
REAL TIMMIN
* ..
* .. Array Arguments ..
INTEGER INCVAL( * ), KVAL( * ), LDAVAL( * ), MVAL( * ),
$ NVAL( * )
REAL A( * ), RESLTS( LDR1, LDR2, * ), X( * ), Y( * )
* ..
*
* Purpose
* =======
*
* STIMB2 times the BLAS 2 routines.
*
* Arguments
* =========
*
* LINE (input) CHARACTER*80
* The input line that requested this routine. The first six
* characters contain either the name of a subroutine or a
* generic path name. The remaining characters may be used to
* specify the individual routines to be timed. See ATIMIN for
* a full description of the format of the input line.
*
* NM (input) INTEGER
* The number of values of M contained in the vector MVAL.
*
* MVAL (input) INTEGER array, dimension (NM)
* The values of the matrix row dimension M.
*
* NN (input) INTEGER
* The number of values of N contained in the vector NVAL.
*
* NVAL (input) INTEGER array, dimension (NN)
* The values of the matrix column dimension N.
*
* NK (input) INTEGER
* The number of values of K contained in the vector KVAL.
*
* KVAL (input) INTEGER array, dimension (NK)
* The values of the band width K.
*
* NINC (input) INTEGER
* The number of values of INCX contained in the vector INCVAL.
*
* INCVAL (input) INTEGER array, dimension (NINC)
* The values of INCX, the increment between successive values
* of the vector X.
*
* NLDA (input) INTEGER
* The number of values of LDA contained in the vector LDAVAL.
*
* LDAVAL (input) INTEGER array, dimension (NLDA)
* The values of the leading dimension of the array A.
*
* LA (input) INTEGER
* The size of the array A.
*
* TIMMIN (input) REAL
* The minimum time a subroutine will be timed.
*
* A (workspace) REAL array, dimension (LA)
*
* X (workspace) REAL array, dimension (NMAX*INCMAX)
* where NMAX and INCMAX are the maximum values permitted
* for N and INCX.
*
* Y (workspace) REAL array, dimension (NMAX*INCMAX)
* where NMAX and INCMAX are the maximum values permitted
* for N and INCX.
*
* RESLTS (output) REAL array, dimension (LDR1,LDR2,p),
* where p = NLDA*NINC.
* The timing results for each subroutine over the relevant
* values of M, N, K, INCX, and LDA.
*
* LDR1 (input) INTEGER
* The first dimension of RESLTS. LDR1 >= max(1,NM,NK).
*
* LDR2 (input) INTEGER
* The second dimension of RESLTS. LDR2 >= max(1,NN).
*
* NOUT (input) INTEGER
* The unit number for output.
*
* =====================================================================
*
* .. Parameters ..
INTEGER NSUBS
PARAMETER ( NSUBS = 16 )
INTEGER NTRANS, NUPLOS
PARAMETER ( NTRANS = 2, NUPLOS = 2 )
REAL ALPHA, BETA
PARAMETER ( ALPHA = 1.0E0, BETA = 1.0E0 )
* ..
* .. Local Scalars ..
LOGICAL IXANDY
CHARACTER TRANSA, UPLO
CHARACTER*3 PATH
CHARACTER(32) CNAME
INTEGER I, I3, IC, ICL, IINC, IK, ILDA, IM, IMAT, IN,
$ INCX, INFO, ISUB, ITA, IUPLO, J, K, LDA, M, N,
$ NX, NY
REAL OPS, S1, S2, TIME, UNTIME
* ..
* .. Local Arrays ..
LOGICAL TIMSUB( NSUBS )
CHARACTER TRANS( NTRANS ), UPLOS( NUPLOS )
CHARACTER(32) NAMES( NSUBS )
INTEGER LAVAL( 1 )
* ..
* .. External Functions ..
INTEGER ILA_LEN_TRIM
EXTERNAL ILA_LEN_TRIM
REAL SECOND, SMFLOP, SOPBL2
EXTERNAL SECOND, SMFLOP, SOPBL2
* ..
* .. External Subroutines ..
EXTERNAL ATIMCK, ATIMIN, SGBMV, SGEMV, SGER, SPRTBL,
$ SSBMV, SSPMV, SSPR, SSPR2, SSYMV, SSYR, SSYR2,
$ STBMV, STBSV, STIMMG, STPMV, STPSV, STRMV,
$ STRSV
* ..
* .. Intrinsic Functions ..
INTRINSIC REAL
* ..
* .. Data statements ..
DATA TRANS / 'N', 'T' /
DATA UPLOS / 'U', 'L' /
DATA NAMES / 'SGEMV ', 'SGBMV ', 'SSYMV ', 'SSBMV ',
$ 'SSPMV ', 'STRMV ', 'STBMV ', 'STPMV ',
$ 'STRSV ', 'STBSV ', 'STPSV ', 'SGER ',
$ 'SSYR ', 'SSPR ', 'SSYR2 ', 'SSPR2 ' /
* ..
* .. Executable Statements ..
*
* Extract the timing request from the input line.
*
PATH( 1: 1 ) = 'Single precision'
PATH( 2: 3 ) = 'B2'
CALL ATIMIN( PATH, LINE, NSUBS, NAMES, TIMSUB, NOUT, INFO )
IF( INFO.NE.0 )
$ GO TO 1070
*
* Time each routine
*
DO 1060 ISUB = 1, NSUBS
IF( .NOT.TIMSUB( ISUB ) )
$ GO TO 1060
*
* Check the input values. The conditions are
* M <= LDA for general storage
* K <= LDA for banded storage
* N*(N+1)/2 <= LA for packed storage
*
CNAME = NAMES( ISUB )
IF( CNAME( 2: 3 ).EQ.'GE' ) THEN
CALL ATIMCK( 1, CNAME, NM, MVAL, NLDA, LDAVAL, NOUT, INFO )
ELSE IF( CNAME( 3: 3 ).EQ.'B' ) THEN
CALL ATIMCK( 0, CNAME, NK, KVAL, NLDA, LDAVAL, NOUT, INFO )
ELSE IF( CNAME( 3: 3 ).EQ.'P' ) THEN
LAVAL( 1 ) = LA
CALL ATIMCK( 4, CNAME, NN, NVAL, 1, LAVAL, NOUT, INFO )
ELSE
CALL ATIMCK( 2, CNAME, NN, NVAL, NLDA, LDAVAL, NOUT, INFO )
END IF
IF( INFO.GT.0 ) THEN
WRITE( NOUT, FMT = 9999 )CNAME(1:ILA_LEN_TRIM(CNAME))
GO TO 1060
END IF
*
* Print header.
*
WRITE( NOUT, FMT = 9998 )CNAME(1:ILA_LEN_TRIM(CNAME))
IXANDY = ISUB.LE.5 .OR. ISUB.EQ.12 .OR. ISUB.EQ.15 .OR.
$ ISUB.EQ.16
IF( CNAME( 3: 3 ).NE.'P' ) THEN
IF( NLDA*NINC.EQ.1 ) THEN
IF( IXANDY ) THEN
WRITE( NOUT, FMT = 9997 )LDAVAL( 1 ), INCVAL( 1 )
ELSE
WRITE( NOUT, FMT = 9996 )LDAVAL( 1 ), INCVAL( 1 )
END IF
ELSE
DO 20 I = 1, NLDA
DO 10 J = 1, NINC
IF( IXANDY ) THEN
WRITE( NOUT, FMT = 9993 )( I-1 )*NINC + J,
$ LDAVAL( I ), INCVAL( J )
ELSE
WRITE( NOUT, FMT = 9992 )( I-1 )*NINC + J,
$ LDAVAL( I ), INCVAL( J )
END IF
10 CONTINUE
20 CONTINUE
END IF
ELSE
IF( NINC.EQ.1 ) THEN
IF( IXANDY ) THEN
WRITE( NOUT, FMT = 9995 )INCVAL( 1 )
ELSE
WRITE( NOUT, FMT = 9994 )INCVAL( 1 )
END IF
ELSE
DO 30 J = 1, NINC
IF( IXANDY ) THEN
WRITE( NOUT, FMT = 9991 )J, INCVAL( J )
ELSE
WRITE( NOUT, FMT = 9990 )J, INCVAL( J )
END IF
30 CONTINUE
END IF
END IF
*
* Time SGEMV
*
IF( CNAME.EQ.'SGEMV ' ) THEN
DO 100 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
I3 = 0
DO 90 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 80 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 70 IM = 1, NM
M = MVAL( IM )
DO 60 IN = 1, NN
N = NVAL( IN )
IF( TRANSA.EQ.'N' ) THEN
NX = N
NY = M
ELSE
NX = M
NY = N
END IF
CALL STIMMG( 1, M, N, A, LDA, 0, 0 )
CALL STIMMG( 0, 1, NX, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, NY, Y, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
40 CONTINUE
CALL SGEMV( TRANSA, M, N, ALPHA, A, LDA, X,
$ INCX, BETA, Y, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, NY, Y, INCX, 0, 0 )
GO TO 40
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
50 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, NY, Y, INCX, 0, 0 )
GO TO 50
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, M, N, 0, 0 )
RESLTS( IM, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
60 CONTINUE
70 CONTINUE
80 CONTINUE
90 CONTINUE
WRITE( NOUT, FMT = 9989 )TRANSA
CALL SPRTBL( 'M', 'N', NM, MVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
100 CONTINUE
*
ELSE IF( CNAME.EQ.'SGBMV ' ) THEN
*
* Time SGBMV
*
DO 170 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
I3 = 0
DO 160 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 150 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 140 IK = 1, NK
K = KVAL( IK )
DO 130 IN = 1, NN
N = NVAL( IN )
M = N
CALL STIMMG( -2, M, N, A, LDA, K, K )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, M, Y, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
110 CONTINUE
CALL SGBMV( TRANSA, M, N, K, K, ALPHA, A,
$ LDA, X, INCX, BETA, Y, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, M, Y, INCX, 0, 0 )
GO TO 110
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
120 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, M, Y, INCX, 0, 0 )
GO TO 120
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, M, N, K, K )
RESLTS( IK, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
130 CONTINUE
140 CONTINUE
150 CONTINUE
160 CONTINUE
WRITE( NOUT, FMT = 9988 )TRANSA
CALL SPRTBL( 'K', 'N', NK, KVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
170 CONTINUE
*
ELSE IF( CNAME.EQ.'SSYMV ' ) THEN
*
* Time SSYMV
*
DO 230 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 6
IF( UPLO.EQ.'L' )
$ IMAT = -6
I3 = 0
DO 220 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 210 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 200 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
180 CONTINUE
CALL SSYMV( UPLO, N, ALPHA, A, LDA, X, INCX,
$ BETA, Y, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
GO TO 180
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
190 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
GO TO 190
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
200 CONTINUE
210 CONTINUE
220 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
230 CONTINUE
*
ELSE IF( CNAME.EQ.'SSBMV ' ) THEN
*
* Time SSBMV
*
DO 300 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 8
IF( UPLO.EQ.'L' )
$ IMAT = -8
I3 = 0
DO 290 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 280 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 270 IK = 1, NK
K = KVAL( IK )
DO 260 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, LDA, K, K )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
240 CONTINUE
CALL SSBMV( UPLO, N, K, ALPHA, A, LDA, X,
$ INCX, BETA, Y, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
GO TO 240
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
250 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
GO TO 250
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, K, K )
RESLTS( IK, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
260 CONTINUE
270 CONTINUE
280 CONTINUE
290 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( 'K', 'N', NK, KVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
300 CONTINUE
*
ELSE IF( CNAME.EQ.'SSPMV ' ) THEN
*
* Time SSPMV
*
DO 350 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 7
IF( UPLO.EQ.'L' )
$ IMAT = -7
ILDA = 1
LDA = LDAVAL( ILDA )
DO 340 IINC = 1, NINC
INCX = INCVAL( IINC )
DO 330 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0, 0 )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
310 CONTINUE
CALL SSPMV( UPLO, N, ALPHA, A, X, INCX, BETA, Y,
$ INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
GO TO 310
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
320 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
GO TO 320
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, IINC ) = SMFLOP( OPS, TIME, 0 )
330 CONTINUE
340 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC, RESLTS,
$ LDR1, LDR2, NOUT )
350 CONTINUE
*
ELSE IF( CNAME.EQ.'STRMV ' ) THEN
*
* Time STRMV
*
DO 420 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 9
IF( UPLO.EQ.'L' )
$ IMAT = -9
DO 410 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
I3 = 0
DO 400 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 390 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 380 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
360 CONTINUE
CALL STRMV( UPLO, TRANSA, 'Non-unit', N, A,
$ LDA, X, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 360
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
370 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 370
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
380 CONTINUE
390 CONTINUE
400 CONTINUE
WRITE( NOUT, FMT = 9987 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO, TRANSA
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
410 CONTINUE
420 CONTINUE
*
ELSE IF( CNAME.EQ.'STRSV ' ) THEN
*
* Time STRSV
*
DO 490 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 9
IF( UPLO.EQ.'L' )
$ IMAT = -9
DO 480 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
I3 = 0
DO 470 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 460 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 450 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
430 CONTINUE
CALL STRSV( UPLO, TRANSA, 'Non-unit', N, A,
$ LDA, X, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 430
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
440 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 440
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
450 CONTINUE
460 CONTINUE
470 CONTINUE
WRITE( NOUT, FMT = 9987 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO, TRANSA
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
480 CONTINUE
490 CONTINUE
*
ELSE IF( CNAME.EQ.'STBMV ' ) THEN
*
* Time STBMV
*
DO 570 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 11
IF( UPLO.EQ.'L' )
$ IMAT = -11
DO 560 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
I3 = 0
DO 550 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 540 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 530 IK = 1, NK
K = KVAL( IK )
DO 520 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, LDA, K, K )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
500 CONTINUE
CALL STBMV( UPLO, TRANSA, 'Non-unit', N,
$ K, A, LDA, X, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 500
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
510 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 510
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, K, K )
RESLTS( IK, IN, I3 ) = SMFLOP( OPS, TIME,
$ 0 )
520 CONTINUE
530 CONTINUE
540 CONTINUE
550 CONTINUE
WRITE( NOUT, FMT = 9987 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO, TRANSA
CALL SPRTBL( 'K', 'N', NK, KVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
560 CONTINUE
570 CONTINUE
*
ELSE IF( CNAME.EQ.'STBSV ' ) THEN
*
* Time STBSV
*
DO 650 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 11
IF( UPLO.EQ.'L' )
$ IMAT = -11
DO 640 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
I3 = 0
DO 630 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 620 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 610 IK = 1, NK
K = KVAL( IK )
DO 600 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, LDA, K, K )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
580 CONTINUE
CALL STBSV( UPLO, TRANSA, 'Non-unit', N,
$ K, A, LDA, X, INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 580
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
590 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 590
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, K, K )
RESLTS( IK, IN, I3 ) = SMFLOP( OPS, TIME,
$ 0 )
600 CONTINUE
610 CONTINUE
620 CONTINUE
630 CONTINUE
WRITE( NOUT, FMT = 9987 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO, TRANSA
CALL SPRTBL( 'K', 'N', NK, KVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
640 CONTINUE
650 CONTINUE
*
ELSE IF( CNAME.EQ.'STPMV ' ) THEN
*
* Time STPMV
*
DO 710 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 10
IF( UPLO.EQ.'L' )
$ IMAT = -10
DO 700 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
ILDA = 1
LDA = LDAVAL( ILDA )
DO 690 IINC = 1, NINC
INCX = INCVAL( IINC )
DO 680 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0,
$ 0 )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
660 CONTINUE
CALL STPMV( UPLO, TRANSA, 'Non-unit', N, A, X,
$ INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 660
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
670 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 670
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, IINC ) = SMFLOP( OPS, TIME, 0 )
680 CONTINUE
690 CONTINUE
WRITE( NOUT, FMT = 9987 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO, TRANSA
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC,
$ RESLTS, LDR1, LDR2, NOUT )
700 CONTINUE
710 CONTINUE
*
ELSE IF( CNAME.EQ.'STPSV ' ) THEN
*
* Time STPSV
*
DO 770 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 10
IF( UPLO.EQ.'L' )
$ IMAT = -10
DO 760 ITA = 1, NTRANS
TRANSA = TRANS( ITA )
ILDA = 1
LDA = LDAVAL( ILDA )
DO 750 IINC = 1, NINC
INCX = INCVAL( IINC )
DO 740 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0,
$ 0 )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
IC = 0
S1 = SECOND( )
720 CONTINUE
CALL STPSV( UPLO, TRANSA, 'Non-unit', N, A, X,
$ INCX )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 720
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
730 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
GO TO 730
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, IINC ) = SMFLOP( OPS, TIME, 0 )
740 CONTINUE
750 CONTINUE
WRITE( NOUT, FMT = 9987 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO, TRANSA
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC,
$ RESLTS, LDR1, LDR2, NOUT )
760 CONTINUE
770 CONTINUE
*
ELSE IF( CNAME.EQ.'SGER ' ) THEN
*
* Time SGER
*
I3 = 0
DO 830 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 820 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 810 IM = 1, NM
M = MVAL( IM )
DO 800 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( 0, 1, M, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
CALL STIMMG( 1, M, N, A, LDA, 0, 0 )
IC = 0
S1 = SECOND( )
780 CONTINUE
CALL SGER( M, N, ALPHA, X, INCX, Y, INCX, A,
$ LDA )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( 1, M, N, A, LDA, 0, 0 )
GO TO 780
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
790 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( 1, M, N, A, LDA, 0, 0 )
GO TO 790
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, M, N, 0, 0 )
RESLTS( IM, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
800 CONTINUE
810 CONTINUE
820 CONTINUE
830 CONTINUE
WRITE( NOUT, FMT = 9985 )
CALL SPRTBL( 'M', 'N', NM, MVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
*
ELSE IF( CNAME.EQ.'SSYR ' ) THEN
*
* Time SSYR
*
DO 890 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 6
IF( UPLO.EQ.'L' )
$ IMAT = -6
I3 = 0
DO 880 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 870 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 860 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
IC = 0
S1 = SECOND( )
840 CONTINUE
CALL SSYR( UPLO, N, ALPHA, X, INCX, A, LDA )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
GO TO 840
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
850 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
GO TO 850
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
860 CONTINUE
870 CONTINUE
880 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
890 CONTINUE
*
ELSE IF( CNAME.EQ.'SSYR2 ' ) THEN
*
* Time SSYR2
*
DO 950 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 6
IF( UPLO.EQ.'L' )
$ IMAT = -6
I3 = 0
DO 940 ILDA = 1, NLDA
LDA = LDAVAL( ILDA )
DO 930 IINC = 1, NINC
INCX = INCVAL( IINC )
I3 = I3 + 1
DO 920 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
IC = 0
S1 = SECOND( )
900 CONTINUE
CALL SSYR2( UPLO, N, ALPHA, X, INCX, Y, INCX, A,
$ LDA )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
GO TO 900
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
910 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( IMAT, N, N, A, LDA, 0, 0 )
GO TO 910
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, I3 ) = SMFLOP( OPS, TIME, 0 )
920 CONTINUE
930 CONTINUE
940 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC*NLDA,
$ RESLTS, LDR1, LDR2, NOUT )
950 CONTINUE
*
ELSE IF( CNAME.EQ.'SSPR ' ) THEN
*
* Time SSPR
*
DO 1000 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 7
IF( UPLO.EQ.'L' )
$ IMAT = -7
ILDA = 1
LDA = LDAVAL( ILDA )
DO 990 IINC = 1, NINC
INCX = INCVAL( IINC )
DO 980 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0, 0 )
IC = 0
S1 = SECOND( )
960 CONTINUE
CALL SSPR( UPLO, N, ALPHA, X, INCX, A )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0,
$ 0 )
GO TO 960
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
970 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0,
$ 0 )
GO TO 970
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, IINC ) = SMFLOP( OPS, TIME, 0 )
980 CONTINUE
990 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC, RESLTS,
$ LDR1, LDR2, NOUT )
1000 CONTINUE
*
ELSE IF( CNAME.EQ.'SSPR2 ' ) THEN
*
* Time SSPR2
*
DO 1050 IUPLO = 1, NUPLOS
UPLO = UPLOS( IUPLO )
IMAT = 7
IF( UPLO.EQ.'L' )
$ IMAT = -7
ILDA = 1
LDA = LDAVAL( ILDA )
DO 1040 IINC = 1, NINC
INCX = INCVAL( IINC )
DO 1030 IN = 1, NN
N = NVAL( IN )
CALL STIMMG( 0, 1, N, X, INCX, 0, 0 )
CALL STIMMG( 0, 1, N, Y, INCX, 0, 0 )
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0, 0 )
IC = 0
S1 = SECOND( )
1010 CONTINUE
CALL SSPR2( UPLO, N, ALPHA, X, INCX, Y, INCX, A )
S2 = SECOND( )
TIME = S2 - S1
IC = IC + 1
IF( TIME.LT.TIMMIN ) THEN
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0,
$ 0 )
GO TO 1010
END IF
*
* Subtract the time used in STIMMG.
*
ICL = 1
S1 = SECOND( )
1020 CONTINUE
S2 = SECOND( )
UNTIME = S2 - S1
ICL = ICL + 1
IF( ICL.LE.IC ) THEN
CALL STIMMG( IMAT, N, N, A, N*( N+1 ) / 2, 0,
$ 0 )
GO TO 1020
END IF
*
TIME = ( TIME-UNTIME ) / REAL( IC )
OPS = SOPBL2( CNAME, N, N, 0, 0 )
RESLTS( 1, IN, IINC ) = SMFLOP( OPS, TIME, 0 )
1030 CONTINUE
1040 CONTINUE
WRITE( NOUT, FMT = 9986 )
$ CNAME(1:ILA_LEN_TRIM(CNAME)), UPLO
CALL SPRTBL( ' ', 'N', 1, NVAL, NN, NVAL, NINC, RESLTS,
$ LDR1, LDR2, NOUT )
1050 CONTINUE
END IF
WRITE( NOUT, FMT = 9984 )
1060 CONTINUE
1070 CONTINUE
*
9999 FORMAT( 1X, A, ' timing run not attempted', / )
9998 FORMAT( / ' *** Speed of ', A, ' in megaflops ***' )
9997 FORMAT( 5X, 'with LDA = ', I5, ' and INCX = INCY = ', I5 )
9996 FORMAT( 5X, 'with LDA = ', I5, ' and INCX = ', I5 )
9995 FORMAT( 5X, 'with INCX = INCY = ', I5 )
9994 FORMAT( 5X, 'with INCX = ', I5 )
9993 FORMAT( 5X, 'line ', I2, ' with LDA = ', I5,
$ ' and INCX = INCY = ', I5 )
9992 FORMAT( 5X, 'line ', I2, ' with LDA = ', I5, ' and INCX = ', I5 )
9991 FORMAT( 5X, 'line ', I2, ' with INCX = INCY = ', I5 )
9990 FORMAT( 5X, 'line ', I2, ' with INCX = ', I5 )
9989 FORMAT( / 1X, 'SGEMV with TRANS = ''', A1, '''', / )
9988 FORMAT( / 1X, 'SGBMV with TRANS = ''', A1,
$ ''', M = N and KL = K', 'U ', '= K', / )
9987 FORMAT( / 1X, A, ' with UPLO = ''', A1, ''', TRANS = ''', A1,
$ '''', / )
9986 FORMAT( / 1X, A, ' with UPLO = ''', A1, '''', / )
9985 FORMAT( / 1X, 'SGER', / )
9984 FORMAT( / / / / / )
RETURN
*
* End of STIMB2
*
END