跳到主要內容區塊

計資中心電子報C&INC E-paper

技術論壇

平行處理應用簡介
  • 卷期:v0012
  • 出版日期:2010-03-20

作者:陳乙菩 / 臺灣大學計算機及資訊網路中心程式設計組程式設計師


平行處理(Parallel Computing or Parallel Processing)是一般電機資工系的必修課程,看似如此沉悶的主題,究竟他能帶給我們生活上什麼便利??其實小到生活細節大到科技應用,平行處理技術都能讓生活更有效率…

 

記得在國外唸研究所的時候,教授談到平行處理就像他跟太太逛Shopping Mall 一樣,兩個人各自逛自己的,最後再到門口會合,這樣的購物模式,可說是比兩人一起走要來的有效率。簡言之,平行處理就是這種同時多工的概念。

傳統執行程序的模式如(圖一),事件被分成一連串的小任務,在一台單一中央處理器(CPU)的電腦上逐步執行,任何時刻只有一條指令可以被執行。平行計算的概念則如(圖二),待處理事件被分成一串不連續的小任務,但每項任務可以交與對應的CPU/Processor完成。任何時刻可以執行多項指令。


以(圖一)(圖二)為例,如果(圖一)所需的時間是100秒,(圖二)以平行計算模式處理的事件”理論上”只需花100/N秒,實際卻不然,現實生活中許多任務無法分割成同時進行的小區塊。此外,平行處理還可能涉及共享資源不能同時存取的問題,這些在平行處理架構上衍生出來的系統問題,都是Computer Engineering或Computer Science系所常被拿來研究的領域。

於此,Gene Amdahl 在1967年提出了” Amdahl定律”(“Amdahl’s Law”),其內容是,因程式中存在無法分割的序列(serial program,指程式中不能並行執行的部分),就算架構再多的CPU或processor,超級電腦的效能提升仍是受到限制的。

這裡有一個簡單的例子,有一個程式由五個部分組成,每個部分佔用 100 個單位時間。假設第一部分、第三部分和第四部分是序列程式,其中不能作任何平行計算。我們又假設第二部分和第五部分可以作平行計算,所以執行這個程式需要 500 個單位時間,如(圖三)。


假設我們改變第二部分和第五部分的運行方式,讓它們在兩個處理器上運行,則這兩個部分只需要 50 個單位時間。如此一來,執行整個程式只需要 400 個單位時間,也就是說,速度提高了 20%。我們繼續假設有 4 個處理器,則第二部分和第五部分的執行時間縮短為 25 個單位時間,整個程式的執行時間就縮短到了 350 個單位時間,也就是說,速度提升了30%。請參考(圖四)…

但我們可以發現,不論加上多少處理器,整支程式的時間仍不可能少於300單位時間,也就是整體效能不可能提升到60%。

直至1988年,Gustafson 對於Amdahl定律提出不同的看法,如果我們換個角度來看,程式的執行需要 500 個單位時間,我們把可平行計算的部分工作量增加一倍,在相同時間內,我們將完成 200 單位的工作。執行這個程式仍然需要 500 個單位時間,但我們完成了 700 個單位時間的工作,也就是2個處理器,就能把效能提高到 40%。如果4個處理器,就能在同樣時間內完成 1100個單位時間的工作,效能提升了 1.2 倍。因此,平行處理技術仍是廣泛應用於提升效能的方法。

另一平行處理的應用,正是時下最夯的雙核心處理器(Dual Core CPU)。以往提高微處理器的效能都是使用增頻,但頻率的增加相對也帶來微處理器功率增加。可想而知,電腦研發團隊期望能以多核心技術提升效能。

這裡有一個簡單的例子幫助我們了解多核心的概念。假設處理器產生一個單位的性能要消耗一定單位的電能,我們讓處理器超頻,將其性能提升至 13%,一般來說,性能提升13%,消耗功率會增加73%。在此,我們假設使用同一個微處理器,除了提高頻率外不做其他改變,我們發現僅僅提升13% 的效能卻多消耗了73% 的電能,所以這不是好方法。

現在我們把處理器的性能降到 87%,這時的消耗功率大約只有原來的一半。於是有人就試著把兩個處理器放在一起,使其功率與原來大致相當,運用平行技術,發現效能可以提升到約73%。這難怪多核心CPU儼然成為微處理器的發展趨勢。

除了電腦技術以外,平行處理的概念也可以應用於專案管理、人事管理等等。將複雜的工作分成可以同時進行的事項,減少專案花費與人事成本。值得注意的是,使用平行技術的需要更多的設備,如更多的電腦,更多的處理器等等。所以套用平行處理技術的前提是時間為優先考量,如果設備花費也是你的考量之一,事前則需仔細評估。


參考來源

http://www.zdnet.com.tw/white_board/intel/video-1.htm
https://computing.llnl.gov/tutorials/parallel_comp/#Models