diff --git a/docs/diagrams/cube_view.svg b/docs/diagrams/cube_view.svg index 051a1ac..98326fa 100644 --- a/docs/diagrams/cube_view.svg +++ b/docs/diagrams/cube_view.svg @@ -109,8 +109,8 @@ 2.0mm 3.0mm - - + + @@ -120,8 +120,8 @@ - - + + @@ -143,11 +143,11 @@ - - + + - - + + @@ -156,15 +156,15 @@ - - + + - - + + @@ -182,15 +182,15 @@ - - + + - - + + @@ -310,20 +310,20 @@ R5C4 R5C5 - - PE0 - - PE1 - - PE2 - - PE3 - - PE4 - - PE5 - - PE6 - - PE7 + + PE0 + + PE1 + + PE2 + + PE3 + + PE4 + + PE5 + + PE6 + + PE7 \ No newline at end of file diff --git a/src/kernbench/topology/builder.py b/src/kernbench/topology/builder.py index 3b2297e..a6173bc 100644 --- a/src/kernbench/topology/builder.py +++ b/src/kernbench/topology/builder.py @@ -946,13 +946,17 @@ def _build_cube_view(spec: dict) -> ViewGraph: ) if mesh_data else {} pe_idx = 0 + pe_offset_y = 1.2 # mm offset to avoid overlapping router node for corner in corners: + is_top = corner in ("NW", "NE") for ci in range(pe_per_corner): pid = f"pe{pe_idx}" px, py = corner_pos[corner][ci] + # Offset PE above (top) or below (bottom) its router + py_view = py - pe_offset_y if is_top else py + pe_offset_y nodes[pid] = Node( id=pid, kind="pe", impl="", - attrs={"corner": corner}, pos_mm=(px, py), + attrs={"corner": corner}, pos_mm=(px, py_view), label=f"PE{pe_idx}", ) pe_idx += 1 diff --git a/src/kernbench/topology/visualizer.py b/src/kernbench/topology/visualizer.py index c02b18f..92149af 100644 --- a/src/kernbench/topology/visualizer.py +++ b/src/kernbench/topology/visualizer.py @@ -157,7 +157,7 @@ def _compute_node_sizes( w_mm, h_mm = _KIND_SIZE.get(node.kind, (_DEFAULT_NODE_W, _DEFAULT_NODE_H)) # For cube view, use smaller PE nodes if view.name == "cube" and node.kind == "pe": - w_mm, h_mm = 1.8, 1.0 + w_mm, h_mm = 1.4, 0.7 if view.name == "pe": w_mm, h_mm = 2.5, 1.4 sizes[nid] = (w_mm * scale, h_mm * scale)