如何在程序运行时检查程序是否正在使用MPI?具体来说,如何验证程序是否在多个处理器上运行?另外,如何确定我的程序是否在多个节点上正确运行?
答案 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。