<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>MPI on Harry's Personal Site</title><link>https://harryzhou2000.github.io/hugo-harry/tags/mpi/</link><description>Recent content in MPI on Harry's Personal Site</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 19 Oct 2026 11:18:05 +0800</lastBuildDate><atom:link href="https://harryzhou2000.github.io/hugo-harry/tags/mpi/index.xml" rel="self" type="application/rss+xml"/><item><title>DNDSR Euler3D P3 weak scaling on four CPU clusters</title><link>https://harryzhou2000.github.io/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/</link><pubDate>Mon, 19 Oct 2026 11:18:05 +0800</pubDate><guid>https://harryzhou2000.github.io/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/</guid><description>&lt;img src="https://harryzhou2000.github.io/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/cover.png" alt="Featured image of post DNDSR Euler3D P3 weak scaling on four CPU clusters" />&lt;p>How well does DNDSR scale when each CPU core has roughly the same amount of
work? This study measures its fourth-order Euler3D solver on four CPU
clusters. The largest accepted production run reaches 8,192 MPI ranks, but
the clusters differ sharply in how they behave at scale.&lt;/p>
&lt;p>Every run uses whole nodes and one MPI rank per physical core. The
weak-scaling runs and workload-matched retests keep roughly 1,024 periodic
hexahedral cells per rank; four diagnostic controls use heavier workloads.
The measurement covers the steady internal update of the P3 VFV scheme
(&lt;code>maxOrder=3&lt;/code>, quadrature &lt;code>intOrder=5&lt;/code>, limiter disabled), not mesh setup.&lt;/p>
&lt;p>Each completed run records 500 solver updates. The first 100 serve as warmup;
all 400 remaining updates enter the statistics without trimming. The &lt;strong>mean&lt;/strong>
includes slow updates and stalls, while the &lt;strong>median&lt;/strong> better describes a
typical update. Their difference matters most at high rank counts, where a
few long updates can lower sustained throughput. A &lt;em>cell-iteration&lt;/em> is one
cell processed in one solver update; MCell-it/s means millions of these per
second. Timing CV describes the relative variation among update times.&lt;/p>
&lt;p>The audit contains &lt;strong>31 runs with all 400 measured updates&lt;/strong>:&lt;/p>
&lt;ul>
&lt;li>22 production weak-scaling runs using serial CGNS input;&lt;/li>
&lt;li>five workload-matched distributed-HDF5/new-MPI retests;&lt;/li>
&lt;li>four distributed-HDF5 diagnostic controls with deliberately heavier
per-rank workloads.&lt;/li>
&lt;/ul>
&lt;p>Runs that stopped during mesh setup produced no update timings, so they are
not performance points.&lt;/p>
&lt;h2 id="machines-and-mpi-stacks">&lt;a href="#machines-and-mpi-stacks" class="header-anchor">&lt;/a>Machines and MPI stacks
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cluster&lt;/th>
&lt;th>CPU per node&lt;/th>
&lt;th style="text-align: right">Physical cores/node&lt;/th>
&lt;th>Benchmark partition&lt;/th>
&lt;th>Production MPI&lt;/th>
&lt;th>Supplemental MPI&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td>2x AMD EPYC 9654, Zen 4&lt;/td>
&lt;td style="text-align: right">192&lt;/td>
&lt;td>&lt;code>amd_m8_768&lt;/code>&lt;/td>
&lt;td>Open MPI 4.1.0, UCX 1.14&lt;/td>
&lt;td>Open MPI 5.0.10, UCX 1.14&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td>2x AMD EPYC 9755, Zen 5&lt;/td>
&lt;td style="text-align: right">256&lt;/td>
&lt;td>&lt;code>amd_m9_768&lt;/code>&lt;/td>
&lt;td>Open MPI 4.1.8, UCX 1.18&lt;/td>
&lt;td>same stack&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td>2x AMD EPYC 9554, Zen 4&lt;/td>
&lt;td style="text-align: right">128&lt;/td>
&lt;td>&lt;code>amd_a8_384&lt;/code>&lt;/td>
&lt;td>Open MPI 4.1.0, UCX 1.14&lt;/td>
&lt;td>Open MPI 4.1.6, UCX 1.14&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td>2x Intel Xeon Gold 6348, Ice Lake-SP&lt;/td>
&lt;td style="text-align: right">56&lt;/td>
&lt;td>&lt;code>cp6&lt;/code>&lt;/td>
&lt;td>Open MPI 4.1.4, site UCX/GLEX&lt;/td>
&lt;td>none&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>These are the normal production partitions: a8 used its 384 GB class rather
than the dedicated 768 GB large-memory partition, and m9 used 768 GB rather
than 1.5 TB. m8 used its M8-specific 768 GB partition; thtj1 used &lt;code>cp6&lt;/code>.&lt;/p>
&lt;h2 id="production-weak-scaling">&lt;a href="#production-weak-scaling" class="header-anchor">&lt;/a>Production weak scaling
&lt;/h2>&lt;p>&lt;img src="https://harryzhou2000.github.io/hugo-harry/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/weak-scaling.png"
width="2101"
height="1061"
srcset="https://harryzhou2000.github.io/hugo-harry/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/weak-scaling_hu5263049889975480068.png 480w, https://harryzhou2000.github.io/hugo-harry/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/weak-scaling_hu9386012006903053913.png 1024w"
loading="lazy"
alt="Mean throughput and weak-scaling efficiency"
class="gallery-image"
data-flex-grow="198"
data-flex-basis="475px"
>&lt;/p>
&lt;p>&lt;strong>Production weak scaling.&lt;/strong> Throughput continues to rise to m9&amp;rsquo;s 8,192-rank
point, although its efficiency falls. thtj1 shows a different pattern: a
sharp throughput drop beyond 16 nodes.&lt;/p>
&lt;p>&lt;a class="link" href="weak-scaling.pdf" >Download the vector PDF&lt;/a>.&lt;/p>
&lt;p>The horizontal axis counts physical CPU cores. The left panel shows
stall-inclusive mean throughput; the right panel compares that throughput
with each cluster&amp;rsquo;s one-node baseline.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cluster&lt;/th>
&lt;th style="text-align: right">Nodes&lt;/th>
&lt;th style="text-align: right">Ranks&lt;/th>
&lt;th style="text-align: right">Cells/rank&lt;/th>
&lt;th style="text-align: right">Mean MCell-it/s&lt;/th>
&lt;th style="text-align: right">Median MCell-it/s&lt;/th>
&lt;th style="text-align: right">Mean efficiency&lt;/th>
&lt;th style="text-align: right">Median efficiency&lt;/th>
&lt;th style="text-align: right">Timing CV&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">192&lt;/td>
&lt;td style="text-align: right">1016.2&lt;/td>
&lt;td style="text-align: right">1.772&lt;/td>
&lt;td style="text-align: right">1.830&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">0.108&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">2&lt;/td>
&lt;td style="text-align: right">384&lt;/td>
&lt;td style="text-align: right">1013.1&lt;/td>
&lt;td style="text-align: right">3.504&lt;/td>
&lt;td style="text-align: right">3.672&lt;/td>
&lt;td style="text-align: right">98.9%&lt;/td>
&lt;td style="text-align: right">100.3%&lt;/td>
&lt;td style="text-align: right">0.150&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">4&lt;/td>
&lt;td style="text-align: right">768&lt;/td>
&lt;td style="text-align: right">1013.9&lt;/td>
&lt;td style="text-align: right">6.261&lt;/td>
&lt;td style="text-align: right">6.527&lt;/td>
&lt;td style="text-align: right">88.3%&lt;/td>
&lt;td style="text-align: right">89.2%&lt;/td>
&lt;td style="text-align: right">0.161&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">8&lt;/td>
&lt;td style="text-align: right">1536&lt;/td>
&lt;td style="text-align: right">1016.2&lt;/td>
&lt;td style="text-align: right">9.366&lt;/td>
&lt;td style="text-align: right">12.569&lt;/td>
&lt;td style="text-align: right">66.1%&lt;/td>
&lt;td style="text-align: right">85.8%&lt;/td>
&lt;td style="text-align: right">2.941&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">3072&lt;/td>
&lt;td style="text-align: right">1034.0&lt;/td>
&lt;td style="text-align: right">20.358&lt;/td>
&lt;td style="text-align: right">23.774&lt;/td>
&lt;td style="text-align: right">71.8%&lt;/td>
&lt;td style="text-align: right">81.2%&lt;/td>
&lt;td style="text-align: right">0.307&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">256&lt;/td>
&lt;td style="text-align: right">1024.0&lt;/td>
&lt;td style="text-align: right">2.382&lt;/td>
&lt;td style="text-align: right">2.808&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">1.599&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">2&lt;/td>
&lt;td style="text-align: right">512&lt;/td>
&lt;td style="text-align: right">1038.0&lt;/td>
&lt;td style="text-align: right">5.103&lt;/td>
&lt;td style="text-align: right">5.450&lt;/td>
&lt;td style="text-align: right">107.1%&lt;/td>
&lt;td style="text-align: right">97.1%&lt;/td>
&lt;td style="text-align: right">0.371&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">4&lt;/td>
&lt;td style="text-align: right">1024&lt;/td>
&lt;td style="text-align: right">1036.3&lt;/td>
&lt;td style="text-align: right">9.238&lt;/td>
&lt;td style="text-align: right">10.545&lt;/td>
&lt;td style="text-align: right">96.9%&lt;/td>
&lt;td style="text-align: right">93.9%&lt;/td>
&lt;td style="text-align: right">0.657&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">8&lt;/td>
&lt;td style="text-align: right">2048&lt;/td>
&lt;td style="text-align: right">1024.0&lt;/td>
&lt;td style="text-align: right">15.264&lt;/td>
&lt;td style="text-align: right">20.323&lt;/td>
&lt;td style="text-align: right">80.1%&lt;/td>
&lt;td style="text-align: right">90.5%&lt;/td>
&lt;td style="text-align: right">0.773&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">4096&lt;/td>
&lt;td style="text-align: right">1018.9&lt;/td>
&lt;td style="text-align: right">21.936&lt;/td>
&lt;td style="text-align: right">34.915&lt;/td>
&lt;td style="text-align: right">57.5%&lt;/td>
&lt;td style="text-align: right">77.7%&lt;/td>
&lt;td style="text-align: right">1.077&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">32&lt;/td>
&lt;td style="text-align: right">8192&lt;/td>
&lt;td style="text-align: right">1021.2&lt;/td>
&lt;td style="text-align: right">30.201&lt;/td>
&lt;td style="text-align: right">44.441&lt;/td>
&lt;td style="text-align: right">39.6%&lt;/td>
&lt;td style="text-align: right">49.5%&lt;/td>
&lt;td style="text-align: right">0.978&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">128&lt;/td>
&lt;td style="text-align: right">1036.3&lt;/td>
&lt;td style="text-align: right">1.656&lt;/td>
&lt;td style="text-align: right">1.712&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">0.082&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">4&lt;/td>
&lt;td style="text-align: right">512&lt;/td>
&lt;td style="text-align: right">1038.0&lt;/td>
&lt;td style="text-align: right">5.249&lt;/td>
&lt;td style="text-align: right">6.177&lt;/td>
&lt;td style="text-align: right">79.3%&lt;/td>
&lt;td style="text-align: right">90.2%&lt;/td>
&lt;td style="text-align: right">2.092&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">8&lt;/td>
&lt;td style="text-align: right">1024&lt;/td>
&lt;td style="text-align: right">1036.3&lt;/td>
&lt;td style="text-align: right">11.211&lt;/td>
&lt;td style="text-align: right">11.790&lt;/td>
&lt;td style="text-align: right">84.6%&lt;/td>
&lt;td style="text-align: right">86.1%&lt;/td>
&lt;td style="text-align: right">0.171&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">2048&lt;/td>
&lt;td style="text-align: right">1024.0&lt;/td>
&lt;td style="text-align: right">19.793&lt;/td>
&lt;td style="text-align: right">21.288&lt;/td>
&lt;td style="text-align: right">74.7%&lt;/td>
&lt;td style="text-align: right">77.7%&lt;/td>
&lt;td style="text-align: right">0.173&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">56&lt;/td>
&lt;td style="text-align: right">1059.3&lt;/td>
&lt;td style="text-align: right">0.525&lt;/td>
&lt;td style="text-align: right">0.528&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">100.0%&lt;/td>
&lt;td style="text-align: right">0.029&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">2&lt;/td>
&lt;td style="text-align: right">112&lt;/td>
&lt;td style="text-align: right">1050.4&lt;/td>
&lt;td style="text-align: right">1.030&lt;/td>
&lt;td style="text-align: right">1.040&lt;/td>
&lt;td style="text-align: right">98.0%&lt;/td>
&lt;td style="text-align: right">98.4%&lt;/td>
&lt;td style="text-align: right">0.042&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">4&lt;/td>
&lt;td style="text-align: right">224&lt;/td>
&lt;td style="text-align: right">1013.3&lt;/td>
&lt;td style="text-align: right">2.036&lt;/td>
&lt;td style="text-align: right">2.076&lt;/td>
&lt;td style="text-align: right">96.9%&lt;/td>
&lt;td style="text-align: right">98.2%&lt;/td>
&lt;td style="text-align: right">0.060&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">8&lt;/td>
&lt;td style="text-align: right">448&lt;/td>
&lt;td style="text-align: right">1019.0&lt;/td>
&lt;td style="text-align: right">3.980&lt;/td>
&lt;td style="text-align: right">4.109&lt;/td>
&lt;td style="text-align: right">94.7%&lt;/td>
&lt;td style="text-align: right">97.2%&lt;/td>
&lt;td style="text-align: right">0.103&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">896&lt;/td>
&lt;td style="text-align: right">1018.6&lt;/td>
&lt;td style="text-align: right">7.309&lt;/td>
&lt;td style="text-align: right">7.639&lt;/td>
&lt;td style="text-align: right">87.0%&lt;/td>
&lt;td style="text-align: right">90.4%&lt;/td>
&lt;td style="text-align: right">0.119&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">32&lt;/td>
&lt;td style="text-align: right">1792&lt;/td>
&lt;td style="text-align: right">1013.3&lt;/td>
&lt;td style="text-align: right">2.101&lt;/td>
&lt;td style="text-align: right">2.109&lt;/td>
&lt;td style="text-align: right">12.5%&lt;/td>
&lt;td style="text-align: right">12.5%&lt;/td>
&lt;td style="text-align: right">0.011&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>thtj1&lt;/td>
&lt;td style="text-align: right">64&lt;/td>
&lt;td style="text-align: right">3584&lt;/td>
&lt;td style="text-align: right">1019.0&lt;/td>
&lt;td style="text-align: right">4.414&lt;/td>
&lt;td style="text-align: right">4.241&lt;/td>
&lt;td style="text-align: right">13.1%&lt;/td>
&lt;td style="text-align: right">12.5%&lt;/td>
&lt;td style="text-align: right">0.177&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>m9 reaches the largest accepted production point: 8,192 ranks on 32 nodes.
It delivers 30.20 million cell-iterations/s by the mean, versus 44.44 million
by the median. Mean and median efficiencies are 39.6% and 49.5%. That gap,
alongside a timing CV of 0.978, shows how strongly slow updates affect the
sustained average.&lt;/p>
&lt;p>m8 and a8 retain 71.8% and 74.7% mean efficiency at 16 nodes. thtj1 also
scales smoothly to 16 nodes, then drops from 7.31 to 2.10 million
cell-iterations/s at 32 nodes. Its 32-node timing CV is only 0.011: the
slowdown is consistent, not the result of a few outlier updates. Throughput
partly recovers at 64 nodes, but efficiency stays near 13%. The attempted
128-node runs never reached solver updates and therefore have no throughput
measurement.&lt;/p>
&lt;h2 id="per-core-throughput-and-mpi-retests">&lt;a href="#per-core-throughput-and-mpi-retests" class="header-anchor">&lt;/a>Per-core throughput and MPI retests
&lt;/h2>&lt;p>&lt;img src="https://harryzhou2000.github.io/hugo-harry/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/per-core-throughput.png"
width="2100"
height="1104"
srcset="https://harryzhou2000.github.io/hugo-harry/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/per-core-throughput_hu681115918885709249.png 480w, https://harryzhou2000.github.io/hugo-harry/hugo-harry/p/dndsr-euler3d-p3-weak-scaling/per-core-throughput_hu9474237166198520395.png 1024w"
loading="lazy"
alt="Mean and median throughput per physical CPU core"
class="gallery-image"
data-flex-grow="190"
data-flex-basis="456px"
>&lt;/p>
&lt;p>&lt;strong>Throughput per core.&lt;/strong> Production and workload-matched HDF5/MPI retest
series are distinguished in the legend. Completing a large run does not
guarantee strong per-core performance, particularly on m8.&lt;/p>
&lt;p>&lt;a class="link" href="per-core-throughput.pdf" >Download the vector PDF&lt;/a>.&lt;/p>
&lt;p>The five HDF5 retests keep the workload within 1.2% of the 1,024-cell-per-rank
target. They use validated MPI stacks available on the same machines.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cluster&lt;/th>
&lt;th style="text-align: right">Nodes&lt;/th>
&lt;th style="text-align: right">Ranks&lt;/th>
&lt;th style="text-align: right">Cells/rank&lt;/th>
&lt;th>MPI stack&lt;/th>
&lt;th style="text-align: right">Mean MCell-it/s&lt;/th>
&lt;th style="text-align: right">Median MCell-it/s&lt;/th>
&lt;th style="text-align: right">Mean kCell-it/s/core&lt;/th>
&lt;th style="text-align: right">Median kCell-it/s/core&lt;/th>
&lt;th style="text-align: right">CV&lt;/th>
&lt;th>Outcome&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">128&lt;/td>
&lt;td style="text-align: right">1036.3&lt;/td>
&lt;td>Open MPI 4.1.6 + UCX 1.14&lt;/td>
&lt;td style="text-align: right">1.611&lt;/td>
&lt;td style="text-align: right">1.679&lt;/td>
&lt;td style="text-align: right">12.584&lt;/td>
&lt;td style="text-align: right">13.116&lt;/td>
&lt;td style="text-align: right">0.153&lt;/td>
&lt;td>completed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">32&lt;/td>
&lt;td style="text-align: right">4096&lt;/td>
&lt;td style="text-align: right">1018.9&lt;/td>
&lt;td>Open MPI 4.1.6 + UCX 1.14&lt;/td>
&lt;td style="text-align: right">29.751&lt;/td>
&lt;td style="text-align: right">33.806&lt;/td>
&lt;td style="text-align: right">7.263&lt;/td>
&lt;td style="text-align: right">8.253&lt;/td>
&lt;td style="text-align: right">0.561&lt;/td>
&lt;td>completed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">192&lt;/td>
&lt;td style="text-align: right">1016.2&lt;/td>
&lt;td>Open MPI 5.0.10 + UCX 1.14&lt;/td>
&lt;td style="text-align: right">1.792&lt;/td>
&lt;td style="text-align: right">1.954&lt;/td>
&lt;td style="text-align: right">9.335&lt;/td>
&lt;td style="text-align: right">10.177&lt;/td>
&lt;td style="text-align: right">0.299&lt;/td>
&lt;td>completed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">32&lt;/td>
&lt;td style="text-align: right">6144&lt;/td>
&lt;td style="text-align: right">1030.5&lt;/td>
&lt;td>Open MPI 5.0.10 + UCX 1.14&lt;/td>
&lt;td style="text-align: right">12.421&lt;/td>
&lt;td style="text-align: right">13.758&lt;/td>
&lt;td style="text-align: right">2.022&lt;/td>
&lt;td style="text-align: right">2.239&lt;/td>
&lt;td style="text-align: right">0.944&lt;/td>
&lt;td>completed&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">4096&lt;/td>
&lt;td style="text-align: right">1018.9&lt;/td>
&lt;td>Open MPI 4.1.8 + UCX 1.18&lt;/td>
&lt;td style="text-align: right">21.218&lt;/td>
&lt;td style="text-align: right">27.865&lt;/td>
&lt;td style="text-align: right">5.180&lt;/td>
&lt;td style="text-align: right">6.803&lt;/td>
&lt;td style="text-align: right">0.977&lt;/td>
&lt;td>solver completed; allocation cleanup timed out&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>On m8 and a8, the newer Open MPI stacks complete workloads at scales where
the earlier stacks failed during setup. The executable and UCX version were
retained; HDF5 input alone did not make the old Open MPI 4.1.0 large-rank
attempts complete. These checks support an MPI-stack explanation for the
completion difference, but not a general speedup.&lt;/p>
&lt;p>Performance remains uneven. Relative to the matching one-node retest, a8
retains 57.7% mean and 62.9% median efficiency at 32 nodes. m8 retains only
21.7% mean and 22.0% median efficiency, with CV 0.944. Its newer stack solves
the completion problem, not the large-scale performance problem.&lt;/p>
&lt;p>The m9 HDF5 run produced all 400 samples, and the application and MPI steps
exited successfully. The outer allocation reached its shortened time limit
only during cleanup. Its performance sample is therefore included, with that
status noted in the table.&lt;/p>
&lt;h2 id="heavier-diagnostic-controls">&lt;a href="#heavier-diagnostic-controls" class="header-anchor">&lt;/a>Heavier diagnostic controls
&lt;/h2>&lt;p>The remaining four completed runs have 1.33 to 15.92 times the target
cells per rank. Their timings are valid for those heavier workloads, but they
do not belong to the workload-matched weak-scaling curves.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Cluster&lt;/th>
&lt;th style="text-align: right">Nodes&lt;/th>
&lt;th style="text-align: right">Ranks&lt;/th>
&lt;th style="text-align: right">Cells/rank&lt;/th>
&lt;th style="text-align: right">Relative load&lt;/th>
&lt;th style="text-align: right">Mean MCell-it/s&lt;/th>
&lt;th style="text-align: right">Median MCell-it/s&lt;/th>
&lt;th style="text-align: right">Mean kCell-it/s/core&lt;/th>
&lt;th style="text-align: right">Median kCell-it/s/core&lt;/th>
&lt;th style="text-align: right">CV&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">2048&lt;/td>
&lt;td style="text-align: right">2037.7&lt;/td>
&lt;td style="text-align: right">1.99x&lt;/td>
&lt;td style="text-align: right">20.049&lt;/td>
&lt;td style="text-align: right">21.133&lt;/td>
&lt;td style="text-align: right">9.789&lt;/td>
&lt;td style="text-align: right">10.319&lt;/td>
&lt;td style="text-align: right">0.117&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>a8&lt;/td>
&lt;td style="text-align: right">24&lt;/td>
&lt;td style="text-align: right">3072&lt;/td>
&lt;td style="text-align: right">1358.5&lt;/td>
&lt;td style="text-align: right">1.33x&lt;/td>
&lt;td style="text-align: right">23.292&lt;/td>
&lt;td style="text-align: right">25.871&lt;/td>
&lt;td style="text-align: right">7.582&lt;/td>
&lt;td style="text-align: right">8.422&lt;/td>
&lt;td style="text-align: right">0.599&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m8&lt;/td>
&lt;td style="text-align: right">16&lt;/td>
&lt;td style="text-align: right">3072&lt;/td>
&lt;td style="text-align: right">2061.1&lt;/td>
&lt;td style="text-align: right">2.01x&lt;/td>
&lt;td style="text-align: right">21.520&lt;/td>
&lt;td style="text-align: right">24.011&lt;/td>
&lt;td style="text-align: right">7.005&lt;/td>
&lt;td style="text-align: right">7.816&lt;/td>
&lt;td style="text-align: right">0.196&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>m9&lt;/td>
&lt;td style="text-align: right">1&lt;/td>
&lt;td style="text-align: right">256&lt;/td>
&lt;td style="text-align: right">16301.9&lt;/td>
&lt;td style="text-align: right">15.92x&lt;/td>
&lt;td style="text-align: right">2.716&lt;/td>
&lt;td style="text-align: right">2.785&lt;/td>
&lt;td style="text-align: right">10.608&lt;/td>
&lt;td style="text-align: right">10.879&lt;/td>
&lt;td style="text-align: right">0.160&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;h2 id="interpretation-and-scope">&lt;a href="#interpretation-and-scope" class="header-anchor">&lt;/a>Interpretation and scope
&lt;/h2>&lt;p>The benchmark reveals three distinct behaviors:&lt;/p>
&lt;ol>
&lt;li>m9 runs the unchanged production path at 8,192 ranks, beyond 5,000. There
is no universal rank-count ceiling near that value.&lt;/li>
&lt;li>On m8 and a8, repeatable large-rank setup failures are associated with
the production Open MPI 4.1.0 stacks. Newer validated stacks complete at
the same scale, although m8&amp;rsquo;s sustained efficiency remains poor.&lt;/li>
&lt;li>thtj1 has a different limit: its 32-node updates are consistently slow,
and its 128-node attempts spend hours in distributed mesh setup without
producing update timings.&lt;/li>
&lt;/ol>
&lt;p>This is a whole-node, pure-MPI application benchmark, not a controlled
comparison of CPU architectures. Core counts, processors, MPI and UCX
versions, and network fabrics differ among clusters. Read mean/median gaps
and timing CVs alongside throughput rather than judging a cluster by a
single high-rank result.&lt;/p>
&lt;p>The solver source is DNDSR &lt;code>dev/harry&lt;/code> commit
&lt;code>f6ece7e91e97c6337ef0761c30017b2ddad6b24b&lt;/code>. Exact configuration hashes,
machine-readable timing rows, scheduler classifications, and failure evidence
are in the public
&lt;a class="link" href="https://github.com/CFDLAB-THU/DNDSR-cluster-helper/blob/main/benchmark/REPORT.md" target="_blank" rel="noopener"
>benchmark report&lt;/a>.&lt;/p></description></item></channel></rss>