我正在學習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