2014-06-05 3 views
2

두 개의 행렬 50000x50000이있는 간단한 행렬 곱셈 프로그램을 만들고 곱 해 봤습니다. 나는 C++에서 라이브러리 eigen과 matlab을 사용했다. 그러나 MATLAB의 실행 시간은 고유를 사용하는 것보다 낮습니다. 고유를 사용하는 동안, 나는 모든 컴파일 링 (그리고 아마도 실행 중) 옵션을 디폴트로 남겼다.큰 매트릭스 조작에서 C++ beat matlab에서 'eigen'라이브러리를 사용할 수 있습니까?

나는 matlab가 vecorized 프로그램으로 만들어졌으며 멀티 프로세서와 병렬 처리의 도움을받을 수 있음을 알고있다. 그러나 큰 매트릭스와 선형 대수학 프로그램을 개발하고 싶다면, 고유 라이브러리 비트 MATLAB의 성능을 사용할 수 있습니까? 아니면 독점 Intel (또는 다른) 라이브러리로 가야합니까? 그리고 우리가 이것을 어떻게 할 수 있는지에 대한 의견이 있습니까?

+1

많은 사람들이 수치 시뮬레이션 작업을하고 있기 때문에 질문을 닫는 것이 좋습니다. – vsoftco

답변

2

모든 최적화가 설정되어 있어도 MATLAB을 이길 수 있습니다. Eigen을 최대한 활용하려면 병렬 지원 (-fopenmp in gcc)으로 컴파일하고 (-O3)에서 최적화를 실행해야합니다. 이 경우에도 MATLAB은 인텔 칩을 최대한 활용하기 위해 인텔 MKL 독점 라이브러리를 사용하고 있기 때문에 약간 더 빨라집니다. 따라서 구입하지 않으면 내가 이길 수있을 것이라고 생각하지 않습니다. 현재 프로젝트에 Eigen을 사용 중이며 MATLAB을 이길 수 없었습니다 (최소한 밀도가 높은 행렬 곱셈에는 해당되지 않음). 예를 들어

, A*BAB에 대한 1000 x 1000은 내가 할 수있는 최선의 평균 시간이되어 있습니다 :

MATLAB : 0.32 초 Eigen : 0.44 초

2000 x 2000를 들어

,

MATLAB : 2.80 초 Eigen : 3.45 초

시스템 : MacbookPro 2013, OS X.

추신 : 나는 적어도 평범한 컴퓨터에서는 50000x50000 행렬을 곱할 수 있을지 의심 스럽다.

+0

오늘 데스크탑 마더 보드에 필요한 28+ GiB RAM을 설치할 수 있습니다 ('A'는 ~ 9.3 GiB, 'B'와'A * B'), 그래서 당신이 "보통 컴퓨터"로 이해하는 것에 달렸습니다. RAM이 너무 많지 않더라도 스왑으로 사용하면 계산 속도가 너무 빨라지지는 않지만 상당히 빠른 SSD를 사용할 수 있습니다. – Ruslan