现在有两个process,称之为A和B,运行在不同的机器上,两个process之间有一个infiniband的QP连接。
process B中有一个uint64_t的flag,希望两个process都能atomically访问这个flag。
A -> B 可以用QP的IBV_WR_ATOMIC_CMP_AND_SWP,一次访问大概5个微秒。
在B的内部,如果直接访问flag肯定有问题。
可以建一个B->B的QP,用IBV_WR_ATOMIC_CMP_AND_SWP访问,一次访问大概也是5个微秒。
但这很脱了xx放x,我看到gcc有个内建函数:__sync_val_compare_and_swap()
比如用__sync_val_compare_and_swap(&flag, expected, desired)来修改这个flag,不用QP。
我想知道的是这两种atomic是兼容的吗?有人有实操经验吗?
我搜索了一下,大概是说CPU atomics和PCIe atomics不是一回事,虽然都带个atomics。
--
FROM 158.140.1.*