官术网_书友最值得收藏!

  • 程序員2009精華本
  • 《程序員》雜志社
  • 2555字
  • 2020-03-27 13:44:51

追溯多核計算環境變遷的歷史

█ 文/周偉明

今天,多核技術已經成為現實,大部分人用的PC機都變成了包含雙核或更多核的 CPU 機器,再也沒有人懷疑多核是曇花一現的技術。未來的很長一段時間內,程序員將不得不和多核打交道,寫支持多核的并發性程序。

短短幾年間,可能有許多人還沒有完全回過神來,計算環境就從單核進入到了多核甚至云計算。IT業就是這樣,總是在不斷地快速變化,程序員只要稍微松懈一下,就會發現跟不上時代了。下面不妨回顧一下這短短幾年間多核計算環境變遷的歷史。

2004~2005年,Sun 首次推出基于雙核的Ultra SPARC IV,在2005年底推出8核處理器“Ultra SPARCT1”,尤為令業界矚目。

2005年4月,AMD和Intel 相繼推出真正意義上的多核處理器,意味著多核時代已經真正開始了。2005年9月,英特爾全球同步首發基于雙核技術桌面產品——英特爾奔騰 D 處理器,揭開了X86處理器多核心時代,標志著絕大部分程序員需要從單核環境轉向多核環境進行開發。

2005年5月,一個支持多核環境開發的標準規范OpenMP進行了重大的升級,將原來支持Fortran 和C++的規范合并到一起,推出了 OpenMP2.5版本的規范,給程序員進行多線程開發提供了有力的支持。

2006年7月,Intel發布了新的酷睿2微處理,這是一款不同于前面說到的奔騰D處理器的新架構的多核處理器,它的發行使計算機徹底從單核時代進入了雙核時代。

2006年9月,《程序員》雜志作了一期多核專題,發布了多篇與多核相關的文章。其中《多核,瓶頸在軟件》這篇采訪SUN公司工程技術總監柯亙泰博士的文章一針見血地指出了多核技術面臨的主要問題在軟件上,不僅底層軟件要支持多核,進行上層應用軟件開發的程序員,同樣需要掌握多線程并發編程技術。

Sun推出的8核處理器“Uitra SPARC T1”

《多核是軟件開發行業的遷移目標》,這篇專訪Intel 軟件產品事業部業務拓展和市場總監JamesReinders 的文章中,提到了Intel已經有一系列的工具可以幫助程序員應對復雜的多線程編程,并指出了程序員進行并行編程面臨的三大挑戰:擴展性、精確性和易于編程/維護。雖然文中沒有詳細解析這三大挑戰,但是后面我們還會看到,《程序員》雜志在后來刊登的文章中,對這些問題作了詳細的闡述。

當時可能還有許多人對多核的發展趨勢處于觀望狀態,認為硬件上或許還有辦法通過繼續提升主頻來提升性能。《計算未來——英特爾談多核趨勢》中明確指出了多核是未來一段時間內計算機處理器的發展趨勢,當時在英特爾的實驗室里,已經在研究100個內核的處理器芯片了。程序員必須徹底丟掉幻想,轉到多核上進行軟件開發是唯一的出路。

《多核時代——這里的黎明靜悄悄》一文解釋了多核硬件體系結構,并指出,由于多核技術的出現,摩爾定律王者歸來了。這篇文章還談到了許多網絡游戲如“魔獸爭霸”等,當時已經在Intel 公司的配合下,針對雙核和未來的多核進行了優化。

上面說到的2006年9月的多核專刊很好地給國內的程序員進行了多核的啟蒙,讓程序員們明白多核是不可逆轉的趨勢,程序員必須轉到多核上進行開發。在多核上進行軟件開發和單核上有什么區別呢?是不是單核時代用多線程開發的軟件就可以在多核上用得很好呢?顯然這些問題是當時程序員們還沒有完全想清楚的。

2006年11月,《程序員》雜志刊登了Herb Sutter 的著名文章《免費午餐已經結束——軟件開發將歷史性地向并發靠攏》。該文預言并發將是軟件開發自面向對象技術以來的一次巨變,文中提到的一個重要問題就是,在單核時代,不修改軟件的前提下,將其放到更高速的 CPU 機器上運行,軟件性能可以自動提升。然而在多核環境中,當硬件升級到更多核數的 CPU 后,以往寫的軟件的性能將無法得到提升。對于單核時代的程序員來說,免費的大餐似乎已經結束了。

如何在不修改軟件的前提下,讓軟件性能自動隨CPU核數增加而提升,是多核軟件開發的一個重要問題,也就是前面 James Reinders 所說的三大挑戰中的“擴展性”問題。可見當時還沒有解決這個擴展性問題。值得欣慰的是,這個問題現在基本上已經解決了。

可能許多程序員在當時還想不清楚多核對他們到底有什么影響,接著2006年12月期的《程序員》雜志又刊登了Herb Sutter 的另一篇文章《軟件與并發巨變》,詳細討論了并發對軟件包括編程語言及程序員的深遠影響,并討論了并行、鎖、語言、工具等方面的問題及要求,尤其是詳細分析了使用鎖編程給程序正確性帶來的影響。

2007年4月,《程序員》雜志又做了一個多核專刊,發表了多篇多核內容的文章。

《走近多核時代——Intel 公司Geoffrey Lowney院士訪談錄》中談到,一些開發人員懷著僥幸心理,認為高級語言和先進的虛擬機技術(例如 Java 和.NET)能讓他們不必改變傳統的單線程編程方式。Geoffrey Lowney 院士給這些僥幸者澆了一盆冷水:“一個強大的虛擬機可以實現某些串行程序的動態并行優化,由于這一技術的實現難度很大,而且對實用程序的并行效果并不理想,完全依賴于虛擬機所達到的并行優化結果應該非常有限。”

《積極準備、謹慎行動——應對多核編程革命》這篇文章用淺顯易懂的方法,闡述了多核并發程序設計時遇到的一個重要問題,由執行依賴關系的各個代碼塊如何并行運行的問題,即著名的任務圖分解與調度問題,讓程序員對多核下的并發執行有了更清醒的認識。

2007年7月,英特爾公司發布了第一個大型開源軟件項目——可以讓用戶非常輕松地實現針對多核芯片編程的工具——Threading BuildingBlocks(TBB)。該項目不僅提供并發查找、并發內存管理等支持多核的算法容器,更重要的是它提供了一個基于偷取的動態任務調度器。程序員可以用其復用以往串行算法代碼,將其自動變成并發運行的,比如你懂得串行的快速排序,那么你不需要學習任何并行排序算法,就可以按照一定的方法調用動態任務調度器將其變成并行快速排序算法,實在是令人神奇的一個東西,給程序員進行并發程序開發提供了強大的支持。

2007年8月,AMD 公司公布了一項旨在簡化多核心處理器平臺編程的規范——LWP(Light-WeightProfiling),該規范應用于多個領域,從硬件底層進一步加強了對多核軟件開發的支持。

2009年3月,CAPI 開源項目發布了0.20版,一個專門針對多核的并發數據結構與算法庫,內有針對多核的并行搜索、并行排序、分布式隊列、分布式查找、分布式內存管理、任務圖分解與調度、動態任務分解與調度等多種數據結構與算法容器,可為程序員寫高并發性程序提供良好的參考。

從上面的歷史可以看出,經過短短幾年的高速發展,多核技術不論是在硬件上還是軟件上都成為一門比較成熟的技術。雖然幾年前Herb Sutter說免費的午餐已經結束,但是現在多核開發面臨的各種問題大都已被解決,新的免費午餐又重新開始了。█

主站蜘蛛池模板: 永州市| 桐梓县| 东城区| 建瓯市| 东安县| 道真| 通州市| 仪征市| 连山| 清新县| 望江县| 大洼县| 海门市| 敦化市| 黄骅市| 马关县| 安平县| 霞浦县| 宁南县| 凌源市| 郁南县| 三明市| 陇西县| 涟水县| 高清| 桃江县| 商南县| 阿合奇县| 商城县| 普定县| 新龙县| 札达县| 呼图壁县| 马关县| 清远市| 浠水县| 寻乌县| 平原县| 邮箱| 方城县| 称多县|