我注意到英特尔Tremont有 64 字节的存储指令MOVDIRI和MOVDIR64B.
这些保证原子写入内存,而不能保证加载原子性。此外,写入是弱排序的,可能需要立即进行屏蔽。
我MOVDIRx在 IceLake 中找不到。
为什么冰湖不需要像这样的指令MOVDIRx?
(第 15 页底部)
英特尔® 架构指令集扩展和未来功能编程参考
https://software.intel.com/sites/default/files/managed/c5/15/architecture-instruction-set-extensions-programming-reference .pdf#page=15
2 回答
Ice Lake 有 AVX512,它为我们提供了 64 字节的加载 + 存储,但不能保证 64 字节的存储原子性。
movntps [mem], zmm我们确实得到了带有/的 64 字节 NT 存储movntdq [mem], zmm。有趣的是,NT 存储不支持合并屏蔽以保留一些未写入的字节。不过,这基本上会通过创建部分行写入来破坏 NT 存储的目的。
可能 Ice Lake Pentium / Celeron CPU 仍然没有 AVX1/2,更不用说 AVX512(可能是为了销售在 FMA 单元的高 128 位和/或至少一个内核上的寄存器文件中有缺陷的芯片),所以onlyrep movsb将能够在这些 CPU 上内部使用 64 字节加载/存储。(IceLake 将具有“快速短代表”功能,这可能使其即使对于小的 64 字节副本也很有用,在不能使用向量寄存器的内核代码中很有用。)
可能英特尔不能(或不想)在其主流 CPU 上提供原子性保证,仅在不支持多插槽的低功耗芯片上提供,但我还没有听到任何关于实际存在撕裂的报告Intel CPU 上的高速缓存行。在实践中,我认为在当前英特尔 CPU上不跨越缓存线边界的缓存加载/存储始终是原子的。
(与 AMD K10 不同,HyperTransport 确实在插槽之间的 8B 边界上产生撕裂,而在单个插槽上的内核之间看不到撕裂 。SSE 指令:哪些 CPU 可以执行原子 16B 内存操作?)
无论如何,使用 CPUID 无法检测到这一点,并且没有记录,因此基本上不可能安全地利用它。如果有一个 CPUID 叶告诉您系统和单个套接字内的原子性宽度,那就太好了,因此仍然允许将 512 位 AVX512 操作分成 256 位两半的实现......
无论如何,与其引入保证存储原子性的特殊指令,我认为 CPU 供应商更有可能开始为所有 2 次幂大小的存储或仅 NT 记录并提供更广泛的存储原子性的 CPUID 检测商店什么的。
如果 AMD 遵循他们目前的半角向量实现策略,使 AVX512 的某些部分需要 64 字节的原子性将使 AMD 更难以支持。(Zen2 将具有 256 位向量 ALU,使 AVX1/AVX2 指令主要是单 uop,但不幸的是,据报道它不会支持 AVX512。AVX512 是一个非常好的 ISA,即使您只以 256 位宽度使用它,填补了可以方便/有效地完成的更多空白,例如 unsigned int<->FP 和 [u]int64<->double。)
所以 IDK 如果英特尔同意不这样做,或者出于自己的原因选择不这样做。
64B 写入原子性的用例:
我怀疑主要用例是可靠地创建 64 字节 PCIe 事务,而不是实际上的“原子性”本身,而不是供另一个核心观察。
如果您关心从其他内核读取数据,通常您会希望 L3 缓存来支持数据,而不是将其绕过到 DRAM。seqlock 可能是一种更快的方法来模拟 CPU 内核之间的 64 字节原子性,即使movdir64B可用。
Skylake 已经有 12 个写入组合缓冲区(在 Haswell 中为 10 个),因此(也许?)使用常规 NT 存储来创建全尺寸 PCIe 事务并避免早期刷新并不难。但也许低功耗 CPU 的缓冲区较少,并且可靠地为 NIC 缓冲区或其他东西创建 64B 事务可能是一个挑战。
为什么 Ice Lake 不需要像 MOVDIRx 这样的指令?
我不会试图从需求的角度来回答这个问题,而是从指令集架构特性和英特尔产品如何开发的实际现实的结果来看。
从上一个答案:
可能英特尔不能(或不想)在其主流 CPU 上提供原子性保证,
https://software.intel.com/sites/default/files/managed/c5/15/architecture-instruction-set-extensions-programming-reference.pdf在表 1-1 中表示这些指令将在一定范围内得到支持微架构:
“直营店:MOVDIRI、MOVDIR64B Tremont、Tiger Lake、Sapphire Rapids”
Tiger Lake 在https://newsroom.intel.com/news-releases/intel-ces-2020/上被宣布为“最新的英特尔® 酷睿™ 移动处理器” 。
Sapphire Rapids 在https://newsroom.intel.com/news-releases/intel-unveils-new-gpu-architecture-optimized-for-hpc-ai-oneapi上被描述为“基于 10nm 的英特尔® 至强® 可扩展处理器” /。另请参阅https://s21.q4cdn.com/600692695/files/doc_presentations/2019/05/2019-Intel-Investor-Meeting-Shenoy.pdf。
免责声明:我为英特尔工作,只会引用和讨论官方来源。