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
포트란을 사용하지 않고 싶다면 아래와 같이 컴파일 하면 된다.
Not found symbol
- Feature request: adding a prefix (or suffix) to all function names exported from shared library #436
특정 환경(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.conf
의 FU
값과 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의 버그로 생각된다. 아래와 같이 주석을 의미하는 #
이후, 공백을 추가하면 된다.