在Ivy Bridge上存储一个32字节的对象?

时间:2014-11-13 17:31:17

标签: performance x86 x86-64 intel cpu-architecture

我试图找出是否可以在Ivy Bridge上编写一个包含各种数据类型(int,double,float等)的256位对象?

我看了一下英特尔手册和ctrl + f的“32字节”,但结果都讨论了相同数据类型的256位(所以4倍双倍或8倍浮点数等)。

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

1 个答案:

答案 0 :(得分:3)

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

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

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

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