ROSE 編譯器框架/支援的程式語言
ROSE 支援各種主流程式語言,成熟度各不相同。支援的語言列表包括
- C 和 C++:基於 EDG C++ 前端
- 正在進行的工作是將 EDG 前端升級到最新的 4.4 版本。
- 另一個正在進行的工作是使用 clang 作為替代的開源 C/C++ 前端
- Fortran 77/95/2003:基於 開放 Fortran 解析器
- 限制:不支援包含空格的變數。
- OpenMP 3.0:基於 ROSE 自身的解析和翻譯支援,適用於 C/C++ 和 Fortran OpenMP 程式。
- UPC 1.1:這也是基於 EDG 3.3 前端
迴歸測試:tests/nonsmoke/functional/CompileTests/Fortran_tests
- 觸發單個測試
- make test2020_comment_1.f90.passed
檢查詳細的命令列
cat test2020_comment_1.f90.passed WARNING: Command line option -rose:Fortran90 is deprecated! Use -std=f90 instead. ======== CUT ======== + ../../testTranslator -rose:verbose 0 -rose:detect_dangling_pointers 2 -I../../../../../../sourcetree/tests/nonsmoke/functional/CompileTests/Fortran_tests -rose:f90 -c ../../../../../../sourcetree/tests/nonsmoke/functional/CompileTests/Fortran_tests/test2020_comment_1.f90 ELAPSED_TIME 2 ======== CUT ========
更多資訊請參見 OpenMP 支援
ROSE 支援 C/C++ 的 OpenMP 3.0(以及有限的 Fortran 支援)。
- ROSE 手冊中有一章(第 12 章 OpenMP 支援)解釋了詳細資訊。pdf
- 一篇論文發表了 ROSE OpenMP 實現的獨特性pdf
- 前端解析原始檔 (ompparser.yy 和 ompFortranParser.C) 位於 https://github.com/rose-compiler/rose/tree/master/src/frontend/SageIII
- OpenMP 到執行緒程式碼的轉換位於 omp_lowering.cpp 中,位於 https://github.com/rose-compiler/rose/blob/master/src/midend/programTransformation/ompLowering
- OpenMP 執行時介面在 libxomp.h 和 xomp.c 中定義,位於上面提到的 ompLowering 目錄下
配置:請始終嘗試使用 --with-gomp_omp_runtime_library=/usr/apps/gcc/4.4.1/lib64/ 配置 ROSE。因此,生成的 ROSE 翻譯器可以自動連結 libgomp.a 為您生成可執行檔案。這還將允許執行 omp Lowering 的執行測試以捕獲錯誤。如果沒有此選項,將只執行編譯級別測試。
實驗性 OpenMP 加速器模型實現
測試
- ROSE 中大約有 70 個內建執行測試(許多測試具有自我驗證功能)。
一些基準測試用於在 Jenkins(我們的迴歸測試伺服器)中測試 ROSE 中的 OpenMP 支援
- a22b-NPB-2.3-C-parallel:所有 8 個基準測試透過
- a21-SPEC-OMP-64bit-parallel:3 個基準測試透過。
- LULESH OpenMP 版本:下載
對於內建測試
- 原始檔位於:https://github.com/rose-compiler/rose/tree/master/tests/nonsmoke/functional/CompileTests/OpenMP_tests
- 測試驅動程式在 https://github.com/rose-compiler/rose/tree/master/tests/nonsmoke/functional/roseTests/ompLoweringTests/Makefile.am 中定義。請參見 C_TESTCODES_REQUIRED_TO_RUN 下的檔案列表。
如果您希望在鍵入 "make check" 時自動執行這些測試,則必須配置 GOMP 的路徑。例如 ../sourcetree ... --with-gomp_omp_runtime_library=/usr/apps/gcc/4.4.1/lib64/
UPC 1.1.1:這是基於 EDG 3.3 前端
- 支援的版本受到 EDG 3.3 前端的限制,它只支援 UPC 1.1.1(UPC 版本字串定義為
200310L)。ROSE 當前使用 EDG 3.3,它最初只支援 UPC 1.0。我們將 EDG 3.10 中的 UPC 1.1.1 支援合併到我們的 EDG 3.3 前端。我們還添加了支援 UPC 1.2 所需的工作。
文件
- ROSE 手冊的第 13 章 UPC 支援 http://rosecompiler.org/ROSE_UserManual/ROSE-UserManual.pdf
測試:make check 規則位於
- rose/tests/CompileTests/UPC_tests
一個 UPC 到 C 翻譯器的示例:roseupcc
- 功能不全。僅旨在作為任何有興趣/獲得資金在 ROSE 中實現 UPC 的人的起點
- roseupcc 位於 ROSE/projects/UpcTranslation 中
- ROSE 手冊的 13.5 節使用 ROSE 的 UPC 到 C 翻譯器的示例對其進行了記錄
MPI 主要是一種基於庫的程式設計正規化。在許多情況下,只要將 mpi.h 的包含路徑傳遞給命令列,就可以使用基於 ROSE 的翻譯器正常編譯 MPI 應用程式。
但是,ROSE 中對 MPI 有一些額外的支援
1) 如果 ROSE 使用 --with-mpi=/mpi/install/location 進行配置,則配置會將以下變數新增到 Makefile.am 中
ROSE_WITH_MPI_CFLAGS='-I/usr/sci/scratch/sriram/local/include' ROSE_WITH_MPI_CLDFLAGS='-L/usr/sci/scratch/sriram/local/lib -lmpich -lopa -lmpl -lrt -lpthread' ROSE_WITH_MPI_CXXFLAGS='-I/usr/sci/scratch/sriram/local/include' ROSE_WITH_MPI_CXXLDFLAGS='-L/usr/sci/scratch/sriram/local/lib -lmpichcxx -lmpich -lopa -lmpl -lrt -lpthread' ROSE_WITH_MPI_C_FALSE='#' ROSE_WITH_MPI_C_TRUE=''
這些標誌對於將 ROSE 編譯為 MPI 程式很有用。還可以使用 CFLAGS 傳遞 mpi.h 的位置。只要將有效的安裝位置傳遞給 --with-mpi,這些標誌就會針對任何版本的 MPI 設定。
2) 有一些針對 MPI 的特定分析專案(MPI_Tools、extractMPISkeleton)。我們正在研究的一些資料流分析是 i) 用於 MPI 通訊的切片 ii) MPI 通訊不變式分析(證明通訊在迴圈中是恆定的)。我們目前計劃將這些分析與其他標準資料流分析一起使用,以
- 並行控制流圖分析——構建 MPI 程式的通訊圖,該圖沒有輸入依賴的控制流或通訊
- 轉換為 cDAG——cDAG 是 Torsten Hoefler 為 MPI 開發的執行時通訊最佳化工具。我們打算用 cDAG 呼叫替換 MPI 呼叫,以最佳化通訊。
ROSE 與 EDG 4.0 有實驗性的連線,這有助於我們支援 CUDA。
要啟用解析 CUDA 程式碼,請使用以下配置選項
--enable-edg-version=4.0 --enable-cuda --enable-edg-cuda
ROSE 使用者手冊的第 16 章詳細介紹了這一點。
Tristan 於 2012 年 9 月 24 日提供更多詳細資訊
- "--enable-cuda" 選項在 ROSE 中啟用 CUDA IR(IR、預包含等)
- "--enable-edg-cuda" 選項僅適用於 EDG:它在 EDG 4.x 中啟用 EDG 支援(實際上我需要修補 EDG 4.4)
- 當 "--enable-edg-cuda" 存在時,我們還需要 "--enable-edg-version=4.x"(x = {0, 3})
- "--enable-cuda" 與 --enable-only-cuda 相關,因為 "-edg-" 選項僅針對 EDG(通常作為二進位制檔案分發)。
ROSE 使用者手冊的第 16 章 CUDA 和 OpenCL 中有一節討論了這種支援 pdf
快速資訊
- 目的:一組函式,用於幫助實現 遞迴下降解析,用於簡單的註釋語言,例如原始碼指令。
- 官方文件:ROSE 教程的第 33 章解析器構建塊 [pdf http://rosecompiler.org/ROSE_Tutorial/ROSE-Tutorial.pdf]
- 原始檔:sourcetree/src/frontend/SageIII/astFromString/AstFromString
- 示例用法:rose/projects/pragmaParsing
FailSafe 斷言語言 一種實驗性的原始碼註釋語言,用於支援彈性計算。