큰 희소 대칭 (양의 한정은 아님) 시스템을위한 최선의 솔버 선택


10

현재 일부 특정 알고리즘에 의해 생성 된 매우 큰 대칭 (그러나 양의 한정이 아닌) 시스템을 해결하기 위해 노력하고 있습니다. 이 행렬에는 병렬 해결에 사용할 수있는 훌륭한 블록 희소성이 있습니다. 그러나 직접 접근 방식 (예 : 다중 정면) 또는 반복적 접근 방식 (사전 조건 GMRES 또는 MINRES)을 사용 해야하는지 결정할 수 없습니다. 필자의 모든 연구에 따르면 반복 솔버 (7 개의 내부 반복이 매우 빠른 수렴 임에도 불구하고)는 MATLAB에서 직접 '\'연산자를 이길 수 없습니다. 그러나 이론적으로 직접적인 방법은 비용이 많이 든다. 어떻게 이런 일이? 그러한 경우에 대한 최신 문서 나 종이가 있습니까? GMRES와 같은 유연한 반복 솔버처럼 직접 방법을 사용하여 병렬 시스템에서 블록 희소성을 사용할 수 있습니까?


3
사람들이 특정 매트릭스에 대한 자세한 내용을 알지 못하면 실제로 효과적으로 의견을 말할 수 있다고 생각하지 않습니다. 치수는 무엇입니까? 희소성 패턴은 어떤가요?
Costis

2
많은 것은 당신이 의미하는 바에 달려 있습니다. 변수의 개수 은 수십만입니까? 수백만? n
Brian Borchers

2
이 질문은 scicomp.stackexchange.com/q/81/276 과 상당히 겹칩니다 . 유용한 정보를 찾을 수 있습니다. 또한 해당 질문에 따라 운영자의 스펙트럼 (또는 사전 조정 된 운영자의 스펙트럼)에 대해 이야기하는 것이 유용 할 수 있습니다.
Geoff Oxberry

답변:


9

MUMPS 스파 스 직접 솔버는 대칭 무한 시스템을 처리 할 수 ​​있으며 자유롭게 사용할 수 있습니다 ( http://graal.ens-lyon.fr/MUMPS/ ). 이언 더프 (Ian Duff)는 MUMPS와 MA57의 저자 중 하나 였으므로 알고리즘에는 많은 유사점이 있습니다.

MUMPS는 분산 메모리 병렬 컴퓨터 용으로 설계되었지만 단일 프로세서 컴퓨터에서도 잘 작동합니다. 멀티 스레드 BLAS 라이브러리와 링크하면 공유 메모리, 멀티 코어 프로세서에서 적절한 속도 향상을 얻을 수 있습니다.

"매우 큰"크기는 말하지 않았지만 MUMPS에는 팩터링 된 매트릭스가 사용 가능한 메모리에 맞지 않는 문제를 처리 할 수있는 코어 외 기능도 있습니다.


7

직접 솔버가 겪는 일반적인 문제는 필인 현상입니다. 이는 희소 행렬의 역수가 치밀 할 수 있음을 의미합니다. 이것은 매트릭스의 구조가 "적합하지 않은"경우 큰 메모리 요구 사항을 초래한다.

이러한 문제를 해결하려는 시도가 있으며 MATLAB의 기본 lu기능은 그 중 일부를 사용합니다. 순열, 대각선 스케일링 등에 대한 개요는 http://www.mathworks.de/de/help/matlab/ref/lu.html 을 참조 하십시오 . 물론 MUMPS ( http://graal.ens-lyon.fr/MUMPS/ ) 와 같은 고급 패키지의 경우에도 마찬가지입니다 .

그러나 일반적으로 문제가 충분히 큰 경우 해당 메모리 경계에 도달하고 반복 (Krylov) 방법을 사용해야합니다.

문제가 대칭적이고 무기한 경우, MINRES가 확실한 선택 일 수 있습니다. 그러나 문제가 대칭 인 경우 GMRES와 MINRES는 정확한 산술에서 동일한 작업을 수행하지만 GMRES는 직교성 손실이 적은 경향이 있습니다. 따라서 일부 사람들은 GMRES를 "최고의 MINRES 구현"으로 간주합니다.

어쨌든 시스템을 사전 조정하여 이익을 얻을 수 있습니다. 전제 조건을 조정하는 데 시간을 허비하지 않으려면 불완전한 LU-factorization 전제 조건 (ILU)이 이미 어딘가에있을 수 있습니다.


2

반복적 솔버는 문제가 충분히 큰 경우에만 직접적인 방법을 능가 할 수 있습니다 (대형, 필요한 스토리지, 구현 효율성과 같은 여러 요인에 따라 다름). 또한 적절한 사전 조건 (실제로)을 사용하는 경우에만 모든 krylov 방법 (예 : GMRES)이 좋습니다. 사전 조건을 사용하지 않는 경우 krylov 방법은 일반적으로 사용되지 않습니다. 나도 블록 희소 행렬 (PDE 응용 프로그램에서 나옴)으로 작업하고 거친 그리드 보정 (또는 멀티 그리드)과 결합 된 블록 사전 조건 (겹치는 첨가제 schwarz) krylov 솔버 (다시 시작된 GMRES 또는 BiCG-Stab)가 확장 가능하다는 것을 관찰했습니다. 행렬의 유형.


2

Matlab '\'연산자는 최고의 노치 프로그래밍으로 인해 매우 효율적입니다. Timothy Davis의 저서에서 일부 아이디어와 이들이 가능한 모든 바로 가기를 사용한 방법을 볼 수 있습니다.

matlab에서는 잘 개발되고 안정적인 gmres를 사용할 수 있습니다. 아마도 이론적으로 귀하의 경우에 이상적인 광부는 아마도 신뢰할 만하지 않을 수도 있습니다 (적어도 내 경험에 따르면). 다음과 같은 경우 matlab gmres에서 동등하거나 더 높은 효율을 가져와야합니다.

  1. 시스템이 충분히 큽니다 (적어도 수천 x 수천).
  2. 올바른 종류의 매개 변수를 사용하는 경우 (RESTART, MAXIT, X0). 이에 대한 명확한 지침이 없습니다. 당신의 경험을 사용하십시오.
  3. 좋은 전제 조건을 사용하십시오. ILU를 사용하거나 더 저렴한 블록 Jacobi를 사용할 수 있습니다. 이것은 노력을 상당히 줄일 것입니다.
  4. 가장 중요 : 행렬이 희소 인 경우 matlab 희소 형식을 사용하십시오. 이를 위해 Matlab gmres가 이상적으로 구축되었습니다. 비용을 크게 줄일 수 있습니다.

더 큰 시스템의 경우 PETSc와 같은 도구를 사용하십시오.


1

매트릭스가 수만 대 이하의 차원을 갖는 경우, 무한 대칭 시스템에 대해 자유롭게 사용할 수있는 직접 방법이 많지 않지만 직접 알고있는 방법을 사용하십시오 (실제로는 오픈 소스가 아님). HSL 의 MA57 이 있지만 학술 용으로 만 무료입니다. 대칭을 무시하고 UMFPACK을 사용할 수 있습니다 .

수백 만 가지의 차원에서 직접 방법의 메모리 사용은 일반적인 데스크탑 컴퓨터가 합리적으로 처리 할 수있는 양을 초과하기 시작하므로 강력한 공유 메모리 시스템이 없으면 반복적 인 방법으로 이동해야합니다. 무한한 문제의 경우, 분석이 가능하지만 대칭 시스템에 BiCG (biconjugate gradient)를 특수화 할 수 있습니다. 보다 수치적인 안정성을 제공하는 대칭 시스템 용 으로 최근에 출시 된 MINRES-QLP 가 있습니다.

직접 메서드의 경우 실제로 행렬을 형성해야하는 반면, 반복적 인 접근 방식에서는 일반적으로 행렬을 명시 적으로 형성하지 않기 때문에 두 가지 방법은 다소 다른 구현이 필요합니다.

하나의 접근법이 다른 방법보다, 특히 매트릭스 차원의 함수로서 더 빠른 이유는 여러 가지가 있습니다. 조건이 매우 좋지 않은 시스템의 경우 반복적 인 방법이 정체 될 수 있습니다. 그다지 희소하지 않은 행렬의 경우 직접 메서드는 필인을 많이 만들어 결과적으로 속도가 느려집니다. 또한 Matlab의 직접 방법은 고도로 최적화되어 있으며 (내부적으로 UMFPACK 또는 MA57 사용) 반복적 인 방법은 Matlab에서 직접 코딩되며 병목 현상은 matvec 및 도트 제품의 적용이므로 레벨 3 BLAS를 활용할 기회가 적습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.