#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 с решателем, коммуникаторы должны быть конгруэнтными.