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

Flang:LLVM Fortran 前端简介

文章目录

  • Fortran定义
  • 处理流程
    • Preprocess
    • Parse
    • Semantic Analysis
    • module file
    • FIR和OpenMP
    • OpenMP
    • OpenACC
  • 商业版Fortran
  • Reference
  • 参考

Fortran定义

  • 高性能计算(HPC)中的流行语言
  • 大量遗留代码
  • 用途
    天气预报(WRF、UM)、数值模拟/建模
    库:LAPACK、BLAS
  • Fortran程序员通常期望,过去成功编译过的代码将继续无限期地编译并正常运行。

处理流程

Preprocess

将代码转换为“已处理”的字符流。
展开宏,规范化字符大小写。
提供每个字符的来源映射信息,即追踪每个字符来自何处。

在这里插入图片描述

Parse

递归下降解析(Recursive Descent Parsing)
采用 ISO 标准 Fortran 2018 作为主要定义
接受来自 Fortran 前版本的功能,以及虽然未在规范中明确列出但已知正在使用中的功能。
在这里插入图片描述

Semantic Analysis

检查标准中提到的规则/约束
标签解析(goto 语句、带标签的 DO 语句到无标签的 DO 语句)
解析名称(名称、符号,填充解析树中的 parser::Name::symbol 和其他字段)
检查 DO CONCURRENT 约束
分析表达式和赋值
生成模块文件
降级以生成 Fortran IR(MLIR 的一种方言)

在这里插入图片描述

module file

以 Fortran 源代码形式存储

  • 包含头部信息(包含魔术数、版本号、校验和)
  • 包含实体声明的主体部分

无需预处理
参见 docs/ModFiles.md

在这里插入图片描述

FIR和OpenMP

MLIR

基于 MLIR 的 FIR

  • FIR(Fortran Intermediate Representation)建模了 Fortran 语言,但不表示 OpenMP 构造。

因此 OpenMP 有自己的 MLIR

  • OpenMP 使用自己的 MLIR 表示其特定的并行构造。

共同框架,不同功能

  • MLIR 提供了一个通用的框架,但不同的语言或特性(如 Fortran 和 OpenMP)在其上实现各自的功能。

OpenMP IRBuilder

  • OpenMP 使用专门的 IRBuilder 来构建其中间表示(IR)。

复用 Clang 的代码生成器

  • 利用 Clang 已有的代码生成器来处理 OpenMP 构造。

重构 Clang 中的 OpenMP 代码生成器并移至 LLVM 目录

  • 将 Clang 中与 OpenMP 相关的代码生成逻辑进行重构,并将其移动到 LLVM 的目录中。

在这里插入图片描述

OpenMP

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

OpenACC

从解析器(功能完整)开发到运行时
使用 OpenACC MLIR 方言

  • 尚未完成

将解析树降级为 MLIR

  • 在 fir-dev 分支中

商业版Fortran

在这里插入图片描述·
在这里插入图片描述

Reference

Flang:TheFortranfrontendofLLVM

  • https://archive.fosdem.org/2020/schedule/event/llvm_flang/
    2021 LLVMDev Mtg“Introduction to the Flang Frontend"

  • https://youtu.be/0eAOKA_GnS0
    Flang’sdocumentation

  • https://releases.llvm.org/11.0.0/tools/flang/docs/
    Fortran Compilers

  • https://fortran-lang.org/compilers/

参考

  • 蔡奇含 - Flang:LLVM Fortran 前端简介 - 20220119 - PLCT实验室

相关文章:

  • IPv4编址及IPv4路由基础
  • python画三维立体图
  • 【支持向量机】SVM线性可分支持向量机学习算法——硬间隔最大化支持向量机及例题详解
  • 用Zynq实现脉冲多普勒雷达信号处理:架构、算法与实现详解
  • Github 热点项目 [特殊字符]PHP性能革命!FrankenPHP让Laravel/Symfony飞起来!
  • 【郑州轻工业大学|数据库】数据库课设-酒店管理系统
  • C# winform教程(二)----GroupBox
  • Laravel框架的发展前景与Composer的核心作用-优雅草卓伊凡
  • redis02--RDB、AOF、乐观悲观锁、数据删除淘汰、发布订阅、事务机制
  • 【数字人开发】Unity+百度智能云平台实现长短文本个性化语音生成功能
  • SpringBoot扩展——应用Web Service!
  • MySQL八股文
  • 第1章: 伯努利模型的极大似然估计与贝叶斯估计
  • jmeter学习
  • AI免费工具:promptpilot、今天学点啥、中英文翻译
  • python打卡day35
  • 第18篇:磁盘阵列管理(RAID)深度解析与OpenEuler 24.03实践指南
  • 如何在 Pop!_OS 或 Ubuntu Linux 上安装 Dash to Dock
  • 什么是Spark
  • 火山引擎TTS使用体验
  • 长春网站建设流程/百度云网盘资源搜索
  • wordpress页面能用js吗/广州优化防控措施
  • 网站建设交印花税/商品推广
  • 成都市成华区建设局网站/南京seo排名优化
  • 哈尔滨关键词优化方式/aso优化排名
  • wordpress登陆加快/seo黑帽优化