Open64

Open64 是一款用於並行計算等行業專業領域的高級編譯工具軟體,支持多種晶片、ISA架構的同時還能夠支持複雜的編譯最佳化、晶片適配。它深刻影響了GCC,LLVM,NVCC的整體結構。

基本介紹

  • 軟體名稱:Open64(opencc)
  • 開發商:SGI/惠普/PathScale/中科院計算所/英特爾 
  • 軟體平台:x86_64/IA64/IA32/MIPS/Longsoon(Linux)
  • 軟體版本:5.0
  • 更新時間:2018-05-01
  • 軟體語言:C/C++
  • 軟體大小:中小(100MB以內)
  • 軟體授權:GPL
歷史和源起,編譯流程,流程表示:,對應中間表示:,設計理念,最佳化設計的總原則,中間語言 WHIRL,WHIRL 的流程,指令體系,VH WHIRL,High WHIRL,Mid WHIRL,Low WHIRL,編譯器參數,Osprey 海鷗計畫,貢獻來源,

歷史和源起

早在1980-1990年代,在美國就出現了多種最佳化圖形計算(OpenGL)的程式運行效率的需求,在這種背景下,編譯器技術獲得了SGI等公司的重視,之後的許多年時間中,Pro64成為了這樣一種生成高效率代碼的編譯工具。其針對新型晶片、新型計算模式、著力多核心最佳化、並行計算等領域的特點,使得Pro64在當時成為了高效計算的標桿。這也為後來Pro64的原始碼開放造成了重大影響。
1999年,SGI公布了他們的一個工業化的並行化最佳化編譯器Pro64(TM)的原始碼,後被全世界多個編譯器研究小組用來做研究平台進行改進,並命名為Open64。Open64是一個擁有GNU通用公共許可證(GPL)的開源編譯器,設計結構好,分析最佳化全面,是編譯器高級研究的理想平台,被用在許多公司和大學的科研項目中。
Open64是一個Linux下的C/C++/Fortran90/95編譯器,最初起源於SGI的MIPSpro編譯器。SGI做了最初的移植工作,使之能夠支持Itanium。2000年夏,SGI將MIPSpro編譯的原始碼公開,並命名為Pro64編譯器。Pro64編譯器基於GNU的C, C++前端,Cray-FORTRAN的F95前端,是Open64編譯器的前身。
後來,由德拉華大學(UDel)負責Pro64編譯器的維護工作,新版本的Pro64被重命名為Open64編譯器,為各種機型作了移植。
2001年,Intel與中國科學院計算技術研究所(CAS-ICT)合作,對Open64編譯器的CG部分進行了功能增強,使之對夠針對Itanium進行高級並行最佳化。針對Itanium增強的Open64編譯器稱為ORC(Open Research Compiler),推動了學術界對Itanium及其相關領域的研究。後來ORC被合併到Open64的新版本中。
Pathscale實現了Open64編譯器到x86-64的移植,並組建了開源編譯器開發團隊以進行進一步開發工作。Open64的新版本(4.0以上)支持IA32、IA64、X86-64等平台。
2012年初,Sourceforge 上的 Open64 已經停止更新,停止更新前最後的版本為5.0。

編譯流程

流程表示:

源碼->前段(FE)->高層最佳化(VHO)->過程間最佳化(IPA)->循環嵌套最佳化(LNO)->全局最佳化(WOPT)->代碼生成(CG)->彙編碼輸出

對應中間表示:

源碼->非常高層WHIRL->高層WHIRL->中間層次WHIRL->較低層WHIRL->目標機指令->彙編碼輸出

設計理念

最佳化設計的總原則

全範圍最佳化兼容的編譯器架構
a. 支持多前端的獨立後端
b. 一種中間表示,多層表示
c. 編譯處理過程即為中間表示不斷降低的過程

中間語言 WHIRL

當前的Open64採用了WHIRL作為其中間語言儲存格式,由SGI的Open64小組定義。WHIRL也是經過了精心設計與考慮而生的一套面向最佳化而存在的數據表示體系,其核心是語法指令AST樹,以及配合高級語言的函式過程表、結構體對應表等輔助數據結構。

WHIRL 的流程

a,一種IR,多層表示
b,編譯過程即不斷降低表示層次的過程
c,每個最佳化都有其最適合做的表示層
d,共享分析結果
e,階段之間沒有冗餘操作

指令體系

WHIRL的指令分為陳述語句、表達式和結構化流程控制。

VH WHIRL

抽象的層次關係依然存在
可以反編譯到F90/C
逗號是允許的
嵌套調用時允許的
三元運算符是允許的
內聯代碼可以被替換

High WHIRL

支持針對循環的最佳化
較為固定的數據流動
核心:
* ARRAY* DO 循環
*IF 指令
– IPA, PREOPT 和 LNO 都在這層開展工作
可以被反編譯

Mid WHIRL

– 和RISC一對一匹配
– WOPT 在本層工作

Low WHIRL

– 最終要輸入CG的WHIRL
– 調試過可以跑的

編譯器參數

符合多數編譯器公用的編譯參數標準。
· -LIST: 用戶的列表
· -LANG: 語言特性
· -TARG: 編譯目標體系
· -TENV: 編譯目標環境
· -INLINE: 內聯部分最佳化
· -IPA: 跨過程最佳化
· -LNO: 嵌套循環最佳化
· -WOPT: 全局最佳化
· -CG: 代碼生成器
· -OPT:通用最佳化

Osprey 海鷗計畫

海鷗計畫是HP提出的,由諸多貢獻方參與的一項旨在構建新時代的現代編譯工具的計畫,核心是最佳化Open64,使其具備高性能、並行計算等諸多重要特性,並能在產品結果上媲美gcc, llvm, icc 等編譯器。

貢獻來源

·惠普全球 (從2005年發起了 Osprey 海鷗計畫) – 將Linux平台上的 Open64 產品化, 以開源的先進編譯技術 –合併了諸多項目的結晶 (x86, ORC), 其晶片載體包括 Itanium 和 x86, 並跟隨了gcc的研發進度
· Qlogic (也稱 Pathscale) – 增加了對於x86的支持,升級了GCC前端模組, 打磨了實際編譯效果。
· 谷歌– 啟動了 Go64 項目, 2007, 進行靜態分析
· 德拉瓦大學 – Cyclops – 提供網站託管服務 – 積極參與Osprey海鷗計畫。
· SNU – EPS, a global scheduler
· 休斯頓大學 – OpenMP 及工具
· 加州大學伯克利分校參與開發 UPC 部分
· UMN – 推斷性執行緒並行
· 清華大學和中國科學院 – 參與了 Osprey 海鷗計畫 – 參與了多目標平台系統的構建,以便於在極短時間內套用編譯器到全新的ISA平台。

相關詞條

熱門詞條

聯絡我們