Green Marl 入门 Part2:编译器概要

本文深入剖析Green Marl编译器,涵盖从语义检查、目标无关优化到机器相关优化的全过程。文章讨论了如何处理Group Assignments、In-Place Reduction、Loop Fusion等优化策略,并通过实例展示了编译器如何转换和优化图算法代码,旨在帮助读者理解Green Marl的编译原理和优化技术。
摘要由CSDN通过智能技术生成

Green Marl是一种面向图的特定领域语言。用户可以在 Green-Marl 中使用高级的、图形特有的数据类型和运算符直观地编写自己的图形算法。

本系列将结合Green Marl的论文与文档,分析学习Green Marl语言。其中部分是对论文或文档的翻译。若有理解错误,请指出。

论文:Green-Marl: A DSL for Easy and Efficient Graph Analysis

Github Repo:Green-Marl

Green Marl 编译器总览

如果所示,Green-Marl书写的算法经过编译器编译与Green-Marl的图像库的链接后称为用户应用程序中的图计算模块。Green-Marl有指定的图的数据结构(从上一个Part的最后实际上手写的程序可以看到),而与这些数据结构有关的实现均放在Graph Data Structure这个库中实现。故Green-Marl的编译器实现的是Green-Marl语言到目标语言的一对一的映射。

这里写图片描述

整个编译器分为四部分,第一部分编译器将提供语义检查,第二部分编译器前端将Green Marl转换成目标无关中间代码。第三部分后端则转换成目标相关代码并针对目标进行优化。第四部分则主要用于生成目标代码。

论文主要描述的是针对coherent shared-memory multi-processor的计算机,且最后编译出的语言为C++的编译器进行描述。

如果需要编译到其他的语言,第一二部分都可以不用改变,只需要改第三第四部分即可。

Parsing and Checking

编译器的第一部分包括检查用户写的Green Marl程序的正确性,主要包括三点:1. 句法 2. 类型 3. 并行语义。其中12两点与其他的编译器并没有太大的区别。Green-Marl是静态类型语言,在编译的时候就已经可以确定没个变量的类型。

下面给出一段程序在编译器第一部分处理的过程和结果:

76 Int y=0; 
77 Foreach(s:G.Nodes)(s.C>3){
78      Foreach(t:s.Nbrs){ 
79          Int x = y * s.B; 
80          s.A += t.B * X @ t;
81      }
82      s.B = 4; 
83 }

直接可以看到82行的赋值没有做延后处理,故利用Foreach进行并行化遍历,79行看到的B值可能不固定。这存在一个Read-Write conflict

实际测试利用编译器编译后报的Warning如下:

foo.gm:In procedure foo:
foo.gm:6: 16: warn: Property B may have read-write conflict: read at line:6, write at line:9

其中line 6指的论文中的line 79,而后面的line 9指的论文中的line 82

针对上面的代码,分析出的表格见下:

这里写图片描述

其中的每一行代表着语义分析其中的一步。顺着看下来。

如第76行中Int y=0,这行代码的type = W target = y

语义的分析是根据抽象语法树的后序遍历生成的。所以我们会先分析foreach中的body部分,也就是79 80行的内容。其中80行是一个归约的操作。且归约到s.A与t进行了绑定。当遍历完foreach(t)的全部语句之后,就开始对这个循环的并行语义开始分析。这个分析包括了两个部分:

  1. 合并:将这个循环中的所有操作合并成一个操作。这将消除局部临时变量,如上面79行的局部临时变量x就被消除了。
  2. 检查:
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值