•时间分区约束。为了发现流水线的可能性,我们需要找到时间分割约束的解决方案。也就是说,每当两个数组访问可以相同的数组元素时,则首先出现在迭代中的访问必须分配给管道中的一个阶段,该阶段不会晚于第二个访问分配的阶段。
•解决时间分区约束。 Farkas引理提供了一种强大的技术,用于查找给定的循环嵌套与数组访问所允许的所有仿射时间分区映射。这项技术基本上是用它们的对偶来代替表示时间分割约束的线性不等式原始公式。
•阻塞。这种技术将每个循环中的几个循环分成两个循环。这样做的好处是可以让我们一次处理多维数组中的小块。这反过来又改善了程序的局部性,让所有需要的数据在单个块上工作时驻留在缓存中。
•剥离。与阻塞类似,这种技术仅将循环嵌套的一部分循环分成两个循环。一个可能的优点是多维数组一次访问一个“条”,这可以使缓存利用率达到最佳。
•过程间分析:数据流分析追踪跨过程边界的信息被认为是过程间的。许多分析,如点分析,只能以有用的方式进行如果它们是过程的。
•呼叫站点:呼叫站点是某些点处编程呼叫的过程。在一个站点上调用的过程可能是直接的,或者是间接的,则通过指针或者具有多个实现的虚拟方法调用来调用的。
•调用图:程序的调用图是一个双向图,包含呼叫站点和过程节点。如果该过程在站点被调用,则边缘从呼叫点节点到过程节点。
内联:只要程序中没有递归,我们原则上可以用代码的副本来替代所有的程序调用,并对程序进行程序内分析。这种分析是有效的,过程间的。
•流量灵敏度和上下文敏感度:数据流分析产生的反应取决于在程序中的位置,也就是说对流量敏感。如果分析产生依赖于过程的反应,则称为上下文相关。数据流分析既可以是流或者是上下文敏感的,也可以既不是。
网友评论