1

こんにちは、私は C++ で書かれたプログラムを持っています。そのプログラムでは、多くの関数のうちの 1 つまたは 2 つが PETSc を使用しています。

PETSc を使用しているときに適切なアプローチとなるこれらの関数を呼び出すとき

1) a)change all MPI_COMM_WORLD to PETSC_COMM_WORLD for my entire program
   b)change MPI_Init to PetscInitialize

..

2)petsc用に別の通信世界を作成し、それを関数に渡します

    MPI_Init(&argc, &argv);
    ..
    //some many line of code
    ..

    MPI_Comm_split(MPI_COMM_WORLD, rank, 0, &PETSC_COMM_WORLD);

    petsc_function(PETSC_COMM_WORLD,.....

    //some how reverting the comm_split here to continue as normal so all the non petsc functions work

..

3) または、Petsc 関数で MPI_COMM_WORLD を使用するだけで取得できますか..

4)または私が知らない別のアプローチはありますか?

4

1 に答える 1

3

PetscInitialize最初に電話する必要があります。への呼び出しをそれに置き換えることができますMPI_Init

PETSC_COMM_WORLDランクのサブセットでのみ PETSc を使用する場合を除き、設定する必要はありません。自分で設定しない場合はPETSC_COMM_WORLD、 によって自動的に設定されPetscInitialize、 のコピーになりMPI_COMM_WORLDます。

次に、PETSc 関数を呼び出すときに、 を使用できますPETSC_COMM_WORLD。プログラム call の最後に、単独で使用する代わりに手動で呼び出さない限り、PetscFinalize呼び出します。MPI_FinalizeMPI_InitPetscInitialize

プログラムの残りの部分で変更MPI_COMM_WORLDする必要はありません。PETSC_COMM_WORLD

于 2012-06-30T22:42:43.913 に答える