[Fwd: Re: C++0x Memory model and gcc]

Andrew MacLeod amacleod@redhat.com
Fri May 7 14:39:00 GMT 2010


Oops, didn't reply all...


-------- Original Message --------
Subject: 	Re: C++0x Memory model and gcc
Date: 	Fri, 07 May 2010 10:37:40 -0400
From: 	Andrew MacLeod <amacleod@redhat.com>
To: 	Ian Lance Taylor <iant@google.com>
References: 	<4BE2E39A.5060706@redhat.com> 
<n2j84fc9c001005060850z942976d9n2b8431ff66cf995e@mail.gmail.com> 
<k2o84fc9c001005060910w30a6a9a6r4a89d26ab716dc0e@mail.gmail.com> 
<4BE2ECDB.2040003@redhat.com> 
<m2n84fc9c001005070214u4ef0af75me6815cae6ef70e8a@mail.gmail.com> 
<4BE41552.4000100@redhat.com> 
<mcr632zvld8.fsf@dhcp-172-17-9-151.mtv.corp.google.com>



Ian Lance Taylor wrote:
> Andrew MacLeod <amacleod@redhat.com> writes:
>
>   
>> They are independent as far as dependencies within this compilation unit.
>> The problem is if thread number 2 is performing
>>  a.j = val
>>  b.i = val2
>>
>> now there are data races on both A and B if we load/store full words
>> and the struct was something like: struct {
>>  char i;
>>  char j;
>> } a, b;
>>
>> The store to B is particularly unpleasant since you may lose one of
>> the 2 stores.  The load data race on A is only in the territory of
>> hardware or software race detectors.
>>     
>
> In this exmaple, if we do a word access to a, then we are running past
>   

yes, well that's not what I was getting at.  Add a short to the struct 
to pad it out to a word or access the variables via a short load and 
store...  and do the appropriate masking.   I was just trying not to 
make the example any bigger than need be :-P

> So the only potential problem here is if we have two small variables
> where one is aligned and the other is not.  This is an unusual
> situation because small variables are not normally aligned.  We can
> avoid trouble by forcing an alignment to a word boundary after every
> aligned variable.
>
> Or so it seems to me.
>   

The problem is when you load or store a larger unit than the actual 
object you are loading or storing.  Its not specifically an alignment 
thing.

I don't know how many architectures still do this, but we need to 
disable those that do.

Andrew





More information about the Gcc mailing list