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 断言语言 一种实验性的源代码注释语言,用于支持弹性计算。