For example, the following Fortran code does a double precision general matrix-matrix multiplication. It calls the ‘DGEMM’ BLAS API function to accomplish this. A sample command to compile and link it with the AOCL-BLAS library is shown in the following code:
! File: BLAS_DGEMM_usage.f
! Example code to demonstrate BLAS DGEMM usage
program dgemm_usage
implicit none
EXTERNAL DGEMM
DOUBLE PRECISION, ALLOCATABLE :: a(:,:)
DOUBLE PRECISION, ALLOCATABLE :: b(:,:)
DOUBLE PRECISION, ALLOCATABLE :: c(:,:)
INTEGER I, J, M, N, K, lda, ldb, ldc
DOUBLE PRECISION alpha, beta
M=2
N=M
K=M
lda=M
ldb=K
ldc=M
alpha=1.0
beta=0.0
ALLOCATE(a(lda,K), b(ldb,N), c(ldc,N))
a=RESHAPE((/ 1.0, 3.0, &
2.0, 4.0 /), (/lda,K/))
b=RESHAPE((/ 5.0, 7.0, &
6.0, 8.0 /), (/ldb,N/))
WRITE(*,*) ("a =")
DO I = LBOUND(a,1), UBOUND(a,1)
WRITE(*,*) (a(I,J), J=LBOUND(a,2), UBOUND(a,2))
END DO
WRITE(*,*) ("b =")
DO I = LBOUND(b,1), UBOUND(b,1)
WRITE(*,*) (b(I,J), J=LBOUND(b,2), UBOUND(b,2))
END DO
CALL DGEMM('N','N',M,N,K,alpha,a,lda,b,ldb,beta,c,ldc)
WRITE(*,*) ("c =")
DO I = LBOUND(c,1), UBOUND(c,1)
WRITE(*,*) (c(I,J), J=LBOUND(c,2), UBOUND(c,2))
END DO
end program dgemm_usage
A sample compilation command with gfortran compiler for the code above:
$ gfortran -ffree-form BLAS_DGEMM_usage.f /path/to/libblis.a