Skip to content

GH-217: CC default rules + tiebreak, sparse rows and -cc-roworder=auto (Tier 1 floor: PI decision) - #220

Merged
guluchen merged 7 commits into
mainfrom
experiment/gh-217-cc-default-flip
Nov 4, 2026
Merged

guluchen merged 7 commits into
mainfrom
experiment/gh-217-cc-default-flip

Conversation

@guluchen

@guluchen guluchen commented Nov 4, 2026 •

Copy link
Copy Markdown
Owner

Closes #217 once merged (hub #15). Not merged by the agent: the Tier 1 start-up floor is outside the rules and needs the PI's decision (below).

Change

CC engine defaults (no search code changed):

  • rules excl,pack,orbf,parity,leaf,overlap,charge -> excl,pack,orbf,parity,leaf,overlap,charge,tiebreak,sparse,sparseov,sparsemrv (candidate A);
  • row order -cc-roworder=index -> -cc-roworder=auto.

The previous default stays available: -cc-rules=excl,pack,orbf,parity,leaf,overlap,charge -cc-roworder=index (byte-identical to main). README, -h, MODIFICATIONS and the tests are updated; the -cc-trace header names auto for the auto row order. The MaxSAT default path is unchanged.

Credits as for the components: Qubitserf 04b9349 (S. Cercelescu, MIT) for the first(g) tie-break, reversed-BFS row order and redundant pair-XOR checks; Puchert and Tillmann.

Tier 0

  • make test-cc: PASS. make test-cc-flags: 551 checks, 0 failed.
  • Identity vs main 02879a9 on tier0+tier1 (15 codes): every CC configuration with the old-default flags is IDENTICAL. MaxSAT with -ub-pre=off is IDENTICAL 30/30; with the default -ub-pre=on, 3 of 30 runs differ only in which half's finder converges first (timing; main-vs-main differs the same way).
  • 253 answer runs (tier0-3 x 11 candidate variants): every answer equals its stem. The GF(2) witness check passed: 152 witnesses, 0 bad.

Tiers 1-4

5 seeds; main, A and B ran concurrently on pinned yfclab2 cores. Ratio = median(arm) / median(main).

Tier A geomean A worst cell B geomean B worst cell
1 0.969 0.974 (LP_442) 0.918 0.949
2 0.727 1.013 (GB_144_12_12) 0.869 1.000
3 0.769 1.023 (LP_714) 0.778 1.046
4 0.081 0.081 (TN_250: 60.9 s -> 4.9 s) 0.444 0.444

Tier 1 start-up floor (PI decision). Tier 1 cells take 24-39 ms. I also ran a quiet interleaved panel: 9 repetitions x 5 seeds, arms round-robin on one core. There the Tier 1 geomean is A 1.031 (LP_340 0.988, LP_442 1.076) and B 1.035. LP_442 costs about 2.5 ms more in both A and B, so the cost comes from -cc-roworder=auto (it builds the second half search), not from the sparse tokens. The tier0 codes measured the same way give a geomean of 1.01 (max 1.050).

Tier 5

6 h, default seed, main and A concurrent; all 27 codes. Every code that main's CC default solves:

Code main A A/main interleaved re-run
LP_1020 0.23 s 0.26 s 1.16 1.044
LP_1054 1.77 s 2.08 s 1.17 1.119
LP_1122 4.81 s 5.63 s 1.17 1.137
LP_1428 127.4 s 130.4 s 1.02
LP_1768 16.9 s 17.7 s 1.04 1.021
LP_2610 2.96 s 3.39 s 1.14 1.078
BB_360 181 s 31 s 0.17
TN_180 142 s 145 s 1.02
TN_216 466 s 393 s 0.84
TN_252 8490 s 8581 s 1.01

No solved code is more than 1.2x slower. On the LP codes the extra time is the auto probe: one aborted bfs + mrv rerun of the first refuted level that takes at least 0.1 s.

Codes main does not solve:

  • BB_756, BB_864 and BB_1080 reach lb 30 about 7-10x sooner, and A reaches lb 32 (main reaches 30).
  • On TN_496, A reaches lb 27 (main reaches 23).
  • On the other TN codes, lb times are within 2 %, except TN_684, where A is 0.74x.

Lower bounds above the stem names, reached by both arms:

  • TN_468 23;
  • TN_612 24;
  • TN_648_14 21;
  • TN_684 22.

Relabelled reproductions are running; the stems will be renamed in a separate PR.

Untiered codes are not judged here. A's worst cell is 1.18x (concurrent) and 1.051 (interleaved). A is much faster on HGP_1105 (187 s -> 3.7 s) and COLOR_331 (121 s -> 15 s).

Evidence: optimization/experiments/GH-217/ (runners, S0/, T5/, analysis.md).

Update 2026-11-05: merged main 972b28c (#219 erasure opt-in, #221 re-tier) and fecee8c (#223 renames)

Tier 0 on the merged binary (b7b4126):

  • make test-cc-flags: 572/572.
  • Identity vs main 972b28c on the new tier0+tier1 (35 codes): every CC configuration with the old-default flags is IDENTICAL. MaxSAT -ub-pre=off is IDENTICAL 70/70; with the default -ub-pre=on, 1 of 70 differs by finder timing only.
  • Answers: 550 runs on new tier0-3 x 11 variants, all equal to their stems; 290 GF(2) witnesses OK.
  • make test-cc: see the issue comment.

Re-judged under the new tier layout: 5 seeds, merged candidate vs main 972b28c, concurrent on pinned cores with idle SMT siblings.

Tier A geomean A worst cell B geomean B worst cell
1 (9 codes) 0.855 1.111 (HGP_265) 0.873 1.269 (BB_186)
2 (8) 0.648 1.222 (LP_544, a 36 ms cell) 0.745 1.194
3 (7) 0.573 1.024 (LP_714) 0.743 1.224 (HGP_2866)

Quiet interleaved Tier 1 (new layout, merged binaries, 9 repetitions x 5 seeds on one core): A geomean 0.898. LP_442 is 1.467, because the cell's wall time is quantized: the parent polls the CC child every 10 ms (usleep(10000) in src/core/distqldpc.cc). LP_442 runs land at about 23 ms or about 33 ms. A's extra user time (+9 %) pushes every A run into the 33 ms bucket, while main lands mostly at 23 ms. This one start-up-floor cell is the only item outside the rules, so the PR stays open for the PI.

Tier 5:

  • New tier5 members: COLOR_331 (main 121 s -> A 15 s), HGP_1105 (70 s -> 4 s); COLOR_1027 and COLOR_2791 are unsolved by both, and A reaches higher lbs.
  • Interleaved re-run of the short LP cells with the merged binaries: LP_1054 1.102, LP_2610 1.101, LP_1122 1.112, LP_1768 1.009. All are within 1.2x.

TN lb shortfall vs stems (coordinator question):

Renames done (#223 in DistQLDPC, guluchen/QDistSAT#17), each reproduced with a relabelled run:

  • TN_468_4_23to29;
  • TN_612_2_24to40;
  • TN_648_14_21to28;
  • TN_684_2_22to29.

🤖 Generated with Claude Code

yfc and others added 3 commits November 4, 2026 00:30
…-roworder=auto

The CC engine defaults become excl,pack,orbf,parity,leaf,overlap,charge,tiebreak,
sparse,sparseov,sparsemrv with -cc-roworder=auto. The previous default stays
available as -cc-rules=excl,pack,orbf,parity,leaf,overlap,charge -cc-roworder=index.
README, -h, MODIFICATIONS and tests updated; trace header names auto.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Tier 0 (tests, identity vs main with the old-default flags, answers, GF(2)
witnesses), 5-seed Tier 1-4 panel (main / A / B), interleaved floor
re-measurements, Tier 5 6 h runs (main / A), untiered codes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

# Conflicts:
#	MODIFICATIONS.md
#	README.md
#	src/cc/cc_half.h
#	src/core/distqldpc.cc
#	tests/test_cc_flags.sh
yfc and others added 2 commits November 5, 2026 01:18
…erleaved Tier 1 / Tier 5 LP, lb-auto and speed checks, lb reproductions)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@guluchen

guluchen commented Nov 4, 2026

Copy link
Copy Markdown
Owner Author

Tier 1 re-check on top of the GH-224 fix (#224, PR #226, main 82ca41d)

#226 removes the 10 ms polling floor in the parent's wait loop (poll() on a SIGCHLD self-pipe instead of usleep(10000)).

Setup

Tier 1 (9 codes): geomean 0.870, worst cell 1.082 (LP_442), no cell > 1.25.

Code main wall (s) A wall (s) A/main A/main CPU
AMC_438_6_17 0.0746 0.0595 0.798 0.769
BB_186_10_14 0.0379 0.0332 0.875 0.988
BB_288_12_18 0.3464 0.2628 0.759 0.760
COLOR_127_1_13 0.0672 0.0332 0.494 0.450
GB_144_12_12 0.0744 0.0721 0.969 0.995
HGP_265_1_12 0.0331 0.0343 1.037 0.978
HGP_610_64_6 0.1482 0.1437 0.970 1.000
LP_340_56_8 0.0244 0.0252 1.033 1.058
LP_442_68_10 0.0271 0.0293 1.082 1.064

LP_442

  • The 1.467 in the earlier quiet panel was the 10 ms bucket.
  • With the fix, both arms' wall times are contiguous: main 24-37 ms, A 25-39 ms, 1 ms bins.
  • What remains is A's real extra CPU, about 6 % (the -cc-roworder=auto set-up noted earlier). It gives a 1.08x wall ratio.

Tier 0 (26 codes, information only): geomean 0.991, worst cell 1.186 (BB_144_12_12, 15.6 ms vs 18.5 ms), no cell > 1.25.

Correctness: 3150 runs, all rc 0, all answers equal to the stem. stdout differs only in timing-dependent line order on GB_144_12_12, and main varies the same way across repetitions.

The PR is not merged. The merge decision stays with the PI.

@guluchen
guluchen merged commit 1239e9a into main Nov 4, 2026
3 checks passed
@guluchen

guluchen commented Nov 4, 2026

Copy link
Copy Markdown
Owner Author

Merged under the standing progress rules:

🤖 Generated with Claude Code

guluchen pushed a commit that referenced this pull request Nov 4, 2026
…H-225

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Mac agent] CC engine default flip: tiebreak + sparse rows + -cc-roworder=auto

1 participant