MPI函式說明及示例

2021-05-28 07:52:27 字數 3250 閱讀 1623

mpi函式說明

(1)並行初始化函式:int mpi_init(int *argc,char ***argv)

引數描述:argc為變數數目,argv為變數陣列,兩個引數均來自main函式的引數

(2)並行結束函式: int mpi_finalize()

例如:hello.c

#include "./mpich2/include/mpi.h"

#include 

int main(int argc,char **argv){

mpi_init(&argc,&argv);//並行部分開始

printf("hello parallel world!\n");

mpi_finalize();

(3)獲得當前程序標識函式:int mpi_comm_rank(mpi_comm comm,int *rank)

引數描述:comm為該程序所在的通訊域控制代碼,rank為呼叫這一函式返回的程序在通訊域中的標識號

(4)獲取通訊域包含的程序總數函式:int mpi_comm_size(mpi_comm comm,int *size)

引數描述:comm為通訊域控制代碼,size為函式返回的通訊域comm內包含的程序總數

(5)獲得本程序的機器名函式:int mpi_get_processor_name(char *name,int *resultlen)

引數描述:name為返回的機器名字串,resultlen為返回的機器名長度

例如:who.c

#include "./mpich2/include/mpi.h"

#include 

int main(int argc,char **argv)

int myid,numprocs;

int namelen;

char processor_name[mpi_max_processor_name];

mpi_init(&argc,&argv);

mpi_comm_rank(mpi_comm_world,&myid);//獲得本程序的id

mpi_comm_size(mpi_comm_world,&numprocs);//獲得總的程序數目

mpi_get_processor_name(processor_name,&namelen);//獲得本程序的機器名

printf("hello world!process %d of %d on %s \n",myid,numprocs,processor_name);

mpi_finalize();

(6)訊息傳送函式:int mpi_send(void *buf,int count,mpi_datatype datatype,int dest,int tag,mpi_comm comm)

引數描述:buf為傳送緩衝區的起始位址,count為將傳送的資料個數(以後面的資料型別進行計數),datatype為傳送資料的資料型別,dest為目的程序標識號,tag為訊息標識,comm為通訊域

mpi_send()將傳送緩衝區buf中得count個datatype資料型別的資料傳送到標識號為dest的目的程序,本次傳送的訊息標識是tag

(7)訊息接收受函式:int mpi_recv(void *buf,int count,mpi_datatype datatype,int source,int tag,mpi_comm,mpi_status *status)

引數描述:buf為接收緩衝區的起始位址,count為最多可接收的資料個數,datatype為接收資料的資料型別,source為接收資料的**程序標識號,tag為訊息標識,應與相應傳送操作的標識相匹配,comm為本程序和傳送程序所在的通訊域,status為返回狀態

例如:message.c

#include 

#include 

#include "./mpich2/include/mpi.h"

int main(int argc,char **argv)

int myid,numprocs,source;

mpi_status status;

char message[100];

mpi_init(&argc,&argv);

mpi_comm_rank(mpi_comm_world,&myid);

mpi_comm_size(mpi_comm_world,&numprocs);

if(myid != 0)

strcpy(message,"hello world!");//為傳送字串賦值

//傳送字串時長度要加1,從而包括串結束標誌

mpi_send(message,strlen(message)+1,mpi_char,0,99,mpi_comm_world);

else

//除0程序的其他程序接收來自於0程序的字串資料

for(source = 1;source < numprocs;source++)

mpi_recv(message,100,mpi_char,source,99,mpi_comm_world,&status);

printf("i am process %d.i receive string '%s' from process %d.\n",myid,message,source);

mpi_finalize();

另附:mpi預定義資料型別與c語言資料型別的對應關係

mpi 資料型別

對應c 資料型別

mpi_char

signed char

mpi_short

signed short int

mpi_int

signed int

mpi_long

signed long int

mpi_unsigned_char

unsigned char

mpi_unsigned_short

unsigned short int

mpi_unsigned

unsigned int

mpi_unsigned_long

unsigned long int

mpi_float

float

mpi_double

double

mpi_long_double

long double

mpi_byte

無相應資料型別

mpi_packed

無相應資料型別

mpi_long_long_int

long long int

findContours函式引數說明及相關函式

findcontours函式,這個函式的原型為 void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierar chy,int mode,int method,point offset ...

findContours函式引數說明及相關函式

findcontours函式,這個函式的原型為 void findcontours inputoutputarray image,outputarrayofarrays contours,outputarray hierar chy,int mode,int method,point offset ...

函式說明python函式巢狀筆記 函式說明

ps 今天上午,非常鬱悶,有很多簡單基礎的問題搞得我有些迷茫,哎,幾天不寫就忘。目前又不當coo,還是得用心記 哦!關於函式內嵌函式作用域的條記 def test i 0defa print locals a printi test 這段,locals 的值為空,說明內嵌的a函式沒有認默引入i de...