测试程序是否正确使用了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。
如何检查程序在运行时是否正在使用 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。