되었습니다제안(저장소에서 미리 컴파일된 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 코드를 먼저 최적화하는 것이 좋습니다. 이렇게 하면 성능이 엄청나게 향상됩니다.