performance - 在 Ivy Bridge 上存储 32 字节对象?

标签 performance x86 x86-64 intel cpu-architecture

我想知道在 Ivy Bridge 上是否可以编写一个由各种数据类型(int、double、float 等)组成的 256 位对象?

我查看了英特尔手册和 ctrl+f 来表示“32 字节”,但结果都是讨论相同数据类型的 256 位(因此 4x double 或 8x float 等)。

我这样做是无锁设计的一部分,以确保数据一致性 - 将所有 256 位数据加载在一起,然后分别提取各个组件。

最佳答案

我进行了网络搜索,看来英特尔并不保证 32 字节写入是原子的。我发现this这表明即使是常规的 8 字节写入也不能保证原子写入。

Intel提供了比较和交换8字节指令,该指令是原子的。

底线是我认为您需要采取另一种方法。

编辑:我忘记了 x86 锁定前缀。正在查看this ,它表示字节内存操作保证是原子的,而较大的操作则不然,除非在读/写指令上使用 LOCK 前缀。

关于performance - 在 Ivy Bridge 上存储 32 字节对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26914861/

相关文章:

php - ajax请求并发数最大限制

Ruby 基准测试模块 : meanings of "user", "system"和 "real"?

node.js - 给所有用户的 GCM 消息(无主题)

c# - MemberwiseClone 相当于现有对象?

c++ - 如何使用x86汇编访问c中main函数中的变量

c++ - 编写高效的回溯函数

使用 C 中的内联汇编检查 RFLAGS 中的 ID 标志

assembly - 我自己的 Improvised 编译器错误

assembly - 如何检查emu8086中CF标志是否为1?

assembly - movsbl指令做什么?