当我增加一个令人尴尬的并行线性问题的核心数量时(一个 for 循环,其中每次迭代都进行大量计算,都独立于其他迭代),效率降低(效率为 Ts/(p*Tp) )以某种方式线性尊重到核心数
我知道在实践中线程调度、操作系统和缓存问题会大大减慢实现速度。
我可以补充一点,我确实得到了加速,理论上的问题是线性加速,理论上随着 p 的增加效率为 1。
那么问题来了:随着处理器数量的增加,操作系统、线程调度、内存访问和其他类型的技术限制如何影响算法的效率????它应该影响吗?
当我增加一个令人尴尬的并行线性问题的核心数量时(一个 for 循环,其中每次迭代都进行大量计算,都独立于其他迭代),效率降低(效率为 Ts/(p*Tp) )以某种方式线性尊重到核心数
我知道在实践中线程调度、操作系统和缓存问题会大大减慢实现速度。
我可以补充一点,我确实得到了加速,理论上的问题是线性加速,理论上随着 p 的增加效率为 1。
那么问题来了:随着处理器数量的增加,操作系统、线程调度、内存访问和其他类型的技术限制如何影响算法的效率????它应该影响吗?
您可能正在考虑类似阿姆达尔定律的东西,但每个案例的具体情况很难确定。
您应该研究强大的缩放:
https://www.sharcnet.ca/help/index.php/Measuring_Parallel_Scaling_Performance#Strong_Scaling
由于您提到的所有因素,当您向问题添加更多核心时,您基本上会获得递减收益。
您的问题是 CPU 受限还是内存受限?您的系统架构是什么 - SMP 或 NUMA?您的处理器有多少缓存?您是否将线程绑定到核心?...
在任何人回答您的问题之前,需要考虑的参数太多。我建议您使用 Intel VTune Amplifier 或 Oracle Collector/Analyzer 之类的东西,以查看导致效率越来越低的原因和原因。