动态调度的静态分析及其应用与降低STM开销
1. 计算读写集
调度分析的第二部分是为每个激活计算读写集。我们通过关系 read : H × BC × H
和 write : H × BC × H
来捕获读写集。例如,元组 read(act, bc, obj)
表示激活对象 act
可能到达字节码 bc
,并且这个字节码是一个可能访问对象 obj
的加载操作。读写集的计算很直接,可以用以下两条 Datalog 规则表示(其中下划线 _
表示“任意”):
read(act, bc, obj) :-
activationReaches(act, bc), load(bc, v, _, _),
variablePT(v, obj).
write(act, bc, obj) :-
activationReaches(act, bc), store(bc, v, _, _), variablePT(v, obj).
关系 activationReaches : H × BC
是一个简单的可达性谓词,它从激活对象的任务开始,沿着调用图中的所有调用边,找出该激活可能执行的所有字节码。
2. 基于调度分析的优化
基于调度分析,有三种针对并行程序的优化方法。