純手工 撰寫速度最快的程式碼
CNET授權轉載NYTimes文章/John Markoff‧鐘瑩譯  2005/12/19
新聞來源: http://taiwan.cnet.com/enterprise/technology/0,2000062852,20103229-1,00.htm

很久以前,「電腦」一詞用來形容一群人每天為了龐大的軍事以及工程專案進行煩人的數學運算。

日本人Kazushige Goto的名片上印著「高效能運算」(high performance computing)幾個字,背後反應的就是同樣的工作觀。

稱現年37歲的Goto為資訊時代的John Henry或許並不為過。

當年美國黑人John Henry發明了蒸汽鑽挖機,不過在德州奧斯丁大學的「德州進階運算中心」擔任研究員的Goto並不是在蒸汽鑽挖機上有什麼了不起的突破,而是傳奇地打敗了全世界運算速度最快的超級電腦。

不像超級電腦背後有一整組的軟體工程師與一套超強的自動化系統設備做後盾,Goto只能一個人單打獨鬥,以傳統方式在電腦鍵盤上撰寫程式,一步步修正下達給微處理器晶片的指令。

最近Goto的軟體–由副程式(subroutines)構成的程式集– 主宰了頂級電腦的運算,這些電腦都在爭取全球第一快超級電腦的殊榮。2003年,Goto的手寫程式碼被全球前十大超級電腦的其中七大超級電腦採用(不過日本推出的全球第一快超級電腦「擬地球電腦」Earth Simulator並未採用Goto的程式)。

根據超級電腦的最新排名,IBM的電腦擠下數台使用Goto程式的超級電腦,拿下前三名。不過Goto的基本線性代數例程(BLAS)還是很紅,被四台前十一快超級電腦採用。

Goto靠著單打獨鬥,成了超級電腦界的傳奇。儘管高手絞盡腦汁要讓最快的微處理器更快,儘管競爭激烈,但Goto的程式迄無式微的跡象,

Goto集光環於一身,但他只是超級運算領域的新手,在短短十年前完成BLAS的重大突破。

超級運算年度大會十一月中在西雅圖登場,會中他接受專訪時表示:「一開始我什麼都不懂,完全是靠著不斷摸索,現在總算累積了經驗。」

Goto程式的價值遠超過締造速度記錄,由於他的程式可以更有效解決複雜的線性方程式,也更能有效解決幾乎所有的理工運算問題。舉例而言,副程式應用於模擬程式(simulation program),模擬飛機或汽車周遭的氣流。

晶片vs手動

Goto的主要勁敵之一是名為Atlas的軟體專案,這套程式係由田納西大學電腦專家Jack Dongarra與一群研究員合作開發而成,Atlas會自動替指定的微處理器找出最有效率的方式解決線性代數函數,但Goto卻是用人為方式慢慢地抽絲剝繭。

一如圍棋軟體,為了克服不同類電腦設計的短處,Atlas專案嘗試以系統化方式為每一種晶片測試數千種解決方案,然後一一為處理器找出最快的運算方式。

但是Goto使用一種除錯軟體(software debugger)追蹤資料在微處理器不同組件之間的移動方式,然後把軟體的指令一一改組或重寫,再由改編過的副程式(subroutines)用稍快的速度解決複雜的代數函數問題,以此提高電腦晶片的運算速度。

每個步驟都是不斷地重複,通常會佔去晶片大量的運算容量,舉例而言,有一種運算需要微處理器把存於記憶體的兩個圖表裡的數字叫出來加以相乘,這是相當具有挑戰性的運算。

Dongarra坦承,Goto的手寫程式成效較佳,表現優於Atlas。
他說:「我坦白告訴大家,若要最快的速度,就該擁抱Goto。」業界每年舉辦兩次的電腦競速比賽,列出全球運算速度最快的前五百台電腦,Dongarra是榜上的常勝軍。

Goto對超級運算的熱情出於誤打誤撞。他受教於東京早稻田大學,主修動力工程,畢業後曾在日本專利局任職,研究錄影機等早期的發明。

為了方便研究工作,他在1994年買了一台使用Alpha微晶片的Digital Equipment工作站,進行模擬工作。

工作站送來之後,他想不透速度怎麼這麼慢,所以開始探索Alpha的設計,找出瓶頸所在。

不久他又買了另外一台使用Alpha微晶片的電腦,重新撰寫關鍵的副程式碼,將理論上的最高速度發揮到78%,整整快了44%。

未接受正規訓練

雖然他未接受正規的電腦或程式設計的訓練,但他善用網路上的郵件通訊錄,向專精於Linux作業系統與Alpha晶片的程式設計師請益。Goto原本只是好奇,沒多久就變成欲罷不能的熱情,利用閒暇時間以及每天上下班各兩小時的通勤時間鑽研,讓自己更上一層樓。

他說:「為了思考這些問題,我常常熬夜,整個過程可以讓我放鬆。」

從青少年開始,Goto就迷上電子產品,曾經用最陽春的組件拼湊出一套音響。

目前Goto的興趣不在線性方程式之類的純數學問題,而是如何克服微晶片組合上的缺點,重新整理微晶片的內部排列。不論從掌上型設備到超級電腦,都得安裝微晶片。

現代化電腦提供程式設計師一個層級分明的資料儲存架構,從動態隨機存取記憶體(DRAM)乃至空間相對較小的臨時快取記憶體,層層分明。通常最快的記憶體體積也最小。

程式要跑的快,最簡單的方式就是在電腦的記憶單元裡進行運算,記憶單元最接近微晶片的運算引擎。

每次運算引擎接受指令停止正在進行的運算,到距離引擎較遠的記憶體存取新資料,運算速度就會減慢。不過有時候,將資料存在最接近運算引擎的快取記憶體內,不見得會比存在較遠也更大的快取記憶體來得好。

Goto的同事Robert A. van de Geijin說,Goto的特長在於按部就班重組軟體指令,拿捏各種晶片的優缺點,讓其發揮所長。

van de Geijin說:「Goto結合了科學的洞見與工程學的技能。」

兩人相識於2002年,那一年Goto向日本專業局申請留職一年,到德州中心進修,但最後還是辭職離開專業局。

Goto到了德州,開始鑽研如何提高Pentium 4微處理器的速度。水牛城大學的電腦工程師把他撰寫的BLAS應用於Pentium的超級電腦後,運算速度從每秒1.5兆個數學運算激增到2兆個。理論上最快速度是3兆個。

由於效果驚人,「Top 500」工作人員打電話給水牛城大學,確認消息是否屬實。因為工作人員不相信會有這種事。

van de Geijin憶及當時的情形,他說:「我故意開他們玩笑,表示水牛城的光速比田納西快。」

Goto的BLAS最近悄悄地掀起爭議,因為他遲遲不開放BLAS的程式碼。一些工程師暗示,Goto之所以尚未加入原始碼運動,因為他想保護自己的利益,不想讓祕密與方法曝光。

Goto最近出面反駁這樣的說法,指出BLAS軟體已免費開放給非營利之用,而且他也開始著手BLAS的開放原始碼版本。

他說,接下來的挑戰是讓晶片設計師知道他的想法,以便提升晶片的速度。

他說:「電腦設計師有自己的想法,而且固執己見。」但Goto認為,有關提高運算速度的觀念與想法,他的程式已經獲得肯定。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

請輸入下列驗證碼計算後阿拉伯數字 (Translate it, if not Taiwanese to post reply) *