On 09-12-28 上午11:00, Samuel Thibault wrote:
> Da Zheng, le Mon 28 Dec 2009 10:31:26 +0800, a écrit :
>> On 09-12-27 下午6:38, Samuel Thibault wrote:
>>> Da Zheng, le Sun 27 Dec 2009 16:39:04 +0800, a écrit :
>>>> Is the process above correct?
>>>
>>> I have never actually programmed the architectures where things work
>>> like this (powerpc & such), but that's what I have understood from the
>>> code and explanations here and there, yes.  It's a sort of transactional
>>> memory actually.
>> I just think if it's a bit too expensive that a processor has to monitor 
>> other
>> processors' cache even though it's only one address.
> 
> It's not more expensive than usual operations: it already has to do it
> to process cache line invalidations for everything that is in the cache.
I don't understand. Do you mean processing cache line invalidation in local 
cache?
> 
>> That conditional store instruction needs to do more if it succeeds. It has to
>> invalidate cache lines specified by the monitored address in other 
>> processors.
> 
> Locked operations on Intel have to do the same :)
Doesn't the intel processor maintain cache coherency by hardware? All
instructions that modify memory should invalidate relevant cache lines in other
processor.
> 
>> Now it seems to me that the memory barrier is only to ensure that the 
>> processor
>> executes instructions in the order we want.
> 
> Not only that, but also as a clobber for the compiler. Note however
> that atomic_add doesn't have it, and I believe it could be dropped for
> add_return too. In Linux, atomic.h operations do _not_ necessarily
atomic_add_return can be used for implementing something like locks, so the
clobber for the compiler cannot be dropped.
>> But the data dependency barrier
>> seems to imply cache coherency according to
>> linux/Documentation/memory-barriers.txt.
> 
> Err, there is _some_ cache coherency introduced by dependency barriers,
> yes.
> 
>> A bit confused:-(
> 
> By what?
I'm confused by whether memory barrier instructions imply cache coherency.
The memory model usually says all other cache lines can be updated *eventually*.
It doesn't say that memory barrier instructions can update cache lines in other
processors. So does the data dependency barrier invalidate all out-of-date cache
lines in the local processor?

Zheng Da


Reply via email to