2016-12-07 3 views
0

Je me demandais si quelqu'un connaissait une raison quelconque pour laquelle il serait avantageux d'appeler PetscInitialize sur un sous-communicateur? Par exemple, j'ai un problème que je cours sur 4 noyaux, mais seulement deux d'entre eux doivent utiliser Petsc. Je peux appeler PetscInitialize sur un subcommunicator ne comprenant que les deux processus en mettantAvantage d'appeler PetscInitialize sur un sous-communicateur

PETSC_COMM_WORLD=mySubCommunicator

mais je ne pourrais pas initialiser simplement sur MPI_COMM_WORLD et seulement appeler des routines PETSc sur le subcommunicator? La raison pour laquelle je demande est que cela simplifierait mon code pour simplement initialiser sur MPI_COMM_WORLD, mais je ne voudrais pas en subir de conséquences négatives. Merci pour vos commentaires

Répondre

1

Cela devrait fonctionner tant que vous n'appelez aucune opération collective sur PETSC_COMM_WORLD avec le sous-ensemble des rangs. Les seules fonctions qui le font implicitement que j'ai pu trouver étaient PetscMallocDump, et quelques PetscLog*. Vous devez également appeler PetscFinalize sur tous les grades.