Было предложено , что использование Octave с OpenBLAS, скомпилированным на моем собственном компьютере (а не предварительно скомпилированным OpenBLAS из репозиториев), ускорит вычисления. Я установил GNU Octave (4.2.2) из репозиториев, используя apt, и скомпилировал последний выпуск OpenBLAS из https://www.openblas.net/ .
Как заставить Octave использовать этот OpenBLAS?
То, что я пробовал до сих пор.
После компиляции OpenBLAS, Я установил его в opt / openblas
.
Затем я ввел команды
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
Затем я настроил использование нового OpenBLAS с
update-alternatives --config libblas.so
update-alternatives --config libblas.so.3
update-alternatives --config liblapack.so
update-alternatives --config liblapack.so.3
Наконец я запустил Octave с новым OpenBLAS, но получил эту ошибку .
$ 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
Я бы рекомендовал начать со всего, что есть в репозитории Ubuntu.
Первое, что нужно попробовать, это установить пакет libopenblas-base
и позволить ему предоставлять альтернативу BLAS и LAPACK, так же просто, как:
sudo apt-get install octave
sudo apt-get install libopenblas-base
Используя наш тестовый сценарий , у нас есть следующие сроки для Octave на моем i7-3537u:
libblas3
, liblapack3
libopenblas-base
из репозитория Если вы хотите еще больше его оптимизировать - скомпилируйте OpenBLAS локально:
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
И это изменит результаты теста на:
libopenblas-base
самокомпилированным Так что это бесполезно компилировать оптимизированную библиотеку с дополнительной ручной оптимизацией.
Заключение: Я рекомендую сначала оптимизировать код Octave, избегая циклов for и максимально используя векторизованные функции.Это значительно повысит производительность.