我想知道在 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/