【发布时间】:2017-07-24 00:47:31
【问题描述】:
我正在学习使用 C 语言进行并行编程的 MPI,并且我正在使用具有 4 个内核的处理器。我正在尝试从教程中做一个示例,其中的输出应该是:
Hello world! I'm process 0 out of 4 processes
Hello world! I'm process 2 out of 4 processes
Hello world! I'm process 1 out of 4 processes
Hello world! I'm process 3 out of 4 processes
以任何顺序。
这是我的代码:
#include <stdio.h>
#include <mpi.h>
int main(int argc, char** argv)
{
int ierr, num_procs, my_id;
ierr = MPI_Init(&argc, &argv);
ierr = MPI_Comm_rank(MPI_COMM_WORLD, &my_id);
ierr = MPI_Comm_size(MPI_COMM_WORLD, &num_procs);
printf("Hello world! I'm process %i out of %i processes\n", my_id, num_procs);
ierr = MPI_Finalize();
}
我编译它使用:
mpicc helloworld.c -o helloworld
我使用以下方式运行它:
mpirun -np 4 helloworld
这是输出的内容:
Hello world! I'm process 0 out of 1 processes
Hello world! I'm process 0 out of 1 processes
Hello world! I'm process 0 out of 1 processes
Hello world! I'm process 0 out of 1 processes
它输出了 4 次,我猜这是相对好消息,但程序无法识别线程数和每个线程 ID。
它是并行运行还是仅串行运行 4 次? 如何让程序正确识别线程数量和线程 ID?
提前致谢!
【问题讨论】:
-
您使用的是哪个 MPI 库?
-
mpich。我通过 sudo apt-get mpich 获得的库。除此之外,我什么也没做。 @arash
-
请检查您使用的
mpirun确实来自同一个 MPI 库 mpich(提供 mpicc),而不是来自 openmpi。 (mpich 有mpiexec,openmpi 有mpirun;脚本使用的环境变量集不同,因此 mpirun 无法保证程序是并行启动的)。 -
我该怎么做?一般来说,我对 MPI 和并行编程真的很陌生,我找不到任何可以教我如何设置它的地方。我也尝试过使用相同参数的 mpiexec,但它产生了相同的结果
-
在终端中:
mpirun --version应该会给你一些信息
标签: c multithreading mpi