많은 오른쪽을위한 스파 스 선형 솔버


12

오른쪽 (300 ~ 1000)이 많은 동일한 희소 선형 시스템 (300x300 ~ 1000x1000)을 해결해야합니다. 이 첫 번째 문제 외에도 다른 시스템을 해결하고 싶지만 0이 아닌 동일한 요소 (단지 다른 값)로 일정한 희소성 패턴을 가진 많은 희소 시스템입니다. 내 행렬은 무기한입니다.

분해 및 초기화 성능은 중요하지 않지만 해결 단계의 성능은 중요합니다. 현재 PaStiX 또는 Umfpack을 고려 중이며 Petsc (두 솔버를 모두 지원함)로 해결할 것입니다. 특정 요구 사항 (벡터화, 멀티 스레딩)을 활용할 수있는 라이브러리가 있습니까, 아니면 일반적인 솔버에 의존해야합니까? 어쩌면 내 필요에 따라 약간 수정 할 수 있습니까?

희소 행렬이 보다 큰 경우 어떻게 됩니까?106×106

답변:


10

직접 또는 반복 솔버를 사용할지 여부에 대한 논의를하지 않고 두 가지 점만 추가하고 싶습니다.

  1. 오른쪽이 여러 개인 시스템에 대한 Krylov 방법이 있습니다 ( 블록 Krylov 방법 이라고 함 ). 추가 보너스로, Krylov 공간은 더 큰 벡터 컬렉션으로 구축되므로 표준 Krylov 방법보다 수렴 속도가 빠릅니다. 참조 다이앤 P. 오리어리, 블록 어원이 그라데이션 알고리즘 및 관련 방법을 . Linear Algebra and its applications 29 (1980), 239-322 쪽. Martin H. Gutknecht, 오른쪽이 여러 개인 선형 시스템을위한 Block Krylov 공간 방법 : 소개 (2007).

  2. 희소성 패턴이 동일한 다른 행렬이있는 경우 첫 번째 행렬에 대한 상징적 인수 분해를 사전 계산할 수 있으며이 행렬은 이후 행렬에 대한 수치 분해를 계산하는 데 재사용 할 수 있습니다. (UMFPACK에서는 umfpack di symbolic결과를 사용하여 에 전달할 수 있습니다 umfpack_di_numeric.)


9

일반적으로 반복 솔버를위한 우수한 사전 조건기를 구성하는 데 드는 작업량과 선형 시스템을 실제로 풀 때 좋은 사전 조건을 사용하여 절약 한 작업 간에는 균형이 있습니다. 귀하의 경우에는 분명합니다. 선형 시스템을 너무 많이 풀어야하기 때문에 좋은 전제 조건을 구성하는 데 최대한 많은 노력을 기울이십시오. 사실, 완벽한 전제 조건을 얻기 위해 시간을 투자하는 것이 적절하다고 생각합니다. LU 분해 (예 : UMFPACK 또는 Intel MKL의 일부인 Pardiso 솔버 사용). 그런 다음이 분해를 필요한만큼 여러 번 적용하면됩니다. 풀어야 할 선형 시스템이 있다면 정확한 분해를 이길 수있는 것은 없습니다.O(N)


4
당신의 마지막 진술은 논쟁의 여지가 있습니다. 작업 및 메모리 사용 이 필요한 큐브에 대한 3D FEM 또는 FD 이산화의 정확한 다중 정면 분해를 고려하십시오 . 따라서 정확한 해를 구하려면 오른쪽 당 플롭이 필요하므로 충분히 큰 에 대해 점근 복잡도가 낮은 반복 솔버가 더 빠릅니다. O ( N 4 / 3 ) O ( N 4 / 3 ) NO(N2)O(N4/3)O(N4/3)N
잭 폴슨

3
아마도. 그러나 실제 고려 사항으로, 솔버 앞의 상수는 꽤 큰 반면 앞의 상수 는 아니. O ( N 4 / 3 )O(N)O(N4/3)
Wolfgang Bangerth

2
중요한 점은 크로스 오버 지점에서 인수 분해에 대한 기억력과 인내심이 있다는 것입니다. 7 포인트 라플라시안의 경우, 멀티 그리드에는 약 50 flops / dof가 필요하며, 약 dofs 에서 플롭 크로스 오버 (백 솔루션과 비교)가 발생합니다. back-solve는 훨씬 더 많은 메모리를 사용하지만 많은 오른쪽에 대한 커널이 일반적으로 사용 가능합니다. 멀티 그리드는 일반적으로 많은 오른쪽에 쓰지 않으므로 벡터화 가능성을 희생합니다. RHS 당 시간이 에서 3D Laplacian에 대한 CHOLMOD (또는 다른 패키지) 백 솔브보다 적은 MG 알고리즘을 작성할 수 있습니다 . N < 300 (K)105n<300k
제드 브라운

3

"0이 아닌 동일한 요소 (단지 다른 값)"에 대해 이야기 할 때 문제에 대한 진술에서 명확하지 않습니다. 행렬이 일정한 희소성 패턴을 가지고 있지만 실제 값이 변경된다고 말하는가? 아니면 행렬이 실제로 일정하다고 말하는가?

희소 행렬이 일정하고 오른쪽 만 변한다고 가정하면 행렬의 직접 인수 분해 ( 형식)를 사용하는 방법을 살펴보고 오른쪽 / 앞으로 각 오른쪽을 풀어야합니다. 역 치환. 인수 분해가 완료되면 각 솔루션은 매우 빠릅니다 ( 완전히 밀집된 요인의 경우 시간이지만 희소 요인의 경우 요인의 0이 아닌 수에 비례합니다). O ( n 2 )PA=LUO(n2)

이 크기의 여러 오른쪽과 방정식 시스템의 경우 반복적 인 방법은 일반적으로 가치가 없습니다.

언급 한 모든 패키지는 직접 인수 분해 방법을 제공합니다 (PetSc는 대부분 반복 솔버로 알려져 있지만) 시스템이 너무 작아서 특히 분산 메모리 환경에서 상당한 병렬 속도 향상을 얻을 수는 없습니다.

PaStix와 PetSc는이 작업에 Umfpack을 사용하는 것이 좋습니다.


답변 주셔서 감사합니다. 명확히하기 위해 : 먼저 오른쪽이 많은 단일 행렬을 요청한 다음 또 다른 문제는 희소성 패턴이 동일한 행렬의 모음이지만 값이 변경되므로 각 rhs에 대해 각각 해결해야합니다. 보조 질문 : 희소 행렬이 이제 10 ^ 5x10 ^ 5에서 10 ^ 6x10 ^ 6이면 어떻게됩니까?
nat chouf

2
필자의 경험에 따르면, 행렬의 크기가 보다 작 으면 희소 직접 솔버 (예를 들어 2d PDE의 이산화)가 우수한 반복 솔버보다 빠릅니다 . 그것은 대략적인 추측 일지 모르지만 아이디어를 줄 수 있습니다. 105
Wolfgang Bangerth

특히 매우 정확한 솔루션이 필요하지 않고 특히 효과적인 사전 조건을 찾을 수 있거나 시스템의 상태가 양호한 경우 오른쪽 하나만 사용하여 대규모 시스템에 반복 방법을 사용하는 것이 좋습니다. 그러나 시스템의 상태가 나쁘고 정확한 솔루션이 필요하며 올바른 전제 조건을 찾을 수없는 경우 직접 인수 분해를 사용하는 것이 좋습니다.
Brian Borchers

또 다른 중요한 고려 사항은 메모리 요구 사항입니다. 이 인 매우 큰 희소 시스템에 들어가면 직접 인수 분해를 저장할 메모리가 부족할 수 있습니다. 이 시점에서 반복적 인 방법을 사용하도록 전환해야합니다. 10 6N106
Brian Borchers
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.