gpt4 book ai didi

assembly - MFENCE/SFENCE/etc "serialize memory but not instruction execution"?

转载 作者:行者123 更新时间:2023-12-05 00:24:13 26 4
gpt4 key购买 nike

Intel 的系统编程指南,第 8.3 节,关于 MFENCE/SFENCE/LFENCE 的说明:

“以下指令是内存排序指令,而不是序列化指令。它们会耗尽数据内存子系统。它们不会序列化指令执行流。”

我试图弄清楚为什么这很重要。在多线程代码中,对内存的写入/读取正是需要以明确定义的顺序发生的。当然,I/O 发生的顺序可能很重要,但无论如何 I/O 指令都是“序列化指令”。 CPU 应该可以重新排序指令,这些指令(例如)根据需要在寄存器中进行算术运算;我认为您没有任何理由想要“序列化”此类操作。

是否真的需要完全序列化指令,而MFENCE仅加载和存储的序列化“不够”?

最佳答案

Is there any case where a fully serializing instruction is really needed, and MFENCE's serialization of only loads and stores is "not enough"?



基准测试和代码分析。

如果您正在尝试测量代码序列的性能,尤其是当它非常短时,确保基准操作的部分不会在定时序列之外执行可能很重要。例如,如果您的代码类似于以下伪代码:
start = RDTSC()
do some stuff
end = RDTSC()
cycles = end - start

确保在第一个 RDTSC 之前没有执行中间的任何代码很重要。 ,或在第二个之后。

令人高兴的是,这里有一个完美的说明: CPUID正在完全序列化。

关于assembly - MFENCE/SFENCE/etc "serialize memory but not instruction execution"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26683097/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com