Skip to content

[Mac agent] CC engine: per-half probe between tiebreak and MRV + reversed-BFS row order (-cc-roworder=auto) #206

Open

Description

@guluchen

Hub: #15. Follow-up of #183 (PR #204, stacked on #162 / PR #180; none merged).

Hypothesis

#183 showed that MRV branching plus the reversed-BFS row order (-cc-rules=...,tiebreak,mrv -cc-roworder=bfs) depends on the code family and on the half:

  • large BB codes and TN_496 search 2.5-3.7x faster at equal levels;
  • the Tier 5 LP codes are 1.2-3x slower;
  • most row-weight-9 TN codes are 1.2-1.8x slower, and on TN_180 the effect differs between the X and Z halves.

A per-half probe should keep the gains and remove the regressions.

Change

New value -cc-roworder=auto. Each searched half starts with configuration A (input row order, the given rules without mrv; with the tiebreak rules this is the #162 configuration).

At the first level of that half whose search takes at least -cc-probe=S seconds (default 1) and ends EMPTY:

  • the same level is run again with configuration B (reversed-BFS row order, the given rules with mrv);
  • the re-run is aborted through the existing poll hook once it uses A's search time;
  • if B finishes first, B searches every later level of that half, otherwise A does.

The probe happens once per half and costs at most one extra level of the size that triggered it.

Soundness

Plan

  • Tests: driver oracle with forced switch / stay / time-based probes, with and without the finder; mutant: an aborted probe taken as a refuted level.
  • Tier 0-4 on 5-seed medians, vs main and vs tb.
  • Tier 5 (6 h): LP_1428 / 1768 / 2610 and the other LP codes, TN_180 / 216 / 252 / 288, BB_360 / 756 / 864 / 1080.
  • yfclab2 cores 33-39 and 41-43.

Activity

  1. added 5 commits that reference this issue on Oct 29, 2026
  2. guluchen commented on Oct 30, 2026

    @guluchen
    OwnerAuthor

    Result: PR #215, stacked on #204; do not merge before the PI says merge.

    • Tier 0: PASS (1,800 auto driver runs against enumeration, 0 bad; mutant 21 caught; identity; GF(2) witnesses; flags).
    • Tier 1-4 panel: geomean vs main 1.001 (repeated, process floor) / 0.889 / 0.674 / 0.399; vs tb 0.997 / 0.902 / 0.666 / 0.428. No cell above 1.25, apart from the process-floor single shots in Tier 1.
    • Tier 5 confirmation (final binary, same-session references):
      • BB_756, BB_864, BB_1080 and TN_496 are within 0.6-2.3 % of tb+mrv+bfs (lb 32 / 32 / 32 / 24).
      • TN_252, TN_288 and TN_180 equal tb (TN_288 lb 22, TN_252 d=21 at 0.99x); TN_216 is 0.64x tb.
      • The LP codes equal tb's search plus a 0.2-0.5 s probe.
    • First design (one probe at 1 s) failed Tier 3 and was replaced. Re-probes at 30x never changed a decision and cost up to one level each, so the default is one probe per half.
  3. added 3 commits that reference this issue on Oct 30, 2026
  4. guluchen commented on Oct 30, 2026

    @guluchen
    OwnerAuthor

    Merged into main at 30ce62a as opt-in (PI-approved order 2026-10-31).

    -cc-roworder still defaults to index, and the CC default rule set is unchanged (excl,pack,orbf,parity,leaf,overlap,charge).

    Retarget and conflicts

    Checks (yfclab2, cores 5-23, 4 GB cap)

    • make test-cc PASS:
    • make test-cc-flags PASS (514 checks).
    • Tier 0+1 answers equal the stems, 15/15 in each of three configurations: the CC default, -cc-roworder=auto, and -cc-rules=excl,pack,orbf,parity,leaf,overlap,charge,tiebreak -cc-roworder=auto.
    • With the flag off, the tier 0+1 -v logs are byte-identical to main 7d91569:
      • -ub-search=off, -cc-stats and -cc-aut=off: 45/45.
      • CC default: 14/15. The remaining one differs only in a time-sliced ub-search finder line.
    • GitHub CI passed.
  5. added 3 commits that reference this issue on Oct 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions