Our experiment reports mostly consist of tables of results. In such tables, rows correspond to test executions, while columns correspond to model or hardware output. Model output is given as Allow or Forbid, expressing that the executions are either allowed or forbidden by the model; while hardware output is given as counts of observed executions over the total number of runs, supplemented by some comments.
Tables come in two varieties, which we now detail.
The following table simply shows model and hardware output for a few ARM tests on our current model (column “Model”) and on some ARM machines columns from “Tegra2” to “Exynos4412”). The additional “ARM” column corresponds to the sum of all runs on all ARM machines.
Executions of a given test derive from its final condition, which is the one from our test base. Executions are somehow hidden as one as to click on the test link to discover them.
Model | ARM | Tegra2 | APQ8060 | A5X | A6X | Exynos5250 | Tegra3 | Exynos4412 | Exynos5410 | APQ8064 | |
CoRR1 | Forbid | No, 10M/101G | No, 928k/12G | No, 87/24G | No, 249k/3.9G | Ok, 0/13G | Ok, 0/7.9G | No, 7.7M/18G | No, 1.0M/11G | Ok, 0/5.7G | No, 612/5.4G |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | |||||
CoRW | Forbid | Ok, 0/191G | Ok, 0/34G | Ok, 0/33G | Ok, 0/9.1G | Ok, 0/13G | Ok, 0/7.9G | Ok, 0/61G | Ok, 0/22G | Ok, 0/5.7G | Ok, 0/4.2G |
CoRW1 | Forbid | Ok, 0/358G | Ok, 0/60G | Ok, 0/63G | Ok, 0/14G | Ok, 0/26G | Ok, 0/16G | Ok, 0/116G | Ok, 0/44G | Ok, 0/11G | Ok, 0/8.4G |
CoWR | Forbid | Ok, 0/191G | Ok, 0/34G | Ok, 0/33G | Ok, 0/9.1G | Ok, 0/13G | Ok, 0/7.9G | Ok, 0/61G | Ok, 0/22G | Ok, 0/5.7G | Ok, 0/4.2G |
CoWW | Forbid | Ok, 0/381G | Ok, 0/68G | Ok, 0/66G | Ok, 0/18G | Ok, 0/26G | Ok, 0/16G | Ok, 0/123G | Ok, 0/44G | Ok, 0/11G | Ok, 0/8.4G |
MP | Allow | Ok, 269M/30G | Ok, 41M/5.0G | Ok, 6.6M/2.3G | Ok, 55M/6.3G | Ok, 14M/6.6G | Ok, 2.6M/1.2G | Ok, 12M/1.2G | Ok, 134M/7.0G | Ok, 504k/40M | Ok, 2.2M/400M |
RDW | Forbid | Ok, 0/39G | — | — | — | — | — | Ok, 0/23G | Ok, 0/11G | Ok, 0/2.8G | Ok, 0/2.1G |
WRC+ctrl+addr | Allow | No, 0/23G | — | — | — | — | — | No, 0/6.7G | No, 0/11G | No, 0/2.8G | No, 0/2.1G |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen |
From the above table we can conclude:
So far so good, the above table suffices to illustrate two important facts about the ARM architecture. However, the table does not tell the whole story on comparing model and hardware.
We thus often use another kind of table whose rows result from comparing Model and hardware. We usually display two tables: the first one lists all the executions that are forbidden by the model, yet observed on hardware — which we entitle Invalid behaviours; while the second one lists all the executions that are allowed by the model, yet unobserved on hardware — which we entitle Unseen behaviours.
Model | ARM | Tegra2 | APQ8060 | A5X | A6X | Exynos5250 | Tegra3 | Exynos4412 | Exynos5410 | APQ8064 | |
CoRR1 | Forbid | Ok, 10M/102G | Ok, 928k/12G | Ok, 87/24G | Ok, 249k/3.9G | No, 0/14G | No, 0/8.3G | Ok, 7.7M/18G | Ok, 1.0M/11G | No, 0/6.3G | Ok, 612/5.4G |
Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | Forbid invalidated | |||||
RDW | Forbid | Ok, 450k/40G | — | — | — | — | — | Ok, 295k/23G | Ok, 155k/11G | No, 0/3.1G | No, 0/2.3G |
Forbid invalidated | Forbid invalidated | Forbid invalidated |
We now see that there are more invalid executions than the one of CoRR1: the test RDW has three invalid executions, which are similar to the one of CoRR1.
Model | ARM | Tegra3 | Exynos4412 | Exynos5410 | APQ8064 | |
WRC+ctrl+addr | Allow | No, 0/24G | No, 0/7.3G | No, 0/11G | No, 0/3.1G | No, 0/2.3G |
Allow unseen | Allow unseen | Allow unseen | Allow unseen | Allow unseen |