2013-11-04 2 views
5

유한 요소 문제의 맥락에서 12800x12800 스파 스 매트릭스가 있습니다. 내가 MATLAB의 \ 연산자를 사용하여 선형 시스템을 풀기 위해 노력하고 있으며 mldivide를 사용하여 메모리 부족 오류가 발생합니다. 그래서 속도를 높이는 방법이 있는지 궁금 할 것입니다. 내 말은MATLAB 스파 스 매트릭스 솔버? 메모리 오류

, LU 같은은 인수 분해 실제로 더 이상 메모리 오류가 발생하지 않는 점에서 여기에 도움이 될 것입니다? 환경 설정에서 힙 크기를 256GB로 늘 렸습니다.이 크기는 얻을 수있는 최대 크기이며 여전히 메모리 부족 오류가 발생합니다.

또한 일반적인 질문입니다. 지금 노트북에는 8GB의 RAM이 있습니다. 16GB로 업그레이드하면 도움이 될까요? 아니면 MATLAB에 더 많은 메모리를 할당 할 수 있습니까? 나는이 물건에 익숙하지 않다. this에 따르면

enter image description here

+2

일단 Matlab의 'mldivide'구현이 절정에 이르렀습니다. 매우 최적화 된 코드입니다. 입력의 유형과 희소성을 고려하십시오. 특정 구성에 맞춰 특별히 맞춤 설정하지 않으면 더 나은 것을 얻을 수있을 것 같지 않습니다. – Shai

+0

희소성 패턴의 플롯을 게시 할 수 있습니까? ('spy (A)'로 생성) –

+0

@RodyOldenhuis done. – user1799323

답변

0

this 당신은 MATLAB에서 메모리 문제에서 피하기 위해 몇 가지 옵션이 있습니다

  • 증가 운영 체제의 가상 메모리
  • 작업 관리자에서 MATLAB 과정에 더 높은 우선 순위를 부여를
  • MATLAB의 64 비트 버전 사용

몇 달 전, matlab에 정수 프로그래밍 작업을하고있었습니다. "메모리 부족"문제에 직면 했으므로 스파 스 매트릭스를 사용하고 언급 된 팁을 따르고 마침내 문제가 해결되었습니다!

0

mldivide를 사용하고 계십니까? bicg, gmres 등과 같은 반복적 인 방법에 대한 완벽한 상황과 같은 것입니까? 슬래시가의 희소성을 활용하면서

0

은 그것을 사용하는 방법은 QR 할당 될 (number_occupied_elements)^3 메모리를 필요로 전체 행렬을 생성한다. 당신은 몇 대각선 스파 스 매트릭스를 분할하는 경우는

  1. 을 시도 할 수있는 몇 가지 경우에
  2. 문제를 깨는 시도 앞으로/뒤로 교체로 시스템을 해결하려고 시도 할 수 있습니다 당신이 휴식 작은 문제가 더 작은 것으로
  3. 매트릭스 부분을 시작하기 전에 어떤 요소가 사용자의 메모리를 차지하고 있는지 확인하십시오. 사전에 이들 중 하나를 지울 수 있습니까? 시스템이 정의되어있는 경우 여기를 언급하지만 한대로 문제에
  4. 해당 없음 사용하는 것보다 (A는 열보다 더 많은 행이) 의사 역 (A.'*A)\(A.'*b)이 작은 열 치수를 사용하여 결과를 생성

추가 메모리를 추가하는 방법; Matlab32는 2^32 바이트의 메모리 (4Gb)를 사용하므로 컴퓨터의 물리적 RAM을 늘리면 64 비트 버전을 사용하지 않는 한 도움이되지 않습니다.

0

MATLAB \는 일반적으로 문제를 해결하기 위해 여러 가지 방법을 시도합니다. 첫째, 매트릭스의 구조가 대칭이라면 콜레 스키 인수 분해를 시도합니다. 적합한 단계를 찾지 못하면 여러 단계를 거쳐 Matlab의 현재 버전은 UMFPACK Suitsparse 패키지를 사용합니다.

UMFPack 특정 LU의 된 구현이며, 그것은 속도와 실제 메모리의 좋은 사용 알려져있다.또한 채우기를 줄이고 행렬을 가능한 한 희소하게 유지하려고 시도합니다. MATLAB이이 코드를 사용하는 이유입니다. 도움이되지 않습니다 다른 LU 인수 분해를 사용하여,

그 때문에 (내가 박사 팀 데이비스, 창조자의 감독하에 박사 학위에 대한 UMFPACK 작업입니다). 이미 LU 인수 분해입니다. 문제를 해결하는 가장 쉬운 방법 중 하나는 더 나은 메모리가있는 다른 장치에서 문제가 제대로 작동하는지 테스트하는 것입니다.

matlab에서 가비지 컬렉션을 수행하고 메모리를 낭비하는 경우 UMFPACK을 직접 사용하면 도움이 될 것입니다. C/C++로 구현하거나 MATLAB 인터페이스를 사용할 수 있습니다. SuitSparse 패키지를 살펴보십시오.

매트릭스의 구조에 따라 MATLAB은 콜레 스키를 사용하려고합니다. Cholesky가 메모리 관리에 실패 할 경우 MATLAB의 전략이 무엇인지 알 수 없습니다. Cholesky는 메모리 측면에서 관리하기가 더 쉽다는 것을 고려하십시오.

당신을 도울 다른 패키지가 있습니다. CSparse는 가벼운 패키지이며 도움이 될 수 있습니다. 도움이 될만한 다른 famouse 패키지가 있습니다. superLU를 검색하십시오.

관련 문제