diff --git a/docs/report/1H-codesign-paper/build/main.pdf b/docs/report/1H-codesign-paper/build/main.pdf index 6a85222..fdb14f2 100644 Binary files a/docs/report/1H-codesign-paper/build/main.pdf and b/docs/report/1H-codesign-paper/build/main.pdf differ diff --git a/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_flow.png b/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_flow.png index da16214..c14cf0e 100644 Binary files a/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_flow.png and b/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_flow.png differ diff --git a/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_stacked.png b/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_stacked.png index 3335a74..9e52e57 100644 Binary files a/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_stacked.png and b/docs/report/1H-codesign-paper/figures/ipcq_alternatives_architecture_stacked.png differ diff --git a/docs/report/1H-codesign-paper/sections/04-allreduce.tex b/docs/report/1H-codesign-paper/sections/04-allreduce.tex index b731bc7..41a230b 100644 --- a/docs/report/1H-codesign-paper/sections/04-allreduce.tex +++ b/docs/report/1H-codesign-paper/sections/04-allreduce.tex @@ -145,9 +145,9 @@ with credit return, splitting the control plane into PE\_IPCQ and the data plane into PE\_DMA, with head updates riding the payload and tail updates riding a 16\,B side-channel credit (\S\ref{sec:allreduce}). -\begin{figure}[t] +\begin{figure*}[t] \centering -\includegraphics[width=\linewidth]{ipcq_alternatives_architecture_stacked.png} +\includegraphics[width=0.78\linewidth]{ipcq_alternatives_architecture_flow.png} \caption{Per-send data and control flow for the four PE-to-PE signalling mechanisms (sender\,$\rightarrow$\,NoC\,$\rightarrow$\,receiver). Doorbell and RDMA-CQ each issue two fabric transactions (payload then @@ -158,7 +158,7 @@ the payload flit train and returns the tail credit on a side channel, so a send is one MMIO write and a receive is a flip-flop read. This is a \emph{design schematic}, not a measured comparison.} \label{fig:ipcq-arch} -\end{figure} +\end{figure*} \begin{figure}[t] \centering diff --git a/scripts/paper/paper_plot_ipcq_alternatives_comparison.py b/scripts/paper/paper_plot_ipcq_alternatives_comparison.py index e55b1f3..e7d203c 100644 --- a/scripts/paper/paper_plot_ipcq_alternatives_comparison.py +++ b/scripts/paper/paper_plot_ipcq_alternatives_comparison.py @@ -243,6 +243,12 @@ _FLOW_DATA = "#6699CC" # blue flit (data) _FLOW_CTRL = "#ED7D65" # orange flit (control) _FLOW_CRED = "#7BB661" # green (credit / ack) +# Font-size multiplier for the flow helpers. The stacked figure renders at +# full text width (a two-column figure*), so its fonts are scaled up here so +# they stay legible after the figure is fit to the page. Default 1.0 leaves +# the 2×2 flow figure unchanged. +_FS = 1.0 + def _flow_swim(ax, x, y, w, h, label, sub=None): ax.add_patch(mpatches.FancyBboxPatch( @@ -251,11 +257,11 @@ def _flow_swim(ax, x, y, w, h, label, sub=None): facecolor="white", edgecolor="#3a3a3a", linewidth=1.6)) ax.text(x + w / 2, y + h / 2 + (0.20 if sub else 0), label, ha="center", va="center", - fontsize=10.5, fontweight="bold", color="#111") + fontsize=10.5 * _FS, fontweight="bold", color="#111") if sub: ax.text(x + w / 2, y + h / 2 - 0.35, sub, ha="center", va="center", - fontsize=8, color="#555", fontstyle="italic") + fontsize=8 * _FS, color="#555", fontstyle="italic") def _flow_flit(ax, x, y, color, letter="", size=0.32): @@ -265,7 +271,7 @@ def _flow_flit(ax, x, y, color, letter="", size=0.32): facecolor=color, edgecolor="#222", linewidth=0.8)) if letter: ax.text(x, y, letter, ha="center", va="center", - fontsize=8.5, fontweight="bold", color="white") + fontsize=8.5 * _FS, fontweight="bold", color="white") def _flow_wire(ax, x1, x2, y, color="#888"): @@ -280,7 +286,7 @@ def _flow_dot(ax, x, y, color): def _flow_label(ax, x, y, text, color="#222", fontsize=9): ax.text(x, y, text, ha="center", va="center", - fontsize=fontsize, color=color, fontweight="bold") + fontsize=fontsize * _FS, color=color, fontweight="bold") def _flow_lead(ax, x_tail, y_tail, x_head, y_head, color="#777"): @@ -297,7 +303,7 @@ def _flow_setup(ax, kind): facecolor="white", edgecolor=_COLOR[kind], linewidth=0.9, alpha=0.85, zorder=0)) ax.text(10, 0.65, _TITLE[kind], - ha="center", va="center", fontsize=11.5, + ha="center", va="center", fontsize=11.5 * _FS, fontweight="bold", color=("#1B5E20" if kind == "ipcq" else "white"), bbox=dict( @@ -449,7 +455,7 @@ def _flow_legend(fig, leg_y=0.02): facecolor=color, edgecolor="#222", linewidth=0.6, transform=fig.transFigure)) fig.text(lx + 0.025, y + 0.011, text, - ha="left", va="center", fontsize=10, + ha="left", va="center", fontsize=10 * _FS, fontweight="bold", color="#222") lx += 0.32 @@ -461,21 +467,27 @@ def _flow_legend(fig, leg_y=0.02): def _plot_architecture_flow() -> Path: """4 panels arranged 2×2 — each a horizontal Sender → NoC → Receiver flow with small flit-style packets, dot-marker annotations and a - bottom name plate. Aesthetic mirrors latency_model.png.""" - fig, axes = plt.subplots(2, 2, figsize=(18.0, 11.5)) - _draw_flow_case(axes[0, 0], "doorbell") - _draw_flow_case(axes[0, 1], "hmq") - _draw_flow_case(axes[1, 0], "rdma") - _draw_flow_case(axes[1, 1], "ipcq") - fig.suptitle( - "Per-send architecture = $\\Sigma$ control overhead + " - "data-path DMA + receiver wake", - fontsize=14.5, fontweight="bold", y=0.995) - _flow_legend(fig, leg_y=0.015) - fig.tight_layout(rect=(0, 0.07, 1, 0.96)) - out = _OUT_DIR / "ipcq_alternatives_architecture_flow.png" - fig.savefig(out, dpi=150, bbox_inches="tight") - plt.close(fig) + bottom name plate. Aesthetic mirrors latency_model.png. Fonts scaled + up via _FS so the figure stays legible when fit to the page.""" + global _FS + _FS = 1.5 + try: + fig, axes = plt.subplots(2, 2, figsize=(18.0, 11.5)) + _draw_flow_case(axes[0, 0], "doorbell") + _draw_flow_case(axes[0, 1], "hmq") + _draw_flow_case(axes[1, 0], "rdma") + _draw_flow_case(axes[1, 1], "ipcq") + fig.suptitle( + "Per-send architecture = $\\Sigma$ control overhead + " + "data-path DMA + receiver wake", + fontsize=14.5 * _FS, fontweight="bold", y=0.995) + _flow_legend(fig, leg_y=0.015) + fig.tight_layout(rect=(0, 0.07, 1, 0.96)) + out = _OUT_DIR / "ipcq_alternatives_architecture_flow.png" + fig.savefig(out, dpi=150, bbox_inches="tight") + plt.close(fig) + finally: + _FS = 1.0 return out @@ -483,19 +495,25 @@ def _plot_architecture_flow() -> Path: def _plot_architecture_stacked() -> Path: """Same per-case flow content as the 2×2 figure, but stacked one case per row (4 rows × 1 column). Wider panels give each case more - horizontal room.""" - fig, axes = plt.subplots(4, 1, figsize=(16.0, 19.0)) - for ax, kind in zip(axes, ["doorbell", "hmq", "rdma", "ipcq"]): - _draw_flow_case(ax, kind) - fig.suptitle( - "Per-send architecture = $\\Sigma$ control overhead + " - "data-path DMA + receiver wake", - fontsize=14.5, fontweight="bold", y=0.997) - _flow_legend(fig, leg_y=0.010) - fig.tight_layout(rect=(0, 0.05, 1, 0.97)) - out = _OUT_DIR / "ipcq_alternatives_architecture_stacked.png" - fig.savefig(out, dpi=150, bbox_inches="tight") - plt.close(fig) + horizontal room. Rendered at full text width (two-column figure*), so + fonts are scaled up via _FS to stay legible after page fitting.""" + global _FS + _FS = 1.9 + try: + fig, axes = plt.subplots(4, 1, figsize=(13.0, 15.0)) + for ax, kind in zip(axes, ["doorbell", "hmq", "rdma", "ipcq"]): + _draw_flow_case(ax, kind) + fig.suptitle( + "Per-send architecture = $\\Sigma$ control overhead + " + "data-path DMA + receiver wake", + fontsize=14.5 * _FS, fontweight="bold", y=0.997) + _flow_legend(fig, leg_y=0.010) + fig.tight_layout(rect=(0, 0.06, 1, 0.97)) + out = _OUT_DIR / "ipcq_alternatives_architecture_stacked.png" + fig.savefig(out, dpi=150, bbox_inches="tight") + plt.close(fig) + finally: + _FS = 1.0 return out diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture.png index a9b4df4..0972747 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_flow.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_flow.png index da16214..c14cf0e 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_flow.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_flow.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_stacked.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_stacked.png index 3335a74..9e52e57 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_stacked.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_architecture_stacked.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_control_data_overlay.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_control_data_overlay.png index 3424ca8..5576a86 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_control_data_overlay.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_control_data_overlay.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_decision_matrix.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_decision_matrix.png index 048c2f8..c65b91b 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_decision_matrix.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_decision_matrix.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_latency.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_latency.png index 6974eb1..43ca09b 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_latency.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_latency.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_opcounts.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_opcounts.png index 32810a3..623e1f8 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_opcounts.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_opcounts.png differ diff --git a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_sequence.png b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_sequence.png index a288208..d521b10 100644 Binary files a/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_sequence.png and b/src/kernbench/benches/1H_milestone_output/IPCQ/ipcq_alternatives_sequence.png differ