Это былопредложенныйчто использование 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
решение1
Я бы рекомендовал начать со всего этого из репозитория Ubuntu. Первое, что нужно попробовать, это установить libopenblas-base
пакет и разрешить ему предоставлять альтернативу BLAS и LAPACK, так просто, как:
sudo apt-get install octave
sudo apt-get install libopenblas-base
Используя нашитестовый сценарийу меня на i7-3537u для Octave получены следующие тайминги:
- 0,42 с - с простым значением по умолчанию
libblas3
,liblapack3
- 0,26 с - с
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
И это изменит результаты бенчмарка на:
- 0,25 с - с
libopenblas-base
самокомпилированным
Поэтому нет смысла компилировать оптимизированную библиотеку с дополнительной ручной оптимизацией.
Заключение:Я рекомендую вам сначала оптимизировать ваш код Octave, избегая циклов for и используя векторизованные функции как можно чаще. Это значительно увеличит производительность.