Assigning the UC (Uncached) memory type to all variables is an expensive technique to ban non-SC behaviours.
SC | TSO | Hardware | CoreI5 | CoreI5-dual | CoreI7 | Chianti | Limoux | Teraram | Estephe | Barsac | Zdani | |
2+2W+UC+UC | Forbid | Forbid | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/432M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/267M |
LB+UC+UC | Forbid | Forbid | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/432M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/267M |
MP+UC+UC | Forbid | Forbid | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/432M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/267M |
R+UC+UC | Forbid | Allow | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/432M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/267M |
S+UC+UC | Forbid | Forbid | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/428M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/267M |
SB+UC+UC | Forbid | Allow | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/432M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/227M |
RWC+UC+UC | Forbid | Allow | No, 0/1.9G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
W+WR+WR+UC+UC | Forbid | Allow | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
W+WW+RR+UC+UC | Forbid | Forbid | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
W+WW+WR+UC+UC | Forbid | Allow | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
WRC+UC+UC | Forbid | Forbid | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
WRR+2W+UC+UC | Forbid | Forbid | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
WRW+2W+UC+UC | Forbid | Forbid | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
WRW+WR+UC+UC | Forbid | Allow | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
WWC+UC+UC | Forbid | Forbid | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
3.2W+UC+UC+UC | Forbid | Forbid | No, 0/2.0G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
3.LB+UC+UC+UC | Forbid | Forbid | No, 0/2.0G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
3.SB+UC+UC+UC | Forbid | Allow | No, 0/2.0G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
ISA2+UC+UC+UC | Forbid | Forbid | No, 0/2.0G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
W+RWC+UC+UC+UC | Forbid | Allow | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Z6.0+UC+UC+UC | Forbid | Allow | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Z6.1+UC+UC+UC | Forbid | Forbid | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Z6.2+UC+UC+UC | Forbid | Forbid | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Z6.3+UC+UC+UC | Forbid | Forbid | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Z6.4+UC+UC+UC | Forbid | Allow | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Z6.5+UC+UC+UC | Forbid | Allow | No, 0/1.9G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
The table below shows that assigning the WC (Write Combined) memory type to any end of a write-to-write sequence relaxes the TSO write-to-write ordering. The relaxation is achieved more easily by assigning WC to the first write (MP+WC+WB below).
TSO | Hardware | CoreI5 | CoreI5-dual | CoreI7 | Chianti | Limoux | Teraram | Estephe | Barsac | Zdani | |
MP+WB+WC | Forbid | Ok, 37k/4.3G | Ok, 36/890M | Ok, 154/300M | Ok, 49/560M | Ok, 124/991M | Ok, 994/504M | Ok, 34k/553M | No, 0/66M | Ok, 1.8k/173M | Ok, 56/267M |
Allow unseen | |||||||||||
MP+WC+WB | Forbid | Ok, 260M/4.3G | Ok, 76M/890M | Ok, 16M/300M | Ok, 68M/560M | Ok, 19M/991M | Ok, 21M/504M | Ok, 50M/553M | Ok, 73k/66M | Ok, 11M/173M | Ok, 1.2M/267M |
MP+WC+WC | Forbid | Ok, 108k/4.3G | Ok, 15k/890M | Ok, 25k/300M | Ok, 21k/560M | Ok, 6.4k/991M | Ok, 13k/504M | Ok, 25k/553M | No, 0/66M | Ok, 2.8k/173M | No, 0/267M |
Allow unseen | Allow unseen |
Those tests demonstrate that the WC (Write-Combine) memory types and the non-temporal store instruction operating on the default (WB) memory type may yield different results. More precisely the former corresponds the observed store-buffer tests SB+pontnas and SB+pontnts;1 while the the latter corresponds to the non-observed store-buffer tests SB+WC+WC, SB+WC+WC+NT and SB+WC+WC+preload.
TSO | Hardware | CoreI5 | CoreI5-dual | CoreI7 | Chianti | Limoux | Teraram | Estephe | Barsac | Zdani | |
SB+pontnas | Allow | Ok, 2.7G/5.3G | Ok, 375M/894M | Ok, 127M/332M | Ok, 145M/396M | Ok, 654M/991M | Ok, 801M/1.4G | Ok, 405M/822M | Ok, 1.4M/66M | Ok, 74M/173M | Ok, 97M/227M |
SB+pontnts | — | Ok, 365M/600M | — | — | — | — | Ok, 365M/600M | — | — | — | — |
SB+WC+WC | Allow | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/428M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/227M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
SB+WC+WC+NT | Allow | No, 0/3.6G | No, 0/734M | No, 0/204M | No, 0/268M | No, 0/863M | No, 0/462M | No, 0/572M | No, 0/66M | No, 0/173M | No, 0/227M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
SB+WC+WC+preload | Allow | No, 0/4.8G | No, 0/894M | No, 0/332M | No, 0/396M | No, 0/991M | No, 0/842M | No, 0/822M | No, 0/66M | No, 0/173M | No, 0/269M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen |
Those tests demonstrate that assigning the WC (Write-Combine) memory type to all variables in a tests yields a memory model which is neither stronger nor weaker than the base TSO model.
TSO | Hardware | CoreI5 | CoreI5-dual | CoreI7 | Chianti | Limoux | Teraram | Estephe | Barsac | Zdani | |
2+2W+WC+WC | Forbid | No, 4.7M/4.3G | No, 931k/890M | No, 279k/300M | No, 1.2M/560M | No, 1.2M/991M | No, 253k/504M | No, 541k/553M | No, 26k/66M | No, 204k/173M | No, 100k/267M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||
LB+WC+WC | Forbid | Ok, 0/3.7G | Ok, 0/778M | Ok, 0/204M | Ok, 0/432M | Ok, 0/863M | Ok, 0/408M | Ok, 0/553M | Ok, 0/66M | Ok, 0/173M | Ok, 0/267M |
MP+WC+WC | Forbid | No, 108k/4.3G | No, 15k/890M | No, 25k/300M | No, 21k/560M | No, 6.4k/991M | No, 13k/504M | No, 25k/553M | Ok, 0/66M | No, 2.8k/173M | Ok, 0/267M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||||
R+WC+WC | Allow | Ok, 202k/4.3G | Ok, 7.6k/890M | Ok, 18k/300M | Ok, 15k/560M | Ok, 10k/991M | Ok, 36k/504M | Ok, 110k/553M | No, 0/66M | Ok, 5.3k/173M | Ok, 1/267M |
Allow unseen | |||||||||||
S+WC+WC | Forbid | No, 263k/4.3G | No, 8.0k/890M | No, 16k/300M | No, 14k/556M | No, 14k/991M | No, 87k/504M | No, 111k/553M | Ok, 0/66M | No, 13k/173M | Ok, 0/227M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||||
SB+WC+WC | Allow | No, 0/3.7G | No, 0/778M | No, 0/204M | No, 0/428M | No, 0/863M | No, 0/408M | No, 0/553M | No, 0/66M | No, 0/173M | No, 0/227M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
RWC+WC+WC | Allow | No, 0/1.9G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
W+WR+WR+WC+WC | Allow | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
W+WW+RR+WC+WC | Forbid | No, 6.6k/1.8G | No, 636/336M | Ok, 0/82M | No, 1.2k/124M | No, 276/447M | No, 2.4k/232M | No, 1.7k/318M | Ok, 0/33M | No, 318/115M | Ok, 0/161M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | |||||
W+WW+WR+WC+WC | Allow | Ok, 10k/1.8G | Ok, 540/336M | No, 0/82M | Ok, 940/124M | Ok, 279/447M | Ok, 3.5k/232M | Ok, 3.6k/318M | No, 0/33M | Ok, 706/115M | No, 0/161M |
Allow unseen | Allow unseen | Allow unseen | |||||||||
WRC+WC+WC | Forbid | Ok, 0/1.8G | Ok, 0/336M | Ok, 0/82M | Ok, 0/124M | Ok, 0/447M | Ok, 0/232M | Ok, 0/318M | Ok, 0/33M | Ok, 0/115M | Ok, 0/161M |
WRR+2W+WC+WC | Forbid | No, 1.0M/1.8G | No, 87k/336M | No, 451k/82M | No, 182k/124M | No, 13k/447M | No, 24k/232M | No, 9.2k/318M | No, 3/33M | No, 265k/115M | No, 25/161M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||
WRW+2W+WC+WC | Forbid | No, 1.6M/1.8G | No, 108k/336M | No, 595k/82M | No, 214k/124M | No, 67k/447M | No, 83k/232M | No, 25k/318M | Ok, 0/33M | No, 514k/115M | No, 2/161M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | |||
WRW+WR+WC+WC | Allow | No, 0/1.8G | No, 0/336M | No, 0/82M | No, 0/124M | No, 0/447M | No, 0/232M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/161M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
WWC+WC+WC | Forbid | Ok, 0/1.8G | Ok, 0/336M | Ok, 0/82M | Ok, 0/124M | Ok, 0/447M | Ok, 0/232M | Ok, 0/318M | Ok, 0/33M | Ok, 0/115M | Ok, 0/161M |
3.2W+WC+WC+WC | Forbid | No, 22M/2.3G | No, 3.0M/392M | No, 4.6M/150M | No, 2.2M/228M | No, 1.6M/511M | No, 4.4M/336M | No, 4.4M/318M | No, 4.9k/33M | No, 1.7M/115M | No, 3.7k/185M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||
3.LB+WC+WC+WC | Forbid | Ok, 0/2.0G | Ok, 0/336M | Ok, 0/102M | Ok, 0/164M | Ok, 0/447M | Ok, 0/272M | Ok, 0/318M | Ok, 0/33M | Ok, 0/115M | Ok, 0/185M |
3.SB+WC+WC+WC | Allow | No, 0/2.0G | No, 0/336M | No, 0/102M | No, 0/164M | No, 0/447M | No, 0/272M | No, 0/318M | No, 0/33M | No, 0/115M | No, 0/185M |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen | ||
ISA2+WC+WC+WC | Forbid | No, 2.0M/2.3G | No, 632k/392M | No, 829k/150M | No, 350k/228M | No, 17k/511M | No, 21k/336M | No, 126k/318M | Ok, 0/33M | No, 70k/115M | Ok, 0/185M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||||
W+RWC+WC+WC+WC | Allow | Ok, 2.6M/2.2G | Ok, 292k/392M | Ok, 295k/150M | Ok, 216k/228M | Ok, 32k/511M | Ok, 1.3M/336M | Ok, 266k/318M | No, 0/33M | Ok, 145k/115M | No, 0/161M |
Allow unseen | Allow unseen | ||||||||||
Z6.0+WC+WC+WC | Allow | Ok, 3.2M/2.2G | Ok, 952k/392M | Ok, 1.3M/150M | Ok, 447k/228M | Ok, 20k/511M | Ok, 65k/336M | Ok, 246k/318M | No, 0/33M | Ok, 131k/115M | No, 0/161M |
Allow unseen | Allow unseen | ||||||||||
Z6.1+WC+WC+WC | Forbid | No, 29M/2.2G | No, 4.8M/392M | No, 2.8M/150M | No, 2.9M/228M | No, 3.8M/511M | No, 8.6M/336M | No, 4.5M/318M | No, 3/33M | No, 1.7M/115M | No, 3/161M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||
Z6.2+WC+WC+WC | Forbid | No, 2.0M/2.2G | No, 132k/392M | No, 112k/150M | No, 136k/228M | No, 86k/511M | No, 482k/336M | No, 762k/318M | Ok, 0/33M | No, 333k/115M | Ok, 0/161M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||||
Z6.3+WC+WC+WC | Forbid | No, 23M/2.2G | No, 4.3M/392M | No, 2.1M/150M | No, 2.5M/228M | No, 3.1M/511M | No, 6.0M/336M | No, 3.3M/318M | No, 40/33M | No, 1.5M/115M | No, 28/161M |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | ||
Z6.4+WC+WC+WC | Allow | Ok, 3.3M/2.2G | Ok, 1.0M/392M | Ok, 1.6M/150M | Ok, 510k/228M | Ok, 13k/511M | Ok, 20k/336M | Ok, 73k/318M | No, 0/33M | Ok, 29k/115M | Ok, 2/161M |
Allow unseen | |||||||||||
Z6.5+WC+WC+WC | Allow | Ok, 22M/2.2G | Ok, 4.0M/392M | Ok, 2.3M/150M | Ok, 2.2M/228M | Ok, 3.3M/511M | Ok, 6.7M/336M | Ok, 2.0M/318M | No, 0/33M | Ok, 1.2M/115M | Ok, 5/161M |
Allow unseen |