MinGW에서의 OpenBLAS 빌드
CBLAS의 성능이 좋지 않아 OpenBLAS를 사용하려고 합니다. Windows 환경에서 MinGW 환경에서 빌드하는데 큰 어려움은 없습니다. OpenBLAS의 빌드 스크립트가 아주 잘 짜여서 있기 때문에 Quick Install에서 나와있는대로 make 한방에 설치가 될 것도 같습니다. 하지만 원하는 빌드를 위해서 정확하게 옵션 몇가지를 추가하였습니다.
Quick Install 문서에서 안내하고 있는 옵션은 몇가지가 있는데, 그중 하나가 DYNAMIC_ARCH=1 옵션입니다. 이를 사용하면 실행 시 CPU에 따라 적절한 커널을 선택하여 사용한다고 하여 집, 회사를 오가는데 적절한 옵션이라 생각하고 사용하였습니다. 하지만 Windows 환경이라 이 부분에 관한 스크립트가 작동하지 않고 kernel 부분의 CPU의 종류를 가져오는 스크립트에서 오류가 납니다.
스크립트를 뜯어보면 아래와 같습니다.
1 2 3 4 5 |
for d in KATMAI COPPERMINE NORTHWOOD PRESCOTT BANIAS CORE2 PENRYN DUNNINGTON NEH ALEM ATHLON OPTERON OPTERON_SSE3 BARCELONA BOBCAT ATOM NANO ; \ do mingw32-make GOTOBLAS_MAKEFILE= -C kernel TARGET_CORE=$d kernel || exit 1 ;\ done |
CPU 코드명이 보이고 그 안에서 선택하는 구조로 되어있는 것 같습니다. 하지만 %d 로 넘어오는 코드명이 없어 문제가 생기는 것 같네요. 대부분 펜티엄 3, 펜티엄4의 코드명이고 그 시절 CPU를 아직 쓰는 사람은 없는 것 같습니다. Core2 계열이면 CORE2, PENRYN 중 자신의 것을, i3,i5,i7 계열의 CPU를 사용하고 있으면 NEHALEM을 선택하면 될 것 같습니다. 서버 계열 옵테론이나 제온을 쓴다면 유의하여 선택하기 바랍니다.
최종적으로 빌드에 성공한 명령은 다음과 같습니다.
1 |
mingw32-make TARGET=NEHALEM USE_THREAD=1 FC=gfortran HOSTCC=gcc BINARY=32 DYNAMIC_ARCH=0 |
참고로 make의 옵션이 바뀐다고 영향이 있는 부분만 다시 빌드 되는 것 같지 않으니 꼭 clean 후 다시 빌드하여야 합니다.