UlmBLAS (Level 1)

Wir wollen unsere eigen BLAS Implementierung erstellen. Das erste Ziel ist hierbei:

Schritt: RefBLAS, Test Suite, Verzeichnisse

Wir beginnen mit der Organisation. Folgende Unterverzeichnisse wird es geben:

Aufgabe:

Schritt: Stubs für UlmBLAS

Ein Lösungsvorschlag könnt ist in step2.tgz enthalten. Wenn alles geklappt hat, dann habt ihr in refblas ein Makefile der Art

FC      = gfortran
FFLAGS  += -fimplicit-none

SOURCE_FILES = $(wildcard *.f)
OBJECT_FILES = $(patsubst %.f,%.o,$(SOURCE_FILES))
REFBLAS      = ../librefblas.a

all : $(REFBLAS)

$(REFBLAS) : $(OBJECT_FILES)
    ar cru $(REFBLAS) $(OBJECT_FILES)
    ranlib $(REFBLAS)

%.o : %.f
    $(FC) $(FFLAGS) -c -o $@ $<

clean :
    rm -f $(OBJECT_FILES)
    rm -f $(REFBLAS)

Und ihr könnt folgendes machen:

$shell> cd refblas                                                             
$shell> make                                                                   
make: Nothing to be done for `all'.
$shell> cd ../test                                                             
$shell> make                                                                   
make: Nothing to be done for `all'.
$shell> make check_ref                                                         
rm -f *.SUMM
./dblat1_ref
 Real BLAS Test Program Results
 Test of subprogram number  1             DDOT 
                                    ----- PASS -----
 Test of subprogram number  2            DAXPY 
                                    ----- PASS -----
 Test of subprogram number  3            DROTG 
                                    ----- PASS -----
 Test of subprogram number  4             DROT 
                                    ----- PASS -----
 Test of subprogram number  5            DCOPY 
                                    ----- PASS -----
 Test of subprogram number  6            DSWAP 
                                    ----- PASS -----
 Test of subprogram number  7            DNRM2 
                                    ----- PASS -----
 Test of subprogram number  8            DASUM 
                                    ----- PASS -----
 Test of subprogram number  9            DSCAL 
                                    ----- PASS -----
 Test of subprogram number 10            IDAMAX
                                    ----- PASS -----

Dass die Referenz Implementierung Warnungen liefert ist nicht unsere Schuld.

Aufgabe:

double
ddot_(const int     *_n,
      const double  *x,
      const int     *_incX,
      const double  *y,
      const int     *_incY)
{
}
void
daxpy_(const int     *n,
       const double  *alpha,
       const double  *x,
       const double  *incX,
       double        *y,
       int           *incY)
{
}

Schritt: Erste UlmBLAS Implementierung und Tests

Ein Lösungsvorschlag für die vorige Aufagbe ist in step3.tgz enthalten.

Jetzt wird es Zeit mit der UlmBLAS Implementierung zu beginnen. Für ddot könnte die so aussehen:

double
ddot_(const int     *_n,
      const double  *x,
      const int     *_incX,
      const double  *y,
      const int     *_incY)
{
    int n    = *_n;
    int incX = *_incX;
    int incY = *_incY;

    int    i;
    double result = 0.0;

    if (incX<0) {
        x -= incX*(n-1);
    }
    if (incY<0) {
        y -= incY*(n-1);
    }
    for (i=0; i<n; ++i, x+=incX, y+=incY) {
        result += (*x) * (*y);
    }

    return result;
}

Diese besteht auf den ersten Test (alle anderen test gehen natürlich noch schief):

$shell> cd level1                                                              
$shell> make                                                                   
make: Nothing to be done for `all'.
$shell> cd ../refblas                                                          
$shell> make                                                                   
make: Nothing to be done for `all'.
$shell> cd ../test                                                             
$shell> make                                                                   
make: Nothing to be done for `all'.
$shell> make check_ulm                                                         
rm -f *.SUMM
./dblat1_ulm
 Real BLAS Test Program Results
 Test of subprogram number  1             DDOT 
                                    ----- PASS -----
 Test of subprogram number  2            DAXPY 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    2  1    1    1 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  2    1    1 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  2    1    1 9999  2                     -0.90000000D+00                     -0.87000000D+00 -0.3000D-01  0.1170D+01
    2  4    1    1 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  4    1    1 9999  2                     -0.90000000D+00                     -0.87000000D+00 -0.3000D-01  0.1170D+01
    2  4    1    1 9999  3                      0.30000000D+00                      0.15000000D+00  0.1500D+00  0.1170D+01
    2  4    1    1 9999  4                      0.70000000D+00                      0.94000000D+00 -0.2400D+00  0.1170D+01
    2  1    2   -2 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  2    2   -2 9999  1                      0.50000000D+00                      0.35000000D+00  0.1500D+00  0.1170D+01
    2  2    2   -2 9999  3                      0.30000000D+00                      0.48000000D+00 -0.1800D+00  0.1170D+01
    2  4    2   -2 9999  1                      0.50000000D+00                      0.38000000D+00  0.1200D+00  0.1170D+01
    2  4    2   -2 9999  3                      0.30000000D+00                      0.57000000D+00 -0.2700D+00  0.1170D+01
    2  4    2   -2 9999  5                     -0.60000000D+00                     -0.75000000D+00  0.1500D+00  0.1170D+01
    2  4    2   -2 9999  7                      0.80000000D+00                      0.98000000D+00 -0.1800D+00  0.1170D+01
    2  1   -2    1 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  2   -2    1 9999  1                      0.50000000D+00                      0.35000000D+00  0.1500D+00  0.1170D+01
    2  2   -2    1 9999  2                     -0.90000000D+00                     -0.72000000D+00 -0.1800D+00  0.1170D+01
    2  4   -2    1 9999  1                      0.50000000D+00                      0.38000000D+00  0.1200D+00  0.1170D+01
    2  4   -2    1 9999  2                     -0.90000000D+00                     -0.63000000D+00 -0.2700D+00  0.1170D+01
    2  4   -2    1 9999  3                      0.30000000D+00                      0.15000000D+00  0.1500D+00  0.1170D+01
    2  4   -2    1 9999  4                      0.70000000D+00                      0.88000000D+00 -0.1800D+00  0.1170D+01
    2  1   -1   -2 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  2   -1   -2 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  2   -1   -2 9999  3                      0.30000000D+00                      0.33000000D+00 -0.3000D-01  0.1170D+01
    2  4   -1   -2 9999  1                      0.50000000D+00                      0.68000000D+00 -0.1800D+00  0.1170D+01
    2  4   -1   -2 9999  3                      0.30000000D+00                      0.33000000D+00 -0.3000D-01  0.1170D+01
    2  4   -1   -2 9999  5                     -0.60000000D+00                     -0.75000000D+00  0.1500D+00  0.1170D+01
    2  4   -1   -2 9999  7                      0.80000000D+00                      0.10400000D+01 -0.2400D+00  0.1170D+01
 Test of subprogram number  3            DROTG 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    3  1 9999 9999 9999  1                      0.30000000D+00                      0.50000000D+00 -0.2000D+00  0.5000D+00
    3  1 9999 9999 9999  1                      0.40000000D+00                      0.16666667D+01 -0.1267D+01  0.1667D+01
    3  1 9999 9999 9999  1                      0.42439916-313                      0.60000000D+00 -0.6000D+00  0.6000D+00
    3  1 9999 9999 9999  1                      0.15576089-312                      0.80000000D+00 -0.8000D+00  0.8000D+00
    3  2 9999 9999 9999  1                      0.40000000D+00                      0.50000000D+00 -0.1000D+00  0.5000D+00
    3  2 9999 9999 9999  1                      0.30000000D+00                      0.60000000D+00 -0.3000D+00  0.6000D+00
    3  2 9999 9999 9999  1                      0.42439916-313                      0.80000000D+00 -0.8000D+00  0.8000D+00
    3  2 9999 9999 9999  1                      0.15576089-312                      0.60000000D+00 -0.6000D+00  0.6000D+00
    3  3 9999 9999 9999  1                     -0.30000000D+00                      0.50000000D+00 -0.8000D+00  0.5000D+00
    3  3 9999 9999 9999  1                      0.40000000D+00                     -0.16666667D+01  0.2067D+01 -0.1667D+01
    3  3 9999 9999 9999  1                      0.42439916-313                     -0.60000000D+00  0.6000D+00 -0.6000D+00
    3  3 9999 9999 9999  1                      0.15576089-312                      0.80000000D+00 -0.8000D+00  0.8000D+00
    3  4 9999 9999 9999  1                     -0.40000000D+00                     -0.50000000D+00  0.1000D+00 -0.5000D+00
    3  4 9999 9999 9999  1                      0.30000000D+00                     -0.60000000D+00  0.9000D+00 -0.6000D+00
    3  4 9999 9999 9999  1                      0.42439916-313                      0.80000000D+00 -0.8000D+00  0.8000D+00
    3  4 9999 9999 9999  1                      0.15576089-312                     -0.60000000D+00  0.6000D+00 -0.6000D+00
    3  5 9999 9999 9999  1                     -0.30000000D+00                     -0.50000000D+00  0.2000D+00 -0.5000D+00
    3  5 9999 9999 9999  1                     -0.40000000D+00                      0.16666667D+01 -0.2067D+01  0.1667D+01
    3  5 9999 9999 9999  1                      0.42439916-313                      0.60000000D+00 -0.6000D+00  0.6000D+00
    3  5 9999 9999 9999  1                      0.15576089-312                      0.80000000D+00 -0.8000D+00  0.8000D+00
    3  6 9999 9999 9999  1                      0.42439916-313                      0.10000000D+01 -0.1000D+01  0.1000D+01
    3  6 9999 9999 9999  1                      0.15576089-312                      0.00000000D+00  0.1558-312  0.0000D+00
    3  7 9999 9999 9999  1                      0.00000000D+00                      0.10000000D+01 -0.1000D+01  0.1000D+01
    3  7 9999 9999 9999  1                      0.42439916-313                      0.00000000D+00  0.4244-313  0.0000D+00
    3  7 9999 9999 9999  1                      0.15576089-312                      0.10000000D+01 -0.1000D+01  0.1000D+01
    3  8 9999 9999 9999  1                      0.42439916-313                      0.10000000D+01 -0.1000D+01  0.1000D+01
    3  8 9999 9999 9999  1                      0.15576089-312                      0.00000000D+00  0.1558-312  0.0000D+00
 Test of subprogram number  4             DROT 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    4  1    1    1 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  1    1    1 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  2    1    1 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  2    1    1 9999  2                      0.10000000D+00                     -0.46000000D+00  0.5600D+00  0.1170D+01
    4  2    1    1 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  2    1    1 9999  2                     -0.90000000D+00                     -0.78000000D+00 -0.1200D+00  0.1170D+01
    4  4    1    1 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  4    1    1 9999  2                      0.10000000D+00                     -0.46000000D+00  0.5600D+00  0.1170D+01
    4  4    1    1 9999  3                     -0.50000000D+00                     -0.22000000D+00 -0.2800D+00  0.1170D+01
    4  4    1    1 9999  4                      0.80000000D+00                      0.10600000D+01 -0.2600D+00  0.1170D+01
    4  4    1    1 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  4    1    1 9999  2                     -0.90000000D+00                     -0.78000000D+00 -0.1200D+00  0.1170D+01
    4  4    1    1 9999  3                      0.30000000D+00                      0.54000000D+00 -0.2400D+00  0.1170D+01
    4  4    1    1 9999  4                      0.70000000D+00                      0.80000000D-01  0.6200D+00  0.1170D+01
    4  1    2   -2 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  1    2   -2 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  2    2   -2 9999  1                      0.60000000D+00                      0.66000000D+00 -0.6000D-01  0.1170D+01
    4  2    2   -2 9999  3                     -0.50000000D+00                     -0.10000000D+00 -0.4000D+00  0.1170D+01
    4  2    2   -2 9999  1                      0.50000000D+00                      0.70000000D+00 -0.2000D+00  0.1170D+01
    4  2    2   -2 9999  3                      0.30000000D+00                     -0.12000000D+00  0.4200D+00  0.1170D+01
    4  4    2   -2 9999  1                      0.60000000D+00                      0.96000000D+00 -0.3600D+00  0.1170D+01
    4  4    2   -2 9999  3                     -0.50000000D+00                     -0.76000000D+00  0.2600D+00  0.1170D+01
    4  4    2   -2 9999  7                     -0.40000000D+00                     -0.20000000D-01 -0.3800D+00  0.1170D+01
    4  4    2   -2 9999  1                      0.50000000D+00                      0.64000000D+00 -0.1400D+00  0.1170D+01
    4  4    2   -2 9999  3                      0.30000000D+00                     -0.30000000D+00  0.6000D+00  0.1170D+01
    4  4    2   -2 9999  5                     -0.60000000D+00                     -0.18000000D+00 -0.4200D+00  0.1170D+01
    4  4    2   -2 9999  7                      0.80000000D+00                      0.28000000D+00  0.5200D+00  0.1170D+01
    4  1   -2    1 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  1   -2    1 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  2   -2    1 9999  1                      0.60000000D+00                     -0.60000000D-01  0.6600D+00  0.1170D+01
    4  2   -2    1 9999  3                     -0.50000000D+00                     -0.10000000D+00 -0.4000D+00  0.1170D+01
    4  2   -2    1 9999  1                      0.50000000D+00                      0.70000000D+00 -0.2000D+00  0.1170D+01
    4  2   -2    1 9999  2                     -0.90000000D+00                     -0.10800000D+01  0.1800D+00  0.1170D+01
    4  4   -2    1 9999  1                      0.60000000D+00                      0.90000000D+00 -0.3000D+00  0.1170D+01
    4  4   -2    1 9999  3                     -0.50000000D+00                     -0.22000000D+00 -0.2800D+00  0.1170D+01
    4  4   -2    1 9999  5                      0.90000000D+00                      0.18000000D+00  0.7200D+00  0.1170D+01
    4  4   -2    1 9999  7                     -0.40000000D+00                     -0.20000000D-01 -0.3800D+00  0.1170D+01
    4  4   -2    1 9999  1                      0.50000000D+00                      0.64000000D+00 -0.1400D+00  0.1170D+01
    4  4   -2    1 9999  2                     -0.90000000D+00                     -0.12600000D+01  0.3600D+00  0.1170D+01
    4  4   -2    1 9999  3                      0.30000000D+00                      0.54000000D+00 -0.2400D+00  0.1170D+01
    4  4   -2    1 9999  4                      0.70000000D+00                      0.20000000D+00  0.5000D+00  0.1170D+01
    4  1   -1   -2 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  1   -1   -2 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  2   -1   -2 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  2   -1   -2 9999  2                      0.10000000D+00                      0.26000000D+00 -0.1600D+00  0.1170D+01
    4  2   -1   -2 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  2   -1   -2 9999  3                      0.30000000D+00                      0.18000000D+00  0.1200D+00  0.1170D+01
    4  4   -1   -2 9999  1                      0.60000000D+00                      0.78000000D+00 -0.1800D+00  0.1170D+01
    4  4   -1   -2 9999  2                      0.10000000D+00                      0.26000000D+00 -0.1600D+00  0.1170D+01
    4  4   -1   -2 9999  3                     -0.50000000D+00                     -0.76000000D+00  0.2600D+00  0.1170D+01
    4  4   -1   -2 9999  4                      0.80000000D+00                      0.11200000D+01 -0.3200D+00  0.1170D+01
    4  4   -1   -2 9999  1                      0.50000000D+00                      0.40000000D-01  0.4600D+00  0.1170D+01
    4  4   -1   -2 9999  3                      0.30000000D+00                      0.18000000D+00  0.1200D+00  0.1170D+01
    4  4   -1   -2 9999  5                     -0.60000000D+00                     -0.18000000D+00 -0.4200D+00  0.1170D+01
    4  4   -1   -2 9999  7                      0.80000000D+00                      0.16000000D+00  0.6400D+00  0.1170D+01
    4  4    1    1 9999  1                      0.10000000D+01                     -0.10000000D+01  0.2000D+01 -0.1000D+01
    4  4    1    1 9999  2                      0.20000000D+01                     -0.20000000D+01  0.4000D+01 -0.2000D+01
    4  4    1    1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4    1    1 9999  4                      0.40000000D+01                     -0.40000000D+01  0.8000D+01 -0.4000D+01
    4  4    1    1 9999  5                      0.50000000D+01                     -0.50000000D+01  0.1000D+02 -0.5000D+01
    4  4    1   -1 9999  1                      0.10000000D+01                      0.50000000D+01 -0.4000D+01  0.5000D+01
    4  4    1   -1 9999  2                      0.20000000D+01                      0.40000000D+01 -0.2000D+01  0.4000D+01
    4  4    1   -1 9999  4                      0.40000000D+01                      0.20000000D+01  0.2000D+01  0.2000D+01
    4  4    1   -1 9999  5                      0.50000000D+01                      0.10000000D+01  0.4000D+01  0.1000D+01
    4  4    1   -1 9999  1                      0.10000000D+01                     -0.50000000D+01  0.6000D+01 -0.5000D+01
    4  4    1   -1 9999  2                      0.20000000D+01                     -0.40000000D+01  0.6000D+01 -0.4000D+01
    4  4    1   -1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4    1   -1 9999  4                      0.40000000D+01                     -0.20000000D+01  0.6000D+01 -0.2000D+01
    4  4    1   -1 9999  5                      0.50000000D+01                     -0.10000000D+01  0.6000D+01 -0.1000D+01
    4  4   -1   -1 9999  1                      0.10000000D+01                     -0.10000000D+01  0.2000D+01 -0.1000D+01
    4  4   -1   -1 9999  2                      0.20000000D+01                     -0.20000000D+01  0.4000D+01 -0.2000D+01
    4  4   -1   -1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4   -1   -1 9999  4                      0.40000000D+01                     -0.40000000D+01  0.8000D+01 -0.4000D+01
    4  4   -1   -1 9999  5                      0.50000000D+01                     -0.50000000D+01  0.1000D+02 -0.5000D+01
    4  4    1    2 9999  2                      0.20000000D+01                      0.30000000D+01 -0.1000D+01  0.3000D+01
    4  4    1    2 9999  3                      0.30000000D+01                      0.50000000D+01 -0.2000D+01  0.5000D+01
    4  4    1    2 9999  1                      0.10000000D+01                     -0.10000000D+01  0.2000D+01 -0.1000D+01
    4  4    1    2 9999  3                      0.30000000D+01                     -0.20000000D+01  0.5000D+01 -0.2000D+01
    4  4    1    2 9999  5                      0.50000000D+01                     -0.30000000D+01  0.8000D+01 -0.3000D+01
    4  4   -1    1 9999  1                      0.10000000D+01                      0.50000000D+01 -0.4000D+01  0.5000D+01
    4  4   -1    1 9999  2                      0.20000000D+01                      0.40000000D+01 -0.2000D+01  0.4000D+01
    4  4   -1    1 9999  4                      0.40000000D+01                      0.20000000D+01  0.2000D+01  0.2000D+01
    4  4   -1    1 9999  5                      0.50000000D+01                      0.10000000D+01  0.4000D+01  0.1000D+01
    4  4   -1    1 9999  1                      0.10000000D+01                     -0.50000000D+01  0.6000D+01 -0.5000D+01
    4  4   -1    1 9999  2                      0.20000000D+01                     -0.40000000D+01  0.6000D+01 -0.4000D+01
    4  4   -1    1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4   -1    1 9999  4                      0.40000000D+01                     -0.20000000D+01  0.6000D+01 -0.2000D+01
    4  4   -1    1 9999  5                      0.50000000D+01                     -0.10000000D+01  0.6000D+01 -0.1000D+01
    4  4    1    1 9999  1                      0.10000000D+01                     -0.10000000D+01  0.2000D+01 -0.1000D+01
    4  4    1    1 9999  2                      0.20000000D+01                     -0.20000000D+01  0.4000D+01 -0.2000D+01
    4  4    1    1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4    1    1 9999  4                      0.40000000D+01                     -0.40000000D+01  0.8000D+01 -0.4000D+01
    4  4    1    1 9999  5                      0.50000000D+01                     -0.50000000D+01  0.1000D+02 -0.5000D+01
    4  4    1   -1 9999  1                      0.10000000D+01                     -0.50000000D+01  0.6000D+01 -0.5000D+01
    4  4    1   -1 9999  2                      0.20000000D+01                     -0.40000000D+01  0.6000D+01 -0.4000D+01
    4  4    1   -1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4    1   -1 9999  4                      0.40000000D+01                     -0.20000000D+01  0.6000D+01 -0.2000D+01
    4  4    1   -1 9999  5                      0.50000000D+01                     -0.10000000D+01  0.6000D+01 -0.1000D+01
    4  4    1   -1 9999  1                      0.10000000D+01                      0.50000000D+01 -0.4000D+01  0.5000D+01
    4  4    1   -1 9999  2                      0.20000000D+01                      0.40000000D+01 -0.2000D+01  0.4000D+01
    4  4    1   -1 9999  4                      0.40000000D+01                      0.20000000D+01  0.2000D+01  0.2000D+01
    4  4    1   -1 9999  5                      0.50000000D+01                      0.10000000D+01  0.4000D+01  0.1000D+01
    4  4   -1   -1 9999  1                      0.10000000D+01                     -0.10000000D+01  0.2000D+01 -0.1000D+01
    4  4   -1   -1 9999  2                      0.20000000D+01                     -0.20000000D+01  0.4000D+01 -0.2000D+01
    4  4   -1   -1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4   -1   -1 9999  4                      0.40000000D+01                     -0.40000000D+01  0.8000D+01 -0.4000D+01
    4  4   -1   -1 9999  5                      0.50000000D+01                     -0.50000000D+01  0.1000D+02 -0.5000D+01
    4  4    1    2 9999  1                      0.10000000D+01                     -0.10000000D+01  0.2000D+01 -0.1000D+01
    4  4    1    2 9999  2                      0.20000000D+01                     -0.30000000D+01  0.5000D+01 -0.3000D+01
    4  4    1    2 9999  3                      0.30000000D+01                     -0.50000000D+01  0.8000D+01 -0.5000D+01
    4  4    1    2 9999  3                      0.30000000D+01                      0.20000000D+01  0.1000D+01  0.2000D+01
    4  4    1    2 9999  5                      0.50000000D+01                      0.30000000D+01  0.2000D+01  0.3000D+01
    4  4   -1    1 9999  1                      0.10000000D+01                     -0.50000000D+01  0.6000D+01 -0.5000D+01
    4  4   -1    1 9999  2                      0.20000000D+01                     -0.40000000D+01  0.6000D+01 -0.4000D+01
    4  4   -1    1 9999  3                      0.30000000D+01                     -0.30000000D+01  0.6000D+01 -0.3000D+01
    4  4   -1    1 9999  4                      0.40000000D+01                     -0.20000000D+01  0.6000D+01 -0.2000D+01
    4  4   -1    1 9999  5                      0.50000000D+01                     -0.10000000D+01  0.6000D+01 -0.1000D+01
    4  4   -1    1 9999  1                      0.10000000D+01                      0.50000000D+01 -0.4000D+01  0.5000D+01
    4  4   -1    1 9999  2                      0.20000000D+01                      0.40000000D+01 -0.2000D+01  0.4000D+01
    4  4   -1    1 9999  4                      0.40000000D+01                      0.20000000D+01  0.2000D+01  0.2000D+01
    4  4   -1    1 9999  5                      0.50000000D+01                      0.10000000D+01  0.4000D+01  0.1000D+01
 Test of subprogram number  5            DCOPY 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    5  1    1    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  2    1    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  2    1    1 9999  2                     -0.90000000D+00                      0.10000000D+00 -0.1000D+01  0.0000D+00
    5  4    1    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  4    1    1 9999  2                     -0.90000000D+00                      0.10000000D+00 -0.1000D+01  0.0000D+00
    5  4    1    1 9999  3                      0.30000000D+00                     -0.50000000D+00  0.8000D+00  0.0000D+00
    5  4    1    1 9999  4                      0.70000000D+00                      0.80000000D+00 -0.1000D+00  0.0000D+00
    5  1    2   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  2    2   -2 9999  1                      0.50000000D+00                     -0.50000000D+00  0.1000D+01  0.0000D+00
    5  2    2   -2 9999  3                      0.30000000D+00                      0.60000000D+00 -0.3000D+00  0.0000D+00
    5  4    2   -2 9999  1                      0.50000000D+00                     -0.40000000D+00  0.9000D+00  0.0000D+00
    5  4    2   -2 9999  3                      0.30000000D+00                      0.90000000D+00 -0.6000D+00  0.0000D+00
    5  4    2   -2 9999  5                     -0.60000000D+00                     -0.50000000D+00 -0.1000D+00  0.0000D+00
    5  4    2   -2 9999  7                      0.80000000D+00                      0.60000000D+00  0.2000D+00  0.0000D+00
    5  1   -2    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  2   -2    1 9999  1                      0.50000000D+00                     -0.50000000D+00  0.1000D+01  0.0000D+00
    5  2   -2    1 9999  2                     -0.90000000D+00                      0.60000000D+00 -0.1500D+01  0.0000D+00
    5  4   -2    1 9999  1                      0.50000000D+00                     -0.40000000D+00  0.9000D+00  0.0000D+00
    5  4   -2    1 9999  2                     -0.90000000D+00                      0.90000000D+00 -0.1800D+01  0.0000D+00
    5  4   -2    1 9999  3                      0.30000000D+00                     -0.50000000D+00  0.8000D+00  0.0000D+00
    5  4   -2    1 9999  4                      0.70000000D+00                      0.60000000D+00  0.1000D+00  0.0000D+00
    5  1   -1   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  2   -1   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  2   -1   -2 9999  3                      0.30000000D+00                      0.10000000D+00  0.2000D+00  0.0000D+00
    5  4   -1   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    5  4   -1   -2 9999  3                      0.30000000D+00                      0.10000000D+00  0.2000D+00  0.0000D+00
    5  4   -1   -2 9999  5                     -0.60000000D+00                     -0.50000000D+00 -0.1000D+00  0.0000D+00
 Test of subprogram number  6            DSWAP 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    6  1    1    1 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  1    1    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  2    1    1 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  2    1    1 9999  2                      0.10000000D+00                     -0.90000000D+00  0.1000D+01  0.0000D+00
    6  2    1    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  2    1    1 9999  2                     -0.90000000D+00                      0.10000000D+00 -0.1000D+01  0.0000D+00
    6  4    1    1 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  4    1    1 9999  2                      0.10000000D+00                     -0.90000000D+00  0.1000D+01  0.0000D+00
    6  4    1    1 9999  3                     -0.50000000D+00                      0.30000000D+00 -0.8000D+00  0.0000D+00
    6  4    1    1 9999  4                      0.80000000D+00                      0.70000000D+00  0.1000D+00  0.0000D+00
    6  4    1    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  4    1    1 9999  2                     -0.90000000D+00                      0.10000000D+00 -0.1000D+01  0.0000D+00
    6  4    1    1 9999  3                      0.30000000D+00                     -0.50000000D+00  0.8000D+00  0.0000D+00
    6  4    1    1 9999  4                      0.70000000D+00                      0.80000000D+00 -0.1000D+00  0.0000D+00
    6  1    2   -2 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  1    2   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  2    2   -2 9999  1                      0.60000000D+00                      0.30000000D+00  0.3000D+00  0.0000D+00
    6  2    2   -2 9999  3                     -0.50000000D+00                      0.50000000D+00 -0.1000D+01  0.0000D+00
    6  2    2   -2 9999  1                      0.50000000D+00                     -0.50000000D+00  0.1000D+01  0.0000D+00
    6  2    2   -2 9999  3                      0.30000000D+00                      0.60000000D+00 -0.3000D+00  0.0000D+00
    6  4    2   -2 9999  1                      0.60000000D+00                      0.80000000D+00 -0.2000D+00  0.0000D+00
    6  4    2   -2 9999  3                     -0.50000000D+00                     -0.60000000D+00  0.1000D+00  0.0000D+00
    6  4    2   -2 9999  5                      0.90000000D+00                      0.30000000D+00  0.6000D+00  0.0000D+00
    6  4    2   -2 9999  7                     -0.40000000D+00                      0.50000000D+00 -0.9000D+00  0.0000D+00
    6  4    2   -2 9999  1                      0.50000000D+00                     -0.40000000D+00  0.9000D+00  0.0000D+00
    6  4    2   -2 9999  3                      0.30000000D+00                      0.90000000D+00 -0.6000D+00  0.0000D+00
    6  4    2   -2 9999  5                     -0.60000000D+00                     -0.50000000D+00 -0.1000D+00  0.0000D+00
    6  4    2   -2 9999  7                      0.80000000D+00                      0.60000000D+00  0.2000D+00  0.0000D+00
    6  1   -2    1 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  1   -2    1 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  2   -2    1 9999  1                      0.60000000D+00                     -0.90000000D+00  0.1500D+01  0.0000D+00
    6  2   -2    1 9999  3                     -0.50000000D+00                      0.50000000D+00 -0.1000D+01  0.0000D+00
    6  2   -2    1 9999  1                      0.50000000D+00                     -0.50000000D+00  0.1000D+01  0.0000D+00
    6  2   -2    1 9999  2                     -0.90000000D+00                      0.60000000D+00 -0.1500D+01  0.0000D+00
    6  4   -2    1 9999  1                      0.60000000D+00                      0.70000000D+00 -0.1000D+00  0.0000D+00
    6  4   -2    1 9999  3                     -0.50000000D+00                      0.30000000D+00 -0.8000D+00  0.0000D+00
    6  4   -2    1 9999  5                      0.90000000D+00                     -0.90000000D+00  0.1800D+01  0.0000D+00
    6  4   -2    1 9999  7                     -0.40000000D+00                      0.50000000D+00 -0.9000D+00  0.0000D+00
    6  4   -2    1 9999  1                      0.50000000D+00                     -0.40000000D+00  0.9000D+00  0.0000D+00
    6  4   -2    1 9999  2                     -0.90000000D+00                      0.90000000D+00 -0.1800D+01  0.0000D+00
    6  4   -2    1 9999  3                      0.30000000D+00                     -0.50000000D+00  0.8000D+00  0.0000D+00
    6  4   -2    1 9999  4                      0.70000000D+00                      0.60000000D+00  0.1000D+00  0.0000D+00
    6  1   -1   -2 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  1   -1   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  2   -1   -2 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  2   -1   -2 9999  2                      0.10000000D+00                      0.30000000D+00 -0.2000D+00  0.0000D+00
    6  2   -1   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  2   -1   -2 9999  3                      0.30000000D+00                      0.10000000D+00  0.2000D+00  0.0000D+00
    6  4   -1   -2 9999  1                      0.60000000D+00                      0.50000000D+00  0.1000D+00  0.0000D+00
    6  4   -1   -2 9999  2                      0.10000000D+00                      0.30000000D+00 -0.2000D+00  0.0000D+00
    6  4   -1   -2 9999  3                     -0.50000000D+00                     -0.60000000D+00  0.1000D+00  0.0000D+00
    6  4   -1   -2 9999  1                      0.50000000D+00                      0.60000000D+00 -0.1000D+00  0.0000D+00
    6  4   -1   -2 9999  3                      0.30000000D+00                      0.10000000D+00  0.2000D+00  0.0000D+00
    6  4   -1   -2 9999  5                     -0.60000000D+00                     -0.50000000D+00 -0.1000D+00  0.0000D+00
 Test of subprogram number  7            DNRM2 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    7  1    1 9999 9999  1                      0.00000000D+00                      0.30000000D+00 -0.3000D+00  0.3000D+00
    7  2    1 9999 9999  1                      0.00000000D+00                      0.50000000D+00 -0.5000D+00  0.5000D+00
    7  3    1 9999 9999  1                      0.00000000D+00                      0.70000000D+00 -0.7000D+00  0.7000D+00
    7  4    1 9999 9999  1                      0.00000000D+00                      0.60000000D+00 -0.6000D+00  0.6000D+00
    7  1    2 9999 9999  1                      0.00000000D+00                      0.30000000D+00 -0.3000D+00  0.3000D+00
    7  2    2 9999 9999  1                      0.00000000D+00                      0.50000000D+00 -0.5000D+00  0.5000D+00
    7  3    2 9999 9999  1                      0.00000000D+00                      0.70000000D+00 -0.7000D+00  0.7000D+00
    7  4    2 9999 9999  1                      0.00000000D+00                      0.60000000D+00 -0.6000D+00  0.6000D+00
 Test of subprogram number  8            DASUM 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    8  1    1 9999 9999  1                      0.00000000D+00                      0.30000000D+00 -0.3000D+00  0.3000D+00
    8  2    1 9999 9999  1                      0.00000000D+00                      0.70000000D+00 -0.7000D+00  0.7000D+00
    8  3    1 9999 9999  1                      0.00000000D+00                      0.11000000D+01 -0.1100D+01  0.1100D+01
    8  4    1 9999 9999  1                      0.00000000D+00                      0.10000000D+01 -0.1000D+01  0.1000D+01
    8  1    2 9999 9999  1                      0.00000000D+00                      0.30000000D+00 -0.3000D+00  0.3000D+00
    8  2    2 9999 9999  1                      0.00000000D+00                      0.70000000D+00 -0.7000D+00  0.7000D+00
    8  3    2 9999 9999  1                      0.00000000D+00                      0.11000000D+01 -0.1100D+01  0.1100D+01
    8  4    2 9999 9999  1                      0.00000000D+00                      0.10000000D+01 -0.1000D+01  0.1000D+01
 Test of subprogram number  9            DSCAL 
                                       FAIL
 CASE  N INCX INCY MODE  I                             COMP(I)                             TRUE(I)  DIFFERENCE     SIZE(I)
    9  1    1 9999 9999  1                      0.30000000D+00                     -0.30000000D+00  0.6000D+00 -0.3000D+00
    9  2    1 9999 9999  1                      0.30000000D+00                      0.00000000D+00  0.3000D+00  0.0000D+00
    9  2    1 9999 9999  2                     -0.40000000D+00                      0.00000000D+00 -0.4000D+00  0.0000D+00
    9  4    1 9999 9999  1                      0.10000000D+00                      0.30000000D-01  0.7000D-01  0.3000D-01
    9  4    1 9999 9999  2                     -0.30000000D+00                     -0.90000000D-01 -0.2100D+00 -0.9000D-01
    9  4    1 9999 9999  3                      0.50000000D+00                      0.15000000D+00  0.3500D+00  0.1500D+00
    9  4    1 9999 9999  4                     -0.10000000D+00                     -0.30000000D-01 -0.7000D-01 -0.3000D-01
    9  1    2 9999 9999  1                      0.30000000D+00                      0.90000000D-01  0.2100D+00  0.9000D-01
    9  2    2 9999 9999  1                      0.30000000D+00                      0.90000000D-01  0.2100D+00  0.9000D-01
    9  2    2 9999 9999  3                     -0.40000000D+00                     -0.12000000D+00 -0.2800D+00 -0.1200D+00
    9  3    2 9999 9999  1                      0.20000000D+00                      0.60000000D-01  0.1400D+00  0.6000D-01
    9  3    2 9999 9999  3                     -0.60000000D+00                     -0.18000000D+00 -0.4200D+00 -0.1800D+00
    9  3    2 9999 9999  5                      0.30000000D+00                      0.90000000D-01  0.2100D+00  0.9000D-01
    9  4    2 9999 9999  1                      0.10000000D+00                      0.30000000D-01  0.7000D-01  0.3000D-01
    9  4    2 9999 9999  3                     -0.30000000D+00                     -0.90000000D-01 -0.2100D+00 -0.9000D-01
    9  4    2 9999 9999  5                     -0.50000000D+00                     -0.15000000D+00 -0.3500D+00 -0.1500D+00
    9  4    2 9999 9999  7                     -0.10000000D+00                     -0.30000000D-01 -0.7000D-01 -0.3000D-01
 Test of subprogram number 10            IDAMAX
                                       FAIL
 CASE  N INCX INCY MODE                                COMP                                TRUE     DIFFERENCE
   10  0    1 9999 9999                                   1                                   0           1
   10  2    1 9999 9999                                   1                                   2          -1
   10  3    1 9999 9999                                   1                                   2          -1
   10  4    1 9999 9999                                   1                                   3          -2
   10  0    2 9999 9999                                   1                                   0           1
   10  2    2 9999 9999                                   1                                   2          -1
   10  3    2 9999 9999                                   1                                   2          -1
   10  4    2 9999 9999                                   1                                   3          -2