常量传播复杂性的探索
1. 动机
常量传播(CP)是实践中最广泛使用的优化方法之一,它旨在静态检测表达式在运行时是否总是计算为唯一常量。然而,即使完全忽略分支的解释,常量传播问题通常也是不可判定的。不同作者已证明了这一点,例如Hecht以及Reif和Lewis。
Hecht的证明基于波斯特对应问题(Post correspondence problem)。波斯特对应系统由一组对 $(u_1, v_1), \ldots, (u_k, v_k)$ 组成,其中 $u_i, v_i \in {0, 1}^*$。若存在序列 $i_1, \ldots, i_n$ 使得 $u_{i_1} \cdots u_{i_n} = v_{i_1} \cdots v_{i_n}$,则该对应系统有解。
在Hecht的构造中,变量 $x$ 和 $y$ 被用作表示 ${0, 1}^*$ 中字符串的十进制数。对于对应系统的每一对,循环的不同分支分别将字符串 $u_i$ 和 $v_i$ 附加到 $x$ 和 $y$ 上。若波斯特对应问题无解,$x - y$ 总是计算为非零值,此时表达式 $1 \text{ div } ((x - y)^2 + 1)$ 总是计算为 0;若对应系统有解,该表达式可能计算为 1。因此,变量 $r$ 为常量(值为 0)当且仅当波斯特对应问题无解。
另一方面,对于无环(即无循环)程序,常量传播是可判定的,但即使在这种情况下,问题也是难解的,已被证明是 co - NP 难的。这个结果基于 3 - SAT 问题的余问题的多项式时间归约。对于一个 3 - SAT 实例,通过特定的程序构造,变量 $r_2$ 在每个程序路径上计算为 1 当且仅当底层的 3 - SAT 实例无解。 <
超级会员免费看
订阅专栏 解锁全文
1963

被折叠的 条评论
为什么被折叠?



