【论文研读】Better Together:Unifying Datalog and Equality Saturation

最近研究ReassociatePass整的头大,翻两篇Datalog的论文看看。
今天看的一篇是比较新的文章,23年4月贴到arxiv上的。
本文的主要贡献是提出了egglog,将Datalog和Eqsat结合起来,继承了Datalog的efficient incremental execution, cooperating analysis and lattice

目录

  • Introduction部分
  • BackGround
    • Datalog
    • extend Datalog with lattice
    • EqSat介绍
  • Egglog
    • Sorts and Equality
  • Semantic
    • Syntax
    • Semantics
  • IMPLEMENTATION
    • Components
  • CASE STUDIES
    • Herbie

本文的主要评估方式是针对一些其中一方无法执行的例子,发现这些project在egglog中能够更快,更简单,且解决了Datalog中发现的bug。
本文的代码库 链接附上。

Introduction部分

Datalog主要研究方向:database community practitioners use modern implementations to build program analysis。
附了三篇参考文献:
George Balatsouras and Yannis Smaragdakis. 2016. Structure-Sensitive Points-To Analysis for C and C++. In Static Analysis

  • 23rd International Symposium, SAS 2016, Edinburgh, UK, September 8-10, 2016, Proceedings (Lecture Notes in Computer
    Science, Vol. 9837), Xavier Rival (Ed.). Springer, 84–104. https://doi.org/10.1007/978-3-662-53413-7_5

Langston Barrett and Scott Moore. 2022. cclyzer++: Scalable and Precise Pointer Analysis for LLVM. https://galois.com/
blog/2022/08/cclyzer-scalable-and-precise-pointer-analysis-for-llvm/.

Yannis Smaragdakis and Martin Bravenboer. 2010. Using Datalog for Fast and Easy Program Analysis. In Proceedings of
the First International Conference on Datalog Reloaded (Oxford, UK) (Datalog’10). Springer-Verlag, Berlin, Heidelberg,
245–251. https://doi.org/10.1007/978-3-642-24206-9_14

Herbie [Panchekha et al. 2015], a tool that uses EqSat to optimize
floating-point accuracy, relies on unsound rewrites because it lacks the analyses to prove that
certain rewrites are safe (e.g. 𝑥/𝑥 → 1 only if 𝑥 ≠ 0). To combat the unsoundness, Herbie must
validate the results of EqSat and discard them if unsoundness was detected.
上文似乎解决了浮点数的sound问题,以后可以看。

On the Datalog side,
cclyzer++ [Barrett and Moore 2022], a recent points-to analysis system implemented in Datalog
that supports Steensgaard analyses [Steensgaard 1996] for LLVM [Lattner and Adve 2004] resorted
to an ad-hoc implementation of union-find, because the provided implementation of equivalence
relations was too slow.
LLVM中的Steensgaard analyses。

上述分析的目的:Datalog和Eqsat两边各有问题。
Our key insight is that the efficient equational reasoning of EqSat and the rich, composable semantic analyses of Datalog make up for each other’s weaknesses, and unifying the two paradigms brings together—and goes beyond—the best of both worlds.

In fact, spontaneous developments in both communities have already begun converging towards each other: Datalog tools have added efficient
equivalence relations [Nappa et al. 2019], lattices [Madsen et al. 2016; Sahebolamri et al. 2022], and some support for datatypes [Developers [n.d.]], while the EqSat community has recently developed support for conditional rewriting, lattice-based analyses [Cheli 2021; Willsey et al. 2021], and relational pattern matching [Zhang et al. 2022]. We bring this trend to completion and close the gap between EqSat and Datalog.
大把文献,看到头秃。上述论文都是在某个系统上面做扩充,问题在于这些扩充能否解决本文所解决的问题?效果如何?

本文的评估办法:

  1. 用egglog实现Steensgaard-style points-to analyses faster and easier to write and compare to Souffle with 4.96x
  2. egglog 能够实现一个更新的更完善的Herbie的EqSat过程。在给定的错误容忍度下能够实现更快的给出结果(未给出倍率)

BackGround

egglog扩充了Datalog以纳入EqSat,我想这就是作者为什么将其命名为egglog而不是eggSat。

Datalog

Each rule is a conjunctive query of the form 𝑄(x) :- 𝑅1(x1), 𝑅2(x2), . . . , 𝑅𝑛(x𝑛) where each x and x𝑖 is a tuple of variables or constants. The atom 𝑄(x) is called the head of the rule, and the atoms 𝑅𝑖 (x𝑖) comprise the body.
定义了连接查询和查询头、查询体。
在这里插入图片描述
介绍Datalog时给了一个很经典的图,这个图和Souffle官方教程中的path很类似,用过Souffle的很熟悉。
定义了ICO(Immediate consequence operator)函数,其实就是一个推导的过程。这个过程其实就是找fixpoint的过程。

extend Datalog with lattice

在这里插入图片描述
把Datalog扩充到支持格的水平,这三篇论文也可以以后阅读。
实质就是将原来的针对变量或常量的函数扩充到针对格映射的函数。
在这里插入图片描述
此处介绍了EqSat的优势,也即能够解决上述的因为rewrite造成优化机会丢失的例子。

EqSat介绍

EqSat本质上是将Rewrite和history同时保存然后获得二者的好处。
文章还介绍了一些EqSat的扩展,例如,支持语义分析以增加Soundness。
Multi-pattern,看起来是将pattern的过程并行了,有两篇文章是这方面的工作,但还没有达到更优。
提高e-matching的效率,最近的技术是relational e-matching。
论文:
Yihong Zhang, Yisu Remy Wang, Max Willsey, and Zachary Tatlock. 2022. Relational E-Matching. Proc. ACM Program.
Lang. 6, POPL, Article 35 (jan 2022), 22 pages. https://doi.org/10.1145/3498696
这个技术的问题在于会出现dual representation问题,也即引擎会在e-graph和相关的database representation之间往复。
(需要在相关论文中看这个问题的例子)

Egglog

在这里插入图片描述
egglog看起来好抽象,尤其是括号的使用,看起来是使用了前缀表达式的形式,运算符出现在括号的第一个元素,操作数出现在括号的第二个和第三个元素。
egglog还引用了function。
在这里插入图片描述
从前缀表达式角度理解上述代码就不会被复杂的嵌套括号困住。
作者解释了:merge的作用,也即处理格的交会功能,例如此处从1到3有两个路径,一种是1直接到3的边30,一种是1到2到3的路径,长度为20,所以需要定义两种情况的取舍,也即join operator。

上述一段代码,无法直接在egglog中运行,因为支持的指令需要改为(run 1) repeat指运行次数,可以多次验证是否匹配。

Sorts and Equality

unification操作,看起来就是将两个点统一成一个点,然后进行分析。
opaque integer values,这里的opaque很有意思,有晦涩的意思,其实相等变量的识别一直不是显而易见的(不同于常量识别)。

Semantic

Syntax

此部分介绍egglog core,不包含那些例如:merge的语法糖。
·在这里插入图片描述
结合论文中的文字看这个语法还是比较简单的。
uninterpreted constant 和 interpreted constant的区别:
These uninterpreted constants play a similar role as e-class ids in EqSat or labelled nulls in the chase from the database
literature.

在EqSat中,e-class id(等价类标识符)用于标识相同的表达式或值的等价类。
此处uninterpreted constant看起来像类似于值编号中的编号。

Semantics

首先给出模式的定义:
A schema 𝑆 is a collection of function symbols and their function signatures, where the types range over
{𝑁 , 𝐶}.
其中N和C分别是uninterpreted constant和interpreted constant的集合。S其实是表示某一类符合同一模式的函数的集合。
在这里插入图片描述S的一个元素定义为I,其中既包含一个函数集合,又包含一个等价关系。
在这里插入图片描述此处定义了另一种judgement符号表示某个atom在一个database中。
理解了一系列定义之后,上面三个推理过程就显而易见了,首先要明确的是对于两种符号,带箭头的符号优先级比不带箭头的符号高。
第一个:对于每个i都满足ti和vi的函数关系,且这些函数关系同属于一个database,那么将DB中的函数参数从vi换成ti依旧能满足上述关系。
第二个:对于任何一个Database,都存在变量到自身的函数。
第三个:对于任何函数都能退出v,那么该函数本身也是成立的。

定义了pre-instance和valid instance以及转换函数rebuilding operator。
在这里插入图片描述根据上述函数的定义给出了semi-naive evaluation algorithm.

IMPLEMENTATION

用Rust实现的。。。不是很熟悉。

Components

egglog’s rebuilding procedure is based on the rebuilding procedure from
egg [Willsey et al. 2021], which is in turn based on the congruence closure algorithm from Downey
et al. [1980].
上述两篇对理解Rebuilding operator会有帮助。
在这里插入图片描述结合此处的例子更好理解Rebuilding operator的作用,首先有一个函数f对两个不同的输入有不同的输出,现在将a和c进行union操作,会出现对a的输出同时为b和d,这就出现了冲突(类似于常量折叠中出现了某个变量可能对应两个常量)。因此需要进行merge,获得统一的结果,但这种merge又可能会造成更多的union,最终程序要一直运行到固定点。
问题在于?如何确保程序一定能够结束。

CASE STUDIES

[Balatsouras and Smaragdakis 2016; Bravenboer and Smaragdakis
2009; Whaley et al. 2005]
一些程序分析工具。
文中将指针分析工具分为两类,一类是基于subset的例如Anderson类型的,一类是基于unification的,例如Steensgaard类型的,前者精确但是二次复杂度的,后者是线性复杂度的但不够精确。

Herbie

Herbie是一个是浮点数程序更精确的工具,可以根据一个输入返回一个更精确的浮点数实现。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/669326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【前端web入门第四天】02 CSS三大特性+背景图

文章目录: 1. CSS三大特性 1.1继承性 1.2 层叠性 1.3 优先级 1.3.1 优先级1.3.2 优先级-叠加计算规则 2. 背景图 2.1 背景属性2.2 背景图2.3 背景图的平铺方式2.4 背景图位置2.5 背景图缩放2.6 背景图固定2.7 背景复合属性 1. CSS三大特性 1.1继承性 什么是继承性? 子级默…

前端实现搜索框筛选

效果图 页面解析 是一个input输入框和一个button按钮组成输入框查询 内容是一个折叠面板 html代码 <div class"left-content-box"><div class"colum-search"><el-input v-model"columKey" clearable placeholder"请输入关…

redis大数据统计之hyperloglog,GEO,Bitmap

目录 一、亿级系统常见的四中统计 1、聚合统计 2、排序统计 3、二值统计 4、基数统计 二、hyperloglog 去重的方式有哪些&#xff1f; hyperloglog实战演示 1、技术选型 2、代码演示 三、GEO GEO实战演示 四、Bitmap 一、亿级系统常见的四中统计 1、聚合统计 聚…

STM32F407移植OpenHarmony笔记7

继上一篇笔记&#xff0c;成功启动了liteos_m内核&#xff0c;可以创建线程了&#xff0c;也能看到shell控制台了。 今天研究文件系统&#xff0c;让控制台相关文件命令如mkdir和ls能工作。 liteos_m内核支持fatfs和littlefs两个文件系统&#xff0c; fatfs适用于SD卡&#xff…

将11.x.x升级至16.x.x不成功的一系列问题(二)node-sass sass-loader需安装指定版本

nvm 版本切换搞定了 咱就是说 那个node-sass好像有点毛病 还得指定对应的loaber版本 node.js 16.18.1对应的如下 “node-sass”: “^6.0.1”, “sass-loader”: “^10.0.1”, node.js 11.8.0 对应的如下 “node-sass”: “^4.14.1”, “sass-loader”: “^7.3.1”, 老项目即…

python-题库篇-数学

文章目录 求最大公约数和最小公倍数斐波那契数列求和运算求前n阶乘的和求年龄 求最大公约数和最小公倍数 两个数的最大公约数是两个数的公共因子中最大的那个数&#xff1b;两个数的最小公倍数 则是能够同时被两个数整除的最小的那个数。 输入&#xff1a;&#xff08;120 和…

零基础如何入门渗透测试2024年最新版,保姆级教程,小白必看!

转眼间&#xff0c;从大三开始学安全&#xff0c;到现在也有五年了&#xff0c;也算是对渗透测试有一定理解&#xff0c;今天也是出一篇入门教程&#xff0c;以实操为主&#xff0c;希望可以帮助到想入门渗透测试的小白。如果觉得有用&#xff0c;可以给我点个赞和收藏&#xf…

Android: 深入理解 ‘companion object {}‘

Android: 深入理解 ‘companion object {}’ Kotlin是一种现代的、静态类型的编程语言&#xff0c;它在设计时充分考虑了开发者的生产力和代码的可读性。其中一个独特的特性就是companion object。在本篇博客中&#xff0c;我们将深入探讨这个特性&#xff0c;理解它的工作原理…

Java21 + SpringBoot3集成七牛云对象存储OSS,实现文件上传

文章目录 前言实现步骤引入maven依赖修改配置文件创建七牛云配置类创建文件操作服务类创建文件操作控制器前端实现运行效果 总结 前言 近日心血来潮想做一个开源项目&#xff0c;目标是做一款可以适配多端、功能完备的模板工程&#xff0c;包含后台管理系统和前台系统&#xf…

EOF和0区别

题目描述 KiKi学习了循环&#xff0c;BoBo老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“*”组成的X形图案。 输入描述&#xff1a; 多组输入&#xff0c;一个整数&#xff08;2~20&#xff09;&#xff0c;表示输出的行数&#xff0c;也表示组成“X”的反斜…

你的歌声婉转入云霄

可爱的一朵玫瑰花 - 吕继宏 可爱的一朵玫瑰花塞地玛丽亚 可爱的一朵玫瑰花塞地玛丽亚 那天我在山上打猎骑着马&#xff08;人善被人欺马善被人骑&#xff09; 正当你在山下歌唱婉转入云霄 歌声使我迷了路 我从山坡滚下 哎呀呀 你的歌声婉转入云霄 强壮的青年哈萨克伊万杜达尔 …

【八大排序】选择排序 | 堆排序 + 图文详解!!

&#x1f4f7; 江池俊&#xff1a; 个人主页 &#x1f525;个人专栏&#xff1a; ✅数据结构冒险记 ✅C语言进阶之路 &#x1f305; 有航道的人&#xff0c;再渺小也不会迷途。 文章目录 一、选择排序1.1 基本思想1.2 算法步骤 动图演示1.3 代码实现1.4 选择排序特性总结 二…

C/C++内存管理的底层调用逻辑

✨Blog&#xff1a;&#x1f970;不会敲代码的小张:)&#x1f970; &#x1f251;推荐专栏&#xff1a;C语言&#x1f92a;、Cpp&#x1f636;‍&#x1f32b;️、数据结构初阶&#x1f480; &#x1f4bd;座右铭&#xff1a;“記住&#xff0c;每一天都是一個新的開始&#x1…

【TCP/IP】用户访问一个购物网站时TCP/IP五层参考模型中每一层的功能

当用户访问一个购物网站时&#xff0c;网络上的每一层都会涉及不同的协议&#xff0c;具体网络模型如下图所示。 以下是每个网络层及其相关的协议示例&#xff1a; 物理层&#xff1a;负责将比特流传输到物理媒介上&#xff0c;例如电缆或无线信号。所以在物理层&#xff0c;可…

vue3项目实现预览图片、旋转图片功能

一、需求&#xff1a; 在点击图片时&#xff0c;能预览大图&#xff0c;弹出一个包含旋转图片功能按钮的弹窗。用户可通过点击按钮实现对图片的旋转操作 二、思路&#xff1a; 点击图片预览&#xff1a; 用户通过点击图片触发预览功能。接收图片的 URL&#xff0c;弹出一个模…

【GameFramework框架】四、GameFramework框架内置模块

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 【GameFramework框架】系列教程目录&#xff1a; https://blog.csdn.net/q7…

问题:下列关于海关统计项目的表述,正确的有:A.进出境货物的统计重量和数量应以报关单位申报的重量和数 #笔记#职场发展#媒体

问题&#xff1a;下列关于海关统计项目的表述&#xff0c;正确的有&#xff1a;A&#xff0e;进出境货物的统计重量和数量应以报关单位申报的重量和数 下列关于海关统计项目的表述&#xff0c;正确的有&#xff1a; A&#xff0e;进出境货物的统计重量和数量应以报关单位申报的…

echarts使用之地图(五)

1 基本使用 百度地图 API : 使用百度地图的 api , 它能够在线联网展示地图 , 百度地图需要申请 ak 矢量地图 : 可以离线展示地图 , 需要开发者准备矢量地图数据。本文使用该方式。 json格式的数据如下&#xff1a; 格式参照&#xff1a;GeoJSON <!DOCTYPE html&…

Java实现数据可视化的智慧河南大屏 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏&#xff0c;包含了GDP、…

泰克示波器(TBS2000系列)保存功能使用

目录 1.1 Save/Recall按钮1.2 保存动作1.3 文件格式1.4 保存 在使用示波器时&#xff0c;测量后的结果我们常常需要记录下来&#xff0c;大部分情况我们是拍照记录&#xff0c;单图像往往不清晰&#xff0c;这时使用示波器专用的保存功能&#xff0c;插入U盘即可保存&#xff0…