網路城邦
上一篇 回創作列表 下一篇   字體:
超級電腦與國防
2009/11/26 13:25:30瀏覽1147|回應0|推薦5

10月底,中國國防科技大學研製的千萬億次超級電腦“天河一號”亮相,這是中國第一台千萬億次級別的超級電腦,在國際排行榜上列世界第五、亞洲第一,並使中國成爲繼美國之後第二個能夠製造千万億次超級電腦的國家。到底什麽是“超級電腦”?在國防上有很大用處嗎?本文就圍繞這兩個問題對超級電腦做簡單介紹。

圖1:天河一號超級電腦,由上百個機柜構成。

(一)什麽是“超級電腦”

“超級電腦”(Supercomputer)在中國又稱爲“超級計算機”或“巨型計算機”,顧名思義,這種電腦能極爲快速地計算和處理數據。超級電腦的計算能力一般以多少FLOPS( floating-point operations per second ) 衡量,即每秒鐘能執行多少次浮點運算。“天河一號”每秒可以進行1206萬億次浮點運算,即1.206PFLOPS (P 即 Peta 為10的15次方)。所謂“浮點(floating-point)運算”就是小數運算,“浮點數”,即小數,是科學與工程計算中最常見因而也最重要的基本數據類型。

“浮點”這個概念在電腦科學中挺重要,在此多花一點功夫介紹一下。電腦當中,表示一個整數很簡單,直接以二進制(binary,或稱“二位元”)形式放在一個存儲單元(或稱“記憶單元”)裏就可以了。但表示小數就沒有這麽簡單了,因爲小數分爲兩部分,該如何把它們放進一個存儲單元中呢?有兩种方法,第一种叫“定點(fixed-point)”表示法,即為小數規定一個固定的小數點位置,比如,一個32位(bit,二進制位)的存儲單元,規定前24位表示小數的整數部分,后8位表示小數部分。這種做法的優點是電腦處理小數可以和處理整數完全一樣地簡單快速,缺點是太死板,沒有充分利用存儲單元的空間,所能表示的數值範圍和精度都十分有限。第二种做法就是“浮點”表示法,即先把小數點從小數中抽掉,使它變成一個整數(比如,0.00123變爲123),然後把小數點的位置(從后往前數,比如,0.00123的小數點位置為5)也作爲一個整數,最後把兩個整數按照一定的規矩拼在一起放入一個存儲單元,比如規定前一個整數佔24位、后一個整數佔8位,合起來放在一個32位的存儲單元中。所以在這種表示法中,小數點的位置不是固定的,而是根據需要可以“浮動”的,“浮點”即因此得名。但這麽一來,電腦處理小數就不如處理整數那麽簡單方便了,比如做加法,兩個整數的加法很簡單,電腦的中央處理器(CPU/Central Processing Unit,或稱processor)把這兩個整數從存儲器(memory,或稱“記憶体”)中讀出並放入自己内部的寄存器(register,或稱“暫存器”)中,然後執行一條加法指令就可以了;但要為兩個浮點數作加法,首先要把兩個浮點數“規格化”,就是把它們的小數點位置對齊,而且其中表示小數點位置的整數還不能參與運算,要做特別處理,然後 . . . . . .,好像要用一大堆整數和一長串指令才能完成,其實不然,現代的高性能CPU中都設有專門的“浮點數單元(FPU/Floating Point Unit)”,專門用來進行浮點數的運算,CPU只要用一條浮點加法指令就可以把兩個浮點數送到FPU完成相加運算,但速度肯定還是會比整數運算要慢一些。

我們在讀介紹超級電腦的文章時,常常會見到另外一個用來衡量超級電腦性能的概念,就是每秒能進行多少次“向量計算”。向量又是什麽呢?向量(vector,又稱“矢量”)是科學與工程計算中一種很常見的數據結構,它不是一個而是一組有順序的數值。學過“綫性代數”的朋友們一定會對向量非常熟悉,也明白向量與矩陣計算在數學模型和工程計算中佔有多麽重要的地位。擧個最簡單的例子,運載火箭在升空過程中承受著來自各方的各種力量:發動機的推力、地球的引力、空氣的阻力等等,要算出這些力量共同作用的結果就要用到向量計算了。“綫性代數”這門學問很艱深,我們無意在這裡追究其來龍去脈,只擧一個向量加法的例子來説明電腦是如何處理向量運算的。剛才說過,向量是一組有順序的數值,比如 (1, 2, 3, 4, 5, 6, 7, 8);這樣的一個向量可以和另外一個向量作加法,比如 (1, 2, 3, 4, 5, 6, 7, 8) + (8, 7, 6, 5, 4, 3, 2, 1) = (9, 9, 9, 9, 9, 9, 9, 9),這個加法乍眼一看,肯定覺得如果用電腦處理必然要做8次加法才行,實際又不然,和處理浮點數一樣,現代的高性能CPU内置了向量處理機構,只要把兩個向量讀到向量寄存器(vector register)當中,然後執行一條向量加法指令就可以了。

現代的高性能CPU有了内置的浮點和向量處理能力,使得計算速度大爲提高,但單凴一兩個這樣的CPU干不了什麽太大的事情,你現在用來上網的這台電腦的CPU就有浮點處理能力甚至包含著向量處理機構。要想做出每秒運算過千億的超級電腦,必須把成千上万個這樣的CPU組合在一起。千萬別小看這種組合的難度,能把這麽多的CPU組織在一起讓他們發揮合力,其關鍵技術的高深程度與設計製作CPU本身不相上下。

(二)超級電腦的關鍵技術

1、並行計算(Parallel computing)

上大學的時候,老師在解釋並行計算的時候給我們講了一個故事,說很久以前有兩個相鄰的王國,兩國的君主和國民都酷愛數學。一囯的王子看上了另一囯的公主,向其求婚,公主給了王子一個接近一百億(10,000,000,000)的整數,說你要是在三天内能證明這個數是質數,我就嫁給你。所謂質數,又叫素數,就是除了能被1和它本身整除外,不能被任何其他整數整除。要證明一個整數n是質數,最笨的辦法,要用從2到n的平方根的所有整數來一個個試著除它,如果沒有一個能除盡的,那n就是質數;那麽,要驗證一個接近一百億的整數,差不多要做十萬次除法。但王子沒那麽笨,他做了如下分析:在這十萬個整數當中,本身不是質數的就不用試了,比如21,因爲如果n能被21整除就一定能被3和7整除,試3和7就可以了;所以尾數為2、4、6、8、0的都不用試了;而尾數是5的也不用試了,因爲那一定可以被5整除,不是質數。但在這十萬個連續的整數當中,尾數為1、3、7、9的有四万個,刨去那些一望而知就不是質數的,怎麽說也有三万個吧,而要在三天内做三万次除法,不眠不休也要8秒做一次。於是王子去找宰相想辦法,宰相說:“不就是頂多十萬次除法嗎,我一天就可以做完,而且保證準確無誤。你知道我們國家光軍隊就有幾十萬,而且都是蒙古式編制,就是萬人隊下轄十個千人隊、千人隊下轄十個百人隊。我這就找十個萬夫長來,給他們分別編號為0、1、2、3、4、5、6、7、8、9,然後每個萬夫長回去給他的十個千夫長以同樣方式編號,千夫長再為百夫長編號,百夫長再為他的一百個士兵用0到99編號,這樣一來,這十萬個士兵就有了從0到99999連續不斷的編號,然後命令士兵們用自己的編號去除公主給的整數,能除盡的馬上報告;如果沒人報告,那這個數一定是質數了。”於是王子三日后抱得美人歸。這就是並行計算。順便說一句,我非常願意做那個編號為00000的士兵;這也同時説明了,在計算相當快捷的情況下,並不一定要刻意追求算法的最優化。

天河一號超級電腦由6144個CPU和5120個GPU(Graphic Processing Unit,圖形處理器,我們用的每台電腦的Display Card上都有這種東西,專門用來處理圖形顯示)構成了一個龐大的並行計算機構,但要把這些處理器有機地聯結起來並使它們個個都能充分發揮效力,還需要其他的關鍵技術。

2、高速數據傳輸

超級電腦中有這麽多的CPU,如何把它們所需要的數據和指令快速地送過去,直接關係著超級電腦的整體性能。因此,在超級電腦中,必須構建一條由所有組件(CPU、GPU、Memory,Hard Disk 等等)所共用的高速數據傳輸通路。在天河一號中,這條數據通路點對點傳輸速率能夠達到40Gbps,即每秒鐘400億位 (bit),據説屬世界最快,相比通用電腦中駁接各類内外部設備的USB 2.0的480Mbps,快了80倍。粗略折算一下,這大約相當於每秒傳送5GB(Gigabyte,1 byte = 8 bit)的數據。

高速數據傳輸是很高很難的技術。前不久高錕因發明光纖通信而獲諾貝爾物理獎,從一個側面説明了這類技術的難度和重要性。願中國人在這一領域取得更大成就。

3、驅動並行計算機構的系統軟件和應用軟件

有了衆多CPU以及它們之間的高速數據通路,就如同有了遍佈全國的車站和連接各車站的高速鐵路網,而奔馳在鉄路上的一趟趟列車就好比各種數據和指令。要想最大程度地利用現有的車站和鐵路網而最大密度地發送列車,必須有一個極爲高效的調度系統。在超級電腦中,這一調度系統就是“操作系統”(Operating System,或稱“作業系統”),相當於我們電腦中的 Windows。

天河一號的操作系統基於 Linux,並針對高性能並行計算進行了專門設計。

除了高性能的、適用于並行計算的操作系統之外,要想發揮超級電腦的並行計算能力,在編制應用軟件(Application,或稱爲“應用軟体”)的時候,必須使程序(Program,或稱“程式”)的算法和結構與並行計算相適應。

無論為超級電腦編制操作系統還是應用程序,都需要相當高強的軟件技術。

(三)超級電腦在中國的發展史

電腦是在60多年前才由美國人開發出來的,當時主要是用於軍事上的彈道計算。稍後蘇聯人也掌握了這一技術,才得以在50年代第一次將人造物體送入地球軌道。中國最初的電腦技術正是從蘇聯引進的。我記得上大學時中國科學院的一位電腦老前輩給我們講過,當年他們照蘇聯給的圖紙造了一台電腦,但這台電腦在調試了數年之後還不能正常運行。後來由於種種原因,中國人不能不自力更生。1970年中國發射了自己的人造衛星,證明當時中國的電腦技術已有相當水准。到七十年代末,爲了處理巨量的地質勘探數據以尋找石油,中國迫切需要運算速度更快的超級計算機。終于在1983年,國防科技大學研製成功“銀河一號”超級電腦,每秒運算一億次。

講到這裡就不能不專門介紹一下國防科技大學了。這個學校的全稱是“中國人民解放軍國防科學技術大學”,直屬中央軍委,前身是哈爾濱軍事工程學院,後來該校一分爲二,一部份留在當地成爲現在的哈爾濱工程大學,一部分遷至湖南長沙演變為今天的國防科技大學。這所大學是解放軍培養科技人才的第一學府,尤以其出類拔萃的電腦科技聞名遐邇。

除了國防科技大學外,中國還有很多機構從事超級電腦的研究製造:聯合製造“曙光”超級電腦的中科院計算所、曙光公司和上海超級計算中心,研發“神威”超級電腦的國家並行電腦工程技術中心,生産“深騰”超級電腦的聯想公司(Lenovo,就是收購了 IBM 個人電腦業務的那家公司)。非常值得一提的是,曙光的下一代超級電腦將在2012年推出,速度將超千萬億次,其CPU將採用中國自行設計的“龍芯”(天河一號採用美國Intel公司的CPU和美囯AMD公司旗下ATI公司的GPU)。

圖2:中國超級計算機發展年譜

非常樂見超級計算機在中國的百花齊放之態,這不但能夠滿足迅速增長的國防和民用需求,同時更帶動了中國電腦新技術的發展。

(四)超級電腦在國防上的應用

超級電腦的出現最初是爲了快速處理海量數據,比如前面所說的石油勘探。另外如密碼分析、偵查衛星圖像處理等等,都屬於此類應用。

而超級電腦的用途遠不僅如此。由於超級電腦的速度如此之快,使得現實世界的虛擬化成爲可能,即為一個現實世界中的事物建立一個複雜逼真的數學模型並讓這一模型運行于超級電腦中,然後通過改變這一模型中的各種參數來研究這一事物的可能變化趨勢,這就稱之爲“模擬”(Simulation)。

模擬在國防事務中的重要性是極爲重大的,比如在核彈的設計過程當中,可以通過計算機模擬核爆來驗證設計的正確性,而不必真的進行一次核試驗。這樣做所節省的成本是非常巨大的。

2008年2月,美軍用一枚導彈成功擊落一顆發射后失去控制的衛星。在實施攻擊之前,超級電腦領域的先驅者和領導者、美國克雷公司(Cray Inc)所製造的一台包含25920個AMD Opteron處理器的超級電腦Red Storm為此任務進行了兩個多月的模擬,確保了實戰中的一擊中的。而中國解放軍早于此前就成功進行过類似的嘗試,相信其中必有超級電腦的功勞。

天河一號上所運行的兩個模擬系統顯示了超級電腦的強大功能,一個是颱風分析預報系統,可以模擬颱風的運行,從而預報颱風的強度和行進方向;另一個是飛機輔助設計系統,可以對設計中的飛機的氣動外形進行模擬風洞試驗,大大縮短設計周期。

圖3:天河一號上運行的的颱風分析預報系統

圖4:天河一號上運行的飛機輔助設計系統

總之,超級電腦技術是國防工業最重要的核心技術之一,在此祝中國的超級電腦早日成爲世界第一。

( 知識學習科學百科 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=getarealyou&aid=3517584