Classic height / width / block sharding as four steps from
TensorSpec + TensorLayout, then
Buffer / BufferDistributionSpec for shard→core.
Default demo: logical [2,3,5] TILE 2×2 → padded
[2,4,6] → physical [8,6] → block shards on a
2×2 core grid. Step 1 is always the original logical input.
2,3,5 or 64,96Alignment{} → create_default_alignment (tile or RM row/shard width).