我正在学习C语言并行编程的MPI,我正在使用一个4核处理器。我正尝试从输出应该是教程做一个例子:MPI只识别C中的一个进程?
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库? – Arash
mpich。我通过sudo apt-get mpich获得的库。除此之外,我还没有做过任何事情。 @arash –
请检查您使用的mpirun是否来自相同的MPI库mpich(它提供了mpicc),而不是来自openmpi。 (mpich有'mpiexec',openmpi有'mpirun';脚本使用的一组环境变量是不同的,所以mpirun不能保证程序并行启动)。 – osgx