将缓存线迁移到另一个核心

Force a migration of a cache line to another core

本文关键字:另一个 核心 迁移 缓存      更新时间:2023-10-16

in C (使用平台上可用的任何低级内在设备(用于X86硬件(例如,Intel Skylake(在该核心上螺纹显式加载行?

我的用户酶是在同一数据结构中。在这种情况下,在某些情况下,核心会经历内存中的某些位置,而这些位置可能由其他核心在探测斑点时可能拥有。这些内核上的线程通常在条件变量上被阻塞,因此它们有一些备用周期,可以在其中运行其他"有用的工作"。这里可能的"有用工作"的一个示例可能是它们将数据流到了另一个核心,以便将来加载它们,因此加载核心不必等待该行才能进入其缓存之前。x86硬件上是否可以使用一些内在/指令?


__builtin_prefetch的工作不佳,因为出于某种原因,它最终添加了延迟到执行加载的代码:(也许步伐不佳,但我无法获得良好的步伐到目前为止。这可能是更好地处理的,并且从知道最终会加载的其他核心方面进行决定。

没有"推";仅在核心请求之后,缓存线才能在物理核心上输入L1D。(由于负载,SW预取甚至HW预取。(

2逻辑核心可以共享相同的物理核心,以防万一有帮助:如果某些未来负载的延迟远比吞吐量更重要,则唤醒预摘要的线程可能会不那么恐怖。我想象的是让作者使用条件变量或发送posix信号,或写入管道,或者将某些cpu亲和力设置为一个或两个逻辑核心的线程,或者将其写入管道。您关心的其他一些线程也被固定在。


您可能从作者侧做的最好的是触发写作 - 共享(l3(缓存,因此另一个核心可以在L3中击中,而不是找到其他核心所有核心所有的核心并具有也等待写作。(或取决于UARCH,对于直接核心 ->核心传输(

例如。在冰湖上或以后,使用clwb迫使写下,从而使其干净但仍然缓存。(但是请注意,迫使它一直到DRAM。(SKX上的clwb确实像clflushopt一样驱逐。

另请参见CPU缓存抑制,我建议在主流操作系统下可能使用设置的记忆区域来写入缓存。另请参见如何强制CPU核心在C?

中冲洗存储缓冲区

,当然也可以将作者和读者固定到相同的物理核心上,因此它们通过L1D进行通信。但是他们竞争执行资源。

相关文章: