# OpenBLAS, a Basic Linear Algebra Subprograms Library

#### Machine Learning (ML) blas openblas Get FREE domain for 1st year and build your brand new site

OpenBLAS is an open source optimized BLAS (Basic Linear Algebra Subprograms) library based on GotoBLAS2 1.13 BSD version.

### Install OpenBLAS from source

• Step 1: Clone the source of OpenBLAS
``````git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
``````
• Step 2: Build the source
``make -j4``

### Usage

Statically link with libopenblas.a or dynamically link with -lopenblas if OpenBLAS was compiled as a shared library.

### Example of Matrix Multiplication in OpenBLAS

``````
#include <cblas.h>
#include <stdio.h>
#include <sys/time.h>
#include <stdlib.h>
#include <math.h>
void init_matrix(double* A, int dim1 , int dim2 )
{
int mod = 100003, prod = 7 , e = 1 , i = 0, j = 0;
for ( i = 0; i < dim1; ++i )
{
for ( j = 0; j < dim2; ++j )
{
e = (e*prod + 1)%mod; // random
A[i*dim2 + j] = e * .91739210437;
}
}
}
int main(int argc, char** argv)
{
int m , n , k , i , j , u , nrep = 1 , cnt = 0;
double *A , *B , *C;
if ( argc != 5 )
{
puts("Format: ./a.out number_of_iteration dimension_1
dimension_2 dimension_3");
exit(0);
}
if ( argc == 5 )
{
sscanf ( argv , "%d" , &m );
sscanf ( argv , "%d" , &k );
sscanf ( argv , "%d" , &n );
}
A = (double *) malloc( sizeof(double) * m * k );
B = (double *) malloc( sizeof(double) * k * n );
C = (double *) malloc( sizeof(double) * m * n );
init_matrix ( A , m , k );
init_matrix ( B , k , n );
cblas_dgemm ( CblasRowMajor, CblasNoTrans, CblasNoTrans ,
m , n , k , 1.0 , A , k , B , n , 0.0 , C , n );
return 0;
}
``````

Compile and run the above code:

``````
gcc matrix_multiplication_openblas.c
./a.out 100 100 100
`````` #### OpenGenus Foundation

The official account of OpenGenus IQ backed by GitHub, DigitalOcean and Discourse

Improved & Reviewed by: