2013-07-14 4 views
6

현재 선형 대수학을위한 Armadillo C++ 라이브러리를 탐색 중입니다. 내가 이해하는 한, 기본 행렬 연산 (예 : 행렬 곱셈)에 LAPACK/BLAS 라이브러리를 사용합니다. Windows 사용자로서 여기에서 LAPACK/BLAS를 다운로드했습니다 : http://icl.cs.utk.edu/lapack-for-windows/lapack/#running. 문제는 행렬 곱셈이 Matlab 또는 R과 비교할 때 매우 느리다는 것입니다. 예를 들어, Matlab은 컴퓨터에서 ~ 0.15 초에 두 개의 1000x1000 행렬을 곱하고 R은 ~ 1 초가 필요하고 C++/Armadillo/LAPACK/BLAS는 10을 초과해야합니다 그 초.매트릭스 곱셈을위한 고속 LAPACK/BLAS

따라서 Matlab은 선형 대수학을 위해 고도로 최적화 된 라이브러리를 기반으로합니다. Armadillo에서 사용하는 더 빠른 LAPACK/BLAS 묵음이 있다면 제 질문이십니까? 양자 택일로, 어떻게 든 Matlab 선형 대수학 라이브러리를 추출하고 C++에서 사용할 수있는 방법이 있습니까?

+2

-1을 입력하면 내 질문을 어떻게 개선 할 수 있는지 힌트를주십시오. – Kasablanca

답변

12

LAPACK는 행렬 곱셈을하지 않습니다, 상용 패키지입니다. 행렬 곱셈을 제공하는 BLAS입니다.

64 비트 운영 체제를 사용하는 경우 먼저 BLAS 64 비트 버전을 사용해 보는 것이 좋습니다. 그러면 성능이 즉시 두 배로 향상됩니다.

둘째, BLAS의 고성능 구현을 살펴보십시오 (예 : OpenBLAS). OpenBLAS는 벡터화와 병렬화 (즉, 멀티 코어)를 모두 사용합니다. 무료 (무료) 오픈 소스 프로젝트입니다.

Matlab은 Intel MKL 라이브러리를 내부적으로 사용하며,이 라이브러리는 Armadillo library과 함께 사용할 수도 있습니다. 인텔 MKL은 폐쇄 소스이지만 비상업적 용도로는 무료입니다. OpenBLAS는 Intel MKL보다 우수하거나 우수한 매트릭스 곱셈 성능을 얻을 수 있습니다.

고성능 선형 대수는 일반적으로 Windows보다 Linux 및 Mac OS X에서 더 쉽습니다.

+0

종합적인 답변을 가져 주셔서 감사합니다! – Kasablanca

+0

마지막 진술이 잘못되었다고 생각합니다. 예를 들어, MATLAB은 Linux보다 Windows에서 빠릅니다. 일반적으로 Intel MKL은 Windows에서 더 빠릅니다. – Royi

+0

Windows 및 Linux 용 MKL은 동일한 코드 기반을 사용합니다. – mtall

1

++ 어떻게 든 matlab에 선형 대수 라이브러리를 추출하고 C에서 사용하는 방법은 C++ 호출 MATLAB 기능을 위해,이 링크를 참조, 예 있습니다 : How to Call Matlab Functions from C++

선형 대수에 대한
+0

Matlab 컴파일러 비용이 많이 든다! – alexbuisson

+0

@alexbuisson 그럼 왜 matlab에? 저는 고성능 컴퓨팅에 적합한 선형 대수 라이브러리 BLAS를 하나 더 알고 있습니다. – lulyon

+0

그렇기 때문에 저는 Octave를 사용합니다. Matlab IDE와 컴파일러는 2 가지 다른 점에 주목해야합니다. – alexbuisson

4

이미 밝혔다 된 내용에 추가, 당신은 또한 최적화의 높은 수준을 사용해야합니다

  1. 하여 사용하십시오 중 하나 O2 또는 O3 컴파일러 플래그. 위의

  2. 링크 BLAS 라이브러리높은 성능을 언급 한 (그리고 아마도 멀티 스레드). AFAIK MKL은 Unix 플랫폼에서만 자유롭게 사용할 수 있지만, Windows 내에서 cygwin과 같은 Linux 상자를 사용한다면 OK 일 것입니다. OpenBLAS도 멀티 스레드입니다.

  3. 많은 라이브러리에서 심볼 NDEBUG (예 : 컴파일러 플래그 -DNDEBUG 전달)을 설정하면 값 비싼 범위 확인 및 단정이 해제됩니다.Armadillo에는 수동으로 설정할 수있는 ARMA_NO_DEBUG이라는 자체 기호가 있습니다. 또는 armadillo include 디렉토리에있는 config.hpp 헤더 파일을 편집하고 해당 줄의 주석 처리를 제거 할 수 있습니다. 당신은, 당신은 어쨌든이 설정 파일에 대해 잘 알고 있어야 딜 외부 BLAS 사용 켤 수 있었다 때문에 나는

가 내 인텔 코어에 아르마딜로/MKL_BLAS Matlab과 사이의 빠른 비교를했다 ... 추측하고있다 -i7 워크 스테이션. C++ exe는 -O3, MKL BLAS를 사용했으며 ARMA_NO_DEBUG를 정의했습니다. 저는 1000x1000 무작위 행렬에 100 배 곱하고 곱셈 시간을 평균했습니다. C++ 구현은 matlab보다 대략 1.5 배 빠릅니다.

희망 하시겠습니까?