On Mar 12, 2010, at 7:51 AM, Samuel Thibault wrote:

> > To support that, do we need to make internal variables and fields be 
> > volatile?
> 
> ?! I fail to see why we would need that.
> If some threads uses a function that modifies a topology object, no
> other thread should be reading it of course, since the reader will
> possibly read incoherent data. A volatile qualifier can not fix that,
> only mutexes (or transactional memory :) ) can.

Right -- that's not what I'm asking about.

Even in this scenario:

1. thread A calls hwloc_topology_init(&a)
2. thread A calls hwloc_topology_load(a)
3. thread A launches thread B
4. thread B calls hwloc_topology_get_*(a...)
5. threads A and B synchronize
6. thread A calls hwloc_topology_load(a)
7. thread B calls hwloc_topology_get_*(a...)

If the topology struct is not marked volatile (or the fields or whatever), then 
the compiler *might* assume that all the data in cache/registers from step 4 
may still be valid in step 7.

volatile effectively forces cache misses so that step 7 will guarantee to read 
from memory again, rather than relying on the compiler's optimizer to know that 
the data that may still be in registers from step 4 is actually (potentially) 
invalid.

> > If we say that applications need to provide their own synchronization
> > between readers and writers, atomic writes shouldn't be an issue,
> > right?
> 
> I do not understand this either.

Since writes back to memory may be delayed, it could be possible that a write 
of a value in a topology struct only gets partially written before a read for 
that same value comes in from another thread (even if the threads *think* they 
have synchronized, such as above).  Hence, thread A may have written 2 bytes of 
a 4 byte value when thread B actually reads it.  The value that B gets could 
then possibly be gibberish (these are the worst kinds of bugs to try and find 
-- IBM is rooting out some of these in Open MPI right now, for example :-( ).

And actually, my first mail came out opposite of what I wanted to say 
(cut-n-paste error).  I meant to say:

If we say that applications need to provide their own synchronization
between readers and writers, atomic writes **could still** be an issue,
right?

-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to:
http://www.cisco.com/web/about/doing_business/legal/cri/


Reply via email to