AVX512中是否有原子CAS指令或等效指令?
我不能立即找到一个,但没有最好的谷歌福。
除了lock cmpxchg16b
(16字节),x86没有任何保证原子操作宽于8字节。对齐的向量加载/存储在当前CPU上是元素原子的(即,在8字节元素内没有撕裂),although it's not clear if the documentation guarantees that。
您是否希望使用64字节的整个缓存行CAS?没有单一的指示。
仅AVX512不能提供,但使用TSX (transactional memory)你可以自己动手。在事务中放置一个load + compare + store。 IDK与xbegin
相比有多贵xend
/ lock cmpxchg
。
你也不需要AVX512;整个事务以原子方式提交或根本不提交,因此您可以使用一对AVX2加载/比较指令来实现64字节CAS。