답변:
병렬 기하 멀티 그리드는 구조화 된 그리드에서 구현하기가 간단합니다. 대수 및 비정형 멀티 그리드가보다 기술적 입니다. 구현에 대한 링크는 이 답변 을 참조하십시오 .
곱셈 방법 (예 : 사이클)에서는 한 번에 하나의 레벨 만 계산할 수 있습니다. 레벨의 수는 여기서 은 자유도이고 는 더 큰 계수 (보통 차원 에서 약 또는 ) 임)이므로이 로그 항은 제거 할 수 없습니다. 추가 방법은 일부 상수 요소를 희생하지만 모든 수준을 동시에 계산할 수 있으므로 로그 요소를 입니다. 동시성 증가로 인해 상수가 열악하고 부가적인 방법의 견고성이 줄어드는 실제 하드웨어에 대한 데모는 아직 보지 못했습니다.log c N N c 2 d 3 d d log 2 log c N
Gauss-Seidel은 곱셈이고 효율적으로 병렬화되지 않는 매우 인기있는 스무더입니다. 구조화 된 그리드에서 간단한 이산화를 위해, 그리고 메모리 대역폭이 중요하지 않은 경우, 레드-블랙 Gauss-Seidel의 고전적인 솔루션이 합리적입니다. 보다 복잡한 문제와 최신 하드웨어에 대해 Adams (2001) 는 훨씬 더 효율적인 알고리즘을 보여줍니다. 많은 문제의 경우 각 하위 도메인에서 독립적 인 Gauss-Seidel을 사용하는 간단한 접근 방식은 전적으로 만족 스럽습니다. Gauss-Seidel의 대안은 감쇠 Jacobi 또는 다항 평활 기를 사용 하는 것입니다. 비교는 Adams, Brezina, Hu 및 Tuminaro (2003) 를 참조하십시오 . 이러한 스무더의 성능 모델은 다른 스텐실 계산과 유사하므로 최적의 확장 성이 약합니다. 대기 시간을 포괄 할 수있을 정도로 큰 하위 도메인의 경우
실제로, 거친 그리드는 더 많은 프로세스를 추가하면 런타임이 증가하는 것 외에는 강력한 확장 성 한계에 빠르게 도달하므로 더 작은 MPI 커뮤니케이터에 있어야합니다. 이것은 구현에 약간의 복잡성을 추가합니다. 거친 수준이 거칠기를 계속하기에 너무 많은 구조를 갖는 문제의 경우, 거친 수준 해결은 병목 현상이 될 수 있습니다.
다양한 병렬 멀티 그리드 방법을 테스트 하려면 PETSc 와 같은 라이브러리를 사용하여 사용자 코드를 거의 사용하지 않고 다양한 알고리즘을 실행할 수 있습니다.