Linux mpi 程式示例

2021-06-21 16:11:54 字數 1663 閱讀 2786

下面用乙個簡單的例子,給出在linux平台上開發mpi並行程式的乙個基本框架,以便對基於mpich的並行程式有乙個感性認識。基於mpich的並行程式可以用c或者fortran開發,此處給出的例子是用c語言編寫的。 

/********************** 

* mpi_hello.c - demo program of mpich. * 

**********************/ 

#include 

#include 「mpi.h」 

int main(int argc, char **argv) 

為了保證編譯的正確性,程式的首部必須包含mpi的標頭檔案mpi.h。該檔案給出了mpi所有呼叫介面的說明,並對所有用到的常量進行了定義。mpi_max_processor_name就是該檔案中定義的乙個常量,是某一mpi具體實現(此處即為mpich)中允許的主機名的最大長度。 

在呼叫任何mpi函式之前,必須先呼叫mpi_init()進行相應的初始化工作。當所有mpi函式呼叫都完成之後,還必須呼叫mpi_finalize()進行相應的清理工作。命令列引數通過mpi_init()函式傳遞給mpi,以便為各個並行執行的程式建立起正確的執行環境。 

接下去的幾個mpi函式用來獲得平行計算環境的一些基本資訊。上面的示例程式只是簡單地輸出了這些資訊,但通常情況下這些資訊將被用來進行問題的自動分解,或者用於建立各並行機間的通訊。mpi_comm_size()函式可以得到參與平行計算的程序個數;mpi_comm_rank()函式可以得到當前正在執行的程序的標識;而mpi_get_processor_name()函式則能夠獲得當前程序所在主機的名稱。 

基於mpi的並行程式可能有很多種編譯方法,大多數mpi實現都提供了乙個易於使用的指令碼來完成編譯,這些指令碼能夠為編譯器設定合適的引數,幫助編譯器找到mpi標頭檔案所在的目錄,並能夠連線上所需的庫檔案,從而保證編譯過程的正確性。mpich和lam都提供了乙個名為mpicc的指令碼來完成並行程式的編譯。例如,要編譯上述的示例程式,只需執行下面的命令即可: 

mpicc -o mpi_hello mpi_hello.c

在並行環境中的多台計算機上同時執行該程式,要將編譯好的程式複製到不同的機器上,並且可執行程式必須放 

mpirun -np 6 mpi_hello

在mpich中,mpirun是mpi程式的啟動指令碼,它簡化了並行程序的啟動過程,盡可能遮蔽了底層的實現細節,從而為使用者提供了乙個通用的mpi並行機。在用mpirun命令執行並行程式時,引數-np指明了需要並行執行的程序個數。mpirun首先在本地結點上啟動乙個程序,然後根據/usr/local/share/machines.linux檔案中所列出的主機,為每個主機啟動乙個程序。若程序數比可用的並行節點數多,則多餘的程序將重新按照上述規則進行 hello world! i′m rank 0 of 6 on node1 

hello world! i′m rank 1 of 6 on node2 

hello world! i′m rank 5 of 6 on node3 

hello world! i′m rank 3 of 6 on node1 

hello world! i′m rank 2 of 6 on node2 

hello world! i′m rank 4 of 6 on node3 

Linux MPI集群配置

參考文件 linux下mpi並行程式設計環境搭建配置 mpi是一種平行計算架構,mpich是mpi的一種實現,本集群使用虛擬機器安裝,作業系統是ubuntu14.04,使用三颱機器,使用者名稱都是ubuntu,機器名分別是ub0,ub1,ub2 tar xzvf soft mpich 3.0.4.t...

後門程式 示例

後門程式bdoor及原始碼選擇自 amh 的 blog include stdafx.h include winsock2.h pragma comment lib,ws2 32 define port 5010 define reg run software microsoft windows c...

C 程式示例

例1.用篩法判定素數 include include include using namespace std int main ifstream in sushu.txt for int a in a a 2 a 10000 cout 例2.若干個向量按長短排序 include include in...