不學C++也能玩轉超算程式設計,史丹佛大學推出超算程式語言Regent

機器之心發表於2019-07-22

只有超級計算機才最有能力應對科學麵臨的巨大挑戰,但是這些機器的程式設計難度卻阻礙了發展。

個人電腦革命曾經改變了一切,為我們大多數人提供了易於獲取、更便宜、更小、更快、更易於使用的計算機。科學家們也受益匪淺。他們開發了相應的計算機技術來研究細胞的內部運作、遙遠恆星的軌道以及曾經遠遠超出他們觀察能力的其他現象。

但是對於前沿的研究人員來說,一個具有諷刺意味的現象出現了:新的、複雜的儀器開始產生越來越多的資料,因此需要超級計算機來分析實驗結果。程式設計這些硬體所需的軟體過於複雜,以至於試圖分析如此龐大的資料集的科學家們常常很難掌握。

因此,Regent 出現了,它是由史丹佛大學電腦科學家 Alex Aiken 領導的小組開發的新程式語言,它使超級計算機更容易使用。阿爾卡特朗訊通訊和網路教授、粒子物理學和天體物理學以及光子科學教授 Aiken 說:「我們希望創造一個程式設計環境,讓那些不是電腦科學家的研究人員也能使用。」

Regent 幫助解決了超級計算中最大的挑戰之一:今天的超級計算機比以往任何時候都要複雜得多,現有的程式語言一直在努力跟上。在人們的想象中,超級計算機可能是一臺巨大的機器,但事實上,它是由數千個微處理器組成的陣列。科學家通常用 C++來程式設計這些陣列,C++是 40 年前的一種程式語言,在當時那個年代,主要的微處理器是中央處理單元,即 CPU。CPU 以程式設計人員所稱的序列方式,快速地解決大問題,一個接一個地進行計算。

然而,最近,第二種微處理器已經成為超級計算的重要組成部分,它就是圖形處理單元(GPU)。GPU 開始主要用於控制計算機螢幕上的數百萬畫素,以提高電子遊戲的視覺效果,它可以像程式設計師所說的那樣同時或並行地執行許多類似的計算。事實證明,並行處理在機器學習等應用中非常有用。C++已經升級,以跟上這些硬體變化。不幸的是,補丁的增加使得該語言越來越難以使用。然而,Regent 使得超級計算機程式設計師面臨的一些問題變得更加簡單,比如將序列處理任務分配給 CPU,將並行處理任務分配給 GPU。

一旦 Regent 在概念層面上構建了程式,程式設計師的意圖就會被轉換——或者,使用技術術語,編譯——成第二個軟體層,叫做 Legion,Aiken 也開發了這個軟體層。Legion 生成機器程式碼,即指導超級計算機硬體如何執行程式的精確指令。Regent 和 Legion 之間的緊密整合使得程式設計師更容易做出其他重要的決定,特別是超級計算機必須分析的資料儲存在哪裡。

SLAC 國家加速器實驗室的科學家 Elliott Slaughter 說,這兩個層的整合節省了程式設計師的金錢和時間,他幾乎從 Regent 和 Legion 誕生之初就開始研究這兩個層。計算機消耗能量,這是有代價的。但是移動資料的能源成本可能是對該資料進行計算的 100 倍。此外,大型實驗往往依賴於收集大量資料的儀器。Slaughter 說,一些儀器每秒可以收集相當於 20 張影片 DVD 的資料,用於持續 15 分鐘的實驗。即使以光速在光纖上移動,從儀器到超級計算機獲取大量資料也可能產生滯後,這可能會破壞分析。「你把資料放在哪裡,是程式設計師做出的最重要的決定之一,」Slaughter 說。Regent 和 Legion 透過在等待計算時儲存資料,給程式設計師帶來了前所未有的控制權,也節省了金錢和時間。

他說:「你可以先程式設計計算任務,然後再定位資料,這非常容易,而且不需要重新編寫程式碼。」

Regent 會廣泛使用?研究人員說,新語言必須克服很大的惰性。「Regent 是一種非常不同的程式設計方式,」Aiken 說。「研究人員需要一段時間才能適應其所需的思維方式。」

但有兩個因素對其有利。首先,超級計算硬體在不斷改進。美國能源部(U.S.Department of Energy)正在推動其 Exascale 計算專案的發展,該專案的目標是在 2021 年左右將超級計算能力提高 50 倍。能源部正在支援軟體專案,包括 Regent,以幫助程式設計跟上進度。

此外,許多想使用超級計算機的科學家不熟悉當前的工具,也不清楚程式設計大型實驗所需的陡峭學習曲線。即使是經驗豐富的超級計算機程式設計師也可能會覺得當前的系統很麻煩,並懷疑是否有更好的方法。Aiken 說:「我們經常與那些意識到 Regent 讓他們生活更輕鬆的科學家交談。」

原文連結:https://engineering.stanford.edu/magazine/article/new-more-user-friendly-language-programming-supercomputers

相關文章