Skip to content

OpenBLAS

OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version.

How to compile

Install flags

  • DYNAMIC_ARCH=1: 실행 시 CPU에 따라 적절한 커널을 선택한다.

Local Download

OpenBLAS 0.2.15 version
OpenBLAS-0.2.15.tar.gz
OpenBLAS 0.2.19 version
OpenBLAS-0.2.19.tar.gz

Troubleshooting

Disable fortran

포트란을 사용하지 않고 싶다면 아래와 같이 컴파일 하면 된다.

$ make ONLY_CBLAS=1

Not found symbol

특정 환경(Mac OSX)에서 컴파일 할 경우 아래와 같은 에러가 발생될 수 있다.

Undefined symbols for architecture x86_64:
  "_idamax_k", referenced from:
      _idamax_ in libopenblas_haswellp-r0.2.17.dev.a(idamax.o)
...

원인은 kernel/디렉토리에 있는 어샘블리 파일(위의 경우 kernel/x86_64/iamax_sse2.S 파일이다)을 컴파일 할 경우 정의되는 ASMNAME DEFINE에 할당된 값이 이름 장식 (Nmae mangling)에 맞지 않아 생기는 현상이다.

해결 방법은 Makefile.prebuild에서 사용되는 c_check(perl 스크립트)의 결과 파일로 출력되는 Makefile.confFU값과 BU값을 확인하면 된다.

참고로 FU를 결정하는 perl의 need_fu변수를 결정하는 스크립트는 아래와 같다.

$data = `$compiler_name -S ctest1.c && grep globl ctest1.s | head -n 1 && rm -f ctest1.s`;
$data =~ /globl\s([_\.]*)(.*)/;
$need_fu = $1;
# ...
print MAKEFILE "FU=$need_fu\n" if $need_fu ne "";

unexpected token at start of statement

특정 환경(Mac OSX)에서 컴파일 할 경우 아래와 같은 에러가 발생될 수 있다.

clang -O2 -DMAX_STACK_ALLOC=2048 -DEXPRECISION -Wall -m64 -DF_INTERFACE_GFORT -fPIC -DNO_LAPACK -DNO_LAPACKE -DSMP_SERVER -DNO_WARMUP -DMAX_CPU_NUMBER=8 -DASMNAME=_dtrmm_kernel_RT -DASMFNAME=_dtrmm_kernel_RT_ -DNAME=dtrmm_kernel_RT_ -DCNAME=dtrmm_kernel_RT -DCHAR_NAME=\"dtrmm_kernel_RT_\" -DCHAR_CNAME=\"dtrmm_kernel_RT\" -DNO_AFFINITY -I.. -DDOUBLE  -UCOMPLEX -c -DTRMMKERNEL -DDOUBLE -UCOMPLEX -ULEFT -DTRANSA ../kernel/x86_64/dgemm_kernel_4x8_sandy.S -o dtrmm_kernel_RT.o
kernel/x86_64/dgemm_kernel_4x8_sandy.S:1849:1: error: unexpected token at start of statement
#### Writing Back ####
^

이 경우는 단순한 clang의 버그로 생각된다. 아래와 같이 주석을 의미하는 # 이후, 공백을 추가하면 된다.

# ### Writing Back ####
# ifndef    TRMMKERNEL

See also

Favorite site