在當前計算機應用中,對快速並行計算的需求是普遍的,概括起來,主要有三種類型的應用需求:算法
並行編程模型主要有三種:適用於共享內存的多線程編程模型。適用於分佈內存的消息傳遞編程模型,混合編程模型。編程
在計算機系統中。處理器永遠都是訪問離本身近期的存儲空間速度最快,比方L1 cache->L2->本地節點內存->遠程節點內存/磁盤,而各層次的存儲容量跟訪問速度偏偏相反。markdown
並行計算中,並行算法的設計是決定性能的關鍵。有些問題天生具備良好的並行性。比方待處理數據集合可以被較好的去耦,而有些問題則需要複雜的公式推導和轉換以適合並行計算。同一時候,還要避免計算過程當中可能出現的瓶頸。任務劃分要充分考慮負載均衡特別是動態負載均衡,「對等」的思想是維護負載均衡和保持可擴展性的關鍵之中的一個,即在設計時儘可能避免使用Master/Slave和Client/Server的模式。網絡
1.並行機的體系多線程
並行機的發展從SIMD到MIMD。衍生除了四種經典的體系結構模式:SMP(Symmetric Shared-Memory Multiprocessor。比方常常使用的多核機。可擴展性較差。處理器數目8~16個),DSM(Distributed Shared-Memory。物理存儲器分佈於各個處理節點,而邏輯地址空間採用統一編址,所以屬於共享存儲。訪存時間受限於網絡帶寬)。MPP(Massive Parallel Processor。由成百上千臺處理機組成的大規模系統,國家綜合實力的象徵。。)。機羣系統(Cluster。互聯的同構或異構的獨立計算機的集合體,每個節點都有本身的存儲器、I/O、操做系統,可以做爲單機使用,節點之間採用商品網絡互聯,靈活性較強)。架構
硬件:多核CPU(Intel, AMD), GPU(Nvidia), CellBe(Sony&Toshiba&IBM -> game,包括一個主處理單元和8個協處理單元)負載均衡
概念:數據總線 地址總線 控制總線 (寄存器)位數函數
2.並行編程模型和工具工具
– MPI –oop
MPI(Message Passing Interface)是一種消息傳遞編程模型。服務於進程通訊。它不特指某一個對它的實現,而是一種標準和規範的表明,它是一種庫描寫敘述,而不是一種語言,易於使用且具備高可移植性。說白了就是一些編程接口。
– OpenMP –
Open Multi-Processing是適用於共享內存多處理器體系結構的可移植並行編程模型。接口由SGI公司發起。
包括編譯指導、執行函數庫和環境變量三部分,具備串行等價性(無論使用一個仍是多個線程執行一個程序,都帶來一樣的結果,更易於維護和理解)和增量並行性(處理器從一個串行程序開始,一塊接着一塊的尋找那些值得並行化的代碼段)。
OpenMPI的執行模型採用Fork-Join形式。即主線程-從線程。減小了並行編程的難度和複雜度。
編譯器指導語句,visio studio支持,使得OpenMP既可以被看作並行程序也可以被看作串行程序,或者在保持串行程序部分不變的狀況下,用戶可以方便地將串行程序改寫成並行程序。
– MapReduce –
Google。PageRank倒排表索引的構建。
Map把輸入Input分解成中間的Key/Value對,Reduce把Key/Value合成終於輸出Output。
– Hadoop –
MapReduce的開源版本號。HFDS,NameNode(JobTracker),DataNode(TaskTracker),集羣架構。
– CUDA –
Nvidia公司開發的GPU並行計算工具。
– CellBe –
CellBe的主要目標是將PlayStation2的處理器性能提升10倍,2006年IBM還推出了Cell刀片計算機系統。
參考文獻:《並行計算機編程基礎》& CUDA課程