Как использовать Octave из репозиториев с OpenBLAS, скомпилированным на моем компьютере?

Как использовать Octave из репозиториев с OpenBLAS, скомпилированным на моем компьютере?

Это былопредложенныйчто использование 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 и используя векторизованные функции как можно чаще. Это значительно увеличит производительность.

Связанный контент