×

Search anything:

# OpenBLAS, a Basic Linear Algebra Subprograms Library

#### Machine Learning (ML) blas openblas

Get this book -> Problems on Array: For Interviews and Competitive Programming

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[1] , "%d" , &m );
sscanf ( argv[2] , "%d" , &k );
sscanf ( argv[3] , "%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 Tech Review Team

The official account of OpenGenus's Technical Review Team. This team review all technical articles and incorporates peer feedback. The team consist of experts in the leading domains of Computing.