gpt4 book ai didi

multithreading - __faststorefence 的行为是什么?

转载 作者:行者123 更新时间:2023-12-04 15:47:55 28 4
gpt4 key购买 nike

关于这个问题,我只对 x86 和 x86-64 感兴趣。

对于 MSVC 2005,__faststorefence 的文档说:“保证每个前面的商店在任何后续商店之前都是全局可见的。”

对于 MSVC 2008 和 2010,它更改为:“保证之前的每个内存引用,包括加载和存储内存引用,在任何后续内存引用之前都是全局可见的。”

后者的编写方式在我看来暗示这也会阻止 CPU 在旧存储之前重新排序负载。这与第一个定义不同,这意味着内在函数仅用于处理阻塞或使用旧存储对非临时存储进行重新排序(唯一的其他重新排序 x86(-64) 会这样做)。
但是,文档似乎自相矛盾:“在 x64 平台上,此例程生成的指令比 sfence 指令更快。在 x64 平台上使用此内部函数而不是 _mm_sfence。”

这意味着它仍然具有类似围栏的功能,因此仍然可以使用较旧的商店重新排序负载。那么它是哪个?有人可以解决我的困惑吗?

PS:寻找这个函数的GCC版本,我遇到了long local; __asm__ __volatile__("lock; orl $0, %0;" : : "m"(local));但我认为它来自 32 位代码;什么是 64 位模拟?

最佳答案

您引用的 GCC 版本相当于 MSVC 生成的代码。它依赖于 x86/x86-64 处理器体系结构文档指定加载和存储不使用 LOCK 重新排序的事实。 ed 指令。

我不清楚这是否适用于非临时存储,因为通常内存模型限制不适用于这些指令。

关于multithreading - __faststorefence 的行为是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480610/

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