Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Multithreading 在同一物理CPU核心上同步是否更快?_Multithreading_Synchronization_Hyperthreading_Mesi - Fatal编程技术网

Multithreading 在同一物理CPU核心上同步是否更快?

Multithreading 在同一物理CPU核心上同步是否更快?,multithreading,synchronization,hyperthreading,mesi,Multithreading,Synchronization,Hyperthreading,Mesi,我有个问题。如果一个线程修改了一个变量,那么同一个物理内核(不同的超线程内核)上的线程会比其他内核更早看到修改吗?或者它必须等到所有其他核心看到它 我一直试图将两个线程固定在同一个物理内核上,但性能下降。我知道这是因为两个内核共享很多资源。但在同步方面。将线程放在同一个物理核心上会有帮助吗 谢谢 答案取决于平台(尤其是底层架构)。也就是说,在(主流)x86-64体系结构上,共享同一内核的线程比不同内核甚至不同套接字上的线程通信速度更快。一个主要原因是两个线程通常共享同一个一级缓存(如果不是,则共

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

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


谢谢

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

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