Opens a larger view. Escape closes it.

hardware-counters

crossplatform.md

Cross-platform prediction: ARCHER2 vs Cirrus

The experiment the project title promises. Everything prior to this was single-platform, so “Performance Projection: Modelling Hardware” had never been tested across machines.

The two platforms

ARCHER2Cirrus
CPUAMD EPYC 7742 “Rome” (Zen 2)AMD EPYC 9825 “Turin” (Zen 5)
Cores / node128 (2 × 64)288 (2 × 144)
Peak clock2.25 GHz3.71 GHz
MemoryDDR4DDR5, 768 GB
InterconnectSlingshotSlingshot 11, 200 Gbps
Cray PE23.09 (CCE 16)25.09 (CCE 19)
Configurations191 (8 applications)191 (6 applications)
Configurations present on both166166

Three CPU generations apart, 2.25× the cores, a 65% higher clock, and a different memory technology, but the same vendor, the same toolchain and the same CrayPat methodology, which is what makes the comparison tractable.

ARCHER2 contributed 191 configurations across eight applications and Cirrus 191 across six: GROMACS and OpenFOAM could not be built or run on Cirrus, and Cirrus alone reaches 125 and 288 cores, which a 128-way ARCHER2 node cannot. Joining on (application, size, cores, threads) gives 166 configurations present on both machines:

appARCHER2Cirrusmatched
comd252825
gromacs800
hpcg455144
hpl322724
lulesh131613
minife364236
openfoam800
stream242724
total191191166

Both totals being 191 is a coincidence of how far each sweep reached, not a matching. Every platform comparison in this document is therefore made on the paired 166, so that “platform” is not confounded with “which configurations happen to be in this sample”. The confounding would run in one direction: the 25 Cirrus rows without an ARCHER2 counterpart are exactly its 125- and 288-core points, its widest and shortest runs, where fixed overhead dominates and the efficiency factor collapses (median runtime 1.041 s against 1.203 s for the paired rows), so an unpaired comparison of the two full samples makes Cirrus look intrinsically hard for a reason that has nothing to do with Zen 5. The figures for the two full 191-row samples are shown alongside the paired ones so the cost of the restriction is visible. Analysis: results/model/matched_crossplatform_*; protocol: docs/rigour.md.

Note on the peak clock. Cirrus login nodes are EPYC 9745 and report 2.4 GHz; compute nodes are EPYC 9825 at 3.7146 GHz. Deriving F_PEAK from the login node would have mis-scaled every analytic term on Cirrus.

The feature problem

The machines do not expose the same counters, which constrains what a cross-platform model may use.

FeatureARCHER2Cirrus
ipc, flops_per_*, l2_*, tlb_*, stalls
energy_per_instr, core_energy_frac (RAPL)✓ 100%✗ 0%
l3_miss_per_instr, l3_lat_per_miss (ZenL3)✓ 96%✗ 0%
l1_miss_per_instr, vec_per_instr, fma_per_instr✗ 0%✓ 100%

Cirrus has no cray_rapl and no cray_zenl3 component; ARCHER2 lacks the Zen 5 presets. The intersection is 14 features, and it excludes the two energy ratios. Quantifying the cost of that is one of the results below; it turns out to be small, consistent with core_energy_frac carrying 0.008 importance (rank 15 of 21) on the 191-configuration data (docs/modelling.md, Feature importance under structural missingness).

Experiment matrix

Six settings × two feature sets × four model families. Error is the multiplicative factor max(pred/act, act/pred); the reference is a zero-parameter constant predicting the median training efficiency factor. Verdicts use the Hodges-Lehmann pseudomedian of the paired differences with Holm-Bonferroni correction within each family (see docs/modelling.md, Statistical methodology and the precision of the numbers).

Intersection features, paired 166 configurations:

SettingBest modelBest [95% CI]ConstantHL diffHolm pVerdict
within-A2GBQ1.062 [1.048, 1.082]1.095-0.0352.9e-05beats constant
within-CIRGBQ1.124 [1.096, 1.148]1.129-0.0580.0056beats constant
within-CIRRF1.125 [1.098, 1.165]1.129-0.0450.047beats constant
A2 → CIRRF1.203 [1.192, 1.211]1.220-0.0400.0060beats constant
CIR → A2GBQ1.136 [1.129, 1.149]1.151-0.0180.71not significant
A2 → CIR LOAOMLP1.249 [1.223, 1.290]1.251-0.0151.00not significant
CIR → A2 LOAORF1.173 [1.144, 1.206]1.131+0.0121.00not significant

LOAO = unseen hardware and unseen application simultaneously.

The same settings on the two full 191-row samples, for comparison, with the delta the restriction costs:

Settingmodelall 191paired 166delta
within-A2RF1.05491.0714+0.0165
within-A2constant1.06541.0945+0.0291
within-CIRRF1.18631.1248-0.0615
within-CIRGBQ1.21461.1241-0.0906
within-CIRconstant1.16631.1294-0.0369
A2 → CIRRF1.19431.2025+0.0082
A2 → CIRconstant1.20181.2203+0.0185
CIR → A2RF1.15141.1566+0.0053
CIR → A2constant1.11841.1511+0.0328

Where a delta is large and negative, the all-191 figure is pessimistic because of the unpaired Cirrus rows rather than because of the hardware. Where it is near zero, the restriction changes nothing. Only the matched column can support a statement of the form “platform A is harder than platform B”, because only it holds the workload fixed. The restriction costs 25 configurations per platform (13.1%) and two of eight applications.

The two applications that cannot be scored

The A2 → CIR LOAO setting loops over the union of applications, and for GROMACS and OpenFOAM the Cirrus test mask is empty. Every fold is listed with its disposition, folds with no test set are reported as not evaluable, application absent on the target platform rather than skipped, and the constant reference is computed on the same folds as the models (a verdict against a constant that was never computed for the same folds is not a verdict). The figure of 1.254 for A2 → CIR LOAO is an average over six applications, not eight, and the two missing ones are a production MD code and a production CFD code, that is, the two least like the proxy benchmarks. The hardest setting in the matrix is evaluated only on the easier half of the application space, and that must be stated wherever the number is quoted. The CIR → A2 direction differs: GROMACS and OpenFOAM do have a non-empty ARCHER2 test set, so all eight folds score, but no Cirrus training rows for them exist either, so the fold is really “predict a code the source platform has never seen in any form”. That is a legitimate and harder test, and it is labelled as one.

Figure: ../results/figures/fig_crossplatform.png, and ../results/figures/fig_pred_vs_actual_xplat.png for the per-configuration scatter in the best transfer direction.

Findings

1. Cross-platform transfer works, but barely

Training on ARCHER2 and predicting Cirrus reaches 1.203× on the paired set, better than a constant fitted on ARCHER2 data (1.220×) and significant after Holm (p = 0.0060), but only just. The reverse direction does not separate from its constant. The honest statement is that a model trained on one machine carries weak but non-zero information about another.

For context, within-platform prediction on ARCHER2 is 1.05×. So moving to unseen hardware roughly triples the error gap over the baseline.

2. The intersection costs surprisingly little

Dropping energy and L3 moves A2 → CIR by 0.4%, and within-ARCHER2 it costs about 0.005 in median error factor, which is a third of the spread across random seeds and therefore not resolvable.

This agrees with the feature-importance ranking: core_energy_frac carries 0.008 impurity importance on the merged data and is worth essentially nothing on held-out permutation importance, so removing it costs essentially nothing. The ablation was computed on the merged data throughout and is independent confirmation of that ranking.

For a practitioner: a cross-platform predictor does not need RAPL.

3. Transfer is asymmetric, and the direction is informative

A2 → CIR beats its baseline; CIR → A2 does not, and on the two full samples it is significantly worse than a constant (RF Holm p = 0.0020, MLP p = 0.033). The asymmetry follows from target difficulty rather than model quality:

ARCHER2Cirrus
sd of log10(η), paired 1660.1340.238
sd of log10(η), all 1910.1280.284
median runtime, paired3.38 s1.20 s
runs under 1 s, paired28.3%48.8%

Cirrus is 1.77× more variable in the target on the paired data (2.2× on the two full samples) and its runs are far shorter, because 288 cores finish the same fixed problem much faster. Nearly half the Cirrus runs are under a second, where fixed overheads (MPI_Init, I/O, instrumentation) dominate and η collapses; median η is 0.47 below 0.3 s versus 0.83 above 3 s. Figure: ../results/figures/fig_eta_vs_runtime.png.

So a model trained on ARCHER2’s well-behaved data transfers reasonably onto Cirrus, but a model trained on Cirrus’s noisier, overhead-dominated data does not improve on simply predicting a constant for ARCHER2. The decisive evidence that this is about the data and not the machine is that transferring from the rescaled Cirrus dataset to ARCHER2 is significantly better than a constant in all three model families (MLP Holm p = 2.8e-12), while transferring from the fixed-size Cirrus dataset is significantly worse.

4. Cirrus is harder to predict, but not by much

On the paired 166 configurations, within-Cirrus RF reaches 1.1248 and GBQ 1.1241 against a constant of 1.1294. Both beat the constant and both survive Holm-Bonferroni (adjusted p = 0.047 and 0.0056). The statement the data support is: with the workload held fixed, tree models beat a constant on Cirrus too, but by a much smaller margin than on ARCHER2.

Two things account for the residual gap between within-ARCHER2 (about 1.05) and within-Cirrus (about 1.12), and only one of them is hardware. The first is the problem-size design choice, which is real and is the subject of weakscaling.md: sizes were deliberately kept identical to ARCHER2’s for comparability, and on a 288-core Zen 5 node those sizes are too small, so the machine finishes them before the counters say anything useful. That is a correctable design consequence, and comparability and predictability are in tension here; this experiment chose comparability.

The second is coverage, and it was invisible until the learning curve was measured. Cirrus has six applications where ARCHER2 has eight, and under leave-one-application-out the learning curve (modelling.md, Learning curve) is still steeply descending at seven training codes: the step from five to seven is worth 0.0223 in median error. Every Cirrus and transfer number in this project therefore sits further left on that curve than the ARCHER2 numbers do, so part of the platform gap is a training-set coverage effect that would persist even if both machines ran identically-sized problems. This is worth stating because a conclusion about hardware is here partly a conclusion about sample composition.

The per-application implied clock is a genuine hardware observation and is unaffected:

AppARCHER2Cirrus
hpcg1.83 GHz3.59 GHz
comd1.863.34
hpl1.832.82
lulesh1.562.62
minife1.350.96

Most applications run near Cirrus’s higher clock as expected, but miniFE regresses — a genuine Zen 5 behaviour worth noting rather than smoothing over.

5. Simultaneous unseen hardware and unseen application

The hardest setting (LOAO rows) reaches 1.254 (A2 → CIR) and 1.173 (CIR → A2) on the paired data. Both are worse than within-platform prediction but remain in the same broad range, which suggests the two difficulties compound roughly additively rather than catastrophically. Neither separates from its constant after Holm, so the honest reading is that in this setting the models add nothing measurable, and the A2 → CIR figure covers six applications rather than eight (see The two applications that cannot be scored, above).

Threats to validity

  • Two platforms, same vendor. Both are AMD EPYC with Cray toolchains. An Intel or ARM target would be a stronger test; the counter intersection would likely shrink further.
  • 166 paired configurations, and only six applications on both machines. Differences below ~0.02 in median error are not meaningful, and the application count is the binding constraint on accuracy rather than the configuration count (see the learning curve in modelling.md). The two applications that Cirrus lacks are also the two production codes, so the paired subset is proxy-benchmark-heavy.
  • Problem sizes were held fixed for comparability, which disadvantages the larger machine (finding 4). weakscaling.md reports the size-scaled replication, which separates “harder hardware” from “too-small problem” and attributes most of the effect to the latter.
  • branch_miss_rate is not an intersection feature. PAPI_BR_INS/BR_MSP were collected on Cirrus but are absent from the ARCHER2 data, so the feature is 0% available there and the intersection is 14 features, not 15.
  • The two full samples are not paired. The all-191 figures are shown alongside the paired ones so the size and direction of the restriction can be seen, but only the paired figures support a statement about the platform.

Reproducing

# on Cirrus
python analysis/parse_cirrus.py            # CrayPat dirs -> cirrus_persets.csv
python analysis/crossplatform.py           # the 6 x 2 x 4 matrix on the two full samples
python analysis/matched_crossplatform.py   # the paired 166-configuration analysis
python analysis/xplat_diag.py              # the diagnostics behind findings 3 and 4

Results: results/model/matched_crossplatform_summary.txt, matched_crossplatform_results.csv, matched_crossplatform_stats.csv (paired) and crossplatform_results.csv, crossplatform_summary.txt (the two full samples).