Here is a program that uses dgemm to multiply two matrices: matrix_mult.cpp
The dgemm function is implemented using gsl blas.
It can be compiled under Cygwin as:
gcc -o matrix_mult_alt matrix_mult_alt.cpp -lgsl -lstdc++
And under Ubuntu as:
gcc -o matrix_mult_alt matrix_mult_alt.cpp -lgsl -lgslcblas -lstdc++
* * *
For benchmark comparison, here is a matrix multiplication program which uses pure pointer access without BLAS. matrix_11.cpp
* * *
A Fortran program which uses the intrinsic function MATMUL is given at: MATRIX_MULT.F
A Fortran program which uses DGEMM is: MATRIX_MULT_D.F
The program was compiled using:
gfortran -o MATRIX_MULT_D MATRIX_MULT_D.F -lblas -llapack
As an aside, the following was used to determine memory leaks during the debugging process:
gfortran -g -o MATRIX_MULT_D MATRIX_MULT_D.F -lblas -llapack -Wall -fbounds-check -fmax-errors=1 -Werror
* * *
Here is a program matrix_mult_cblas.cpp which uses cblas_dgemm.
It is compiled in Cygwin via:
gcc -o matrix_mult_cblas matrix_mult_cblas.cpp c:/cygwin/lib/libblas.a c:/cygwin/lib/libcygwin.a c:/cygwin/home/tirvine/CBLAS/lib/cblas_LINUX.a -lstdc++
The paths should be modified according to your library installation.
Note that CBLAS can be installed in Cygwin using the instructions at:
http://vibrationdata.wpcomstaging.com/2011/11/07/install-cblas-in-ubuntu/
* * *
Tom Irvine