簡體   English   中英

MPI僅識別C中的1個進程?

[英]MPI only recognising 1 process in C?

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

提前致謝!

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

此序列清楚地向我們表明,您的MPI運行時無法檢測到並行啟動,這可能是由於配置錯誤:您的mpicc來自一個MPI實現,而mpirun來自另一個。 例如,MPICH和OpenMPI都具有用於編譯MPI程序的mpicc腳本,但是它們的mpiexec / mpirun程序不兼容。 使用MPICH進行編譯,從OpenMPI啟動程序開始,MPICH運行時將不會收到需要的環境變量來確定並行運行及其參數。

您應該重新訪問已安裝軟件包的列表( dpkg -l|egrep 'mpich|openmpi' ),並檢查哪個文件來自哪個庫( dpkg -L mpichdpkg -L openmpi-bindpkg -L libmpich-devdpkg -L libopenmpi-dev )。 Ubuntu / debian也有“替代”系統,該系統將安裝符號鏈接mpiccmpirun到實際腳本(執行ls -l /usr/bin/mpicc /usr/bin/mpirun可以查看鏈接的當前狀態)。 檢查update-alternatives工具,其手冊頁文檔,以了解如何將所有以mpi命名的腳本重置為一個實現(並且具有galternatives GUI)。

根據軟件包中的文件列表,mpich和openmpi具有mpirun / mpiexec變體,后綴為http://packages.ubuntu.com/yakkety/amd64/openmpi-bin/filelist http://packages.ubuntu.com/yakkety/amd64 / mpich / filelist

/usr/bin/mpiexec.openmpi
/usr/bin/mpirun.openmpi
/usr/bin/mpiexec.hydra
/usr/bin/mpiexec.mpich
/usr/bin/mpirun.mpich

mpicc腳本的情況相同: http : //packages.ubuntu.com/yakkety/amd64/libopenmpi-dev/filelist http://packages.ubuntu.com/yakkety/amd64/libmpich-dev/filelist

/usr/bin/mpicc.openmpi
/usr/bin/mpicc.mpich

始終從同一實現中使用mpicc和mpirun(或mpiexec)。 您也可以使用帶有后綴的變體來確保: mpicc.openmpimpiexec.openmpi對或mpicc.mpichmpiexec.mpich對。

要使用某些MPI實施,您應該針對bin,lib和dev軟件包完全安裝它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM