Mac OS X下利用MPI進行平行計算

2021-07-23 13:24:32 字數 2931 閱讀 8928

北京時間2023年6月20日下午3點,top500組織在法蘭克福世界超算大會(isc)上,由中國國家並行計算機工程技術研究中心研製的「神威·太湖之光」超級計算機系統登頂榜單之首,成為世界上首颱運算速度超過十億億次的超級計算機。而此前國防科大的天河二號超級計算機保持世界超算第一的位置也已經長達六屆。

超級計算機與現代科學研究與工程應用息息相關,像天氣預報、新藥研製、dna分析等領域都離不開超級計算機,所以可以說超算其實無處不在。

超級計算機通常都是有眾多計算節點連線而成,而每個計算節點又包括乙個至多個微處理器晶元。例如,天河2號由16000個節點組成,每個節點有2顆基於ivy bridge-e xeon e5 2692處理器和3個xeon phi,累計共有32000顆ivy bridge處理器和48000個xeon phi,總計有312萬個計算核心。所以要想重複利用超算資源,還必須對程式本身進行針對性的並行優化。

但是你可以能會疑惑,如果平常無法使用到這些超級計算機,那是不是就完全不能進行並行程式開發呢?當然不是,至少現在個人電腦的處理器都是多核的,因此在你的pc上進行平行計算也是很現實的。本文就以mac os x系統為例來介紹mpi的配置方法,以及簡單的平行計算程式設計。

歡迎關注白馬負金羈的部落格 為保證公式、圖表得以正確顯示,強烈建議你從該位址上檢視原版博文。本部落格主要關注方向包括:數字影象處理、演算法設計與分析、資料結構、機器學習、資料探勘、統計分析方法、自然語言處理。

接下來安裝openmpi,需要使用homebrew(同樣要確認你已經安裝了它),開啟terminal,然後輸入如下指令

brew install openmpi
安裝過程可能需要幾分鐘。安裝成功後,在使用mpicc編譯時,需要注意,如果不做任何操作,mpicc會使用預設的gcc,也就是clang的鏈結來編譯,使得編譯出錯。所以在編譯之前需要設定環境變數(假設你要編寫的是c++程式):

export ompi_cxx=g++-5
下面我們來寫乙個簡單的hello world程式,注意mpi中各個api的介紹我們這裡不詳細介紹,這個例子只是幫助讀者熟悉mpi程式的編譯和執行等步驟。首先編輯輸入下面**,並

#include 

#include

int main (int argc, char **argv)

然後在terminal下輸入(注意要轉到你cpp原始檔所在的目錄下):

mpic++ helloworld.cpp -o helloworld.out

mpirun -n 2 ./helloworld.out

第一句是編譯,第二句是執行,其中 -n 2 表示使用兩個核(或兩個nodes)。

我們之前已經有文章介紹過openmp的基本使用,下面我們想把mpi和openmp結合起來。來看下面這個程式,它實現的功能是即使復平面上某個矩形區域中,在某個給定的解析度下,mandelbrot 集合中點的數量:

#include 

#include

#include "mpi.h"

#include "omp.h"

// return 1 if in set, 0 otherwise

int inset(double

real, double img, int maxiter)

return1;}

// main

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

}else}}

}int global_sum = 0;

mpi_reduce(&count, &global_sum, 1, mpi_int, mpi_sum, 0, mpi_comm_world);

if(rank == 0)

printf("%d\n", global_sum);

}mpi_finalize();

//double end = omp_get_wtime();

//printf("time = %fs\n", end-start);

return exit_success;

}

要編譯上述程式需要在terminal下輸入:

mpic++

-fopenmp mandelbrot.cpp -o test_mpi

執行上述程式則使用:

mpirun -n

4./test_mpi -

2.01.0

-1.0

1.0100

10000-1

1.00.0

1.0100

10000

有興趣的讀者不妨嘗試一下!

2023年3三月,谷歌的alphago對弈世界頂級圍棋棋手南韓人李世石,引起眾多關注。最終,alphago以五局四勝的戰績擊敗李世石,一時也在網路上極大的激起了小夥伴們對人工智慧的興趣。

但是讓電腦與人模擬賽下棋,這也不是頭一遭了,只不過通常意義下,圍棋的計算量過大,如果不使用一些策略來加以優化,一般的電腦都難以勝任。相比而言,西洋棋的計算量要更小一些,所以在alphago擊敗李世石之前,研究人員其實已經先在西洋棋上進行了嘗試。只不過這段往事離現在也有些久遠了。

2023年5月11日,西洋棋特級大師,世界冠軍,俄羅斯人卡斯帕羅夫與ibm公司的超級電腦「深藍」之間的終極對抗賽落下帷幕。在總共的六局比賽裡,卡斯帕羅夫最終以五平一負的戰績宣告敗北。

深藍擁有有32個微處理器,根據世界超算機構的測算,深藍的計算速度可以達到11.38×10

9 每秒浮點運算次數(gflops),位列當年(2023年june)超算500強中的第259位。

ibm在超級計算機上絲毫沒有停歇。2023年,ibm開發的藍色基因/l(blue gene/l)超級計算機勇奪世界超算top500榜首,其計算速度可達每秒鐘280.6萬億次浮點運算。而筆者日常所使用的主要是第三代blue gene/q超級計算機。

利用 MPI 進行蒙特卡洛模擬

參考 mpi對道路車輛情況的nagel schreckenberg 模型進行蒙特卡洛模擬 題目 利用 mpi 進行蒙特卡洛模擬 內容 在道路交通規劃上,需要對單條道路的擁堵情況進行估計。因為僅考慮單條車道,所以不存在超車。假設共有 n 輛車,分別編號 0,1,n 1,每輛車佔據乙個單位的空間。初始狀...

Linux下利用openssl對檔案進行加密和解密

建立檔案test.txt,特意寫入中英文 cd tmp echo test測試 test.txt 開始加密,使用aes 128 cbc演算法,也可以使用其他演算法,通過檢視openssl的幫助可獲知 openssl aes 128 cbc salt in test.txt out test.txt....

利用Kettle進行資料同步(下)

技術匯 id jishuhui 2015 可聯絡到作者。上篇介紹了基於kettle的資料同步工程的搭建,entrypoint.kjb就是整個工程執行的入口。為了進一步降低操作成本,讓整個資料同步過程更穩定 安全,需要進行更高層面的抽象,做成乙個簡單易用的系統。以下是應用截圖 除了選擇資料來源和資料庫...