MPI入門例項講解

2021-06-12 22:33:33 字數 3551 閱讀 6528

mpi_hello.cpp 

#include #include "mpi"

int main(int argv,char* argc){

mpi_init(&argv,&argc);

cout<<"hello world"<

編譯:mpicxx -o mpi_hello mpi_hello.cpp 

執行:mpirun -np 3 ./mpi_hello (a

)初始化

mpi環境:

int mpi_init(int *argv,char **argc);  (

b)結束

mpi程式的執行:

int mpi_finalize(void); 

這裡只是告知該

mpi的並行**執行結束,而不是整個程式結束執行退出。在

mpi_finalize

之後的**還是會繼續序列執行。例如: 

#include "mpi.h"

#include #include #include #include using namespace std;

int main(int argc, char *argv){

int myid; // 當前程序的編號

int numprocs; // 當前程序的名稱

int namelen;

char processor_name[mpi_max_processor_name];

mpi_init(&argc,&argv);

mpi_comm_rank(mpi_comm_world,&myid);

mpi_get_processor_name(processor_name,&namelen);

inti;

for(i=0; i<4; ++i){

cout<<"i'm"<(

c)獲取程序個數:

intmpi_comm_size(mpi_comm comm, int *size);  (

d)獲取當前程序編號

rank

,該值範圍

[0,p-1],p

為並行程序個數:

intmpi_comm_rank(mpi_comm comm, int *rank); 

注:並不是編號為

0的程序就是主程序用於接收其他程序傳送的訊息,而是呼叫

recv

函式的程序接收訊息,呼叫

send

函式的進行傳送訊息。  (

e)通訊域

(通訊空間

):mpi_comm_world

。乙個通訊空間是乙個程序組和乙個上下文的組合。上下文可看作為組的超級標籤,用於區分不同的通訊域。在執行函式

mpi_init

之後,乙個

mpi程式的所有程序形成乙個預設的組,這個組的通訊域即被寫作

mpi_comm_world

。該引數是

mpi通訊操作函式中必不可少的引數,用於限定參加通訊的程序的範圍。這類似於

namespace

,但是通訊域不僅包括了組的標示符,還包括組裡面的程序。  (

f)傳送訊息:

intmpi_send(void* buf, int count, mpi_datatype datatype,  int dest,int tag, mpi_comm comm);  

in buf       

傳送緩衝區的起始位址 

in count      

要傳送資訊的元素個數(元素個數不一定等於位元組個數,因為乙個元素可能包含多個位元組) 

in datatype        

傳送資訊的資料型別 

in dest       

接收訊息程序的

rank值 

in tag        

訊息標籤(標識訊息) 

in comm     

通訊域  (

g)接收訊息:

intmpi_recv(void* buf, int count, mpi_datatype datatype, int source, inttag, mpi_comm comm, mpi_status *status);  

out buf       

接收緩衝區的起始位址,接收快取應

>=count*sizeof(datatype)

,否則將造成溢位 

in count      

要接收資訊的元素個數 

in datatype  

接收資訊的資料型別 

in source

傳送訊息程序的

rank

值。使用

mpi_any_source

,可以接收來自任意程序的訊息 

in tag        

訊息標籤(只接收與傳送訊息中

tag值相同的訊息)。使用

mpi_any_tag

,可以接收任意標籤的訊息 

in comm     

通訊域 

outstatus status物件,

包含實際接收到的訊息的有關資訊。可以通過

status.mpi_source,status.mpi_tag

分別獲取傳送訊息的程序和訊息標籤  (

h)獲取實際接收到訊息的長度:

intmpi_get_count(mpi_status status, mpi_datatype datatype,int* count); 

instatus             

接收操作的返回值. 

indatatype       

接收緩衝區中元素的資料型別. 

outcount         

接收訊息中的元素個數. 

(i)獲取指定通訊域中的程序數:

int mpi_comm_size(mpi_comm comm,int &size); 

incomm        

通訊域 

outsize        

通訊域中的程序數  (

j)mpi基本資料型別與

c++型別的對應關係 

mpi_byte 

mpi_char 

signed char 

mpi_double 

double 

mpi_float 

float 

mpi_int 

int 

mpi_long 

long 

mpi_long_double 

long double 

mpi_packed 

mpi_short 

short 

mpi_unsigned_char 

unsigned char 

mpi_unsigned 

unsigned int 

mpi_unsigned_long 

unsigned long 

mpi_unsigned_short 

unsigned short 

1.mpi

官方文件

Express入門介紹vs例項講解

下午在團隊內部分享了express相關介紹,以及基於express的例項。內容提綱如下。什麼是express 為什麼要用express 路由規則 一切皆中介軟體 ppt已經上傳到slider share,位址傳送 原來需要200字,原來需要200字,原來需要200字,原來需要200字,原來需要200...

Scrapy簡單入門及例項講解

scrapy是乙個為了爬取 資料,提取結構性資料而編寫的應用框架。其可以應用在資料探勘,資訊處理或儲存歷史資料等一系列的程式中。其最初是為了頁面抓取 更確切來說,網路抓取 所設計的,也可以應用在獲取api所返回的資料 例如 amazon associates web services 或者通用的網路...

C C C 多執行緒入門例項講解

題目 三個執行緒,兩個執行緒分別生成乙個隨機數,第三個執行緒計算和。思路 熟悉c 多執行緒的用法以及互斥鎖的使用,此例好像不用加鎖。設定微秒級別的隨機數種子。不然產生的兩個隨機數一樣。include include include include include using namespace st...