初識併發程式設計 MPI

2021-09-07 18:35:33 字數 1895 閱讀 4726

mpi是乙個跨語言的通訊協議,用於併發程式設計。mpi標準定義了一組具有可移植性的程式設計介面。

# 解壓檔案

tar -xzvf mpich-3.2.1.tar.gz

cd mpich-3.2.1

# /usr/local/cellar/mpich 改為你要安裝 mpich 的路徑

./configure –-prefix=/usr/local/cellar/mpich |& tee c.log

make |& tee m.log

make install |& tee mi.log

# 將你安裝 mpich 的路徑新增到 path

export path=/usr/local/cellar/mpich:$path;

1. 簡單 mpi 程式設計之程序識別
#include // mpi 標頭檔案

#include int main(int argc, char **ar**) else

// 所有程序都執行的操作...

mpi_finalize(); // 結束 mpi 執行環境

return 0;

}

2. mpi 簡單通訊
#include // mpi 標頭檔案

#include int main(int argc, char **ar**)

其中,mpi_send(buf, count, datatype, dest, tag, comm)是傳送訊息的 api,

buf是訊息快取區。

count是訊息大小。

datatype是資料型別。

dest是目的程序在指定的程序域comm的程序號。

tag是使用者定義的訊息的型別。

mpi_recv(buf, count, datatype, source, tag, comm, status)是(阻塞)接收訊息的 api。

source是**程序在指定的程序域commmpi_any_source的程序號。

tag可以是mpi_any_tag

status用來接收更多資訊,可以用mpi_status_ignore如果我們不需要更多資訊。

封裝的編譯器:

執行:啟動 16 個程序:mpiexec -n 16 ./test高階一些:

// 非阻塞傳送。非阻塞接收為 mpi_irecv,具體說明可以用 man 命令查詢.

int mpi_isend(const void *buf, int count, mpi_datatype datatype, int dest, int tag,

mpi_comm comm, mpi_request *request)

// 檢測非阻塞通訊是否完成。阻塞等待為 mpi_wait,可以等待全部(mpi_waitall)、等待一些(mpi_waitsome,mpi_waitany)

nt mpi_test( mpi_request *request, int *flag, mpi_status *status );

// 資料歸約:通過計算收集到的多個資料得到乙個資料。

int mpi_reduce (void *sendbuf, void *recvbuf, int count, mpi_datatype datatype, mpi_op op, int root, mpi_comm comm)

併發程式設計 1 初識概念

程序 是計算機中程式的一次執行活動,是計算機進行資源分配和排程的基本單位 執行緒 是計算機進行運算排程的基本單位,執行緒構成程序 協程 微執行緒,協程是由使用者自己控制和排程的 畫個圖來解釋下 cpu相當於皇上,每個程序相當於乙個宮殿,每個相當於乙個妃子,皇上給每個宮殿撥款,每個宮殿內部再自己分配,...

MPI程式設計 Parallel Rank

如圖所示,假設每乙個程序代表乙個節點,在集群中,由於每台裝置的效能不同,那麼獲取集群中每台裝置的速度就顯得尤為必要,了解每台裝置的情況可以更加高效地進行任務分配。現在,每個程序都擁有乙個隨機數,我們需要將其收集上來並進行排序,然後將對應的排名順序分發給各個子程序,這樣每個子程序都可以知道自己在整個系...

MPI並行程式設計

了解並熟悉mpi並行程式開發環境,學會並行程式編譯方法,並行程式作業提交方法,並行程式執行狀態觀察與分析方法,本實驗的內容主要包括學習如何編譯執行mpi程式以及通過較簡單的 helloworld.c 程式的實際執行來進一步的熟悉 實驗一,本實驗的內容主要包括學習如何編譯執行mpi程式以及通過較簡單的...