42digest首页
运行时重复递归在CHR中展开:一个可以实现超线性加速的即时在线程序优化策略

Runtime Repeated Recursion Unfolding in CHR: A Just-In-Time Online Program Optimization Strategy That Can Achieve Super-Linear Speedup

Thom Fruehwirth

arXiv
2023年7月5日

我们引入了基于反复递归展开的及时运行时程序转换策略。 我们的在线程序优化生成了几个版本的递归循环,其区别于覆盖的最小数量的递归步骤。 在我们的技术中忽略了递归的基本情况。 我们的方法是在单一线性直接递归规则的基础上引入的。 当在运行时遇到递归调用时,首先展开器创建相关的递归规则的专业化,然后解释器将这些规则应用于调用。 我们的方法将递归规则应用程序的数量减少到其对数,而牺牲引入了一个对数的通用展开规则。 我们证明了我们的在线优化技术的正确性,并确定其时间复杂性。 对于具有足够可简化展开的递归,超线性是可能的,即加速超过恒定因子。 必要的简化是特定于问题的,必须在编译时提供。 在我们的加速分析中,我们证明了一个充分的条件,以及一个充分和必要的条件,用于超线性加速,涉及原始规则的递归步骤的复杂性和展开的规则。 我们已经实现了一个展开器和元解释器,用于运行时重复递归展开,在Prolog中嵌入的Constraint Handling Rules(CHR)中只有五个规则。 我们通过简化、时间复杂性结果和一些基本可操作算法的基准来说明我们方法的可行性。 简化需要一些见解,并且是手动导出的。 运行时改进很快达到几个数量级,与我们的定理预测的超线性速度一致。

We introduce a just-in-time runtime program transformation strategy based on repeated recursion unfolding. Our online program optimization generates several versions of a recursion differentiated by the minimal number of recursive steps covered. The base case of the recursion is ignored in our technique. Our method is introduced here on the basis of single linear direct recursive rules. When a recursive call is encountered at runtime, first an unfolder creates specializations of the associated r...