Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

OpenBlas的介绍和NDK下交叉编译

$
0
0
作者: Sam(甄峰)  sam_code@hotmail.com

1. OpenBLAS简介:
OpenBLAS 是一个基于GotoBLAS2的,经过优化的BLAS库。
BLAS(Basic Linear Algebra Subprograms)是做什么的呢?它提供一系列的基于线性代数的,向量和矩阵计算的程序。

2. 编译介绍:
正常模式下,要编译OpenBLAS,需要提前准备以下工具和软件:
GNU Make
A C compiler, e.g. GCC or Clang
A Fortran compiler (optional, for LAPACK)
IBM MASS (optional, see below)

其中,fortran编译器是可选的,它为lapack所准备。

Android NDK并不包含Fortran编译器。所以通常编译不包含Lapack的OpenBLAS版本。


如果是使用ARM交叉编译器编译OpenBLAS。则因为很多编译器支持Fortran,所以可以编译带Lapack的版本。



3. NDK编译:
Sam 选用clang. 编译32bit版本。
创建文件---set_ENV:
内容如下:
   
   export NDK_BUNDLE_DIR=/opt/android-ndk-r15c

   export PATH=${NDK_BUNDLE_DIR}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:${NDK_BUNDLE_DIR}/toolchains/llvm/prebuilt/linux-x86_64/bin:$PATH

   export LDFLAGS="-L${NDK_BUNDLE_DIR}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x"

   export CLANG_FLAGS="-target arm-linux-androideabi -marm -mfpu=vfp -mfloat-abi=softfp --sysroot ${NDK_BUNDLE_DIR}/platforms/android-23/arch-arm -gcc-toolchain ${NDK_BUNDLE_DIR}/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/ -I${NDK_BUNDLE_DIR}/sources/cxx-stl/llvm-libc++/include/"



   # make TARGET=ARMV7 ONLY_CBLAS=1 AR=ar CC="clang ${CLANG_FLAGS}" HOSTCC=gcc ARM_SOFTFP_ABI=1 -j4



$source set_ENV
$make TARGET=ARMV7 ONLY_CBLAS=1 AR=ar CC="clang ${CLANG_FLAGS}" HOSTCC=gcc ARM_SOFTFP_ABI=1 -j4

则可以编译出来了。






 

Viewing all articles
Browse latest Browse all 158

Trending Articles