PETScと並行して単純なAx = bシステムを解く


10

PETScパッケージは初めてです。

マトリックスマーケット形式の〜4000x4000マトリックスAを持っています。複数のプロセッサを使用してこれを解決するためにPETScを取得したいと考えています。

単一のプロセッサでシステムを解く方法は知っていますが、異なるプロセッサ間で行列とベクトルを分散する方法はわかりません。

これを行うための簡単な手順はありますか?

回答:


14

マトリックスマーケットは、並列読み取り用のひどいフォーマットなので、より良い並列フォーマットに前処理することをお勧めします。マトリックスのサイズは非常に小さいため、パフォーマンスは問題になりませんが、最も簡単で最も一般的なことは、PythonまたはMatlab / Octaveを使用して、マトリックスマーケットファイルをPETScバイナリ形式で書き込むことMatLoad()です。たとえば、あなたが前処理のために、このPythonコードを使用することができます(追加$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.