【发布时间】:2014-12-28 06:30:03
【问题描述】:
英特尔的系统编程指南,第 8.3 节,关于 MFENCE/SFENCE/LFENCE 的状态:
“以下指令是内存排序指令,不是序列化指令。这些指令会耗尽数据内存子系统。它们不会序列化指令执行流。”
我试图弄清楚为什么这很重要。在多线程代码中,对内存的写入/读取正是需要以明确定义的顺序发生的事情。当然,I/O 发生的顺序可能很重要,但 I/O 指令无论如何都是“序列化指令”。 CPU 应该可以对指令进行重新排序,这些指令(例如)根据需要在寄存器中进行算术运算;我认为您没有任何理由要“序列化”此类操作。
是否存在真正需要完全序列化指令的情况,而 MFENCE 仅对加载和存储的序列化“不够”?
【问题讨论】: