[libfabric-users] libfabric network atomic operations, processor atomic ops, and coherence
Hefty, Sean
sean.hefty at intel.com
Tue Feb 26 14:09:13 PST 2019
> > There is no guarantee that NIC/network based atomics will be coherent with
> CPU based atomics, or that they will be coherent between NICs, or the final
> result will even be atomic. [...]
>
> Would I be correct in reading that last clause as “or [that] the [visibility
> of the] final result will even be atomic”, meaning that visibility of one
> subpart (byte, for example) of the result should not be taken as evidence of
> visibility of the whole? Or in other words, that the paragraph about CPU
> visibility provides the only guarantees of visibility. (So if tearing occurs,
> it will have been dealt with before that guaranteed-visible point.)
I wasn't trying to write spec language. :)
The point I was making above was related to data correctness. If 2 or more 'actors' are both performing atomic operations on the same target memory, the result is undefined. An actor can be a NIC or CPU.
E.g. An atomic through NIC A adds 1 to each element. An atomic through NIC B subtracts 1 to each element. The results may end up with each element unchanged, incremented by 1, or decremented by 1. And the change may not be the same for each element -- some may be +1, some -1, some unchanged.
The visibility discussion in the man page is describing when another actor can see the results of an atomic operation. Before a second actor can perform atomic operations on a target region, the results of the first actor must first be visible. This would ensure that the target region is updated in a consistent manner.
- Sean
More information about the Libfabric-users
mailing list