LAPACK Archives

[Lapack] Convention of BLAS inside of Lapack

Dear Sirs,

I have the following quandery.  I have downloaded both CBLAS and CLAPACK which
uses the f2c version of BLAS.  I cannot help but get the impression that these
two different versions of BLAS follow a different convention.

For matrix multiplication, I looked at sgemm.

Using CBLAS, I could get C = A*B

However, to get an equivalent result, I had in effect to compute C^T = A^T*B^T 
i.e. C = B*A
The code is shown below the =====

All the other settings are the same, as far as I can tell.

Are not the versions of BLAS, the same?

best wishes and thanks in advance for any feedback,

Tony Scott
RWTH-Aachen
Germany





================================

E.g. Using CBLAS with ATLAS and the following routine:


#include <stdio.h>
#include </users/tonys/BLAS/cblas.h>
     int
     main (void)
     {
        /*int lda = 3; float A[] = { 0.11, 0.12, 0.13, 0.21, 0.22, 0.23 };*/
       int lda = 2;
       float A[] = { 0.11, 0.12, 0.13, 0.21 };
       printf ("[ %g, %g\n", A[0], A[1]);
       printf ("  %g, %g ]\n", A[2], A[3]);
       int ldb = 2;
       float B[] = { 1011, 1012, 1021, 1022, 1031, 1032 };
       printf ("[ %g, %g\n", B[0], B[1]);
       printf ("  %g, %g ]\n", B[2], B[3]);

       /*int ldc = 2; float C[] = { 0.00, 0.00, 0.00, 0.00 };  */
       int ldc = 2;
       float C[] = { 0.00, 0.00, 0.00, 0.00 };

       /* Compute C = A B */
       /* cblas_sgemm */
       /*sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 3, 1.0, A, lda, 
B, ldb, 0.0, C, ldc); */
       sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 2, 2, 2, 1.0, A, lda, 
B, ldb, 0.0, C, ldc);

       printf ("[ %g, %g\n", C[0], C[1]);
       printf ("  %g, %g ]\n", C[2], C[3]);

       return 0;
     }
~               

I get:

[ 0.11, 0.12
  0.13, 0.21 ]
[ 1011, 1012
  1021, 1022 ]
[ 233.73, 233.96
  345.84, 346.18 ]

But when using CBLAS inside Lapack using:

#include <stdio.h>
#include </users/tonys/BLAS/clapack/CLAPACK/BLAS/WRAP/blaswrap.h>
#include </users/tonys/BLAS/clapack/CLAPACK/BLAS/WRAP/cblas.h>
#include </users/tonys/BLAS/clapack/CLAPACK/F2CLIBS/f2c.h>

/*  -- translated by f2c (version 19990503).
   You must link the resulting object file with the libraries:
        -lf2c -lm   (in that order)
*/
/* Main program */ MAIN__(void)
{
       extern /* Subroutine */ sgemm_( char *, char *, integer *, integer *, 
            integer *, real *, real *, integer *, real *, integer *, 
            real *, real *, integer *);

       static char transa[1], transb[1];
       static real alpha;
       static real beta;
       static integer m,n,k;
       static integer lda,ldb,ldc;
       /*lda = 3; static real A[] = { 0.11, 0.12, 0.13, 0.21, 0.22, 0.23 }; */
       lda = 2; 
       static real A[] = { 0.11, 0.12, 0.13, 0.21}; 

       printf ("[ %g, %g\n", A[0], A[1]);
       printf ("  %g, %g ]\n", A[2], A[3]);
     


       alpha = 1.0;
       beta = 0.0;
       /*m=2; n=2; k=3; */
       m=2; n=2; k=2;

       /*ldb = 2; static real B[] = { 1011.0, 1012.0, 1021.0, 1022.0, 1031.0, 
1032.0 }; */
       ldb = 2; 
       static real B[] = { 1011.0, 1012.0, 1021.0, 1022.0}; 

       printf ("[ %g, %g\n", B[0], B[1]);
       printf ("  %g, %g ]\n", B[2], B[3]);
     
       ldc = 2;
       static real C[] = { 0.00, 0.00, 0.00, 0.00 }; 

       *(unsigned char *)transa = 'T';
       *(unsigned char *)transb = 'T';
         
       /* Compute C = A B */
       /* cblas_sgemm */
       /*sgemm_(CblasNoTrans, CblasNoTrans, 2, 2, 3, */
       sgemm_(transa, transb, &m, &n, &k, &alpha, &A[0], &lda, &B[0], &ldb, 
&beta, &C[0], &ldc);

     
       printf ("[ %g, %g\n", C[0], C[1]);
       printf ("  %g, %g ]\n", C[2], C[3]);
     
       return 0;  
} /* MAIN__

        Main program alias */ int testblas_ () { MAIN__ (); return 0; }


which produces:

[ 0.11, 0.12
  0.13, 0.21 ]
[ 1011, 1012
  1021, 1022 ]
[ 233.73, 345.84
  233.96, 346.18 ]

The resulting C matrix is the transpose of the earlier result

-------------- next part --------------
A non-text attachment was scrubbed...
Name: scott.vcf
Type: text/x-vcard
Size: 273 bytes
Desc: Card for <scott@Domain.Removed>
Url : 
http://lists.cs.utk.edu/private/lapack/attachments/20070821/9e1c60ad/scott.vcf 

<Prev in Thread] Current Thread [Next in Thread>


For additional information you may use the LAPACK/ScaLAPACK Forum.
Or one of the mailing lists, or