Как я могу определить, запущено ли мое приложение MS MPI mpiexec? - PullRequest
0 голосов
/ 20 ноября 2018

Мое приложение является последовательным, и я хочу сделать его параллельным.Поэтому я хочу проверить, нахожусь ли я в среде MPI или нет, чтобы адаптироваться к параллельной обработке.

1 Ответ

0 голосов
/ 18 августа 2019

Последовательное приложение - это особый случай параллельного приложения (когда число процессов = 1), поэтому вам не нужно никаких специальных приспособлений.Просто позвоните MPI_Init и, как предлагается в комментариях, определите размер коммуникатора.

Некоторые реализации MPI (например, Open MPI и MS MPI) позволяют вам выполнять вашу программу напрямую, без mpiexec, и все жевызов MPI_Init не прервется, поэтому ваше параллельное приложение можно использовать так же хорошо, как и последовательное.

Чтобы действительно определить, действительно ли ваше приложение выполняется с использованием mpiexec, вы обычно можете проверитьпеременные средыЯ использовал следующую программу для печати переменных среды моего приложения Windows (связано с MS MPI v10):

#include <mpi.h>
#include <stdio.h>
#include <windows.h>

int main (void)
{
    for (const char* envs = GetEnvironmentStrings();
         *envs != 0;
         envs += strlen(envs) + 1)
    {
        printf("%s\n", envs);
    }

    return 0;
}

Когда я запускаю приложение, используя mpiexec -n 1, я вижу, что установлено несколько новых переменных средыповерх тех, которые уже присутствуют, когда не используется программа запуска:

PMI_APPNUM=0
PMI_DOMAIN=a96606eb-0e17-46fc-ba6e-d8ca3f462bc6
PMI_HOST=localhost
PMI_KVS=4d648866-1723-4f0d-b2dc-450eae52e410
PMI_NODE_IDS=smp_region_5540
PMI_PORT=03fd2819-719a-43a0-ad9a-d8b9fb0443fd
PMI_RANK=0
PMI_RANK_AFFINITIES=affinity_region_5540
PMI_SIZE=1
PMI_SMPD_ID=1
PMI_SMPD_KEY=0
PMI_SPAWN=0

Следовательно, наличие этих переменных среды может указывать на использование MS MPI.Точно так же наличие OMPI_COMM_WORLD_SIZE будет указывать на использование Open MPI.Etc.

...