#インストール方法
apt-cyg install liblapack-devel
※ ヘッダファイルcblas.h
は、liblapack-devel
に含まれています。
https://cygwin.com/packages/summary/liblapack-devel.html
#コンパイル方法
gcc -o dgemm_demo dgemm_demo.c -lblas
g++ -o dgemm_demo dgemm_demo.cpp -lblas
#サンプルコード
dgemm_demo.c
#include <stdio.h>
#include <cblas.h>
void print_matrix(double *data,int row,int col){
for (int i = 0; i < row; ++i){
for (int j = 0; j < col; ++j){
printf("%6.1f", data[i*col + j]);
}
printf("\n");
}
}
int main(void){
double alpha, beta;
int M = 3, N = 4, K = 2;
// A[MxK] , B[KxN] , C[MxN]
double A[3*2] = {
1, 2,
3, 4,
5, 6};
double B[2*4] = {
1, 2, 3, 4,
5, 6, 7, 8};
double C[3*4];
// C = alpha * A * B + beta * C
alpha=1; beta=0; // C = A*B
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K,
alpha, A,K, B,N, beta, C,N);
print_matrix(C,M,N);
// C = alpha * A * B + beta * C
alpha=1; beta=1; // C = A*B + C
cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, M, N, K,
alpha, A,K, B,N, beta, C,N);
print_matrix(C,M,N);
return 0;
}
/*========================
$ ./dgemm_demo.exe
11.0 14.0 17.0 20.0
23.0 30.0 37.0 44.0
35.0 46.0 57.0 68.0
22.0 28.0 34.0 40.0
46.0 60.0 74.0 88.0
70.0 92.0 114.0 136.0
*/
/*========================
$ octave -q --no-gui
octave:1> A=[1 2; 3 4; 5 6]; B=[1 2 3 4; 5 6 7 8];
octave:2> C=A*B, C=A*B+C
C =
11 14 17 20
23 30 37 44
35 46 57 68
C =
22 28 34 40
46 60 74 88
70 92 114 136
*/
#エラー例とその原因
$ gcc -o gemm gemm.c
/usr/lib/gcc/x86_64-pc-cygwin/9.3.0/../../../../x86_64-pc-cygwin/bin/ld: /tmp/ccCjV9aP.o:dgemm_demo.c:(.text+0x235): undefined reference to `cblas_dgemm'
/tmp/ccCjV9aP.o:dgemm_demo.c:(.text+0x235): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `cblas_dgemm'
collect2: エラー: ld はステータス 1 で終了しました
-lblas
の付け忘れ。