跳转到内容

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

华夏公益教科书