[Bug] Inconsistent description of GPU/CPU crossover in Batch Size Sweep section

Author: lynnyulinlin-debugCreated Sep 9, 2026Updated Sep 16, 2026
Labelstype: bugarea: book

Area

Book — Volume I

Location

https://harvard-edge.github.io/cs249r_book_dev/mlsysim/tutorials/04_starving_the_gpu.html , 05

The Problem

The tutorial states:

"Watch the crossover: at small batch sizes the GPU is the bottleneck (100% utilization). As batch size grows, CPU preprocessing time grows linearly while GPU step time grows sub-linearly. Eventually Wall 9 becomes the binding constraint and GPU utilization drops."

However, the table shows:

Batch GPU Step CPU Xform Binding GPU Util
32 2.20 ms 8.00 ms Transformation 27.5%
64 3.88 ms 16.00 ms Transformation 24.2%
... ... ... ... ...

From batch_size=32 to 1024:

  • Binding is always Transformation (CPU bottleneck)
  • GPU utilization stays around 21-27% (never approaches 100%)

The Issue

The description describes a crossover scenario where the bottleneck shifts from GPU to CPU as batch size increases. But the data shows no crossover at all — CPU is the bottleneck across the entire sweep range. The "small batch sizes where GPU is the bottleneck" are simply not present in the table.

Suggested Fix

Either:

  1. Update the text to accurately describe the data (e.g., "At all batch sizes shown, CPU transformation is the binding constraint...")
  2. Extend the sweep to include smaller batch sizes (e.g., 1, 2, 4, 8, 16) where the GPU→CPU crossover actually occurs, and update the table accordingly

Expected Behavior

No response

Environment (TinyTorch bugs only)

No response

Source: harvard-edge/cs249r_book