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

Test if the program uses MPI (distributed) correctly?

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

我假设您正在尝试找出哪个 processor/host 是 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 个不同处理器中的程序。

您没有告诉我们,您实际上在寻找什么。你的问题不清楚,模棱两可,如果你能改进它就太好了。话虽这么说,我猜您想知道您的进程是否实际上由不同的 CPU 核心执行。

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

如果您不能修改源代码,让每个进程报告它所在的位置 运行ning,我认为,查看使用了哪些内核的最简单方法是 top, maybe also have look at this blog on How do I find out Linux CPU utilization?,这也提到 mpstat 和 sar。