跳轉到內容

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 支援)。

配置:請始終嘗試使用 --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 版本:下載

對於內建測試

如果您希望在鍵入 "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 所需的工作。

文件

測試: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

解析器構建塊

[編輯 | 編輯原始碼]

快速資訊

FailSafe 斷言語言

[編輯 | 編輯原始碼]

FailSafe 斷言語言 一種實驗性的原始碼註釋語言,用於支援彈性計算。

華夏公益教科書