1

嗨,我有一个用 C++ 编写的程序,其中有一个或两个函数使用 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)或者我可以简单地通过使用 MPI_COMM_WORLD 和 Petsc 函数来获得..

4)还是有另一种我不知道的方法?

4

1 回答 1

3

你需要先打电话PetscInitialize。您可以MPI_Init用它替换调用。

PETSC_COMM_WORLD除非您只想在排名的子集上使用 PETSc,否则无需设置。如果你自己不设置PETSC_COMM_WORLD,它会被自动设置PetscInitializeMPI_COMM_WORLD.

然后,当您调用 PETSc 函数时,您可以使用PETSC_COMM_WORLD. 在程序调用结束时PetscFinalize,它将MPI_Finalize为您调用,除非您MPI_Init手动调用而不是PetscInitialize单独使用。

在程序的其余部分无需更改MPI_COMM_WORLD为。PETSC_COMM_WORLD

于 2012-06-30T22:42:43.913 回答