您可以重新编写循环来消除数据依赖性,使其可以并行化。但需要进行大量的重构工作。
以下是一些通用规则:
仅当所有迭代均写至截然不同的内存位置时,循环才是与数据无关的。
迭代可以从相同位置读取,只要无任何迭代写至这些位置。
这些是进行并行化的一般条件。在确定是否并行化循环时,编译器的自动并行化分析会考虑附加条件。但是,可以使用指令显式地强制并行化循环,甚至是那些包含抑制因素和产生错误结果的循环。