Octave 4.2.1 e Intel MKL

2

Eu compilei o Octave 4.2.1 de fontes sem erro. Existe alguma maneira de fazer com que ele use a Biblioteca de Kernel Intel Math?

Eu o instalei em \ opt \ intel. Quando eu adicioná-lo a alternativas blas e lapack com:

sudo update-alternatives --install /usr/lib/libblas.so.3 \
                                 libblas.so.3 \
                                 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64/libmkl_rt.so \
                                 50

sudo update-alternatives --install /usr/lib/liblapack.so.3 \
                                 liblapack.so.3 \
                                 /opt/intel/compilers_and_libraries/linux/mkl/lib/intel64/libmkl_rt.so \
                                 50

O Octave não começa com o seguinte erro:

Intel MKL FATAL ERROR: Cannot load libmkl_core.so.

Eu também tentei compilar o Octave usando o MKL.

export JAVA_HOME="/usr/lib/jvm/default-java"
export CFLAGS="-O2 -fPIC -DMKL_LP64 -DM_PI=3.1415926535897932384"
export FFLAGS="-O2 -fPIC"
export CPPFLAGS="-I/opt/intel/mkl/include/ -I/opt/intel/mkl/include/fftw/"
export LDFLAGS="-L/opt/intel/mkl/lib/intel64 -L/opt/intel/lib/intel64"
export LD_LIBRARY_PATH="/usr/lib/gcc:/usr/lib/gcc/x86_64-linux-gnu/:/opt/intel/lib/intel64:/opt/intel/mkl/lib/intel64:$LD_LIBRARY_PATH"

./configure --prefix=/opt/octave4_2_mkl --with-blas="-lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -liomp5 -lpthread" --with-lapack="-lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -liomp5 -lpthread" --with-fftw3="-lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -liomp5 -lpthread -lm" --with-fftw3f="-lmkl_gf_lp64 -lmkl_gnu_thread -lmkl_core -liomp5 -lpthread -lm"

Infelizmente, apesar de ./configure não citar nenhum erro, quando eu executo 'make' e 'make check' depois, o teste fica louco e sai com o Signal 6.

    
por Kamil Mróz 09.03.2017 / 11:47

1 resposta

2

Talvez você já tenha percebido, mas eu comecei a funcionar (também o Octave 4.2.1) FWIW aqui estão os passos:

Instale a biblioteca MKL e configure as alternativas de atualização:

sudo update-alternatives --install /usr/lib/libblas.so libblas.so  /opt/intel/mkl/lib/intel64/libmkl_rt.so 50

sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/intel/mkl/lib/intel64/libmkl_rt.so 50

sudo update-alternatives --install /usr/lib/liblapack.so  liblapack.so  /opt/intel/mkl/lib/intel64/libmkl_rt.so 50

sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/intel/mkl/lib/intel64/libmkl_rt.so 50

Agora crie um arquivo mkl.conf em /etc/ld.so.conf.d com os caminhos como entradas:

/opt/intel/lib/intel64

/opt/intel/mkl/lib/intel64

Em seguida, execute no terminal

sudo ldconfig

Agora use update-alternatives configure para usar o mkl como seu blas padrão

Para verificar se a oitava está usando mkl, inicie a oitava, abra um terminal e digite

ps aux | grep octave

Minha saída mostra 3 processos, o segundo se parece com

my_user_name  6032  6.4  1.7 1454636 103952 ?      Ssl  08:05   0:01 /usr/local/libexec/octave/4.2.1/exec/x86_64-pc-linux-gnu/octave-gui --force-gui

observe o PID (6032 aqui) e depois no terminal

lsof -p 6032 | grep 'mkl' (change 6032 to your process's PID)

Meu resultado é

octave-gu 6032  my_user_name  mem  REG  8,2  5461454 4594702 /opt/intel/compilers_and_libraries_2017.2.174/linux/mkl/lib/intel64_lin/libmkl_rt.so

Se não estiver usando o mkl, não mostrará nada.

Você não precisa compilar oitava com MKL, o Octave usa qualquer biblioteca blas vinculada a / usr / lib / libblas e / usr / lib / libbapack dinamicamente.Você pode alternar com update-alternatives e octave usará a que você escolher. Eu compilei a oitava 4.2.1 antes de usar o MKL, eu estava usando o openblas como meu blas quando eu compilava.

Na minha máquina, o MKL não é mais rápido do que o openblas, se este for construído para ser otimizado para o hardware (ao invés de ser instalado diretamente do repositório)

    
por Icannotlogin 08.05.2017 / 14:16