当前位置: 首页 > news >正文

Open64 WHIRL

     Open64 WHIRL 是美国 Open64编译器套件 中使用的一种中间表示(Intermediate Representation,IR)格式,主要用于在编译过程中表示源代码的中间形态。它是Open64编译器的重要技术组成部分,用于代码优化和跨平台代码生成。

1. Open64 编译器简介


Open64 是一个开源的、高性能的编译器基础设施,最初由 SGI(Silicon Graphics) 开发,后来由 HP、Intel、AMD 等公司共同维护。它支持多种架构(如x86、IA-64、MIPS等),并广泛应用于高性能计算(HPC)、嵌入式系统和科研领域。

Open64 的主要特点

    支持 C、C++、Fortran 等语言。提供强大的 跨过程优化(Interprocedural Optimization, IPO) 和 循环优化。采用 WHIRL IR 作为统一的中间表示,便于多阶段优化。

2. WHIRL IR


WHIRL(Wide High-level IR Language)是Open64使用的 多层中间表示(Multi-Level IR),它在编译过程中分为多个级别(Levels),从高级抽象逐步降低到接近机器码的表示。

2.1 WHIRL 的层次结构


WHIRL 分为5个主要级别(Levels),从高到低依次为:

    Very High Level (VH),最接近源代码的表示,保留高级语言结构(如循环、函数调用)。

    High Level (H),开始引入控制流图(CFG),但仍保留高级语义。

    Medium Level (M),更接近机器无关优化,如循环展开、内联等。

    Low Level (L),接近目标机器架构,但仍保持平台无关性。

    Very Low Level (VL),最终接近汇编代码,包含寄存器分配、指令选择等。

2.2 WHIRL 的特点


统一的IR:适用于不同前端(C/C++/Fortran)和后端(x86/MIPS/IA-64)。

    支持复杂优化:如自动并行化、数据预取、循环变换等。

    可扩展性:研究人员可以基于WHIRL开发新的优化算法。

3. WHIRL 的应用


WHIRL 主要用于:高性能计算(HPC),Open64 被用于超级计算机的例子如日本的“京”超级计算机)。也可以用于嵌入式系统优化,适用于DSP、GPU等特殊架构的代码生成。同时可以用做编译器研究,学术界常用WHIRL进行编译优化算法的实验。

4. 多种 IR 比较

特性WHIRL (Open64)LLVM IRGCC GIMPLE
设计目标高性能计算、自动并行化通用优化、JIT支持跨平台代码生成
层次结构多级(VH→VL)单级(可扩展)多级(High→Low)
优化能力强于循环优化、IPO模块化优化传统优化
使用场景HPC、嵌入式通用编译、JITGCC生态系统


5. 获取和使用Open64 WHIRL


Open64 已开源,可以从以下途径获取:

GitHub:

https://github.com/open64-compiler

官方文档: 

http://www.open64.net

 示例:查看WHIRL IR

opencc -flto -c test.c -o test.whirl   # 生成WHIRL中间文件
whirl2f test.whirl                     # 将WHIRL转换回可读形式


6. 总结
Open64 WHIRL 是一种多级中间表示(IR),用于Open64编译器优化和代码生成。

适用于 高性能计算、嵌入式系统、编译器研究。

相比LLVM IR和GCC GIMPLE,它在 循环优化和自动并行化 方面有优势。

目前仍用于部分HPC项目,但LLVM/GCC在通用编译领域更流行。

如果你在编译器优化或HPC领域工作,WHIRL仍然是一个值得研究的IR格式!

http://www.dtcms.com/a/289391.html

相关文章:

  • `tidyverse` 长表、宽表的处理
  • 使用Qt6 QML/C++ 和CMake构建海康威视摄像头应用(代码开源)
  • 看板流程标准化和灵活性如何平衡
  • 在Ubuntu22系统上离线部署ai-infra-guard教程【亲测成功】
  • 深入分析linux内核源代码
  • PID控制原理分析及应用(稳态误差详细分析)(一)
  • 【高等数学】第四章 不定积分——第四节 有理函数的积分
  • 【LeetCode 热题 100】124. 二叉树中的最大路径和——DFS
  • [Python] -项目实战7- 用Python和Tkinter做一个图形界面小游戏
  • Servlet API 详解
  • 佛经个人阅读(二)《金刚经》解析
  • git fork的项目远端标准协作流程 仓库设置[设置成upstream]
  • 基于自定义数据集微调SigLIP2-分类任务
  • C语言:深入理解指针(2)
  • FreeRTOS学习笔记之内存管理
  • Spring MVC上下文容器在Web容器中是如何启动的(源码深入剖析)?
  • LeetCode 121. 买卖股票的最佳时机
  • Docker安装mysql、redis
  • 学习日志15 python
  • 深入理解Graphite协议:数据采集、存储与可视化的核心技术
  • [硬件电路-57]:根据电子元器件的受控程度,可以把电子元器件分为:不受控、半受控、完全受控三种大类
  • 65-OVP保护电路
  • 医学图像超分辨率重建深度学习模型开发报告
  • [硬件电路-58]:根据电子元器件的控制信号的类型分为:电平控制型和脉冲控制型两大类。
  • FNAF同人:简陋的测试
  • Pact 合约测试框架
  • 民法学学习笔记(个人向) Part.4
  • 20250720-5-Kubernetes 调度-污点与污点容忍_笔记
  • 力扣(LeetCode)第 459 场周赛
  • pthread_detach与pthread_join区别及使用场景