猿问

并行回路性能下降

我目前正在优化用于并行执行的数据处理逻辑。我注意到,随着核心数量的增加-数据处理性能并不一定会增加我认为应该的方式。


结果如下:

从结果集中可以看到,通过使用2个内核而不是1个内核,您可以获得几乎理想的性能提升(事实是,其中1个内核在运行4700Mhz,而4600Mhz每个2个内核在运行)。

此后,当应该在3个内核上并行处理数据时,我预计与2个内核执行相比,性能将提高33%。实际增长21.62%。

接下来,随着核心数量的增加-“并行”执行性能的下降持续增加。

最后,当我们有12个核心结果时-actualideal结果之间的差异是原来的两倍多(96442ms与39610ms)!

我当然没想到差异会如此之大。我有一个Intel 8700k处理器。6个物理核心和6个逻辑核心-共有12个线程。1个内核以Turbo模式,2C 4600、3C 4500、4C 4400、5-6C 4400、6C 4300在Turbo模式下以4700Mhz运行。

如果很重要-我在以下地方做了其他观察Core-temp

  • 当1个核心处理正在运行时-6个核心中有1个繁忙50%

  • 当2个核心处理正在运行时-6个核心中有2个繁忙50%

  • 当运行3个核心处理时-6个核心中有3个繁忙50%

  • 当4个核心处理正在运行时-6个核心中有4个繁忙50%

  • 当5个核心处理正在运行时-6个核心中有5个繁忙50%

  • 当6个核心处理正在运行时-6个核心中有6个繁忙50%

  • 当7个核心处理正在运行时-6个核心中有5个繁忙50%,1个核心100%

  • 当8个核心处理正在运行时-6个核心中有4个繁忙50%,2个核心100%

  • 当9个核心处理正在运行时-6个核心中有3个繁忙50%,3个核心100%

  • 当运行10个核心处理时-6个核心中有2个繁忙50%,4个核心100%

  • 当11个核心处理正在运行时-6个核心中有1个繁忙50%,5个核心100%

  • 当运行12个核心处理时-所有6个核心的运行率均为100%

我当然可以看到最终结果不应该像ideal结果那样好,因为每个内核的频率降低了,但是仍然如此。.是否有很好的解释说明为什么我的代码在12个内核上的性能如此差?这是每台计算机上的普遍情况,还是PC的局限性?


鸿蒙传说
浏览 150回答 2
2回答

LEATH

是的,Ahmdahl定律。性能提升永远不会与引发问题的内核数量成线性关系。还互惠...

叮当猫咪

无论您有多少个处理器,您的分块代码都将运行一次,但是它仍然取决于处理器的数量。特别是Skip/Take部分后跟两次ToArray()调用似乎非常需要优化。请参见如何在C#中将数组的一部分复制到另一个数组?有关如何复制数组而不遍历整个对象的知识。这应该会使您的性能更接近您的预期。也就是说,分支和组合结果的工作将始终降低并行执行的性能。“最大并行度”并非完全值得争夺。总有一个最好的地方,那就是并行化要比为它做准备好得多。您需要找到它。或者让.NET通过忽略内核的手动替代来解决这一问题。
随时随地看视频慕课网APP
我要回答