Как использовать 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
задан 14 August 2020 в 09:17

1 ответ

Я бы рекомендовал начать со всего, что есть в репозитории Ubuntu. Первое, что нужно попробовать, это установить пакет libopenblas-base и позволить ему предоставлять альтернативу BLAS и LAPACK, так же просто, как:

sudo apt-get install octave
sudo apt-get install libopenblas-base

Используя наш тестовый сценарий , у нас есть следующие сроки для Octave на моем i7-3537u:

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

1
ответ дан 21 August 2020 в 07:59

Другие вопросы по тегам:

Похожие вопросы: