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
是**程序在指定的程序域comm
或mpi_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程式以及通過較簡單的...