gpt4 book ai didi

multithreading - 从AMD处理器上的几个pthread中没有 yield 吗?

转载 作者:行者123 更新时间:2023-12-02 04:03:58 25 4
gpt4 key购买 nike

因此,我刚刚获得了一台带有AMD 6212处理器的新型16核服务器。我也有在多种英特尔处理器上运行的代码。它使用锁定的队列将工作分配给pthread,然后pthread将工作写回到共享内存中,同时写操作也处于锁定状态。我主要是计算界。

在英特尔处理器上,随着线程数量的增加,性能会立即提高。从1线程到2线程几乎使性能提高了一倍。

在AMD处理器上使用相同的代码,即使有4个线程,我也丝毫没有收获(稍微慢一点)。但是,当我使用128个线程时,我看到了6倍的加速。

有谁知道可能会发生什么?

至于操作系统规范,如果输入:

cat /proc/version

我得到:
Linux version 2.6.32-5-amd64 (Debian 2.6.32-39) (dannf@debian.org) (gcc version 4.3.5 (Debian 4.3.5-4) ) #1 SMP Thu Nov 3 03:41:26 UTC 2011

最佳答案

我的第一个猜测是Linux调度程序没有将您的线程放在单独的内核上。

Linux调度程序会尽力将任务保留在上次使用的CPU上,以使高速缓存最有可能包含相关且有用的数据或指令。我发现它实际上并不会重新平衡。 (我知道,我什至看到过声称进行重新平衡的代码,但是我发现CPU密集型工作负载以前都在同一个同级上运行,而从未移至另一个内核。)

您的代码是否使用taskset(1)sched_setaffinity(2)cpuset(7)机制将计算密集型任务手动分布到所有处理器?如果没有,我建议您先手动尝试taskset(1)来查看吞吐量是否有所提高,如果看到预期的改进,请在程序中包含sched_setaffinity(2)调用。

关于multithreading - 从AMD处理器上的几个pthread中没有 yield 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8664313/

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