내 컴퓨터에 컴파일된 OpenBLAS가 있는 저장소의 Octave를 어떻게 사용합니까?

내 컴퓨터에 컴파일된 OpenBLAS가 있는 저장소의 Octave를 어떻게 사용합니까?

되었습니다제안(저장소에서 미리 컴파일된 OpenBLAS 대신) 내 컴퓨터에서 컴파일된 OpenBLAS와 함께 Octave를 사용하면 계산이 더 빨라질 것입니다. apt를 사용하여 저장소에서 GNU Octave(4.2.2)를 설치하고 다음에서 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 

마지막으로 새로운 OpenBLAS로 Octave를 실행했지만 이 오류가 발생했습니다.

$ 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자체 컴파일 포함

따라서 추가적인 수동 최적화로 최적화된 라이브러리를 컴파일하는 것은 유용하지 않습니다.


결론:for-loop를 피하고 가능한 한 벡터화된 함수를 사용하여 Octave 코드를 먼저 최적화하는 것이 좋습니다. 이렇게 하면 성능이 엄청나게 향상됩니다.

관련 정보