Eric Schkufza, Rahul Sharma, Alex Aiken
Stanford University
(ASPLOS'13)
Presenter: Xingyu Xie
Target:待优化的程序
Super Optimization:尝试在程序空间中找到和 target 语义等价但性能最(极)好的程序。
程序空间过大?通过搜索来寻找近似最优解!
Synthesis:尝试搜索出“正确”(和 target 等价等价)的程序
Optimization:从“正确”的程序出发搜索效率更高的程序
优化问题:最小化 cost function
基本方法:爬山算法
缺点:容易陷入局部极值
如何避免陷入局部极值?
Metropolis-Hastings Algorithm!
核心想法:“以一定概率允许走到比当前位置更差的点”。
Move | Meaning |
---|---|
Opcode | 随机选择一条指令,将它的运算随机换成另外一个 |
Operand | 随机选择一条指令,将它的运算数随机换成另外一个 |
Swap | 随机选择两个指令,将它们交换 |
Instruction | 随机选择一条指令,将它随机换成另一条指令(包括特殊的 UNUSED) |
分为正确性和 performance 两项。(2)
我们的目标就是要求出这样的 \( \mathcal{R}' \)。(3)
假设每一种指令会有一个固定的 latency,整个程序的 performance 就是 latency 之和。(13)
From 1 phase to 2 phases:
实验发现:只考虑正确性的话,可以有效地从一个 random program 得到一个(几乎)正确的程序。
对循环的处理不佳,只能在每一个基本块里独立地去做 superoptimization。
It's hard to synthesize correct result for programs that produce results which differ by only a single bit from a simple yet completely incorrect alternative.
// Round Up to
// the Next Highest
// Power of 2
v--;
v |= v >> 1;
v |= v >> 2;
v |= v >> 4;
v |= v >> 8;
v |= v >> 16;
v++;