- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 x86 上,lock
- 前缀指令,例如 lock cmpxchg
除了原子操作之外,还提供屏障语义:对于回写内存区域的正常内存访问,读取和写入不会跨 lock
重新排序。 - 前缀说明,根据英特尔 SDM 第 3 卷第 8.2.2 节:
Reads or writes cannot be reordered with I/O instructions, locked instructions, or serializing instructions.
- Reads are not reordered with other reads.
- Writes are not reordered with older reads.
- Writes to memory are not reordered with other writes, with the following exceptions: —
streaming stores (writes) executed with the non-temporal move instructions (MOVNTI, MOVNTQ, MOVNTDQ, MOVNTPS, and MOVNTPD); and —
string operations (see Section 8.2.4.1).
请注意,列表中任何其他项目中的非临时指令没有异常(exception),例如,在引用锁定前缀指令的项目中。
在指南的其他各个部分中,提到了mfence
和/或sfence
当使用弱排序(非时间)指令时,指令可用于对内存进行排序。这些部分一般不提lock
- 前缀指令作为替代。
所有让我不确定的事情:做lock
- 前缀指令提供与mfence
相同的完整屏障在 WB 内存上提供弱排序(非时间)指令?同样的问题再次适用,但适用于对 WC 内存的任何类型的访问。
最佳答案
在所有 64 位 AMD 处理器上,MFENCE
是一个完全序列化的指令,而锁定前缀的指令则不是。但是,两者都根据 AMD 手册 V2 7.4.2 序列化所有内存访问:
All previous loads and stores complete to memory or I/O space before a memory access for an I/O, locked or serializing instruction is issued.
All loads and stores associated with the I/O and locked instructions complete to memory (no buffered stores) before a load or store from a subsequent instruction is issued.
MFENCE
还序列化了所有负载,其中记录了大多数基于 Skylake、Kaby Lake 和 Coffee Lake 微体系结构的处理器的勘误表,其中指出
MOVNTDQA
来自 WC 内存可能更早通过
MFENCE
指示。此外,许多基于 Nehalem、Sandy Bridge、Ivy Bridge、Haswell、Broadwell、Skylake、Kaby Lake、Coffee Lake 和 Silvermont 微架构的处理器都有一个勘误表,上面写着
MOVNTDQA
来自 WC 内存的数据可能会传递更早的锁定指令。基于 Core、Westmere、Sunny Cove 和 Goldmont 微体系结构的处理器没有此勘误表。
mfence
时乱序执行。确实序列化 ALU 指令(可能与
lfence
的行为相同 + 像锁定指令一样的存储缓冲区刷新)。但是,我认为这是一个实现细节。
关于multithreading - 锁定指令是否在弱顺序访问之间提供了障碍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50280857/
我正在尝试从标准输入中获取一行。据我所知,我们永远不应该使用gets的手册页中所说的gets: Never use gets(). Because it is impossible to tell w
很多问题SO和文章/书籍,例如https://mirrors.edge.kernel.org/pub/linux/kernel/people/paulmck/perfbook/perfbook.201
我认为 Coffeescript 是一门很棒的语言!我正在寻找一些将静态分析添加到 Coffeescript 的项目/问题/功能。然而,经过一番搜索后,我发现 Coffeescript faq和 th
以下查询返回过去 12 个月(针对特定客户)每周的订单总量: SELECT DATEPART(year, orderDate) AS [year], DATEPART(month, or
我觉得这可能是一个错误,任何人都可以重现或看到我做事方式的一些错误。 我正在尝试将 GKPolygonObstacle 添加到 iOS 或 macOS Playground 中的 GKMeshGrap
我的 SKSpriteKit 应用程序中有一个单独的“Floor”类。当我第一次创建这个类时,我使用 在整个框架周围设置了一个屏障 self.physicsBody = SKPhysicsBody(e
我有我正在尝试建模的半连续数据(许多精确的零和连续的正结果)。我从 Zuur 和 Ieno 的 R 中零膨胀模型初学者指南中学到了大量关于零质量的建模数据,它区分了零膨胀 Gamma 模型和他们所描述
以下代码实现了一些无锁(且无原子!)的线程间通信,这些通信需要使用存储和加载内存屏障,但是C++ 11 release-acquire语义不适当,也不保证正确性。实际上,该算法暴露了对发布获取语义的某
我指的是在 https://developer.android.com/training/constraint-layout/index.html#constrain-to-a-barrier 上使用
我正在一个非常好的 IBM x 服务器(4 个 8 核 CPU)上运行一些模拟应用程序的 x64 版本。操作系统是 Linux - redhat 5.6 x64 内核。因此,此应用恰好在需要超过 2
我是一名优秀的程序员,十分优秀!