Tem sidosugeridoque usar o Octave com OpenBLAS compilado em meu próprio computador (em vez de OpenBLAS pré-compilado de repositórios) tornará os cálculos mais rápidos. Instalei o GNU Octave (4.2.2) a partir de repositórios usando o apt e compilei a versão mais recente do OpenBLAS emhttps://www.openblas.net/.
Como fazer o Octave usar este OpenBLAS?
O que eu tentei até agora.
Depois de compilar o OpenBLAS, instalei-o no formato opt/openblas
.
Então eu digitei os comandos
sudo update-alternatives --install /usr/lib/libblas.so libblas.so /opt/openblas/lib/libopenblas.so 50
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/openblas/lib/libopenblas.so 50
sudo update-alternatives --install /usr/lib/liblapack.so liblapack.so /opt/openblas/lib/libopenblas.so 50
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/openblas/lib/libopenblas.so 50
Então configurei para usar o novo OpenBLAS com
update-alternatives --config libblas.so
update-alternatives --config libblas.so.3
update-alternatives --config liblapack.so
update-alternatives --config liblapack.so.3
Finalmente executei o Octave com o novo OpenBLAS, mas recebi este erro.
$ LD_PRELOAD=/opt/openblas/lib/libopenblas.so octave-cli
octave-cli: symbol lookup error: /usr/lib/x86_64-linux-gnu/libblas.so.3: undefined symbol: gotoblas
Responder1
Eu recomendaria começar com todo o material do repositório Ubuntu. A primeira coisa a tentar é instalar libopenblas-base
o pacote e permitir que ele forneça alternativas BLAS e LAPACK, tão simples quanto:
sudo apt-get install octave
sudo apt-get install libopenblas-base
Usando nossoroteiro de testetemos os seguintes tempos para Octave no meu i7-3537u:
- 0,42 s - com padrão simples
libblas3
,liblapack3
- 0,26 s - com
libopenblas-base
do repositório
Se você quiser otimizá-lo ainda mais - compile o OpenBLAS localmente:
sudo apt-get build-dep libopenblas-dev
cd /tmp
apt-get source libopenblas-base
cd openblas-0.2.20+ds
DEB_CFLAGS_SET="-march=native -mtune=native" DEB_CFLAGS_SET="-march=native -mtune=native" dpkg-buildpackage -uc -us -j8
sudo apt-get install ../libopenblas-base_0.2.20+ds-4_amd64.deb ../libopenblas-dev_0.2.20+ds-4_amd64.deb
E isso mudará os resultados do benchmark para:
- 0,25 s - com
libopenblas-base
autocompilado
Portanto, não é útil compilar a biblioteca otimizada com otimização manual adicional.
Conclusão:Vou recomendar primeiro otimizar seu código Octave, evitando loops for e usando funções vetorizadas tanto quanto possível. Isso aumentará tremendamente o desempenho.