我只是偶然发现了“循环级并行”这个术语,并试图理解它。
比如说,我有一个算法,它计算出一些近似值,每次迭代都会变得更好。如果我写这样的代码,编译器就不知道迭代的次数,因此这个循环会“慢”:
while (ErrTol_not_met)
{
// Do iteration step
}
如果我这样写代码,会更快吗?
for (int n = 0; n < N; n++)
{
// Do iteration step
}
当然,第一个循环总是满足误差容限,而第二个循环,取决于N,可能有时满足容限,有时做不必要的计算,我只是想从原理上理解这一点。
我对“循环级并行”的理解是否正确?有什么特别的地方需要知道吗?OpenGL是如何处理的?如果我重写一些循环,会有什么样的加速?在什么情况下/什么样的循环会有相关性?
1条答案
按热度按时间xyhw6mcr1#
主要区别在于,如果N是统一值或在编译时已知,则for循环可以由编译器展开。