如果编译器不并行化所花时间量占主体的程序部分,则不会发生加速。例如,如果并行化一个占用程序执行时间的百分之五的循环,则总加速仅限于百分之五。然而,任何改善都取决于工作量和并行执行开销的大小。
一般说来,并行化的程序执行所占的比例越大,加速的可能性就越大。
每个并行循环都会在启动和关闭期间发生少量开销。启动开销包括工作分配代价,关闭开销包括障碍同步代价。如果循环执行的工作总量不足够大,则不会发生加速。事实上,循环甚至可能减慢。如果大量程序执行工作由许多短并行循环完成,则整个程序可能减慢而不是加速。
编译器执行几个尝试增大循环粒度的循环变换。其中某些变换是循环交换和循环合并。如果程序中的并行量很小或者分散在小并行区域,则加速通常很少。
按比例增大问题大小通常可提高程序中的并行程度。例如,考虑包含以下两部分的问题: 按顺序的二次部分,以及可并行化的三次部分。对于此问题,工作量的并行部分的增长速度比顺序部分的增长速度快。因此在某些点,除非达到资源限制,否则问题将加速。
尝试进行某些调节,使用指令、问题大小进行试验,重新构造程序,以便从并行 C 中获得最大好处。