Previous: Level 3 CBLAS Functions, Up: GSL CBLAS Library


D.4 Examples

The following program computes the product of two matrices using the Level-3 blas function sgemm,

     [ 0.11 0.12 0.13 ]  [ 1011 1012 ]     [ 367.76 368.12 ]
     [ 0.21 0.22 0.23 ]  [ 1021 1022 ]  =  [ 674.06 674.72 ]
                         [ 1031 1032 ]

The matrices are stored in row major order but could be stored in column major order if the first argument of the call to cblas_sgemm was changed to CblasColMajor.

     #include <stdio.h>
     #include <gsl/gsl_cblas.h>
     
     int
     main (void)
     {
       int lda = 3;
     
       float A[] = { 0.11, 0.12, 0.13,
                     0.21, 0.22, 0.23 };
     
       int ldb = 2;
       
       float B[] = { 1011, 1012,
                     1021, 1022,
                     1031, 1032 };
     
       int ldc = 2;
     
       float C[] = { 0.00, 0.00,
                     0.00, 0.00 };
     
       /* Compute C = A B */
     
       cblas_sgemm (CblasRowMajor, 
                    CblasNoTrans, CblasNoTrans, 2, 2, 3,
                    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;  
     }

To compile the program use the following command line,

     $ gcc -Wall demo.c -lgslcblas

There is no need to link with the main library -lgsl in this case as the cblas library is an independent unit. Here is the output from the program,

     $ ./a.out
     [ 367.76, 368.12
       674.06, 674.72 ]