在相同的物理CPU核心上同步是否更快



我有个问题。如果一个线程修改了一个变量,那么同一个物理核心(不同的超线程核心(上的线程会比其他核心更早看到修改吗?或者它必须等到所有其他核心都看到它?

我一直试图将两个线程固定在同一个物理核心上,但性能会下降。我知道这是因为两个核心共享大量资源。但在同步方面。将线程放在同一个物理核心上会有帮助吗?

谢谢!

答案取决于平台(尤其是底层架构(。也就是说,在(主流(x86-64体系结构上,共享同一内核的线程比不同内核甚至不同套接字上的线程通信更快。一个主要原因是,这两个线程通常共享相同的一级缓存(如果不是,则共享二级缓存(。因此,在线程上可以直接读取对方刚刚写的内容。此外,由于同时执行多线程(在英特尔CPU上称为"超线程"(减少了通信延迟(无需等待调度时间(,线程通常可以并行运行。同时,不同内核上的线程将不得不通过(慢(总线进行通信,或者使用L3缓存共享数据(明显慢于L1/L2(。

然后,您的工作负载受到通信(延迟或吞吐量(的约束,通常最好将线程放在彼此靠近的位置(即在同一核心上(。当每个核心的线程数超过硬件线程数时,由于抢占式多任务处理,性能会下降。当工作负载受计算限制时,最好将它们放在单独的核心上。请注意,在现代x86处理器上,在同一内核上工作的线程甚至可以在指令级别共享计算资源(ALU(。

最新更新