Последовательное приложение - это особый случай параллельного приложения (когда число процессов = 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.