复习
本次课回答的问题
本次课主要内容
我们的物理世界是 “确定规则” 的状态机吗?
把物理世界建模成基本粒子的运动
可以在这个模型上严肃地定义很多概念:预测未来、时间旅行……
例子
编译器:源代码 $S$ (状态机) → 二进制代码 $C$ (状态机) $$C = \textrm{compile}(S)$$
编译 (优化) 的正确性 (Soundness):
超标量 (superscalar)/乱序执行处理器
程序执行 = 状态机执行
程序执行是随时间 “前进” 的 $ s_0 \to s_1 \to s_2 \to \ldots $
记录所有 $s_i$ 的开销太大 ($s_i$ 由内存 + 寄存器组成)
gdb 的隐藏功能 (大家读过 gdb 的手册了吗?)
record full
- 开始记录record stop
- 结束记录reverse-step
/reverse-stepi
- “时间旅行调试”例子:调试 rdrand.c
在程序执行时记录信息,结束后重现程序的行为
Record & Replay: 只需记录 non-deterministic 的指令的
-icount shift=auto,rr=record,rrfile=replay.bin
)Premature optimization is the root of all evil. (D. E. Knuth)
那到底怎么样才算 mature 呢?
我们需要真实执行的
性能摘要需要对程序执行性能影响最小,往往不需要 full trace。
隔一段时间 “暂停” 程序、观察状态机的执行
例子:Linux Kernel perf (支持硬件 PMU) - ilp-demo.c
你们遇到的大部分情况
工业界遇到的大部分情况
150 行代码的 model-checker.py
一些真正的 model checkers
任何 “non-deterministic” 的状态机都可以检查
u32 x = rdrand();
u32 y = rdrand();
if (x > y)
if (x * x + y * y == 65)
bug();
...
assert(ptr); // 可能空指针吗?
更高效的 Model Checker: “将相似状态合并”
本次课回答的问题
Take-away messages