天天看點

《多核與GPU程式設計:工具、方法及實踐》----1.2 并行計算機的分類

本節書摘來自華章出版社《多核與gpu程式設計:工具、方法及實踐》一書中的第1章,第1.2節, 作 者 multicore and gpu programming: an integrated approach[阿聯酋]傑拉西莫斯·巴拉斯(gerassimos barlas) 著,張雲泉 賈海鵬 李士剛 袁良 等譯, 更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視。

使用多種資源擷取更高性能并不是最新的技術,這個技術最早開始于20世紀60年代。是以,定義一種描述并行計算機架構特征的方法是非常重要的。1966年,michael flynn引入了一種計算機體系結構分類方法:根據能夠并發處理的資料量和同時執行的不同指令數目進行分類。根據這兩個條件,計算機體系結構可以分為四類:

單指令單資料(single instruction single data,sisd):隻能同時執行一條指令并處理一個資料的串行計算機。出人意料的是,絕大多數現代cpu都不屬于這個類别。甚至現代微控制器都是多核配置,每個核都可以認為是一個sisd機器。

單指令多資料(single instruction multiple data,simd):一條指令可以處理多個資料的計算機。最早出現的這類機器是向量處理器。gpu的流多處理器(streaming multiprocessor,sm;針對 nvidia)和simd單元(針對 amd)遵循這樣的設計。

多指令單資料(multiple instructions single data,misd):這好像是一個“怪胎”,多條指令如何處理相同資料呢?正常情況下,這是沒有意義的。然而,當系統(軍事或航天應用中)需要容錯時,資料被多個機器處理,并根據多數原則做出最終決定。

多指令多資料(multiple instructions multiple data ,mimd):最通用的類别。多核計算機(包括gpu)都遵循這種設計。gpu由多個sm/simd單元組成,每個sm/simd單元都能夠運作自己的程式。是以,即使單個sm屬于simd類别,多個sm內建起來的工作方式也是mimd。

這個分類方法經過細化,又添加了幾個子類(特别是mimd),如圖1-2所示。mimd分成兩個子類。

《多核與GPU程式設計:工具、方法及實踐》----1.2 并行計算機的分類

共享記憶體mimd:具有共享存儲空間的計算機體系架構。一方面,共享記憶體在最小化額外開銷的前提下,簡化了所有cpu間的操作;另一方面,共享記憶體限制了系統的可擴充性。解決這個問題的一個方法就是劃分記憶體,為每個cpu配置設定一塊獨立的記憶體。這樣,cpu不僅能以較高的性能通路本地記憶體,還能以較低的性能通路屬于其他cpu的非本地記憶體。值得注意的是,記憶體劃分不會影響尋址機制。這個設計稱為非一緻性記憶體通路(non-uniform memory access,numa),并允許共享記憶體計算機擴充到幾十個cpu。

分布式記憶體或者無共享mimd:由通過消息交換進行通信的cpu構成的計算機。雖然這種架構的通信開銷非常高,但是由于沒有互相競争的資源,是以這種架構的可擴充性非常好(除了空間和能源限制之外,幾乎沒有其他限制因素)。

共享記憶體計算機又可進一步劃分為主/從(master-worker)和對稱多處理器(symmetric multiprocessing,smp)兩類。在smp架構中,所有cpu都是等價的,并且能夠執行包括系統軟體和應用軟體在内的任意程式。在主/從架構中,一些處理器專門用來執行特定程式,我們可以将這些處理器定義為協處理器。盡管在絕大多數高性能gpu計算平台上,cpu和gpu都擁有獨立記憶體,但是也可認為配備gpu的計算平台屬于這一類别。從嚴格意義上說,盡管最新的驅動軟體盡可能地隐藏了資料在兩塊記憶體上移動的複雜性,但是gpu計算平台并不是一個标準的共享記憶體平台。

配備intel xeon phi協處理器的計算平台也存在類似問題。intel xeon phi協處理器有61個pentium計算核心,可以看做一個共享記憶體的mimd系統。intel xeon phi協處理器安裝在pcie卡上。盡管它和主機cpu都位于同一個機櫃/機架上,但是分布式記憶體mimd架構應該是cpu/協處理器系統的最合适分類。

繼續閱讀