测试程序是否正确使用MPI(分布式)?

时间:2015-09-24 21:10:17

标签: parallel-processing mpi hpc

如何在程序运行时检查程序是否正在使用MPI?具体来说,如何验证程序是否在多个处理器上运行?另外,如何确定我的程序是否在多个节点上正确运行?

2 个答案:

答案 0 :(得分:0)

我假设您正在尝试找出运行MPI进程的处理器/主机。

您可以使用MPI_Get_processor_name功能打印处理器名称。

以下是您的代码的样子。

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

int main(int argc, char **argv)
{
    int rank, max_len;
    char processorname[MPI_MAX_PROCESSOR_NAME];
    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD, &rank);
    MPI_Get_processor_name(processorname,&max_len);
    printf("Hello world!  I am process number: %d on processor %s\n", rank, processorname);
    MPI_Finalize();
    return 0;
}

现在编译程序使用mpicc -o hello_world hello_world.c。 要运行该程序,请使用mpirun -np 4 -f machinefile ./hello_world。 这将在您的机器文件中提到的4个不同处理器中运行该程序。

答案 1 :(得分:0)

您没有告诉我们,您实际在寻找什么。你的问题不清楚和含糊不清,如果你能改进它会很棒。话虽这么说,我想你想知道你的进程实际上是由不同的CPU内核执行的。

首先,Pooja Nilangekar解释了一种验证网络分布的方法。现在,在单个节点中,它很可能取决于您运行的系统。如果它是Linux,您可以使用/proc文件系统,并在/proc/self/中检查当前进程的状态。这个伪文件系统提供了一个文件stat,其中包含一个显示cpu_id的字段processor,该进程最后一次运行。也许,同时检查/proc/self/status的cpus,允许该进程运行。可能是MPI或您的调度程序对每个进程都有限制。结合Pooja Nilangekar答案中的节点信息,您可以获得每个过程的运行信息。

如果您无法修改源代码,让每个进程报告它运行的位置,我认为,查看使用哪个核心的最简单方法是top,也许还可以查看此博客{ {3}},也提到了mpstat和sar。