如何检测我的应用程序是否由MS MPI mpiexec启动?

时间:2018-11-20 10:38:32

标签: ms-mpi

我的应用程序是顺序的,我想使其并行。因此,我想检查我是否处于MPI环境中或不适应并行处理。

1 个答案:

答案 0 :(得分:2)

顺序应用程序是并行应用程序的一种特殊情况(当进程数= 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。等等