循环依赖关系即阻止对循环进行最优化(通常为流水打拍)的数据依赖关系。此类依赖关系可出现在任一循环的单一迭代内或者也可出现在任一循环的不同迭代内。
了解循环依赖关系的最简单的方法是检验极端示例。在以下示例中,循环结果用作为循环持续条件或循环退出条件。循环的每次迭代必须完成后才能开始下一次迭代。
Minim_Loop: while (a != b) {
if (a > b)
a -= b;
else
b -= a;
}
此循环无法流水打拍。前一次迭代结束后,下一次循环迭代才能开始。并非所有循环依赖关系都如此极端,但此示例着重展示了部分操作在某些其它操作完成后才能开始的情况。解决方案为尝试确保尽早执行初始运算。
循环依赖关系可能发生于所有类型的数据。使用阵列时尤其常见。