PETSc와 병렬로 간단한 Ax = b 시스템 해결


10

PETSc 패키지를 처음 사용합니다.

매트릭스 시장 형식으로 ~ 4000x4000 매트릭스 A가 있으며 PETSc가 여러 프로세서를 사용 하여이 문제를 해결하도록하고 싶습니다.

단일 프로세서에서 시스템을 해결하는 방법을 알고 있지만 매트릭스와 벡터를 다른 프로세서로 분산시키는 방법을 모르겠습니다.

이를 수행하기위한 간단한 지침이 있습니까?

답변:


14

매트릭스 마켓은 병렬로 읽을 수있는 끔찍한 형식이므로 더 나은 병렬 형식으로 사전 처리하는 것이 좋습니다. 행렬 크기가 매우 작기 때문에 성능은 문제가되지 않지만 가장 쉽고 가장 일반적인 것은 Python 또는 Matlab / Octave를 사용하여 Matrix Market 파일을 PETSc 이진 형식으로 작성하여를 사용하여 효율적으로 읽을 수 있습니다 MatLoad(). 예를 들어, 전처리이 파이썬 코드를 사용할 수 있습니다 (추가 $PETSC_DIR/bin/pythonscripts귀하의에 PYTHONPATH)

import scipy.io, PetscBinaryIO
A = scipy.io.mmread('thematrix.mtx')
PetscBinaryIO.PetscBinaryIO().writeMatSciPy(open('petscmatrix','w'), A)

이 때 파일에 벡터를 쓸 수도 있습니다. 시스템을 읽고 해결하려는 경우 방금 작성한 이진 파일을 읽는 src/ksp/ksp/examples/tutorials/ex10.c옵션과 함께 사용할 수 있습니다 -f petscmatrix.

실제 응용 프로그램에서는 파일을 디스크에 모든 형식으로 쓰는 워크 플로를 피해야합니다. 도메인 분해 된 문제 표현을 사용하여 매트릭스를 병렬로 조립하는 것이 훨씬 좋습니다. PETSc의 대부분의 예는 이런 식으로 작성되었습니다.

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