這幾年來,所謂的「異構計算(Heterogeneous Computing)」,開始流行起來,得到愈來愈多人的關注,原因在於它是由CPU協同GPU一同進行計算工作、藉以提升運算效能的方式,而且,的確也能對計算效能的提升,明顯地發揮作用。

在未來,異構計算這種計算模式,勢必還有不少發展的潛力,在這一回中,就讓我們對「異構計算」話說從頭吧。

異構計算的起源
「異構計算」的想法,大概從80年代左右就產生了,一直發展至今,逐漸成為許多人研究的焦點,也開始實際落實在很多日常的軟體開發中。所謂的「異構」其實指的是相異的指令集架構,而「異構計算」指的便是,利用多個不同指令集架構的計算單元,組成一個計算系統的計算式。

在目前,許多人在談的異構計算,其中的異質架構的計算單元,就像是CPU、GPU、DSP、FPGA、ASIC等等。

就像現在很常見到的異構計算,便是運用原本電腦的CPU再加上繪圖卡的GPU一起構成計算系統,有些計算工作由通用性的CPU來處理,而有些特定的計算工作、適合運用GPU特性的,便交由GPU完成計算工作。由於CPU和GPU的指令集不同,計算架構也不同,因此,這種由CPU和GPU組成的計算系統,便屬於所謂的異構計算。

不過,異構計算並不單指這種由CPU和GPU構成的計算系統,正如前段中所說明的,凡是由多種不同指令集架構的計算系統皆為異構計算,異構的計算單元不見得要位在同一臺實體的電腦上,它們甚至可以是透過網路,彼此相連通訊進行溝通。

所以,像「網格計算(Grid Computing)」,便是利用網路將數量龐大的異質性電腦彼此相連,藉以提高龐大的計算能力來解決需要大規模計算的任務。

而像現在大家廣為討論的雲端計算,在未來的發展,也可以朝向異構的方式,來提供更豐富的計算方式。

異構計算的好處

不過,為什麼人們會開始採用異構的方式,來組成計算系統?

尤其是這幾年,開始流行CPU加上GPU的異構計算系統,究竟異構計算能為人們在計算工作上,帶來什麼優點呢?

對循序式的計算來說,指令是循序執行的,在執行完一個指令後才能執行下一個指令。因此,如果想要提升計算的速度,最主要的方式就是提升時脈速度。藉由減少每個指令執行所需的時間,來加快執行的速度。

但時脈速度的提升終究有極限。在過去的幾十年來,根據半導體的從業人員奉為圭臬的「摩爾定律(Moore’s Law)」,便預言每十八個月積體電路上所能容納的電晶體個數,就能變為原來的兩倍,而且成本不變。這使得人們有機會每隔十八個月用同樣的價錢,買到兩倍計算效能的電腦。

不過,即使摩爾定律在過去幾十年來如此準確,在短期內看起來也會依然有效,但是,還是開始有愈來愈多的人預言摩爾定律的時代即將結束。摩爾定律被預言即將結束的原因像是,半導體終有其物理極限,以及隨著技術不斷精進,需要的研發投資愈來愈高等等。

另一方面,除了循序計算的模式之外,人們很早以前也開始發展一些可以平行計算的架構及方法。所謂的平行計算,正是改變同時僅執行一個指令的方式。

在過去,人們分別試著在時間上,以及在空間上試著同時執行一個以上的指令。

在時間上同時執行多個指令的例子,便是我們都知道的管線化技術(pipeline)。管線化的技術,將多個指令的執行重疊在一起,使得CPU可以像是在同時間執行多個指令。

而在空間上同時執行多個指令,則是跳出同一處理器的限制,試著將計算工作畫分成若干個子工作,再利用多個處理器分別來處理這些子工作。如此一來,在同一時間裡,仍然可以同時執行多個指令。

而在多處理器的平行處理上,可以有非常多種的架構,而不同的處理器之間,需要相互溝通,聯結處理器的通訊方式也不盡相同、大異其趣。

多處理器的系統,從處理器間共享主記憶體的架構,到利用區域網路相連的多臺電腦,到利用網際網路相連的多臺電腦都有。適合的計算任務和規模也都不同。

例如像前段文中提到的網格計算,便是利用網際網路將各種電腦連接起來,並且運用它們平行執行來解決計算問題。因為連接處理器的通訊模式差異,以及處理器是否為相同的架構,就可以衍生出多種不同的方式。

在採用多個處理器的平行計算方式之後,計算的效能就不再直接相依於單一處理器的運算效能,而是可以運用數量眾多的電腦,藉此組成強大的計算能力,即使個別的電腦計算能力都十分平凡,但是因為螞蟻雄兵、以量取勝,加總起來的計算力還是十分可觀。

因為,平行計算的基本哲學就是:「分而治之(divide and conquer)」。將一個大的問題,拆解成若干較小的問題,甚至可以不斷遞迴拆解,直到問題的規模適合在單一處理器或電腦上解決。

像之前我們談到雲端計算這個主題時,即提到所謂MapReduce的解題方法。MapReduce即是一種將問題拆解成若干個小問題,再將問題發送到多個節點上進行計算,之後再合併計算結果的一種處理方法。

而這種解題的方式,就是一種平行計算的方式。

平行計算的興起

只不過,平行計算並不是完全不需要付出任何代價的。

首先,在平行計算模式下的演算方法,和循序計算模式下的演算法本質就不同,必須另行設計有效的平行計算演算法。

另外,將一個大型的任務拆解成為若干個較小型的任務,分別交付多個處理器或甚至個別電腦計算,在其過程及獲得計算結果後,多個處理器或電腦間勢必進行通訊,不論是基於溝通協調或是交換彼此的計算結果。而這溝通協調的通訊,就會帶來額外的負擔。通訊的代價愈大、所帶來的額外負擔就愈沉重。

即使通訊會為平行的計算帶來額外負擔,但只要計算的模式,以及所用的演算方法本身具備規模可擴充性(scalability),平行計算還是能夠具備相當大的優勢。因為具備規模可擴充性的意義在於,可以透過加入更多的處理器或計算節點,來持續增加計算力。

我們並不擔心個別的處理器或節點計算能力弱,因為只要增加處理器或節點就能帶來效能。需要擔心的,是不具規模可擴充性的情況,因為那意謂著,即使你增加處理器或節點,都無法持續得到更多的效能,這才是糟糕的事情。

當已經有愈來愈多人預言摩爾定律的時代即將結束的此時,單純倚靠個別處理器的效能,不斷以指數方式成長來解決計算問題的方式,也似乎看到了界限。

因此,具有規模可擴充性的平行計算方式,成了人們愈來愈重視的一條道路。而異構的平行計算,則是其中一種開始普及的方式。

 

專欄作者

熱門新聞

Advertisement