gpt4 book ai didi

python - 为什么在 4 核超线程 CPU 上使用 8 个线程比使用 4 个线程快?

转载 作者:太空狗 更新时间:2023-10-29 23:58:49 25 4
gpt4 key购买 nike

我有一个四核 i7 920 CPU。它是超线程的,所以计算机认为它有 8 个内核。

根据我在互联网上阅读的内容,在执行并行任务时,我应该使用物理内核的数量,而不是超线程内核的数量。

所以我做了一些计时,并惊讶地发现在并行循环中使用 8 个线程比使用 4 个线程更快。

这是为什么?我的示例代码太长,无法在此处发布,但可以通过在此处运行示例找到:https://github.com/jsphon/MTVectorizer

性能图表在这里:

enter image description here

最佳答案

(英特尔)超线程核心就像(最多)两个 CPU。

我们观察到,单个 CPU 有一组理想情况下持续忙碌的资源,但实际上,当 CPU 等待某些外部事件(通常是内存读取或写入)时,它们经常处于空闲状态,这令人惊讶。

通过为另一个硬件线程添加一些额外的状态信息(例如,另一个寄存器副本+额外的东西),“单个”CPU 可以在第一个线程阻塞时将注意力转移到执行另一个线程。 (一个人可以概括这 N 个硬件线程,其他架构已经这样做了;Intel 在 2 时退出)。

如果两个硬件线程都在等待各种事件,CPU 可以按理说对硬件线程做相应的处理。内存等待 40 纳秒是很长的时间。因此,如果您的程序获取大量内存,我希望它看起来好像两个硬件线程都完全有效,例如,您应该获得近 2 倍的内存。

如果两个硬件线程正在执行高度本地化的工作(例如,仅在寄存器中进行密集计算),则内部等待将变得最少,并且单个 CPU 无法足够快地切换以像它们一样快地为两个硬件线程提供服务产生工作。在这种情况下,性能会下降。我不记得在哪里听说过,很久以前就听说过:在这种情况下,净效应更像是 1.3 倍,而不是理想化的 2 倍。 (期待 SO 听众就此纠正我)。

您的应用程序可能会根据当前正在运行的部分来回切换。然后你会得到混合的性能。我对能获得的任何加速都感到满意。

关于python - 为什么在 4 核超线程 CPU 上使用 8 个线程比使用 4 个线程快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27087921/

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