?? beowulf-howto-4.html
字號:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>4</title>
</head>
<body>
<table>
<tr>
<td bgColor="#FFFFFF" vAlign="top"><a href="Beowulf-HOWTO-5.html"><img alt="Next" src="next.gif" width="16" height="16"></a>
<a href="Beowulf-HOWTO-3.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> <a href="Beowulf-HOWTO.html#toc4"><img alt="Contents" src="toc.gif" width="16" height="16"></a>
<hr>
<h2><a name="s4">4. 系統設計</a></h2>
<p>在購買任何硬體設備之前,思考如何設計你要的系統是非常重要的,基本上在設計一套Beowulf系統有兩項硬體設備的議題
:
你將使用的節點或稱電腦的機型和連接節點的方式,只有一種軟體議題會影響你要選擇的硬體設備,就是通訊用程式庫或稱API,更詳細的硬體設備和通訊軟體討論將會在本文件後頭。
<p>當選擇性不多的時候,有幾樣重要的設計決定必須做的,因為平行計算的科學(或稱為藝術)有很多種方式解釋,稍後有作簡介,假如你不想看一些背景資料,可以跳過本節,但是建議你在做硬體設備最後的決定之前,最好先閱讀
<a href="beowulf-howto-4.html#suitability">可適性(Suitability)</a> 。
<p>
<h2><a name="ss4.1">4.1 平行計算的背景介紹</a></h2>
<p>本節提供一些平行計算觀念的基本知識,這絕不是平行計算科學和技術的詳細描述,這只是平行計算中與Beowulf設計者和使用者相關的一些簡介。
<p>當你要設計和建構自己的Beowulf,下列即將描述的許多項議題在你做決定的過程中將會變得非常重要,肇因於它的零件特性,一個Beowulf超級電腦可被我們所掌控,一些因素就得仔細考量,一般來說,平行計算所牽扯的議題並不太難了解,的確如此,一旦了解這些議題,個人的期待將會實踐,成功將更容易實現。不像循序的世界,處理器的速度是唯一最重要的因素,在平行的世界中,處理器速度只是決定整個系統效能和效益數個因素之一。
<p>
<p>
<h2><a name="ss4.2">4.2 平行計算的方法</a></h2>
<p>平行計算可分成好幾種類型,從使用者觀點,考慮每種類型的優缺點都很重要,接下來的章節嘗試提供平行計算方法的觀點,並指出Beowulf機器是屬於哪種。
<p>
<h3>為什麼要一顆以上的處理器?</h3>
<p>回答這個問題是很重要的,用八顆CPU跑文書處理軟體聽起來似乎有點殺雞用牛刀—實際上也是這樣。那其他像是web
server、database、rendering program或是project scheduler?額外的CPU可能有所幫助。複雜的數值模擬又如何?流體動力學碼或是data
mining application,在這些狀況下,額外的CPU絕對是需要的,的確,多處理器可以用來解決更多問題。
<p>接下來的問題通常是「為什麼我需要二或四顆CPU?我可以等極速的986出現。」,有下列幾個原因可以回答這個問題:
<ol>
<li>由於使用多工作業系統,電腦可以同時做很多事情,只要有一顆以上低價CPU就可以達到最自然的平行化。
<li>處理器的速度每十八個月就增加一倍,但是記憶體和硬碟的速度呢?很不幸地,它們的速度增加地並沒有CPU快,我們必須記得,大多數的應用軟體都利用到cache以外的記憶體和硬碟,平行化是可以擺脫這些限制的一種方法。
<li>預計在2005年之後,處理器的速度將不會再每十八個月就增加一倍,要達到這種曾加速度的趨勢,中間還有許多障礙。
<li>平行計算可以有2倍到500倍速度的提升(有時更快),這全看執行的應用程式。這種提升是無法單靠單一處理器,即使是曾經一度使用特別設計超快處理器的超級電腦,如今也是用多顆市售且隨手取得的CPU所組成。</li>
</ol>
<p>假如你因為遇到計算限制(computer bound)或是輸出∕輸入限制(I/O
bound)而需要速度,平行是值得考慮的方法,因為平行計算可以有很多方式,平行地解決你的問題將要思考許多重要的抉擇,這些抉擇會嚴重影響應用程式的可攜性、效能和你所花的時間、精神以及金錢。
<p>在我們了解平行計算的技術之前,讓我們先看看熟悉的真正平行計算問題的實例—在店門前大排長龍。
<p>
<h3>平行計算的商店</h3>
<p>想想看一個櫃臺前有八臺同時使用收銀機的大型商店,假設每個收銀機就是一顆CPU,每個客人就是一個電腦程式,電腦程式的大小(工作的多寡)就是每個客人選點的多少,接下來所作類比的方式就是要說明平行計算的觀念。
<p>
<h3>單工作業系統</h3>
<p>只有一臺收銀臺打開,一次只能處理一個客人。
<p>範例 : MS DOS
<p>
<h3>多工作業系統</h3>
<p>只有一臺收銀機打開,但是現在一次處理一個客人選點的一部份,然後移到下個客人,處理他選點的一部份,每個人似乎同時都有在移動,假如沒有其他人在排隊,很快就會輪到你。
<p>範例 : UNIX,使用單一CPU的NT。
<p>
<h3>多顆CPU且多工作業系統</h3>
<p>現在我們將其他的收銀機打開,每個客人都有一臺收銀機服務,這時排隊的隊伍移動地很快,這稱為SMP—對稱式多行程。雖然有額外的收銀機打開,但是絕快不過只有一臺收銀機和一個客人。
<p>範例 : UNIX,使用多CPU的NT
<p>
<p>
<h3>多工多CPU的緒(thread)</h3>
<p>假如將你選點的項目拆開來,多臺收銀機同時使用記帳,你就可以更快一點。首先我們得假設你買了很多東西,因為你花在拆開項目的時間必須由多臺收銀機補償回來,理論上,你可以比以前快N倍,N是收銀機的臺數。當收銀員需要得到其他部份的小計時,他們可以透過交談或觀望其他收銀機,很快地交換他們所需要的資訊,他們甚至可以打探其他的收銀機,找尋需要的資料,使得工作更快些。無論如何都還是有些限制,也就是這家店在各個地方可以有效地放置多少臺收銀機。
<p>Amdals定律也使應用程式增快的速度將受限在循序程式中最慢的部份。
<p>範例 :NUIX或是在相同主機板上的多CPU的NT並可以執行多緒(multi-threaded)程式。
<p>
<p>
<h3>在多工作業系統上向其他CPU傳遞訊息</h3>
<p>為了改善效能,店家在後頭又增加了八臺收銀機,因為新的帳單離前方櫃臺很遠,收銀員必須用電話將小計告訴前方櫃臺,除了傳遞外,還加上額外時間的負擔,但是假如傳遞時間很短,它將不會造成問題。假如妳要買的東西很多,需要所有的收銀機,這時在使用所有收銀機來改進收帳的速度之前,額外的時間負擔仍須考慮進去。有時候,某些商店在各個角落只單獨放置一臺收銀機,每個收銀機就只能透過電話聯繫,這時它們所在的位置就不重要了。
<p>範例:多臺UNIX或多CPU的NT,可能在同一張主機板或許多主機板上,彼此能相互聯繫。
<p>上述說明雖然不夠精準,但對平行系統的限制來說,算是不錯的描述,不像單一CPU的傳遞仍是個議題。
<p>
<h2><a name="ss4.3">4.3 平行計算的架構</a></h2>
<p>平行計算的方法和架構將在下節介紹,雖然描述將會很廣泛,但是也足以了解Beowulf設計的一些相關議題。
<p>
<h3>硬體架構</h3>
<p>
<p>在硬體上有二種基本的平行電腦:
<p>
<ol>
<li>自有記憶體機器,之間可以交換資訊(Beowulf
電腦群)。
<li>共享記憶體機器,透過記憶體傳遞資料(SMP機器)。</li>
</ol>
<p>典型的Beowulf是由一群單CPU機器組成,透過高速乙太網路連接,所以稱為自有記憶體機器。4
way SMP是一臺共享記憶體機器,可用來作平行計算,平行的應用軟體透過共享記憶體傳遞資料。以電腦販售店做比喻,自有記憶體機器(單獨暫存帳單)在CPU數量上可以很多,但是共享記憶體機器由於記憶體的關係,CPU的數目是有限制的。
<p>但是連接多臺共享記憶體機器是可行的,這些混合式共享記憶體機器對使用者看起來就像一臺大型的SMP,經常稱作駑馬(NUMA,non
uniform memory access,非均勻記憶體登入),因為使用者看到的是一塊大記憶體,由所有的CPU共享,有著各種不同的延遲(latencies)。在某種程度上,駑馬機器中各個自有共享記憶體之間是必須互相傳遞訊息。
<p>把SMP機器當作自有記憶體的計算節點,並將它們連接起來是有可能的。典型的第一類主機板可以有二顆或四顆CPU,使用這類電腦通常可以降低整體的成本,Linux內部排序決定如何共享這些CPU,在這個階段,使用者無法指定所要執行的工作由哪個CPU負責,但是使用者可以同時執行二個不相干的行程,或是一個有緒的行程(threaded
processes),並希望效能比一個CPU的系統好。
<p>
<h3>軟體API架構</h3>
<p>基本上有二種方式可以在程式內表現出同時的特性:
<ol>
<li>在處理器之間使用訊息傳送。
<li>使用系統的緒</li>
</ol>
<p>仍有別種方法,但是這二種是最常用的。有一點必須注意,就是同時不需要由底層的硬體所控制,訊息和緒都可以在SMP、駑馬SMP和電腦群上使用,但如上所述,效能和可攜性仍是重要的議題。
<p>
<h3>訊息</h3>
<p>從歷史的觀點來看,訊息傳遞的技術反應出早期自有記憶體平行電腦的設計過程,當緒需要資料時,訊息被要求需要拷貝,拷貝訊息的延遲和速度變成訊息傳遞模式的限制因素。訊息傳遞其實相當簡單,一些資料和傳遞的目的地(處理器)。一般常見訊息傳遞的API有
<a href="http://www.epm.ornl.gov/pvm">PVM</a> 或 <a href="http://www.mcs.anl.gov/Projects/mpi/index.html">MPI</a>,訊息傳遞可以在一臺SMP機器和電腦群上有效地使用緒和訊息,相對於緒,訊息傳遞在一臺SMP上的好處是,未來一旦妳決定要使用電腦群,只需要輕易地增加機器。
<p>
<h3>緒</h3>
<p>作業系統緒的發展主要因為共享記憶體的SMP設計允許程式中同時的部份可以有很快地共享記憶體傳遞和記憶體同步,緒在SMP系統執行地不錯,這是因為傳遞是透過共享記憶體,由於這個原因,使用者必須將當地的資料從整體的資料中獨立出來,否則程式將不能正確地執行。相對於訊息傳遞,因為資料是由行程所共享,大量的資料拷貝可以避免,Linux支援POSIX緒,緒的問題在於很難擴展到一臺SMP機器以外,這是因為資料是由CPU所共享,快閃一致性的議題會造成負擔。將緒有效地擴展到多臺SMP機器必須仰賴駑馬技術,但是駑馬非常耗時,並且基本的Linux是不支援的。將緒建構在訊息傳遞之上,曾經有人做過
( <a href="http://syntron.com/ptools/ptools_pg.htm">(http://syntron.com/ptools/ptools_pg.htm)</a>),但是緒和訊息傳遞在一起就變得效果不佳。
<p>以下是和效能有關的資訊
<pre> SMP機器效能 電腦群效能 比例增加程度
--------------- ---------------- ----------------
訊息 好 佳 佳
緒 佳 不良* 不良*
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -