В чем смысл использования COMM_WORLD или COMM_SELF для создания экземпляра TS, DMDA, Vec и т. Д

#openmpi #petsc

#openmpi #petsc

Вопрос:

Я рассматриваю несколько примеров из PETSc и petsc4py и просматриваю руководство пользователя PETSc в формате PDF. В руководстве указано:

Для тех, кто не знаком с MPI, accommunicator — это способ указания набора процессов, которые будут совместно задействованы в вычислении или обмене данными. Коммуникаторы имеют тип переменной MPI_Comm . В большинстве случаев пользователи могут использовать коммуникатор PETSC_COMM_WORLD для указания всех процессов в данном запуске и PETSC_COMM_SELF для указания одного процесса.

Я полагаю, что понимаю это утверждение, но я не уверен в реальных последствиях фактического использования этих коммуникаторов. Я не уверен в том, что на самом деле происходит, когда вы делаете TSCreate(PETSC_COMM_WORLD,...) vs TSCreate(PETSC_COMM_SELF,...) или аналогично для распределенного массива. Если вы создали DMDA с PETSC_COMM_SELF помощью, может ли это означать, что DM объект на самом деле не будет распределен по нескольким процессам? Или, если вы создаете TS с PETSC_COMM_SELF помощью и DM с PETSC_COMM_WORLD помощью, означает ли это, что решатель фактически не может получить доступ к узлам-призракам? Влияет ли это на результаты DMCreateLocalVector и DMCreateGlobalVector ?

Ответ №1:

Коммуникатор для решателя решает, какие процессы участвуют в операциях решателя. Например, TS с PETSC_COMM_SELF будет выполняться независимо для каждого процесса, тогда как TS с PETSC_COMM_WORLD будет создавать единую систему для всех процессов. Если вы используете DM с решателем, коммуникаторы должны быть конгруэнтными.