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...