Как я могу определить, запущено ли мое приложение MS MPI mpiexec?
Мое приложение является последовательным, и я хочу сделать его параллельным. Поэтому я хочу проверить, нахожусь ли я в среде MPI или нет, чтобы адаптироваться к параллельной обработке.
0 ответов
Последовательное приложение - это частный случай параллельного приложения (когда количество процессов = 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. И т.п.