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)