【问题标题】:PETSc and MPI COMM world proper usagePETSc 和 MPI COMM 世界的正确用法
【发布时间】:2012-07-01 06:42:43
【问题描述】:

您好,我有一个用 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) 还是有其他我不知道的方法?

【问题讨论】:

    标签: c++ c mpi


    【解决方案1】:

    您需要先致电PetscInitialize。您可以用它替换对MPI_Init 的调用。

    没有必要设置PETSC_COMM_WORLD,除非你只想在队伍的一个子集上使用PETSc。如果你没有自己设置PETSC_COMM_WORLD,它会被PetscInitialize自动设置为MPI_COMM_WORLD的副本。

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

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

    【讨论】:

    • 非常感谢,刚开始的时候文档有点混乱
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 2011-05-26
    • 2013-11-11
    相关资源
    最近更新 更多