MPI簡介

      網友投稿 2431 2025-04-07

      MPI

      簡介

      在程序中,不同的進程需要相互的數據交換,特別是在科學計算中,需要大規模的計算與數據交換,集群可以很好解決單節點計算力不足的問題,但在集群中大規模的數據交換是很耗費時間的,因此需要一種在多節點的情況下能快速進行數據交流的標準,這就是MPI。

      MPI是一組用于多節點數據通信的標準,而非一種語言或者接口。具體的使用方法需要依賴它的具體實現(mpich or openmpi等)。

      mpi的目標是

      實現較高的通信性能

      好的程序移植性

      強大的功能

      編譯與運行

      mpi目前綁定的語言只有FORTRAN 和 C/C++。

      c編譯: mpicc -o mpiProgram mpiProgram.c

      c++編譯:mpicxx -o mpiProgram mpiProgram.cpp

      FORTRAN編譯:mpif77 -o mpiProgram mpiProgram.f

      運行可使用mpirun或mpiexec:

      mpirun/mpiexec -np 2 mpiProgram

      概念

      進程

      通俗的說,進程就是運行的程序。一個程序可以含有多個進程,但一個進程不能同屬于多個程序。進程擁有獨立的運行環境(內存,寄存器,CPU執行時間等),是操作系統中獨立存在的可執行的基本單位。每個進程所占有的資源都是獨立的,不與其他的進程共享,不能訪問其他進程內存空間,其他進程也無法訪問該進程內存空間。但可以通過消息傳遞來進行通信。

      進程組

      指一個mpi程序中的所有(n個)進程的集合。該程序中所有進程編號從0到n-1,主要是為了標識不同的進程,可以通過進程的編號來索引該進程。不同進程組的進程的編號可以相同。

      通信器(MPI_Comm)

      可以理解圍毆一組進程間可以通信的進程組,通信函數必須在通信器內調用。

      消息

      MPI簡介

      需要通信的數據。

      mpi對象

      mpi內存的數據結構,包括數據類型(MPI_DOUBLE),通信器(MPI_COMM)等

      mpi數據類型

      MPI_BYTE為一個字節,即8bit。MPI_PACKED為打包數據類型,可以將自定義數據類型打包傳遞。

      mpi模型基本結構

      #include void main(int argv,char* argv[])} int rank,size; MPI_Init(&argc,&argv); //初始化MPI環境 MPI_Comm_rank(MPI_COMM_WORLD,&rank); //獲取進程組中進程編號rank MPI_Comm_size(MPI_COMM_WORLD,&size); //獲取進程組中進程數size ..... //各種操作 ..... MPI_Finalize(); //退出MPI環境 }

      program main include 'mpif.h' character * (MPI_MAX_PROCESSOR_NAME) processor_name integer myid, numprocs, namelen, rc, ierr call MPI_INIT( ierr ) call MPI_COMM_RANK( MPI_COMM_WORLD, myid, ierr ) call MPI_COMM_SIZE( MPI_COMM_WORLD, numprocs, ierr ) call MPI_FINALIZE(ierr) end

      首先就是導入mpi的頭文件,使用MPI_INIT(int* argc_p,char*** argv_p)函數初始化mpi。而后就是獲取進程組中的進程編號以及進程總數MPI_Comm_rank(MPI_Comm int*),MPI_Comm_size(MPI_Comm , int*)。 設置完成即可進行數據通信操作。最后使用MPI_Finalize()退出MPI環境。

      mpi基本函數(c版)

      int MPI_Init(int *argc,char ***argv)

      *argc為指向main函數argc的指針,***argv為指向main函數**argv的指針。一般不使用時設置為NULL

      int MPI_Initialized(int *flag)

      檢測mpi環境是否初始化,唯一可在,MPI_Init前使用的函數。

      int MPI_Comm_rank(MPI_Comm comm,int *rank) int MPI_Comm_size(MPI_Comm comm,int *size)

      MPI_Comm是進程通信器類型,即同一個通信器MPI_Comm中的可以進行通信。一般設為MPI_COMM_WORLD,即該程序的所有進程,也可以自己單獨設置不同的通信器。rank為int型數組,保存該通信器中進程的編號。size為int型指針,保存該通信器中進程的數量。

      int MPI_Send(void *buf, int count, MPI_Datatype datatype,int dest, int tag,MPI_Comm comm)

      為阻塞型發送函數,即等消息發送后才可返回執行下一句。buf為發送區緩存。count為發送的數據的大小。datatype為發送的數據類型。dest為發送的目標進程編號。tag為標志,該標志必須和接收函數的標志一致時才可被接收函數接收。comm通信器。

      int MPI_Recv (void *buf, int count, MPI_Datatype datatype,int source, int tag, MPI_Comm comm,MPI_Status *status)

      為阻塞型接收函數,即接收到消息后才可返回執行下一句。buf為接收區緩存,接收區緩存必需大于等于發送的數據。count為接收的數據大小。datatype為接收的數據類型。source為數據的發送源進程編號。tag為標志,該標志必須與發送函數的tag一致才會被接收。comm為通信器。status返回接收狀態。

      int MPI_Isend(const void *buf, int count, MPI_Datatype datatype, int dest, int tag,MPI_Comm comm, MPI_Request *request) int MPI_Irecv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request)

      為對應的發送接收函數的非阻塞型函數,即當函數執行后立馬返回執行下一行代碼,而不需要等待數據正式發送或接收后才可返回。這經常會導致數據的混亂,因此使用非阻塞發送和接收時格外需要注意。

      int MPI_Finalize(void)

      退出MPI環境函數,每個進程都必須調用。調用后不可在使用MPI函數。若不執行該函數,則進程可能會掛起。執行該函數前確保非阻塞通信結束。

      int MPI_Abort(MPI_Comm comm, int errorcode)

      異常終止函數。在出現了致命錯誤而希望異常終止MPI程序時執行,MPI系統會設法終止comm通信器中所有進程, 輸入整型參數errorcode,將被作為進程的退出碼返回給系統

      int MPI_Get_processor_name(char *name,int *resultlen)

      獲取處理器名稱,在返回的name中存儲所在處理器的名稱,resultlen存放返回名字所占字節,應提供參數name不少于MPI_MAX_PRCESSOR_NAME個字節的存儲空間

      int MPI_Get_version(int *version,int *subversion)

      獲取mpi版本號,若版本為4.0,則version為4,subversion為0.

      double MPI_Wtime(void)

      返回調用時刻的墻上時間,用浮點數表示秒數

      任務調度 數據結構

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel中替換功能使用教程
      下一篇:Excel表格怎么自動排序?(excel表格里怎么自動排序)
      相關文章
      亚洲男人天堂av| 亚洲中文字幕无码中文字在线| 国产亚洲精品无码专区| 亚洲国产综合精品中文第一| 亚洲最大中文字幕| 亚洲成aⅴ人片在线观| 亚洲视频在线观看免费视频| 亚洲色图在线播放| 亚洲天堂男人天堂| 78成人精品电影在线播放日韩精品电影一区亚洲 | 国产自偷亚洲精品页65页| 亚洲精品动漫人成3d在线 | 午夜在线亚洲男人午在线| 亚洲AV永久无码精品放毛片| 亚洲精品亚洲人成在线| 亚洲成AV人影片在线观看| 韩国亚洲伊人久久综合影院| 国产精品亚洲综合| 亚洲精品在线视频| 亚洲中文久久精品无码ww16| 亚洲人成无码网站| 亚洲va在线va天堂va不卡下载| 久久久久久亚洲精品| 精品日韩亚洲AV无码一区二区三区| 亚洲一区二区中文| 亚洲一级毛片在线观| 国产精品亚洲一区二区麻豆| 亚洲乱人伦中文字幕无码| 在线亚洲精品视频| 久久亚洲AV永久无码精品| 亚洲中文字幕在线乱码| 婷婷精品国产亚洲AV麻豆不片| 亚洲日韩乱码中文无码蜜桃臀 | 国产亚洲美女精品久久久| 国产亚洲精品资在线| 亚洲v高清理论电影| 亚洲国产精品日韩在线| 亚洲色大成网站www永久网站| 色窝窝亚洲av网| 国产aⅴ无码专区亚洲av麻豆| 亚洲AV成人片色在线观看|