X86 CPU之间的通信是如何发生的?

X86 CPU之间的通信是如何发生的?,x86,cpu,intel,cpu-architecture,cpu-cache,X86,Cpu,Intel,Cpu Architecture,Cpu Cache,说明L3可用于进程间通信(IPC) 是否有其他方法/途径进行此沟通 之所以似乎还有其他途径,是因为Intel在其最新处理器阵容()中每核三级缓存的数量比前几代减少了近一半() 每核私有L2从256k增加到1M。有,但这不是新的,也不是普通多线程软件直接使用的。内核可能会使用IPI将另一个内核从低功耗睡眠中唤醒,或者在该CPU上的任务释放其他任务正在等待的操作系统辅助锁/互斥锁后,不会通知它高优先级任务变得可运行 所以真的没有,没有其他途径 减小的大小意味着您必须设计软件,以便在消费者线程访问数据

说明L3可用于进程间通信(IPC)

是否有其他方法/途径进行此沟通

之所以似乎还有其他途径,是因为Intel在其最新处理器阵容()中每核三级缓存的数量比前几代减少了近一半()

每核私有L2从256k增加到1M。

有,但这不是新的,也不是普通多线程软件直接使用的。内核可能会使用IPI将另一个内核从低功耗睡眠中唤醒,或者在该CPU上的任务释放其他任务正在等待的操作系统辅助锁/互斥锁后,不会通知它高优先级任务变得可运行

所以真的没有,没有其他途径

减小的大小意味着您必须设计软件,以便在消费者线程访问数据时,如果您希望数据在L3中仍然很热,则必须更快地重用数据。但请注意,L3中的唯一数据不太可能是由一个内核写入的数据,接下来将由另一个内核读取;大多数多线程工作负载也涉及大量私有数据。还要注意的是,SKX L3是不包含的,所以共享只读数据可以在使用它的内核的L2中保持热状态,即使它已从L3中移出

如果L3是巨大而快速的,对开发人员来说真的很好,但事实并非如此。除了L3的尺寸减小外,SKX的带宽和延迟也明显比BDW差。请参阅关于y-cruncher性能:

Skylake X上的三级缓存网格只有上一代Haswell/Broadwell EP处理器上三级缓存带宽的一半左右。Skylake X L3缓存速度非常慢,在带宽方面几乎没有主内存快。因此,从所有实际目的来看,它和不存在一样好

他所说的不是线程之间的通信,而是独立线程每个核心的有用缓存量。但实际上,生产者/消费者模式应该非常相似

从软件优化的角度来看,缓存瓶颈带来了一系列新的困难。二级缓存很好。它比以前大了4倍,带宽增加了一倍,以跟上AVX512。但是L3是无用的。其净效果是,与以前的Haswell/Broadwell代相比,每个核心的可用缓存减少了一半。此外,使用AVX512将SIMD大小增加一倍,使可用的缓存在适合缓存的SIMD字数量方面比以前减少了4倍

考虑到所有这些,无论生产者/消费者线程是在L3中运行,还是进入主内存,都不会有太大的区别。幸运的是,如果有许多线程处于活动状态,DRAM速度非常快,聚合带宽也很高。单线程最大带宽仍然低于Broadwell


线程间带宽基准数: SiSoft有一个。描述

对于10核(20线程)SKX(i9-7900X CPU@标称3.30GHz),最高结果为1,实现105.84GB/s的总(?)带宽和54.9ns的延迟

其中一个最低的结果是:66.11GB/s带宽,76.6ns延迟。(滚动到页面底部,查看同一CPU的其他提交)

相比之下,桌面Skylake i7-6700k(4C8T4.21GHz,4.1GHz IMC)。更多的超频结果是42.72GB/s和36.3ns

对于一对线程,我认为SKL desktop比SKX快。我认为这个基准测试是测量10C/20T CPU上20个线程之间的总带宽

这表明,对于从2MB到8MB的块大小,SKL-X只有大约20GB/s,与主内存带宽几乎完全相同。图中的卡比湖四核i7-7700k看起来可能是60GB/s。对于SKX,线程间带宽高于单线程带宽是不合理的,除非SiSoft Sandra正在计算线程间情况的加载+存储。(单线程带宽往往会占用英特尔多核CPU:请参阅的“延迟限制平台”部分。更高的L3延迟意味着带宽受到未完成的L1或L2未命中/预取请求数量的限制。)

另一个复杂问题是,在启用超线程的情况下运行时,如果块大小足够小,则可能会通过L1D/L2进行一些线程间通信。看,还有

我不知道基准测试是如何将线程固定到逻辑核的,以及它们是否试图避免或最大化同一物理核的逻辑核之间的通信


在设计多线程应用程序时,以每个线程中的内存位置为目标。尽量避免在线程之间传递巨大的内存块,因为即使在以前的CPU中也会降低效率。SKL-AVX512又名SKL-SP又名SKL-X又名SKX只会让情况比以前更糟

使用标志变量或进度计数器在线程之间同步

如果线程之间的内存带宽是最大的瓶颈,那么您应该 考虑只在生产者线程中执行工作(特别是在数据写入时,而不是在单独的传递中),而不是使用单独的线程。i、 e.在您的设计中,线程之间的边界可能不在理想的位置

现实生活中的软件设计是复杂的,有时你不得不在糟糕的选项中做出选择


硬件设计也很复杂,有很多折衷。尽管看起来SKX的L3缓存+网格似乎比旧的中核芯片环形总线设置更差。对于某些种类的工作负载来说,这可能是最大芯片的胜利。希望未来几代人能够拥有更好的单核延迟/带宽。

内存和IPI。L3只是一个副作用。可以扩展它,也可以包括设备(例如磁盘)。带宽和容量不一定相关。L3在SKL-X中总体上仍然相当大。(请注意,桌面Skylake/Kaby Lake CPU仍然具有相同数量的