Finding Deep Compiler Bugs via Guided Stochastic Program Mutation

背景知识

Markov Chain Monte Carlo(MCMC)

  • Monte Carlo:在目标分布 p ( X ) p(X) p(X)定义的高维空间 X \mathcal{X} X中进行采样的方法
  • 马尔可夫链:下一个状态只和当前状态相关,且分布为 q ( X t + 1 ∣ X t ) q(X_{t+1}|X_t) q(Xt+1Xt)
  • MCMC:在 X \mathcal{X} X中使用马尔可夫链来进行抽样,这允许从重要地区提取更多样本
  • Metropolis-Hasting(MH): A ( X → X ∗ ) = m i n ( 1 , p ( X ∗ ) q ( X ∣ X ∗ ) p ( X ) q ( X ∗ ∣ X ) ) \mathcal{A}(X \to X^*) = min(1, \frac{p(X^*)q(X|X^*)}{p(X)q(X^*|X)}) A(XX)=min(1,p(X)q(XX)p(X)q(XX))
  • Metropolis: A ( X → X ∗ ) = m i n ( 1 , p ( X ∗ ) p ( X ) ) \mathcal{A}(X \to X^*) = min(1, \frac{p(X^*)}{p(X)}) A(XX)=min(1,p(X)p(X))

实施

距离函数(基于控制流图)

△ ( Q ; P ) = α ∗ d ( V Q , V P ) + β ∗ d ( E Q , E P ) − γ ∗ ∣ Q − P ∣ \triangle (Q;P) = \alpha * d(V_Q,V_P) + \beta * d(E_Q,E_P) - \gamma * |Q - P| (Q;P)=αd(VQ,VP)+βd(EQ,EP)γQP

MCMC Sampling

  • 当应用于优化时,MCMC采样器更经常地从目标值较高的区域提取样本 (ones with larger program distances)
  • 将目标函数转换为密度分布 p ( Q ; P ) = 1 Z e x p ( σ △ ( Q ; P ) ) p(Q;P) = \frac{1}{Z} exp(\sigma \triangle(Q;P)) p(Q;P)=Z1exp(σ(Q;P))
  • 转换概率: A ( Q → Q ∗ ; P ) = m i n ( 1 , e x p ( σ ( △ ( Q ∗ ; P ) − △ ( Q ; P ) ) ) q ( Q ∣ Q ∗ ) q ( Q ∗ ∣ Q ) ) \mathcal{A}(Q \to Q^*;P) = min(1, exp(\sigma (\triangle(Q^*;P) - \triangle(Q;P))) \frac{q(Q|Q^*)}{q(Q^*|Q)}) A(QQ;P)=min(1,exp(σ((Q;P)(Q;P)))q(QQ)q(QQ))

插入新的代码

  • 广度优先遍历,统计变量
  • 使用“while(0);”替代被删除的代码,保证程序是可以遍历的,利于采样

Athena

在这里插入图片描述

Extracting Statement Candidates

  • stmt-extractor(tool)
  • LLVM’s Libtooling library

Proposing Variants

  • Transformation
  • Statement Renaming
  • Discussion
    • 搜索空间不对称

实验

  • 数据:Csmith
  • 候选程序:种子程序中的语句
  • 最好的选择:随机采样
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值