在前一回中,我們針對「異構計算(Heterogeneous Computing)」這個主題起了個開始,所謂的「異構計算」,指的便是利用多個不同指令集架構的計算單元,組成一個計算系統的計算式。這些計算單元可以位在同一部電腦、也可以是位在不同的電腦之上,而利用網路相溝通。

異構計算可以得到的一個明顯的好處,是可以將計算予以平行化。由於計算單元的數目變多了,所以可以將計算工作分派至其他計算單元上執行。透過增加更多的計算單元,便可以持續的得到更多的計算力。

因為,平行計算的基本哲學,就是「分而治之(divide and conquer)」,只要我們能將一個大規模的問題,拆解成若干較小規模的問題,甚至可以不斷的遞迴拆解,直到問題的規模適合在單一處理器或電腦上解決,之後再一一整合計算結果,得到最終想要的答案。

針對計算工作特性的不同來運作
但是把計算工作分派至其他的計算單元上,以增加同時間執行工作的計算單元數不全然是異構的目的及特性。因為異構計算的主要特質在於「異構」,也就是運用相異指令集,以及體系架構的計算單元來協同計算。即便是「同構」也還是有平行化計算的可能性,例如群集計算(Cluster Computing)。

那麼「異構」相較於「同構」,究竟能帶來什麼好處呢?

之所以需要「異構」,是因為計算工作的特性不盡相同,使用具有不同能力的計算單元來對應處理,可以發揮不同計算單元的優勢。

例如,有些計算工作的特性是所謂「單指令流多資料流(Single Instruction Multiple Data, SIMD)」,在執行時,會有一連串的資料都需要同時套用相同的計算。例如,同時對一個一維陣列中的每個元素除以二,這就是一個SIMD的計算。

你可以想像,在不支援SIMD、僅支援SISD(即單一指令流單一資料流)的計算單元上,這個計算得逐一的針對陣列中的元素進行。但在SIMD的計算單元,卻只需要一個指令,便可以同時作用在陣列中的每個元素。

當然你可以很容易類比,除了SIMD之外,還有所謂「多指令流多資料流(Multiple Instruction Multiple Data, MIMD)」計算。

之所以需要異構計算,一方面是來自於因為空間上得到的平行性(計算單元變多了),而另一方面則是因為不同的計算單元特性不同、在計算上的優勢不同,適合解決的問題也不同。而我們所遭遇到的計算問題,卻有可能混著不同計算特性的問題,若是在同構的前提下,就難以在混合多類計算問題的情況下,發揮最完美的計算效能。

這也就是說,需要多種架構的計算單元,是因為計算工作本身就是摻雜多種類型的工作,只有混合多種計算架構,分別去對應這多種的計算類型工作,才能做出最好的匹配和對應。

所以說,在理想的情況下,適合異構計算型式的情況是,所要解決的計算問題,本身包含多種類型的計算工作,而這多類異質的計算工作,都有對應的計算單元可供處理。

例如,SIMD類型的計算工作有擅長處理SIMD的計算單元、MIMD類型的計算工作有擅長處理MIMD的計算單元……等等。

同時搭配平行處理和異構特性,來執行計算工作

而在解決適合異構計算型式的問題時,一方面要透過平行性提升計算的能力,另一方面也要運用異構性,使得問題中不同類型的子問題,得以和適合解決該類子問題的計算單元進行匹配,使得該類問題,都盡可能由最能充份發揮其優勢的計算單元來處理。

因此,依據可取用的計算單元類型,將原問題拆解,成為有對應計算單元的子問題,就成了解題的關鍵之一。例如,找出計算工作中的SIMD類型部份,將此類的問題,交由擅長SIMD的計算單元解決。

此外,不同的計算單元間需要交換資料進行溝通,例如為特定計算單元提供問題的輸入資料,或是從特定的計算單元取得其計算結果。這溝通的代價,會依聯接各計算單元間的通訊模式而有差別,有的模式很快(像是記憶體BUS)、但有的模式很慢(像是透過網際網路),因此,在設計解決問題的方法及架構時,也需要考慮因為通訊所造成的額外負擔,並且盡可能得到另一計算單元帶來的效能提升時,不致於因為這額外的負擔,而讓效能的損耗過多。

適當的分解問題,使問題的計算工作適得其所,可以帶來效能的提升,而額外的負擔會造成效能的損耗,因此,設計問題的完美解決方案,便是在最大化效能提升以及最小化額外負擔之間,取得一個最完美的平衡。

所以你可以明白,同構的計算系統所獲得的效能提升,單純是來自於計算平行性的增加。而異構計算系統的效能提升,不但是來自於平行性的增加,更重要的是來自於運用異構的本質,透過讓計算問題類型與計算單元特質做最佳的匹配,使問題適得其所。

只要溝通上的額外負擔,能夠盡可能降低,異構計算系統的優勢就愈來突顯出來。

系統異構計算與網路異構計算
而異構計算在「多個不同指令集架構」的特性下,還可以再細分為兩類,即「系統異構計算(System Heterogeneous Computing)」以及「網路異構計算(Network Heterogeneous Computing)」兩類。

系統異構計算指的是,在單機中由多處理器來提供多種計算型式,而構成的計系統。網路異構計算指的則是,透過網路連接多臺電腦,由多臺電腦來提供多種計算型式的計算系統。

除此之外。系統異構計算系統(即單機),還可以依據異構的多個計算單元,能否同時執行計算來分類。異構的多個計算單元,若能同時執行計算,則可稱為「多計算的異構計算系統」,反之,則稱為「混合計算系統」。

在多計算的系統異構計算中,多處理器可同時運作,彼此間除了因為演算法上必要的等待之外,可實際平行運作。而在混合計算的系統異構計算中,則是採用切換的方式,當演算法執行到需要另一類型的計算單元時,便將執行權交由另一個計算單元,等到該單元上的工作完成後,才切換回來。

而網路異構計算系統也可依據透過網路連結的多機,是否屬於同一類型的計算型態來區分,例如同類但異型的系統中,多臺電腦可能都是相同的計算型態,例如都是SIMD型態的,但是,計算能力或型號不同。而異類異型的系統中,多臺電腦則會存在多種的計算型態。

在目前,有愈來愈多人的運用系統異構式計算,來解決計算問題,最常看到的應用方式,便是利用電腦上的CPU搭配圖形處理用的GPU構成異構計算系統。CPU有CPU擅長做的事,GPU也有GPU擅長做的事,各有優勢、各佔一片天,結合它們各自的優勢,可以揮發很好的計算效能。

在下一回,我們就會開始介紹這種CPU結合GPU的異構計算系統。

 

專欄作者

熱門新聞

Advertisement