gpt4 book ai didi

c# - 使用优先级队列的工作线程性能慢

转载 作者:太空宇宙 更新时间:2023-11-03 11:08:20 25 4
gpt4 key购买 nike

当我注意到在更多线程上使用独立优先级队列实际上会降低性能时,我正试图使用​​工作线程来加速更大的算法。所以我写了一个小测试用例。

我在其中查询要启动的线程数,将每个线程设置为自己的处理器,然后从我的优先级队列中推送和弹出大量内容。每个线程都拥有自己的优先级队列,并且它们是分开分配的,所以我不怀疑虚假共享。

我把测试用例here ,因为它比片段长。(处理器关联位来自 NCrunch )

优先级队列是我自己创建的,因为 .NET 没有内置队列。它使用 Pairing Heap如果这有什么不同的话。

无论如何,如果我用一个线程和一个内核运行程序,它的使用率大约为 100%。 One core使用两个线程/两个核心下降 Two cores并最终将所有 8 个内核的使用率降至 30%。 eight cores

这是一个问题,因为性能的下降抵消了多线程的好处。性能下降的原因是什么?每个队列完全独立于其他线程的

最佳答案

有些问题,如求解 pi 更适合并行化,而超线程实际上可以加快速度。当您像现在这样处理严重的内存问题时,超线程无济于事,而且实际上会造成伤害。查看 CPU 体系结构中的“流水线”。

使用 2-cpus 可以获得 2 倍加速的实际问题并不多。 cpu越多,开销越大。在您的测试用例算法中,我怀疑内核必须等待内存子系统。如果您调整内存要求,您将看到性能(和利用率)的提高,因为您将内存要求移至更接近 CPU 缓存大小。

关于c# - 使用优先级队列的工作线程性能慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14962576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com