From 2587b9ded9073396c244063a01cb7d3c89f6e8d6 Mon Sep 17 00:00:00 2001 From: yfc Date: Thu, 5 Nov 2026 02:05:56 +0800 Subject: [PATCH 1/3] GH-224: wait for the solver child in poll() on a SIGCHLD self-pipe instead of usleep(10000) The parent noticed the child's exit only at the next 10 ms tick, which quantized the wall time of fast runs into 10 ms buckets (LP_442 -engine=cc at ~23 or ~33 ms). The parent now sleeps in poll() on the bounds pipe and a SIGCHLD self-pipe, with the remaining -cpu-lim time (capped at 100 ms) as timeout. The deadline/SIGKILL path, the child code and all output are unchanged. Co-Authored-By: Claude Opus 5.5 --- src/core/distqldpc.cc | 95 ++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 90 insertions(+), 5 deletions(-) diff --git a/src/core/distqldpc.cc b/src/core/distqldpc.cc index 3282db79..10167e13 100644 --- a/src/core/distqldpc.cc +++ b/src/core/distqldpc.cc @@ -42,6 +42,7 @@ #include #include #include +#include /* GH-224 */ #include "utils/System.h" #include "SimpSolver.h" @@ -2200,17 +2201,18 @@ static void apply_pipe_line(BoundsBook& b, const char* line, ProgressState* prog } } -static void drain_bounds_pipe(int pipe_r, BoundsBook& b, std::string& carry, ProgressState* prog) { +/* Returns true once the pipe has reached end of file (every write end closed). */ +static bool drain_bounds_pipe(int pipe_r, BoundsBook& b, std::string& carry, ProgressState* prog) { char chunk[512]; for (;;) { ssize_t n = read(pipe_r, chunk, sizeof(chunk)); if (n < 0) { if (errno == EINTR) continue; - break; + return false; } if (n == 0) - break; + return true; carry.append(chunk, chunk + n); size_t pos; while ((pos = carry.find('\n')) != std::string::npos) { @@ -2221,6 +2223,31 @@ static void drain_bounds_pipe(int pipe_r, BoundsBook& b, std::string& carry, Pro } } +/* GH-224: SIGCHLD self-pipe. While the parent waits for the solver child, SIGCHLD writes one byte here so that + * the parent's poll() returns as soon as the child exits (the old loop slept 10 ms per check, which quantized the + * wall time of fast runs into 10 ms buckets). */ +static volatile int g_sigchld_wake_w = -1; + +static void sigchld_wake(int) { + int saved = errno; + int fd = g_sigchld_wake_w; + if (fd >= 0) { + char c = 0; + ssize_t r = write(fd, &c, 1); /* non-blocking; a full pipe already guarantees a wake-up */ + (void)r; + } + errno = saved; +} + +static void set_nonblock_cloexec(int fd) { + int fl = fcntl(fd, F_GETFL, 0); + if (fl >= 0) + fcntl(fd, F_SETFL, fl | O_NONBLOCK); + int fdfl = fcntl(fd, F_GETFD, 0); + if (fdfl >= 0) + fcntl(fd, F_SETFD, fdfl | FD_CLOEXEC); +} + static double wall_seconds() { struct timeval tv; gettimeofday(&tv, NULL); @@ -2293,8 +2320,34 @@ static int solve_in_child_fork( timed_out = false; double deadline = (cpu_lim != INT32_MAX) ? wall_seconds() + (double)cpu_lim : -1.0; + /* GH-224: wait in poll() on the bounds pipe and on a SIGCHLD self-pipe instead of usleep(10000). The handler is + * installed only in the parent and after fork(), so the solver child is unaffected; a child that exits before + * the handler is in place is caught by the waitpid(WNOHANG) that precedes every poll(). The poll timeout is the + * remaining -cpu-lim time, capped at 100 ms as a safety net (1 ms if the self-pipe cannot be created). */ + int wake[2] = {-1, -1}; + struct sigaction sa_old; + bool have_wake = (pipe(wake) == 0); + if (have_wake) { + set_nonblock_cloexec(wake[0]); + set_nonblock_cloexec(wake[1]); + g_sigchld_wake_w = wake[1]; + struct sigaction sa; + memset(&sa, 0, sizeof(sa)); + sa.sa_handler = sigchld_wake; + sigemptyset(&sa.sa_mask); + sa.sa_flags = SA_RESTART | SA_NOCLDSTOP; + if (sigaction(SIGCHLD, &sa, &sa_old) != 0) { + g_sigchld_wake_w = -1; + close(wake[0]); + close(wake[1]); + have_wake = false; + } + } + bool pipe_eof = false; + for (;;) { - drain_bounds_pipe(pipefd[0], book, carry, &prog); + if (!pipe_eof) + pipe_eof = drain_bounds_pipe(pipefd[0], book, carry, &prog); int status = 0; pid_t w = waitpid(pid, &status, WNOHANG); @@ -2316,9 +2369,41 @@ static int solve_in_child_fork( apply_pipe_line(book, carry.c_str(), &prog); break; } - usleep(10000); + + int timeout_ms = have_wake ? 100 : 1; + if (deadline >= 0.0) { + double left_ms = (deadline - wall_seconds()) * 1000.0; + if (left_ms + 1.0 < (double)timeout_ms) + timeout_ms = left_ms > 0.0 ? (int)left_ms + 1 : 0; + } + struct pollfd pfd[2]; + int nfd = 0; + if (!pipe_eof) { + pfd[nfd].fd = pipefd[0]; + pfd[nfd].events = POLLIN; + pfd[nfd].revents = 0; + nfd++; + } + if (have_wake) { + pfd[nfd].fd = wake[0]; + pfd[nfd].events = POLLIN; + pfd[nfd].revents = 0; + nfd++; + } + (void)poll(pfd, (nfds_t)nfd, timeout_ms); /* EINTR (SIGCHLD) is fine: the loop re-checks everything */ + if (have_wake) { + char sink[64]; + while (read(wake[0], sink, sizeof(sink)) > 0) { + } + } } + if (have_wake) { + sigaction(SIGCHLD, &sa_old, NULL); + g_sigchld_wake_w = -1; + close(wake[0]); + close(wake[1]); + } close(pipefd[0]); out = book; return out.distance; From eb99795de8c366276952a520d2a4e961ce607188 Mon Sep 17 00:00:00 2001 From: yfc Date: Thu, 5 Nov 2026 05:33:39 +0800 Subject: [PATCH 2/3] GH-224: evidence (Tier 0, interleaved Tier 0/1 panel, Tier 2/3 spot check, behaviour checks) Co-Authored-By: Claude Opus 5.5 --- optimization/experiments/GH-224/analysis.md | 66 ++ .../GH-224/raw/behaviour/behaviour.txt | 12 + .../experiments/GH-224/raw/spot_analysis.md | 44 ++ .../experiments/GH-224/raw/t01/analysis.md | 140 ++++ .../experiments/GH-224/raw/t01/config.json | 50 ++ .../GH-224/raw/t01/results.jsonl.gz | Bin 0 -> 204366 bytes .../experiments/GH-224/raw/t01/skips.log | 4 + .../GH-224/raw/t0tests/mac_test_cc.txt | 62 ++ .../GH-224/raw/t0tests/mac_test_flags.txt | 5 + .../GH-224/raw/t0tests/partition_new.txt | 672 ++++++++++++++++++ .../GH-224/raw/t0tests/smoke_new.txt | 2 + .../GH-224/raw/t0tests/test_cc_new.txt | 86 +++ .../GH-224/raw/t0tests/test_cc_old.txt | 86 +++ .../GH-224/raw/t0tests/test_flags_new.txt | 4 + .../experiments/GH-224/raw/t2spot/config.json | 38 + .../GH-224/raw/t2spot/results.jsonl.gz | Bin 0 -> 5103 bytes .../experiments/GH-224/raw/t2spot/skips.log | 1 + .../experiments/GH-224/raw/t3spot/config.json | 32 + .../GH-224/raw/t3spot/results.jsonl.gz | Bin 0 -> 1887 bytes .../experiments/GH-224/runner/analyze.py | 69 ++ .../experiments/GH-224/runner/arms_gh224.json | 2 + .../experiments/GH-224/runner/behaviour.sh | 36 + .../experiments/GH-224/runner/interleave.py | 108 +++ 23 files changed, 1519 insertions(+) create mode 100644 optimization/experiments/GH-224/analysis.md create mode 100644 optimization/experiments/GH-224/raw/behaviour/behaviour.txt create mode 100644 optimization/experiments/GH-224/raw/spot_analysis.md create mode 100644 optimization/experiments/GH-224/raw/t01/analysis.md create mode 100644 optimization/experiments/GH-224/raw/t01/config.json create mode 100644 optimization/experiments/GH-224/raw/t01/results.jsonl.gz create mode 100644 optimization/experiments/GH-224/raw/t01/skips.log create mode 100644 optimization/experiments/GH-224/raw/t0tests/mac_test_cc.txt create mode 100644 optimization/experiments/GH-224/raw/t0tests/mac_test_flags.txt create mode 100644 optimization/experiments/GH-224/raw/t0tests/partition_new.txt create mode 100644 optimization/experiments/GH-224/raw/t0tests/smoke_new.txt create mode 100644 optimization/experiments/GH-224/raw/t0tests/test_cc_new.txt create mode 100644 optimization/experiments/GH-224/raw/t0tests/test_cc_old.txt create mode 100644 optimization/experiments/GH-224/raw/t0tests/test_flags_new.txt create mode 100644 optimization/experiments/GH-224/raw/t2spot/config.json create mode 100644 optimization/experiments/GH-224/raw/t2spot/results.jsonl.gz create mode 100644 optimization/experiments/GH-224/raw/t2spot/skips.log create mode 100644 optimization/experiments/GH-224/raw/t3spot/config.json create mode 100644 optimization/experiments/GH-224/raw/t3spot/results.jsonl.gz create mode 100644 optimization/experiments/GH-224/runner/analyze.py create mode 100644 optimization/experiments/GH-224/runner/arms_gh224.json create mode 100644 optimization/experiments/GH-224/runner/behaviour.sh create mode 100644 optimization/experiments/GH-224/runner/interleave.py diff --git a/optimization/experiments/GH-224/analysis.md b/optimization/experiments/GH-224/analysis.md new file mode 100644 index 00000000..0b2d665d --- /dev/null +++ b/optimization/experiments/GH-224/analysis.md @@ -0,0 +1,66 @@ +# GH-224: parent wait loop without the 10 ms polling floor + +Change: `solve_in_child_fork` (`src/core/distqldpc.cc`) used to wait for the solver child with `usleep(10000)` between checks. It now waits in `poll()` on the bounds pipe and on a SIGCHLD self-pipe. The timeout is the remaining `-cpu-lim` time, capped at 100 ms. The solver child is unchanged. + +Binaries (yfclab2, frozen): old = main fecee8c9 (`frozen/server-gh224-main-fecee8c`), new = 2587b9de (`frozen/server-gh224-2587b9d`). + +## Tier 0 +- `make test-cc`: PASS on yfclab2 (`raw/t0tests/test_cc_new.txt`) and on the Mac (`raw/t0tests/mac_test_cc.txt`). The output equals main's except one timing-dependent counter: partE "levels abandoned" is 37 on main and 38 on new. This test never calls the changed function. +- `make test-cc-flags`: 566 checks, 0 failed (server and Mac). +- `scripts/smoke_test.sh` and `scripts/test_partition_soft_literals.py`: pass. +- Behaviour (`raw/behaviour/behaviour.txt`), old vs new, with identical output lines: + - `-cpu-lim=3` timeout, MaxSAT and CC: TIMEOUT at 3.03 s with the same bounds. + - Tighter `prlimit --as` (200 MB MaxSAT, 60 MB CC): the same UNKNOWN. + - Child killed from outside with SIGKILL: UNKNOWN within 6-8 ms. + - Child SIGSTOP/SIGCONT: finishes normally. +- Answers: 9450 + 216 panel runs, all rc 0 and all equal to the stem distance. + +## Tier 0 + Tier 1 panel (`raw/t01/`) +Setup: +- Layout of main fecee8c9: 26 tier0 and 9 tier1 codes. +- Modes: MaxSAT default (mto), MaxSAT `-no-card`, CC default. +- Seeds 0-4, 9 repetitions. +- old and new run interleaved on one pinned core per (code, mode, seed), with rotating order; cores 72-101 only, each with an idle SMT sibling. +- Cell = median over repetitions, then median over seeds. Ratio = new / old. + +| Tier | Mode | cells | geomean | worst cell | cells > 1.25 | +|---|---|---:|---:|---|---:| +| 0 | cc | 26 | 0.666 | 0.964 | 0 | +| 0 | mto | 26 | 0.849 | 1.032 | 0 | +| 0 | nocard | 26 | 0.853 | 1.086 | 0 | +| 1 | cc | 9 | 0.879 | 0.995 | 0 | +| 1 | mto | 9 | 0.978 | 0.987 | 0 | +| 1 | nocard | 9 | 0.981 | 0.993 | 0 | + +**Logs.** stdout is byte-identical in every run of both arms for 522 of 525 units. The other 3 (all GB_144_12_12 CC) differ only in the order of a `c d_ub` line relative to the level lines. That order is timing-dependent: main's own runs vary the same way. + +**Floor.** Wait slack = wall - user - sys, over runs shorter than 0.2 s (about 3300 per arm): + +| Arm | median | p90 | +|---|---:|---:| +| old | 11.9 ms | 16.2 ms | +| new | 4.8 ms | 7.8 ms | + +Wall times of the CC cells, in 1 ms bins: +- old LP_442 splits into two groups, 27-31 ms and 34-44 ms; +- new LP_442 is one contiguous group, 25-33 ms; +- old BB_186 is spread over 28-60 ms; +- new BB_186 is 21-30 ms. + +The MaxSAT cells of 1-10 s also run about 2 % faster in CPU time: the parent no longer wakes up 100 times a second on the solver's core. + +## Tier 2/3 spot check (`raw/spot_analysis.md`) +Tiers 2-5 are unaffected by construction: the solver child and the deadline path are unchanged, and the parent wakes up less often. This was spot-checked, not run in full; there was no Tier 5 run. + +Setup: 3 seeds x 3 repetitions, interleaved. +- Tier 2: LP_544, TN_108 and BB_144_14_14, in all three modes. +- Tier 3: TN_250, LP_1020 and HGP_481, CC only. + +| Tier | geomean | worst cell | +|---|---:|---| +| 2 | 0.952 | 1.001 (TN_108 CC) | +| 3 | 0.959 | 1.002 (TN_250 CC, 50.6 s) | + +Every answer is correct. The log differences are the same timing-dependent line-order cases. + +Runners: `runner/interleave.py`, `runner/analyze.py` and `runner/behaviour.sh`. diff --git a/optimization/experiments/GH-224/raw/behaviour/behaviour.txt b/optimization/experiments/GH-224/raw/behaviour/behaviour.txt new file mode 100644 index 00000000..6780e575 --- /dev/null +++ b/optimization/experiments/GH-224/raw/behaviour/behaviour.txt @@ -0,0 +1,12 @@ +timeout-maxsat old rc=1 wall=3.031 c d_ub: 15|c d_lb: 2|c d_lb: 3|c d_lb: 5|c d_lb: 5|c d_ub: 15|c status: TIMEOUT (child killed after -cpu-lim)|c d : UNKNOWN|s UNKNOWN| +timeout-maxsat new rc=1 wall=3.025 c d_ub: 15|c d_lb: 2|c d_lb: 3|c d_lb: 5|c d_lb: 5|c d_ub: 15|c status: TIMEOUT (child killed after -cpu-lim)|c d : UNKNOWN|s UNKNOWN| +timeout-cc old rc=1 wall=3.031 c d_ub: 52|c d_lb: 2|c d_ub: 40|c d_lb: 4|c d_lb: 6|c d_lb: 8|c d_lb: 10|c d_lb: 12|c d_lb: 14|c d_lb: 16|c d_lb: 18|c d_lb: 20|c d_lb: 20|c d_ub: 40|c status: TIMEOUT (child killed after -cpu-lim)|c d : UNKNOWN|s UNKNOWN| +timeout-cc new rc=1 wall=3.031 c d_ub: 52|c d_lb: 2|c d_ub: 40|c d_lb: 4|c d_lb: 6|c d_lb: 8|c d_lb: 10|c d_lb: 12|c d_lb: 14|c d_lb: 16|c d_lb: 18|c d_lb: 20|c d_lb: 20|c d_ub: 40|c status: TIMEOUT (child killed after -cpu-lim)|c d : UNKNOWN|s UNKNOWN| +memcap-200M old rc=1 wall=2.913 c d_lb: -|c d_ub: -|c status: UNKNOWN|c d : UNKNOWN|s UNKNOWN| +memcap-200M new rc=1 wall=3.060 c d_lb: -|c d_ub: -|c status: UNKNOWN|c d : UNKNOWN|s UNKNOWN| +memcap-60M-cc old rc=1 wall=1.383 c d_ub: 50|c d_lb: 2|c d_lb: 2|c d_ub: 50|c status: UNKNOWN|c d : UNKNOWN|s UNKNOWN| +memcap-60M-cc new rc=1 wall=1.281 c d_ub: 50|c d_lb: 2|c d_lb: 2|c d_ub: 50|c status: UNKNOWN|c d : UNKNOWN|s UNKNOWN| +child-sigkill old rc=1 after-kill=0.008 c status: UNKNOWN|s UNKNOWN| +child-sigkill new rc=1 after-kill=0.006 c status: UNKNOWN|s UNKNOWN| +child-stop-cont old rc=0 wall=7.373 o 10| +child-stop-cont new rc=0 wall=7.220 o 10| diff --git a/optimization/experiments/GH-224/raw/spot_analysis.md b/optimization/experiments/GH-224/raw/spot_analysis.md new file mode 100644 index 00000000..7437c112 --- /dev/null +++ b/optimization/experiments/GH-224/raw/spot_analysis.md @@ -0,0 +1,44 @@ +## Cells (new vs old; median over reps, then over seeds; wall in s) + +| Tier | Mode | Code | seeds | old wall | new wall | wall ratio | cpu ratio | +|---|---|---|---:|---:|---:|---:|---:| +| tier2 | cc | BB_144_14_14 | 3 | 0.6231 | 0.6204 | 0.996 | 1.006 | +| tier2 | cc | LP_544_80_12 | 3 | 0.0438 | 0.0333 | 0.759 | 0.934 | +| tier2 | cc | TN_108_2_12 | 3 | 1.8107 | 1.8118 | 1.001 | 1.001 | +| tier2 | mto | BB_144_14_14 | 3 | 13.3797 | 13.1300 | 0.981 | 0.977 | +| tier2 | mto | LP_544_80_12 | 3 | 14.5664 | 14.1177 | 0.969 | 0.968 | +| tier2 | mto | TN_108_2_12 | 3 | 19.8998 | 19.4537 | 0.978 | 0.979 | +| tier2 | nocard | BB_144_14_14 | 3 | 13.1625 | 12.6378 | 0.960 | 0.961 | +| tier2 | nocard | LP_544_80_12 | 3 | 13.9501 | 13.4979 | 0.968 | 0.968 | +| tier2 | nocard | TN_108_2_12 | 3 | 19.9104 | 19.4988 | 0.979 | 0.979 | +| tier3 | cc | HGP_481_1_16 | 3 | 0.1725 | 0.1561 | 0.905 | 0.946 | +| tier3 | cc | LP_1020_136_16 | 3 | 0.2804 | 0.2725 | 0.972 | 0.975 | +| tier3 | cc | TN_250_10_15 | 3 | 50.5596 | 50.6515 | 1.002 | 1.002 | + +## Verdict per tier and mode + +| Tier | Mode | cells | geomean | worst cell | cells > 1.25 | verdict | +|---|---|---:|---:|---|---:|---| +| tier2 | cc | 3 | 0.911 | 1.001 (TN_108_2_12) | 0 | PASS | +| tier2 | mto | 3 | 0.976 | 0.981 (BB_144_14_14) | 0 | PASS | +| tier2 | nocard | 3 | 0.969 | 0.979 (TN_108_2_12) | 0 | PASS | +| tier3 | cc | 3 | 0.959 | 1.002 (TN_250_10_15) | 0 | PASS | +| tier2 | all | 9 | 0.952 | 1.001 | 0 | PASS | +| tier3 | all | 3 | 0.959 | 1.002 | 0 | PASS | + +## Logs + +units with byte-identical stdout in every run of both arms: 34; other units: 2 (of which old itself varies across reps: 1; identical up to line order in every run: 1) +- ('tier3', 'cc', 'LP_1020_136_16', 2): distinct stdouts old 2, new 2, same set: False +- ('tier3', 'cc', 'TN_250_10_15', 0): distinct stdouts old 1, new 2, same set: False + +## Answers + +runs: 216; rc != 0 or answer != stem: 0 [] + +## Wait slack (wall - user - sys) of runs with wall < 0.2 s, in ms + +| Arm | runs | median | p90 | max | +|---|---:|---:|---:|---:| +| old | 20 | 12.27 | 14.79 | 15.59 | +| new | 21 | 3.37 | 4.25 | 4.99 | diff --git a/optimization/experiments/GH-224/raw/t01/analysis.md b/optimization/experiments/GH-224/raw/t01/analysis.md new file mode 100644 index 00000000..8c7a4a0b --- /dev/null +++ b/optimization/experiments/GH-224/raw/t01/analysis.md @@ -0,0 +1,140 @@ +## Cells (new vs old; median over reps, then over seeds; wall in s) + +| Tier | Mode | Code | seeds | old wall | new wall | wall ratio | cpu ratio | +|---|---|---|---:|---:|---:|---:|---:| +| tier0 | cc | AMC_108_6_9 | 5 | 0.0253 | 0.0209 | 0.825 | 1.174 | +| tier0 | cc | AMC_216_6_12 | 5 | 0.0293 | 0.0242 | 0.827 | 0.905 | +| tier0 | cc | AMC_330_6_14 | 5 | 0.0333 | 0.0321 | 0.964 | 0.993 | +| tier0 | cc | BB_108_8_10 | 5 | 0.0274 | 0.0167 | 0.611 | 0.840 | +| tier0 | cc | BB_120_8_12 | 5 | 0.0253 | 0.0205 | 0.809 | 1.076 | +| tier0 | cc | BB_144_12_12 | 5 | 0.0248 | 0.0210 | 0.848 | 1.141 | +| tier0 | cc | BB_30_4_6 | 5 | 0.0223 | 0.0157 | 0.706 | 1.196 | +| tier0 | cc | BB_72_12_6 | 5 | 0.0231 | 0.0155 | 0.674 | 1.091 | +| tier0 | cc | BB_90_8_10 | 5 | 0.0250 | 0.0163 | 0.651 | 0.992 | +| tier0 | cc | COLOR_19_1_5 | 5 | 0.0230 | 0.0133 | 0.578 | 0.929 | +| tier0 | cc | COLOR_7_1_3 | 5 | 0.0231 | 0.0129 | 0.561 | 0.939 | +| tier0 | cc | GB_144_12_8 | 5 | 0.0267 | 0.0182 | 0.682 | 0.957 | +| tier0 | cc | HGP_106_16_4 | 5 | 0.0268 | 0.0156 | 0.582 | 0.906 | +| tier0 | cc | HGP_113_1_8 | 5 | 0.0279 | 0.0161 | 0.577 | 0.846 | +| tier0 | cc | HGP_13_1_3 | 5 | 0.0231 | 0.0121 | 0.525 | 0.900 | +| tier0 | cc | HGP_306_36_5 | 5 | 0.0352 | 0.0299 | 0.848 | 1.128 | +| tier0 | cc | HGP_41_1_5 | 5 | 0.0256 | 0.0160 | 0.625 | 0.939 | +| tier0 | cc | HGP_45_9_3 | 5 | 0.0222 | 0.0152 | 0.682 | 1.160 | +| tier0 | cc | LP_136_32_4 | 5 | 0.0260 | 0.0181 | 0.697 | 1.039 | +| tier0 | cc | LP_238_44_6 | 5 | 0.0250 | 0.0229 | 0.915 | 1.095 | +| tier0 | cc | LP_34_20_2 | 5 | 0.0242 | 0.0137 | 0.567 | 0.880 | +| tier0 | cc | TN_36_8_3 | 5 | 0.0268 | 0.0136 | 0.507 | 0.840 | +| tier0 | cc | TN_36_8_4 | 5 | 0.0239 | 0.0123 | 0.512 | 0.836 | +| tier0 | cc | TN_54_11_4 | 5 | 0.0288 | 0.0143 | 0.495 | 0.860 | +| tier0 | cc | TN_72_14_4 | 5 | 0.0284 | 0.0144 | 0.508 | 0.814 | +| tier0 | cc | TN_72_8_8 | 5 | 0.0236 | 0.0211 | 0.894 | 0.977 | +| tier0 | mto | AMC_108_6_9 | 5 | 0.1000 | 0.0968 | 0.968 | 1.011 | +| tier0 | mto | AMC_216_6_12 | 5 | 0.2981 | 0.2937 | 0.985 | 0.999 | +| tier0 | mto | AMC_330_6_14 | 5 | 0.6915 | 0.6771 | 0.979 | 0.987 | +| tier0 | mto | BB_108_8_10 | 5 | 0.0492 | 0.0464 | 0.942 | 0.995 | +| tier0 | mto | BB_120_8_12 | 5 | 0.5875 | 0.5649 | 0.961 | 0.971 | +| tier0 | mto | BB_144_12_12 | 5 | 0.1203 | 0.1235 | 1.027 | 1.018 | +| tier0 | mto | BB_30_4_6 | 5 | 0.0340 | 0.0280 | 0.823 | 1.087 | +| tier0 | mto | BB_72_12_6 | 5 | 0.0323 | 0.0276 | 0.855 | 1.039 | +| tier0 | mto | BB_90_8_10 | 5 | 0.0549 | 0.0487 | 0.887 | 1.014 | +| tier0 | mto | COLOR_19_1_5 | 5 | 0.0244 | 0.0180 | 0.738 | 1.000 | +| tier0 | mto | COLOR_7_1_3 | 5 | 0.0229 | 0.0138 | 0.603 | 0.990 | +| tier0 | mto | GB_144_12_8 | 5 | 0.0682 | 0.0620 | 0.909 | 0.996 | +| tier0 | mto | HGP_106_16_4 | 5 | 0.0590 | 0.0513 | 0.869 | 0.980 | +| tier0 | mto | HGP_113_1_8 | 5 | 0.0700 | 0.0598 | 0.855 | 0.944 | +| tier0 | mto | HGP_13_1_3 | 5 | 0.0251 | 0.0135 | 0.537 | 0.903 | +| tier0 | mto | HGP_306_36_5 | 5 | 0.3514 | 0.3452 | 0.983 | 1.000 | +| tier0 | mto | HGP_41_1_5 | 5 | 0.0261 | 0.0215 | 0.823 | 1.000 | +| tier0 | mto | HGP_45_9_3 | 5 | 0.0242 | 0.0231 | 0.957 | 1.036 | +| tier0 | mto | LP_136_32_4 | 5 | 0.0550 | 0.0471 | 0.857 | 1.012 | +| tier0 | mto | LP_238_44_6 | 5 | 0.2506 | 0.2585 | 1.032 | 1.028 | +| tier0 | mto | LP_34_20_2 | 5 | 0.0247 | 0.0147 | 0.593 | 0.845 | +| tier0 | mto | TN_36_8_3 | 5 | 0.0273 | 0.0213 | 0.779 | 0.946 | +| tier0 | mto | TN_36_8_4 | 5 | 0.0269 | 0.0219 | 0.815 | 0.893 | +| tier0 | mto | TN_54_11_4 | 5 | 0.0478 | 0.0387 | 0.810 | 0.927 | +| tier0 | mto | TN_72_14_4 | 5 | 0.0597 | 0.0484 | 0.810 | 0.911 | +| tier0 | mto | TN_72_8_8 | 5 | 0.6436 | 0.6200 | 0.963 | 0.974 | +| tier0 | nocard | AMC_108_6_9 | 5 | 0.0897 | 0.0910 | 1.014 | 1.024 | +| tier0 | nocard | AMC_216_6_12 | 5 | 0.2769 | 0.2720 | 0.982 | 0.985 | +| tier0 | nocard | AMC_330_6_14 | 5 | 0.6725 | 0.6664 | 0.991 | 0.990 | +| tier0 | nocard | BB_108_8_10 | 5 | 0.0477 | 0.0439 | 0.919 | 1.064 | +| tier0 | nocard | BB_120_8_12 | 5 | 0.5319 | 0.5160 | 0.970 | 0.986 | +| tier0 | nocard | BB_144_12_12 | 5 | 0.1193 | 0.1179 | 0.989 | 1.005 | +| tier0 | nocard | BB_30_4_6 | 5 | 0.0225 | 0.0244 | 1.086 | 1.112 | +| tier0 | nocard | BB_72_12_6 | 5 | 0.0326 | 0.0258 | 0.793 | 1.025 | +| tier0 | nocard | BB_90_8_10 | 5 | 0.0483 | 0.0415 | 0.860 | 1.028 | +| tier0 | nocard | COLOR_19_1_5 | 5 | 0.0242 | 0.0178 | 0.739 | 1.008 | +| tier0 | nocard | COLOR_7_1_3 | 5 | 0.0234 | 0.0161 | 0.688 | 1.049 | +| tier0 | nocard | GB_144_12_8 | 5 | 0.0668 | 0.0612 | 0.917 | 0.978 | +| tier0 | nocard | HGP_106_16_4 | 5 | 0.0578 | 0.0464 | 0.803 | 0.952 | +| tier0 | nocard | HGP_113_1_8 | 5 | 0.0621 | 0.0510 | 0.822 | 0.959 | +| tier0 | nocard | HGP_13_1_3 | 5 | 0.0240 | 0.0135 | 0.561 | 0.904 | +| tier0 | nocard | HGP_306_36_5 | 5 | 0.3096 | 0.3028 | 0.978 | 0.998 | +| tier0 | nocard | HGP_41_1_5 | 5 | 0.0259 | 0.0198 | 0.761 | 1.020 | +| tier0 | nocard | HGP_45_9_3 | 5 | 0.0238 | 0.0203 | 0.854 | 1.039 | +| tier0 | nocard | LP_136_32_4 | 5 | 0.0548 | 0.0493 | 0.901 | 1.019 | +| tier0 | nocard | LP_238_44_6 | 5 | 0.2436 | 0.2490 | 1.022 | 1.014 | +| tier0 | nocard | LP_34_20_2 | 5 | 0.0254 | 0.0190 | 0.749 | 0.945 | +| tier0 | nocard | TN_36_8_3 | 5 | 0.0269 | 0.0200 | 0.744 | 0.892 | +| tier0 | nocard | TN_36_8_4 | 5 | 0.0354 | 0.0258 | 0.728 | 0.955 | +| tier0 | nocard | TN_54_11_4 | 5 | 0.0485 | 0.0374 | 0.770 | 0.979 | +| tier0 | nocard | TN_72_14_4 | 5 | 0.0553 | 0.0447 | 0.809 | 0.945 | +| tier0 | nocard | TN_72_8_8 | 5 | 0.5531 | 0.5362 | 0.969 | 0.976 | +| tier1 | cc | AMC_438_6_17 | 5 | 0.0778 | 0.0699 | 0.898 | 0.965 | +| tier1 | cc | BB_186_10_14 | 5 | 0.0414 | 0.0234 | 0.564 | 0.829 | +| tier1 | cc | BB_288_12_18 | 5 | 0.3146 | 0.3130 | 0.995 | 1.007 | +| tier1 | cc | COLOR_127_1_13 | 5 | 0.0627 | 0.0587 | 0.936 | 1.008 | +| tier1 | cc | GB_144_12_12 | 5 | 0.0709 | 0.0654 | 0.923 | 1.007 | +| tier1 | cc | HGP_265_1_12 | 5 | 0.0308 | 0.0255 | 0.828 | 0.921 | +| tier1 | cc | HGP_610_64_6 | 5 | 0.1471 | 0.1357 | 0.922 | 0.969 | +| tier1 | cc | LP_340_56_8 | 5 | 0.0272 | 0.0268 | 0.985 | 1.114 | +| tier1 | cc | LP_442_68_10 | 5 | 0.0298 | 0.0285 | 0.957 | 0.972 | +| tier1 | mto | AMC_438_6_17 | 5 | 7.9938 | 7.8562 | 0.983 | 0.977 | +| tier1 | mto | BB_186_10_14 | 5 | 1.1637 | 1.1350 | 0.975 | 0.978 | +| tier1 | mto | BB_288_12_18 | 5 | 9.9731 | 9.7827 | 0.981 | 0.980 | +| tier1 | mto | COLOR_127_1_13 | 5 | 1.3208 | 1.2798 | 0.969 | 0.975 | +| tier1 | mto | GB_144_12_12 | 5 | 1.0759 | 1.0499 | 0.976 | 0.978 | +| tier1 | mto | HGP_265_1_12 | 5 | 1.7066 | 1.6676 | 0.977 | 0.980 | +| tier1 | mto | HGP_610_64_6 | 5 | 8.1101 | 8.0034 | 0.987 | 0.999 | +| tier1 | mto | LP_340_56_8 | 5 | 1.8571 | 1.8146 | 0.977 | 0.981 | +| tier1 | mto | LP_442_68_10 | 5 | 4.9794 | 4.8794 | 0.980 | 0.976 | +| tier1 | nocard | AMC_438_6_17 | 5 | 7.7806 | 7.5688 | 0.973 | 0.966 | +| tier1 | nocard | BB_186_10_14 | 5 | 1.0473 | 1.0235 | 0.977 | 0.981 | +| tier1 | nocard | BB_288_12_18 | 5 | 10.0105 | 9.8113 | 0.980 | 0.980 | +| tier1 | nocard | COLOR_127_1_13 | 5 | 1.4968 | 1.4582 | 0.974 | 0.977 | +| tier1 | nocard | GB_144_12_12 | 5 | 1.0738 | 1.0582 | 0.985 | 0.984 | +| tier1 | nocard | HGP_265_1_12 | 5 | 1.7180 | 1.6769 | 0.976 | 0.983 | +| tier1 | nocard | HGP_610_64_6 | 5 | 8.6281 | 8.5126 | 0.987 | 0.988 | +| tier1 | nocard | LP_340_56_8 | 5 | 2.1456 | 2.1094 | 0.983 | 0.983 | +| tier1 | nocard | LP_442_68_10 | 5 | 4.0491 | 4.0201 | 0.993 | 0.976 | + +## Verdict per tier and mode + +| Tier | Mode | cells | geomean | worst cell | cells > 1.25 | verdict | +|---|---|---:|---:|---|---:|---| +| tier0 | cc | 26 | 0.666 | 0.964 (AMC_330_6_14) | 0 | PASS | +| tier0 | mto | 26 | 0.849 | 1.032 (LP_238_44_6) | 0 | PASS | +| tier0 | nocard | 26 | 0.853 | 1.086 (BB_30_4_6) | 0 | PASS | +| tier1 | cc | 9 | 0.879 | 0.995 (BB_288_12_18) | 0 | PASS | +| tier1 | mto | 9 | 0.978 | 0.987 (HGP_610_64_6) | 0 | PASS | +| tier1 | nocard | 9 | 0.981 | 0.993 (LP_442_68_10) | 0 | PASS | +| tier0 | all | 78 | 0.784 | 1.086 | 0 | PASS | +| tier1 | all | 27 | 0.945 | 0.995 | 0 | PASS | + +## Logs + +units with byte-identical stdout in every run of both arms: 522; other units: 3 (of which old itself varies across reps: 2; identical up to line order in every run: 3) +- ('tier1', 'cc', 'GB_144_12_12', 0): distinct stdouts old 2, new 2, same set: False +- ('tier1', 'cc', 'GB_144_12_12', 2): distinct stdouts old 2, new 2, same set: True +- ('tier1', 'cc', 'GB_144_12_12', 3): distinct stdouts old 1, new 2, same set: False + +## Answers + +runs: 9450; rc != 0 or answer != stem: 0 [] + +## Wait slack (wall - user - sys) of runs with wall < 0.2 s, in ms + +| Arm | runs | median | p90 | max | +|---|---:|---:|---:|---:| +| old | 3331 | 11.88 | 16.15 | 49.91 | +| new | 3337 | 4.77 | 7.82 | 19.38 | diff --git a/optimization/experiments/GH-224/raw/t01/config.json b/optimization/experiments/GH-224/raw/t01/config.json new file mode 100644 index 00000000..e28e96a0 --- /dev/null +++ b/optimization/experiments/GH-224/raw/t01/config.json @@ -0,0 +1,50 @@ +{ + "arms": { + "old": [ + "/home/yfc/mac-agent-20261009/frozen/server-gh224-main-fecee8c/distqldpc", + [] + ], + "new": [ + "/home/yfc/mac-agent-20261009/frozen/server-gh224-2587b9d/distqldpc", + [] + ] + }, + "cpus": [ + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89, + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101 + ], + "reps": 9, + "seeds": 5, + "modes": "mto,nocard,cc", + "limit": 600, + "units": 525, + "started": 1793815873.1662354 +} \ No newline at end of file diff --git a/optimization/experiments/GH-224/raw/t01/results.jsonl.gz b/optimization/experiments/GH-224/raw/t01/results.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..b8c1f33509a72646ad44890d5c7cf91c3c4f2783 GIT binary patch literal 204366 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 Yuq1lCXH+}g|M`FaA383GLeoh*05n pack on 4780) +partI(a) mutant 15 (charge + 1/D) exceeds tau on 17240 instances +partI(b) (GH-157 charge on the Part A halves): 345600 ladder runs (128 base subsets x 3 configurations x seeds 0..2), 0 bad, 9931487 charge prunes +mutant 15 (charge inflated by 1/D): 3408/38400 half ladders wrong +partA: 300 half instances (151 with verified orbits, 120 with all column weights odd, 113 without any nontrivial element), 115200 ladder runs over 128 rule subsets x 3 seeds, 0 bad +partA K (GH-138): 100 basis, 100 low-weight sets, 55 random sets; 80 instances where a minimum element meets a row of K in floor(|g|/2) qubits +partE (rotated surface codes d = 3, 4, X/Z swapped): 40 canonical checks, 0 bad +partF (MaxSAT -ub-pre): 1600 runs on 200 codes, 0 bad (first UB = d on 1426 runs, > d on 174 runs); mutant 1 200 runs, 0 bad; surface codes d = 3..5: 36 canonical/mutant-1 runs, 0 bad +partF mutant 2 (finder without detector check, words unverified): 4/200 code runs and 9/9 surface runs wrong +partG (a) encodings (binomial, sequential counter, native propagator; w = 1..14): 42 checks, 0 bad +partG (b) MaxSAT -stab-overlap: 3600 runs on 200 codes (178 codes where the rule removes an element of F of weight <= d + 2), 0 bad; surface codes d = 3..5: 24 runs, 0 bad +partG mutant 1 (limit floor(|g|/2) - 1): 110/424 runs failed, 40 with a wrong RESULT d OPTIMAL (0 on surface codes, 20 with the native propagator) +partG mutant 2 (parity rows of the half as g, unverified): 2/424 runs failed, 2 with a wrong RESULT d OPTIMAL (0 on surface codes) +partB: 200 CSS codes (52 with a verified dual map, 51 with X-half orbits, 76 with dX != dZ, 54 with all-odd Hz), 9200 driver runs, 0 bad, 0 RESULT -1 +partD (MaxSAT split, -oddcap-skip off/on): 400 runs on 200 codes (56 with an all-odd half), 0 bad +partE (ub-search finder): 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +partE (driver with ub-search): 1600 runs, 0 bad, 37 levels abandoned (U <= w) +GH-146 finder stern2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern1 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l0-fresh : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer1-l2-w1-b3-r5 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l3-w32-b2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder mutant 11 (collision mode, no detector check): trivial word returned on 41/41 halves +GH-146 CC driver in collision mode: 600 runs, 0 bad; mutant 11 8/8 runs stopped or wrong; mutant 12 8/8 failed, 8 with a wrong RESULT d OPTIMAL +GH-146 MaxSAT pre-pass in collision mode: 400 runs, 0 bad; mutant 1 200 runs, 0 bad; mutant 2 13/209 runs wrong (codes + surface) +GH-152 partG: 300 relabeled half instances, 365 Tanner generators (235 complete groups), 55 instances with coarser orbits than the GH-75 family, 115200 ladder runs (128 rule subsets x 3 seeds), 0 bad; generators violating the row classes 0; planted map preserved the row sets on 250 (185 with a complete group), missed 0 +GH-152 partH: 150 relabeled codes (100 hypergraph products, 34 with dX != dZ), 100 gain a verified dual map only through -cc-aut, 150 gain coarser X-half orbits; 3300 driver runs with -cc-aut=on, 0 bad; swap maps violating the classes 0 +mutant 13 (Tanner candidates and the cyclic shift i -> i+1 mod n kept without the GF(2) checks): half level 1408/19200 ladders wrong; driver 182/300 runs wrong or stopped +mutant 14 (Tanner swap map, or the identity, used as dual map without the GF(2) check): driver 49/150 runs wrong or stopped +GH-162 partT: 300 half instances (200 with orbits, 100 of them hidden -cc-aut orbits; 118 all-odd; 55 with a weight-2 row in K), 49 where the cut removes a minimum element (8 with orbits), 76800 ladder runs (64 rule subsets with overlap,tiebreak x 4 seeds; charge on seeds 1 and 3), 0 bad +mutant 17 (tiebreak without the first(g) exemption: naive tie cut): 5152/76800 half ladders wrong +mutant 18 (tiebreak order without the seed first: orbit-incompatible): 160/76800 half ladders wrong (160 with orbit seeds) +GH-183 partR: 300 half instances (197 with orbits, 89 with rows unreachable from qubit 0), 384000 ladder runs (64 rule subsets x {-, overlap, overlap+tiebreak} x 4 seeds with roworder bfs, charge on seeds 1 and 3; tiebreak also tbbase asc under bfs and index), 0 bad; bfs orders not using every row 0; instances where bfs changes the node count 66 +mutant 19 (bfs order drops a row): 9088/28800 half ladders wrong +mutant 20 (bfs without restart: unreachable rows dropped): 4656/28800 half ladders wrong +GH-181 partX: 300 half instances (262 with sparse rows, 98 with sparseov rows), 576000 ladder runs (128 base subsets x 15 token subsets; charge, tiebreak and bfs mixed in), 0 bad; runs where the rule acted: spack 62833, sprune 57784, ovtightx 22208, xuforbid 154831, xuforced 135021, xudead 148662 +mutant 22 (GH-181 sparse redundant row with one qubit flipped): 33092/268800 half ladders wrong +mutant 23 (GH-181 xorunit branches on an even unit row): 30919/307200 half ladders wrong +mutant 24 (GH-181 sparseov pair sums of H instead of K): 18602/153600 half ladders wrong +GH-195 partU: 300 half instances (200 with orbits), 259200 ladder runs (128 rule subsets with pack,erasure x 3 seeds x 2 gates, charge and bfs mixed in; 28800 with GH-181 tokens, 6278 of them pruned by erasure with redundant rows packed), 0 bad; erasure tests 122540960, prunes 121941834, give-ups 14376 with the production gate (240 instances pruned); tests 1586324, prunes 1534092 with the size gate (209 instances) +mutant 25 (erasure bound weakened by one: extra - 1 outside qubits): 1370/9600 half ladders wrong +mutant 26 (erasure with the fixed support S ignored): 2204/9600 half ladders wrong +GH-206 auto probe (Part B): 1800 driver runs (forced switch / stay / by time, finder on and off, tbbase asc), 0 bad +mutant 21 (auto probe of level w + 1, an aborted probe taken as refuted): 18/400 driver runs wrong or stopped +mutant 1 (forbidden set not restored): 988/19200 half ladders wrong +mutant 2 (packing prune >=): 4112/19200 half ladders wrong +mutant 3 (orbit seed rule off by one, instances with orbits): 1856/9664 half ladders wrong +mutant 4 (stop rule without other half's lb, forces sequential): schedule requested 58/200 runs wrong; default options 58/200 wrong +mutant 5 (parity rule forced on halves with an even column weight): 6976/11520 half ladders wrong +mutant 6 (leaf budget off by one): 2112/19200 half ladders wrong +mutant 7 (leaf closure without the detector check): 1760/19200 half ladders wrong +mutant 8 (overlap limit off by one): 2880/19200 half ladders wrong +mutant 9 (overlap with the parity checks H as K): 3776/19200 half ladders wrong +mutant 10 (overlap even-|g| tie cut): 2112/19200 half ladders wrong +mutant 11 (ub-search without the detector check; halves/codes where a trivial word is lighter than d): finder returned a trivial word on 33/33 halves; driver 8/8 runs stopped or wrong +mutant 12 (mutant 11 + words reported without verification): 8/8 driver runs failed, 8 of them with a wrong RESULT d OPTIMAL +CC_ENGINE_TESTS PASS +make test-cc CXX="c++ -Wno-reserved-user-defined-literal" 1579.37s user 9.16s system 99% cpu 26:35.32 total +rc=0 diff --git a/optimization/experiments/GH-224/raw/t0tests/mac_test_flags.txt b/optimization/experiments/GH-224/raw/t0tests/mac_test_flags.txt new file mode 100644 index 00000000..398fd0ad --- /dev/null +++ b/optimization/experiments/GH-224/raw/t0tests/mac_test_flags.txt @@ -0,0 +1,5 @@ +bash tests/test_cc_flags.sh ./bin/distqldpc +test_cc_flags: 566 checks, 0 failed +CC_FLAG_TESTS PASS +make test-cc-flags CXX="c++ -Wno-reserved-user-defined-literal" 5.28s user 1.91s system 85% cpu 8.385 total +rc=0 diff --git a/optimization/experiments/GH-224/raw/t0tests/partition_new.txt b/optimization/experiments/GH-224/raw/t0tests/partition_new.txt new file mode 100644 index 00000000..c0dc325c --- /dev/null +++ b/optimization/experiments/GH-224/raw/t0tests/partition_new.txt @@ -0,0 +1,672 @@ +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 3 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 96 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=12, hconfls=12, core 7, tier2 0, local 0, 2 soft cls unsat (1 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 9, nbFixedLH 0 +c nbHardens 5 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 9, phase 20000000, starts 1, UP 245 +c UB=2 fails, cnfls=12, hcnfls=12, core 7, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 5 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 9, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 12 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 49(14.08%), hardens 5 (fixed 10), dynVars 95, shorten: 0 +c restarts : 4 +c conflicts : 12 (inf /sec) +c decisions : 82 (0.00 % random) (inf /sec) +c propagations : 348 (inf /sec) +c conflict literals : 19 (5.00 % deleted) +c Memory used : 13.00 MB +c CPU time : 0 s +c nbSimplifyAll : 0 +c s_propagations : 98 +c s_cost_ratio : 28.16% + +s UNSATISFIABLE +Partition regression passed: all 1024 assignments checked; optimum 5. +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 3 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 96 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=12, hconfls=12, core 6, tier2 0, local 0, 2 soft cls unsat (1 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 9, nbFixedLH 0 +c nbHardens 5 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 9, phase 20000000, starts 1, UP 222 +c UB=2 fails, cnfls=12, hcnfls=12, core 6, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 5 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 9, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 12 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 49(15.22%), hardens 5 (fixed 10), dynVars 95, shorten: 0 +c restarts : 4 +c conflicts : 12 (9615 /sec) +c decisions : 81 (0.00 % random) (64904 /sec) +c propagations : 322 (258013 /sec) +c conflict literals : 18 (5.26 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.001248 s +c nbSimplifyAll : 0 +c s_propagations : 98 +c s_cost_ratio : 30.43% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=2, hconfls=2, core 1, tier2 0, local 0, 2 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 1, nbFixedLH 0 +c nbHardens 1 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 2 conflicts with init 9999 + +c UB=2 fails, cnfls=2, hcnfls=2, core 1, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 1, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 2 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 47(64.38%), hardens 1 (fixed 10), dynVars 51, shorten: 0 +c restarts : 3 +c conflicts : 2 (2051 /sec) +c decisions : 18 (0.00 % random) (18462 /sec) +c propagations : 73 (74872 /sec) +c conflict literals : 2 (0.00 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.000975 s +c nbSimplifyAll : 0 +c s_propagations : 90 +c s_cost_ratio : 123.29% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 3 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 96 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=12, hconfls=12, core 6, tier2 0, local 0, 2 soft cls unsat (1 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 9, nbFixedLH 0 +c nbHardens 5 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 9, phase 20000000, starts 1, UP 222 +c UB=2 fails, cnfls=12, hcnfls=12, core 6, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 5 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 9, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 12 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 49(15.22%), hardens 5 (fixed 10), dynVars 95, shorten: 0 +c restarts : 4 +c conflicts : 12 (inf /sec) +c decisions : 81 (0.00 % random) (inf /sec) +c propagations : 322 (inf /sec) +c conflict literals : 18 (5.26 % deleted) +c Memory used : 13.00 MB +c CPU time : 0 s +c nbSimplifyAll : 0 +c s_propagations : 98 +c s_cost_ratio : 30.43% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=2, hconfls=2, core 1, tier2 0, local 0, 2 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 1, nbFixedLH 0 +c nbHardens 1 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 2 conflicts with init 9999 + +c UB=2 fails, cnfls=2, hcnfls=2, core 1, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 1, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 2 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 47(64.38%), hardens 1 (fixed 10), dynVars 51, shorten: 0 +c restarts : 3 +c conflicts : 2 (2058 /sec) +c decisions : 18 (0.00 % random) (18519 /sec) +c propagations : 73 (75103 /sec) +c conflict literals : 2 (0.00 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.000972 s +c nbSimplifyAll : 0 +c s_propagations : 90 +c s_cost_ratio : 123.29% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 3 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 96 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=12, hconfls=12, core 6, tier2 0, local 0, 2 soft cls unsat (1 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 9, nbFixedLH 0 +c nbHardens 5 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 9, phase 20000000, starts 1, UP 222 +c UB=2 fails, cnfls=12, hcnfls=12, core 6, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 5 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 9, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 12 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 49(15.22%), hardens 5 (fixed 10), dynVars 95, shorten: 0 +c restarts : 4 +c conflicts : 12 (32000 /sec) +c decisions : 81 (0.00 % random) (216000 /sec) +c propagations : 322 (858667 /sec) +c conflict literals : 18 (5.26 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.000375 s +c nbSimplifyAll : 0 +c s_propagations : 98 +c s_cost_ratio : 30.43% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=2, hconfls=2, core 1, tier2 0, local 0, 2 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 1, nbFixedLH 0 +c nbHardens 1 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 2 conflicts with init 9999 + +c UB=2 fails, cnfls=2, hcnfls=2, core 1, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 1, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 2 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 47(64.38%), hardens 1 (fixed 10), dynVars 51, shorten: 0 +c restarts : 3 +c conflicts : 2 (2068 /sec) +c decisions : 18 (0.00 % random) (18614 /sec) +c propagations : 73 (75491 /sec) +c conflict literals : 2 (0.00 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.000967 s +c nbSimplifyAll : 0 +c s_propagations : 90 +c s_cost_ratio : 123.29% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 2, nbFixedLH 0 +c nbHardens 3 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 96 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=12, hconfls=12, core 6, tier2 0, local 0, 2 soft cls unsat (1 at L0), 26 fixed vars at L0, softCnfl 0, nbFlyRd 9, nbFixedLH 0 +c nbHardens 5 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 9, phase 20000000, starts 1, UP 222 +c UB=2 fails, cnfls=12, hcnfls=12, core 6, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 5 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 9, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 12 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 49(15.22%), hardens 5 (fixed 10), dynVars 95, shorten: 0 +c restarts : 4 +c conflicts : 12 (12474 /sec) +c decisions : 81 (0.00 % random) (84200 /sec) +c propagations : 322 (334719 /sec) +c conflict literals : 18 (5.26 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.000962 s +c nbSimplifyAll : 0 +c s_propagations : 98 +c s_cost_ratio : 30.43% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 13, of which 10 unit, 3 nonUnit and 0 empty +c total nb of literals: 57 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 1 conflict sets found with length 3 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 10 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 53 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 10), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 107 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=2, hconfls=2, core 1, tier2 0, local 0, 2 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 1, nbFixedLH 0 +c nbHardens 1 (fixed 10), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 2 conflicts with init 9999 + +c UB=2 fails, cnfls=2, hcnfls=2, core 1, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 10), lk: 0, shorten: 0, pureSo 0, nbFlyRd 1, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 8, hardConflicts: 2 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 47(64.38%), hardens 1 (fixed 10), dynVars 51, shorten: 0 +c restarts : 3 +c conflicts : 2 (inf /sec) +c decisions : 18 (0.00 % random) (inf /sec) +c propagations : 73 (inf /sec) +c conflict literals : 2 (0.00 % deleted) +c Memory used : 13.00 MB +c CPU time : 0 s +c nbSimplifyAll : 0 +c s_propagations : 90 +c s_cost_ratio : 123.29% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 14, of which 10 unit, 4 nonUnit and 0 empty +c total nb of literals: 61 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 3 conflict sets found with length 10 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 11 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 11), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 59 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 11), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 120 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 0, nbFixedLH 0 +c nbHardens 3 (fixed 11), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 107 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=8, hconfls=8, core 7, tier2 0, local 0, 2 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 0, nbFixedLH 0 +c nbHardens 7 (fixed 11), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 5, phase 20000000, starts 1, UP 230 +c UB=2 fails, cnfls=8, hcnfls=8, core 7, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 7 (fixed 11), lk: 0, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 9, hardConflicts: 8 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 52(14.77%), hardens 7 (fixed 11), dynVars 106, shorten: 0 +c restarts : 4 +c conflicts : 8 (4825 /sec) +c decisions : 87 (0.00 % random) (52473 /sec) +c propagations : 352 (212304 /sec) +c conflict literals : 21 (25.00 % deleted) +c Memory used : 13.00 MB +c CPU time : 0.001658 s +c nbSimplifyAll : 0 +c s_propagations : 114 +c s_cost_ratio : 32.39% + +s UNSATISFIABLE +c This is COMiniSatPS. +c WARNING: for repeatability, setting FPU to use double precision +c ============================[ Problem Statistics ]============================= +c | | +c initial UB: 2147483647 +c | Number of variables: 10 | +c | Number of clauses: 15 | +c | Parse time: 0.00 s | +c | | +c ============================[ Search Statistics ]============================== +c | Conflicts | ORIGINAL | LEARNT | Progress | +c | | Vars Clauses Literals | Limit Clauses Lit/Cl | | +c =============================================================================== +c nb soft clauses: 14, of which 10 unit, 4 nonUnit and 0 empty +c total nb of literals: 61 +c conflLits 3, conflLits2 0, nbFailedLits 0, fixedVarsBypreproc 0, totalFixedVars 0 +c init nbIsets: 4 +c nbIsets after pass 1: 3 +c isets 3, derivedCost 3 +c 2 conflict sets found with length 7 +c fixedCost 0, nbSatLits 0, totalFixedVars 0, objForSearch: 11 + +c no UB provided, search from scratch... +c ends of initiationization by VSIDS at 0 conflicts with init 10000 + +c UB=1 fails, cnfls=0, hcnfls=0, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 1 (fixed 11), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 59 (Sinz+MTO) for UB 2 +c ends of initiationization by VSIDS at 1 conflicts with init 9999 + +c UB=2 fails, cnfls=1, hcnfls=1, core 0, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 2.00, dev 0.00, succRate 1.00, nbSucc 1, nbHardens 1 (fixed 11), lk: 1, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 + +c Cardinality: 120 (Sinz+MTO) for UB 4 +c UB=4 succs, confls=3, hconfls=3, core 2, tier2 0, local 0, 3 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 0, nbFixedLH 0 +c nbHardens 3 (fixed 11), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c ends of initiationization by VSIDS at 3 conflicts with init 9998 + + +c Cardinality: 107 (Sinz+MTO) for UB 3 +c UB=3 succs, confls=7, hconfls=7, core 6, tier2 0, local 0, 2 soft cls unsat (0 at L0), 0 fixed vars at L0, softCnfl 0, nbFlyRd 0, nbFixedLH 0 +c nbHardens 5 (fixed 11), shorten: 0, prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, lk: 0, shorten: 0, quasiC: 0 (fixed: 0) + +c LRB phase 1: conflicts 4, phase 20000000, starts 1, UP 185 +c UB=2 fails, cnfls=7, hcnfls=7, core 6, tier2 0, local 0, quasiC: 0 (fixed: 0) +c prunedLB 0.00, dev 0.00, succRate 0.00, nbSucc 0, nbHardens 5 (fixed 11), lk: 0, shorten: 0, pureSo 0, nbFlyRd 0, nbFixedLH 0 +c =============================================================================== +c initCost: 0, fixedBySearch: 0, optimal: 5, maxsat: 9, hardConflicts: 7 +c nbLK: 2, nbSuccLK: 1(50.00%), nbLKup: 40(13.29%), hardens 5 (fixed 11), dynVars 106, shorten: 0 +c restarts : 4 +c conflicts : 7 (inf /sec) +c decisions : 77 (0.00 % random) (inf /sec) +c propagations : 301 (inf /sec) +c conflict literals : 17 (5.56 % deleted) +c Memory used : 13.00 MB +c CPU time : 0 s +c nbSimplifyAll : 0 +c s_propagations : 110 +c s_cost_ratio : 36.54% + +s UNSATISFIABLE +Partition adjacent oracles passed: 11 total inputs, 1024 assignments each. +rc=0 diff --git a/optimization/experiments/GH-224/raw/t0tests/smoke_new.txt b/optimization/experiments/GH-224/raw/t0tests/smoke_new.txt new file mode 100644 index 00000000..45c32d6f --- /dev/null +++ b/optimization/experiments/GH-224/raw/t0tests/smoke_new.txt @@ -0,0 +1,2 @@ +DistQLDPC smoke validation passed +rc=0 diff --git a/optimization/experiments/GH-224/raw/t0tests/test_cc_new.txt b/optimization/experiments/GH-224/raw/t0tests/test_cc_new.txt new file mode 100644 index 00000000..5579b0ba --- /dev/null +++ b/optimization/experiments/GH-224/raw/t0tests/test_cc_new.txt @@ -0,0 +1,86 @@ +g++ -Isrc/solver -Wall -Wno-parentheses -O3 -g -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS -DNDEBUG -std=c++17 -o build/test_cc_engine tests/test_cc_engine.cc build/SimpSolver.o build/Solver.o build/Options.o build/System.o build/cc_half.o build/cc_driver.o build/cc_ubsearch.o build/cc_aut.o -lz +In file included from src/solver/Solver.h:55, + from src/solver/SimpSolver.h:37, + from tests/../src/core/distqldpc.cc:48, + from tests/test_cc_engine.cc:102: +src/solver/utils/Options.h:285:29: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 285 | fprintf(stderr, "%4"PRIi64, range.begin); + | ^ +src/solver/utils/Options.h:291:29: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 291 | fprintf(stderr, "%4"PRIi64, range.end); + | ^ +src/solver/utils/Options.h:293:25: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 293 | fprintf(stderr, "] (default: %"PRIi64")\n", value); + | ^ +tests/../src/core/distqldpc.cc: In function ‘void cc_sink_trap(void*)’: +tests/../src/core/distqldpc.cc:1865:29: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 1865 | if (pw >= 0) (void)write(pw, "RESULT -1 TRAP\n", 15); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +tests/../src/core/distqldpc.cc: In function ‘void pipe_bound(int, const char*, uint64_t)’: +tests/../src/core/distqldpc.cc:1310:29: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 1310 | if (len > 0) (void)write(pipe_w, buf, (size_t)len); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ +tests/../src/core/distqldpc.cc: In function ‘void pipe_write_result(int, int, bool)’: +tests/../src/core/distqldpc.cc:172:20: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 172 | (void)write(pipe_w, buf, (size_t)n); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ +./build/test_cc_engine +partI(a) (GH-157 charge): 20000 hitting-set instances, 0 bad (charge = tau on 15739; charge > pack on 4780) +partI(a) mutant 15 (charge + 1/D) exceeds tau on 17240 instances +partI(b) (GH-157 charge on the Part A halves): 345600 ladder runs (128 base subsets x 3 configurations x seeds 0..2), 0 bad, 9931487 charge prunes +mutant 15 (charge inflated by 1/D): 3408/38400 half ladders wrong +partA: 300 half instances (151 with verified orbits, 120 with all column weights odd, 113 without any nontrivial element), 115200 ladder runs over 128 rule subsets x 3 seeds, 0 bad +partA K (GH-138): 100 basis, 100 low-weight sets, 55 random sets; 80 instances where a minimum element meets a row of K in floor(|g|/2) qubits +partE (rotated surface codes d = 3, 4, X/Z swapped): 40 canonical checks, 0 bad +partF (MaxSAT -ub-pre): 1600 runs on 200 codes, 0 bad (first UB = d on 1426 runs, > d on 174 runs); mutant 1 200 runs, 0 bad; surface codes d = 3..5: 36 canonical/mutant-1 runs, 0 bad +partF mutant 2 (finder without detector check, words unverified): 4/200 code runs and 9/9 surface runs wrong +partG (a) encodings (binomial, sequential counter, native propagator; w = 1..14): 42 checks, 0 bad +partG (b) MaxSAT -stab-overlap: 3600 runs on 200 codes (178 codes where the rule removes an element of F of weight <= d + 2), 0 bad; surface codes d = 3..5: 24 runs, 0 bad +partG mutant 1 (limit floor(|g|/2) - 1): 110/424 runs failed, 40 with a wrong RESULT d OPTIMAL (0 on surface codes, 20 with the native propagator) +partG mutant 2 (parity rows of the half as g, unverified): 2/424 runs failed, 2 with a wrong RESULT d OPTIMAL (0 on surface codes) +partB: 200 CSS codes (52 with a verified dual map, 51 with X-half orbits, 76 with dX != dZ, 54 with all-odd Hz), 9200 driver runs, 0 bad, 0 RESULT -1 +partD (MaxSAT split, -oddcap-skip off/on): 400 runs on 200 codes (56 with an all-odd half), 0 bad +partE (ub-search finder): 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +partE (driver with ub-search): 1600 runs, 0 bad, 38 levels abandoned (U <= w) +GH-146 finder stern2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern1 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l0-fresh : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer1-l2-w1-b3-r5 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l3-w32-b2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder mutant 11 (collision mode, no detector check): trivial word returned on 41/41 halves +GH-146 CC driver in collision mode: 600 runs, 0 bad; mutant 11 8/8 runs stopped or wrong; mutant 12 8/8 failed, 8 with a wrong RESULT d OPTIMAL +GH-146 MaxSAT pre-pass in collision mode: 400 runs, 0 bad; mutant 1 200 runs, 0 bad; mutant 2 13/209 runs wrong (codes + surface) +GH-152 partG: 300 relabeled half instances, 365 Tanner generators (235 complete groups), 55 instances with coarser orbits than the GH-75 family, 115200 ladder runs (128 rule subsets x 3 seeds), 0 bad; generators violating the row classes 0; planted map preserved the row sets on 250 (185 with a complete group), missed 0 +GH-152 partH: 150 relabeled codes (100 hypergraph products, 34 with dX != dZ), 100 gain a verified dual map only through -cc-aut, 150 gain coarser X-half orbits; 3300 driver runs with -cc-aut=on, 0 bad; swap maps violating the classes 0 +mutant 13 (Tanner candidates and the cyclic shift i -> i+1 mod n kept without the GF(2) checks): half level 1408/19200 ladders wrong; driver 182/300 runs wrong or stopped +mutant 14 (Tanner swap map, or the identity, used as dual map without the GF(2) check): driver 49/150 runs wrong or stopped +GH-162 partT: 300 half instances (200 with orbits, 100 of them hidden -cc-aut orbits; 118 all-odd; 55 with a weight-2 row in K), 49 where the cut removes a minimum element (8 with orbits), 76800 ladder runs (64 rule subsets with overlap,tiebreak x 4 seeds; charge on seeds 1 and 3), 0 bad +mutant 17 (tiebreak without the first(g) exemption: naive tie cut): 5152/76800 half ladders wrong +mutant 18 (tiebreak order without the seed first: orbit-incompatible): 160/76800 half ladders wrong (160 with orbit seeds) +GH-183 partR: 300 half instances (197 with orbits, 89 with rows unreachable from qubit 0), 384000 ladder runs (64 rule subsets x {-, overlap, overlap+tiebreak} x 4 seeds with roworder bfs, charge on seeds 1 and 3; tiebreak also tbbase asc under bfs and index), 0 bad; bfs orders not using every row 0; instances where bfs changes the node count 66 +mutant 19 (bfs order drops a row): 9088/28800 half ladders wrong +mutant 20 (bfs without restart: unreachable rows dropped): 4656/28800 half ladders wrong +GH-181 partX: 300 half instances (262 with sparse rows, 98 with sparseov rows), 576000 ladder runs (128 base subsets x 15 token subsets; charge, tiebreak and bfs mixed in), 0 bad; runs where the rule acted: spack 62833, sprune 57784, ovtightx 22208, xuforbid 154831, xuforced 135021, xudead 148662 +mutant 22 (GH-181 sparse redundant row with one qubit flipped): 33092/268800 half ladders wrong +mutant 23 (GH-181 xorunit branches on an even unit row): 30919/307200 half ladders wrong +mutant 24 (GH-181 sparseov pair sums of H instead of K): 18602/153600 half ladders wrong +GH-195 partU: 300 half instances (200 with orbits), 259200 ladder runs (128 rule subsets with pack,erasure x 3 seeds x 2 gates, charge and bfs mixed in; 28800 with GH-181 tokens, 6278 of them pruned by erasure with redundant rows packed), 0 bad; erasure tests 122540960, prunes 121941834, give-ups 14376 with the production gate (240 instances pruned); tests 1586324, prunes 1534092 with the size gate (209 instances) +mutant 25 (erasure bound weakened by one: extra - 1 outside qubits): 1370/9600 half ladders wrong +mutant 26 (erasure with the fixed support S ignored): 2204/9600 half ladders wrong +GH-206 auto probe (Part B): 1800 driver runs (forced switch / stay / by time, finder on and off, tbbase asc), 0 bad +mutant 21 (auto probe of level w + 1, an aborted probe taken as refuted): 18/400 driver runs wrong or stopped +mutant 1 (forbidden set not restored): 988/19200 half ladders wrong +mutant 2 (packing prune >=): 4112/19200 half ladders wrong +mutant 3 (orbit seed rule off by one, instances with orbits): 1856/9664 half ladders wrong +mutant 4 (stop rule without other half's lb, forces sequential): schedule requested 58/200 runs wrong; default options 58/200 wrong +mutant 5 (parity rule forced on halves with an even column weight): 6976/11520 half ladders wrong +mutant 6 (leaf budget off by one): 2112/19200 half ladders wrong +mutant 7 (leaf closure without the detector check): 1760/19200 half ladders wrong +mutant 8 (overlap limit off by one): 2880/19200 half ladders wrong +mutant 9 (overlap with the parity checks H as K): 3776/19200 half ladders wrong +mutant 10 (overlap even-|g| tie cut): 2112/19200 half ladders wrong +mutant 11 (ub-search without the detector check; halves/codes where a trivial word is lighter than d): finder returned a trivial word on 33/33 halves; driver 8/8 runs stopped or wrong +mutant 12 (mutant 11 + words reported without verification): 8/8 driver runs failed, 8 of them with a wrong RESULT d OPTIMAL +CC_ENGINE_TESTS PASS +rc=0 diff --git a/optimization/experiments/GH-224/raw/t0tests/test_cc_old.txt b/optimization/experiments/GH-224/raw/t0tests/test_cc_old.txt new file mode 100644 index 00000000..fb3ef240 --- /dev/null +++ b/optimization/experiments/GH-224/raw/t0tests/test_cc_old.txt @@ -0,0 +1,86 @@ +g++ -Isrc/solver -Wall -Wno-parentheses -O3 -g -D __STDC_LIMIT_MACROS -D __STDC_FORMAT_MACROS -DNDEBUG -std=c++17 -o build/test_cc_engine tests/test_cc_engine.cc build/SimpSolver.o build/Solver.o build/Options.o build/System.o build/cc_half.o build/cc_driver.o build/cc_ubsearch.o build/cc_aut.o -lz +In file included from src/solver/Solver.h:55, + from src/solver/SimpSolver.h:37, + from tests/../src/core/distqldpc.cc:47, + from tests/test_cc_engine.cc:102: +src/solver/utils/Options.h:285:29: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 285 | fprintf(stderr, "%4"PRIi64, range.begin); + | ^ +src/solver/utils/Options.h:291:29: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 291 | fprintf(stderr, "%4"PRIi64, range.end); + | ^ +src/solver/utils/Options.h:293:25: warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] + 293 | fprintf(stderr, "] (default: %"PRIi64")\n", value); + | ^ +tests/../src/core/distqldpc.cc: In function ‘void cc_sink_trap(void*)’: +tests/../src/core/distqldpc.cc:1864:29: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 1864 | if (pw >= 0) (void)write(pw, "RESULT -1 TRAP\n", 15); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~ +tests/../src/core/distqldpc.cc: In function ‘void pipe_bound(int, const char*, uint64_t)’: +tests/../src/core/distqldpc.cc:1309:29: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 1309 | if (len > 0) (void)write(pipe_w, buf, (size_t)len); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~ +tests/../src/core/distqldpc.cc: In function ‘void pipe_write_result(int, int, bool)’: +tests/../src/core/distqldpc.cc:171:20: warning: ignoring return value of ‘ssize_t write(int, const void*, size_t)’ declared with attribute ‘warn_unused_result’ [-Wunused-result] + 171 | (void)write(pipe_w, buf, (size_t)n); + | ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~ +./build/test_cc_engine +partI(a) (GH-157 charge): 20000 hitting-set instances, 0 bad (charge = tau on 15739; charge > pack on 4780) +partI(a) mutant 15 (charge + 1/D) exceeds tau on 17240 instances +partI(b) (GH-157 charge on the Part A halves): 345600 ladder runs (128 base subsets x 3 configurations x seeds 0..2), 0 bad, 9931487 charge prunes +mutant 15 (charge inflated by 1/D): 3408/38400 half ladders wrong +partA: 300 half instances (151 with verified orbits, 120 with all column weights odd, 113 without any nontrivial element), 115200 ladder runs over 128 rule subsets x 3 seeds, 0 bad +partA K (GH-138): 100 basis, 100 low-weight sets, 55 random sets; 80 instances where a minimum element meets a row of K in floor(|g|/2) qubits +partE (rotated surface codes d = 3, 4, X/Z swapped): 40 canonical checks, 0 bad +partF (MaxSAT -ub-pre): 1600 runs on 200 codes, 0 bad (first UB = d on 1426 runs, > d on 174 runs); mutant 1 200 runs, 0 bad; surface codes d = 3..5: 36 canonical/mutant-1 runs, 0 bad +partF mutant 2 (finder without detector check, words unverified): 4/200 code runs and 9/9 surface runs wrong +partG (a) encodings (binomial, sequential counter, native propagator; w = 1..14): 42 checks, 0 bad +partG (b) MaxSAT -stab-overlap: 3600 runs on 200 codes (178 codes where the rule removes an element of F of weight <= d + 2), 0 bad; surface codes d = 3..5: 24 runs, 0 bad +partG mutant 1 (limit floor(|g|/2) - 1): 110/424 runs failed, 40 with a wrong RESULT d OPTIMAL (0 on surface codes, 20 with the native propagator) +partG mutant 2 (parity rows of the half as g, unverified): 2/424 runs failed, 2 with a wrong RESULT d OPTIMAL (0 on surface codes) +partB: 200 CSS codes (52 with a verified dual map, 51 with X-half orbits, 76 with dX != dZ, 54 with all-odd Hz), 9200 driver runs, 0 bad, 0 RESULT -1 +partD (MaxSAT split, -oddcap-skip off/on): 400 runs on 200 codes (56 with an all-odd half), 0 bad +partE (ub-search finder): 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +partE (driver with ub-search): 1600 runs, 0 bad, 37 levels abandoned (U <= w) +GH-146 finder stern2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern1 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l0-fresh : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder dumer1-l2-w1-b3-r5 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder stern2-l3-w32-b2 : 400 halves x 300 iterations, 0 bad, 0 nondeterministic, reached d_h on 400/400 halves +GH-146 finder mutant 11 (collision mode, no detector check): trivial word returned on 41/41 halves +GH-146 CC driver in collision mode: 600 runs, 0 bad; mutant 11 8/8 runs stopped or wrong; mutant 12 8/8 failed, 8 with a wrong RESULT d OPTIMAL +GH-146 MaxSAT pre-pass in collision mode: 400 runs, 0 bad; mutant 1 200 runs, 0 bad; mutant 2 13/209 runs wrong (codes + surface) +GH-152 partG: 300 relabeled half instances, 365 Tanner generators (235 complete groups), 55 instances with coarser orbits than the GH-75 family, 115200 ladder runs (128 rule subsets x 3 seeds), 0 bad; generators violating the row classes 0; planted map preserved the row sets on 250 (185 with a complete group), missed 0 +GH-152 partH: 150 relabeled codes (100 hypergraph products, 34 with dX != dZ), 100 gain a verified dual map only through -cc-aut, 150 gain coarser X-half orbits; 3300 driver runs with -cc-aut=on, 0 bad; swap maps violating the classes 0 +mutant 13 (Tanner candidates and the cyclic shift i -> i+1 mod n kept without the GF(2) checks): half level 1408/19200 ladders wrong; driver 182/300 runs wrong or stopped +mutant 14 (Tanner swap map, or the identity, used as dual map without the GF(2) check): driver 49/150 runs wrong or stopped +GH-162 partT: 300 half instances (200 with orbits, 100 of them hidden -cc-aut orbits; 118 all-odd; 55 with a weight-2 row in K), 49 where the cut removes a minimum element (8 with orbits), 76800 ladder runs (64 rule subsets with overlap,tiebreak x 4 seeds; charge on seeds 1 and 3), 0 bad +mutant 17 (tiebreak without the first(g) exemption: naive tie cut): 5152/76800 half ladders wrong +mutant 18 (tiebreak order without the seed first: orbit-incompatible): 160/76800 half ladders wrong (160 with orbit seeds) +GH-183 partR: 300 half instances (197 with orbits, 89 with rows unreachable from qubit 0), 384000 ladder runs (64 rule subsets x {-, overlap, overlap+tiebreak} x 4 seeds with roworder bfs, charge on seeds 1 and 3; tiebreak also tbbase asc under bfs and index), 0 bad; bfs orders not using every row 0; instances where bfs changes the node count 66 +mutant 19 (bfs order drops a row): 9088/28800 half ladders wrong +mutant 20 (bfs without restart: unreachable rows dropped): 4656/28800 half ladders wrong +GH-181 partX: 300 half instances (262 with sparse rows, 98 with sparseov rows), 576000 ladder runs (128 base subsets x 15 token subsets; charge, tiebreak and bfs mixed in), 0 bad; runs where the rule acted: spack 62833, sprune 57784, ovtightx 22208, xuforbid 154831, xuforced 135021, xudead 148662 +mutant 22 (GH-181 sparse redundant row with one qubit flipped): 33092/268800 half ladders wrong +mutant 23 (GH-181 xorunit branches on an even unit row): 30919/307200 half ladders wrong +mutant 24 (GH-181 sparseov pair sums of H instead of K): 18602/153600 half ladders wrong +GH-195 partU: 300 half instances (200 with orbits), 259200 ladder runs (128 rule subsets with pack,erasure x 3 seeds x 2 gates, charge and bfs mixed in; 28800 with GH-181 tokens, 6278 of them pruned by erasure with redundant rows packed), 0 bad; erasure tests 122540960, prunes 121941834, give-ups 14376 with the production gate (240 instances pruned); tests 1586324, prunes 1534092 with the size gate (209 instances) +mutant 25 (erasure bound weakened by one: extra - 1 outside qubits): 1370/9600 half ladders wrong +mutant 26 (erasure with the fixed support S ignored): 2204/9600 half ladders wrong +GH-206 auto probe (Part B): 1800 driver runs (forced switch / stay / by time, finder on and off, tbbase asc), 0 bad +mutant 21 (auto probe of level w + 1, an aborted probe taken as refuted): 18/400 driver runs wrong or stopped +mutant 1 (forbidden set not restored): 988/19200 half ladders wrong +mutant 2 (packing prune >=): 4112/19200 half ladders wrong +mutant 3 (orbit seed rule off by one, instances with orbits): 1856/9664 half ladders wrong +mutant 4 (stop rule without other half's lb, forces sequential): schedule requested 58/200 runs wrong; default options 58/200 wrong +mutant 5 (parity rule forced on halves with an even column weight): 6976/11520 half ladders wrong +mutant 6 (leaf budget off by one): 2112/19200 half ladders wrong +mutant 7 (leaf closure without the detector check): 1760/19200 half ladders wrong +mutant 8 (overlap limit off by one): 2880/19200 half ladders wrong +mutant 9 (overlap with the parity checks H as K): 3776/19200 half ladders wrong +mutant 10 (overlap even-|g| tie cut): 2112/19200 half ladders wrong +mutant 11 (ub-search without the detector check; halves/codes where a trivial word is lighter than d): finder returned a trivial word on 33/33 halves; driver 8/8 runs stopped or wrong +mutant 12 (mutant 11 + words reported without verification): 8/8 driver runs failed, 8 of them with a wrong RESULT d OPTIMAL +CC_ENGINE_TESTS PASS +rc=0 diff --git a/optimization/experiments/GH-224/raw/t0tests/test_flags_new.txt b/optimization/experiments/GH-224/raw/t0tests/test_flags_new.txt new file mode 100644 index 00000000..72b5e4cd --- /dev/null +++ b/optimization/experiments/GH-224/raw/t0tests/test_flags_new.txt @@ -0,0 +1,4 @@ +bash tests/test_cc_flags.sh ./bin/distqldpc +test_cc_flags: 566 checks, 0 failed +CC_FLAG_TESTS PASS +rc=0 diff --git a/optimization/experiments/GH-224/raw/t2spot/config.json b/optimization/experiments/GH-224/raw/t2spot/config.json new file mode 100644 index 00000000..4c75b5de --- /dev/null +++ b/optimization/experiments/GH-224/raw/t2spot/config.json @@ -0,0 +1,38 @@ +{ + "arms": { + "old": [ + "/home/yfc/mac-agent-20261009/frozen/server-gh224-main-fecee8c/distqldpc", + [] + ], + "new": [ + "/home/yfc/mac-agent-20261009/frozen/server-gh224-2587b9d/distqldpc", + [] + ] + }, + "cpus": [ + 72, + 73, + 74, + 75, + 76, + 77, + 78, + 79, + 80, + 81, + 82, + 83, + 84, + 85, + 86, + 87, + 88, + 89 + ], + "reps": 3, + "seeds": 3, + "modes": "mto,nocard,cc", + "limit": 1800, + "units": 27, + "started": 1793816191.7475114 +} \ No newline at end of file diff --git a/optimization/experiments/GH-224/raw/t2spot/results.jsonl.gz b/optimization/experiments/GH-224/raw/t2spot/results.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..dbfb898acbaacfacf2bd9b9229d0af3f9b6b4d93 GIT binary patch literal 5103 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 R7-{v|{|hsxNd*`;0RXSS^!NY( literal 0 HcmV?d00001 diff --git a/optimization/experiments/GH-224/raw/t2spot/skips.log b/optimization/experiments/GH-224/raw/t2spot/skips.log new file mode 100644 index 00000000..b06b2c20 --- /dev/null +++ b/optimization/experiments/GH-224/raw/t2spot/skips.log @@ -0,0 +1 @@ +1793816192 cpu 84 busy, unit ('TN_108_2_12', 'nocard', 0) diff --git a/optimization/experiments/GH-224/raw/t3spot/config.json b/optimization/experiments/GH-224/raw/t3spot/config.json new file mode 100644 index 00000000..7d7b0af4 --- /dev/null +++ b/optimization/experiments/GH-224/raw/t3spot/config.json @@ -0,0 +1,32 @@ +{ + "arms": { + "old": [ + "/home/yfc/mac-agent-20261009/frozen/server-gh224-main-fecee8c/distqldpc", + [] + ], + "new": [ + "/home/yfc/mac-agent-20261009/frozen/server-gh224-2587b9d/distqldpc", + [] + ] + }, + "cpus": [ + 90, + 91, + 92, + 93, + 94, + 95, + 96, + 97, + 98, + 99, + 100, + 101 + ], + "reps": 3, + "seeds": 3, + "modes": "cc", + "limit": 1800, + "units": 9, + "started": 1793816191.745035 +} \ No newline at end of file diff --git a/optimization/experiments/GH-224/raw/t3spot/results.jsonl.gz b/optimization/experiments/GH-224/raw/t3spot/results.jsonl.gz new file mode 100644 index 0000000000000000000000000000000000000000..ed3a85d83ff1402c3d516806181bdf357c1103d0 GIT binary patch literal 1887 zcmV-l2cY;LiwFp{ck5~b19D|^b!>EVE^2dcZfpSUoy~3>Hw?$`eG0?pVjxodQeU7w z6h#g_7BEtKQ3SQ)z;=)pLEpWa-NZZMdM8s`Qy?3{fwLnmyyM|d)Snb3e>}f`*xa1| zaCZLFkFPGs;G%xX`S)k%4{tViWBd4j9vg0MuQp@D<>h#Fzu8>Xt5jd!ZQgx)_4;o6 zqi(OS#!89-B^+VKA2&CO=lLWbkddu&LM$A+8Nf8E{RU;O!d zZ3INK@sln;ebDXpW6pMWdjD{B`~G2jYiCy%?|-lFm*3uAo;}?C{pRf-XIJ%lyu7-& zu3gyn;JzofJ$c_lZ4d2xxb5M6kGlie_h{Rr`yOk1Y~NGbp0e+Oyj{c@E$n z1WcX;xJLn#X94bEz~pIwdmJ!%9y^mZDL35PM zk??$L8?k2UVebXbi5h#CymLK!dm|@t_GSuuceHmkcDB;P+zW&gPtBcC%t~u+Q*h?C zm8@-Fy|pKO;xT>>36iLWUGj2K@}!@CyZLZ5*keiT6*OuKLMox4LzGNlHO#tFwAZrQ zMtjVb&9O@4Sk=f(1gm>itE#EOb){&pg|&_Lq|{GtVdYFd+M|FqV10y@Qlf;b#d|HT zxlK+G_~Zl^pGn&y{t{e6|2OtlP!;Z}`e3o@1E1sf6RBDFrtnRlSyfR&$vsscELD9# z#j)!A5{BjrR41qw&WU?!K3J&vEQ(BAOG^cMS)DHEIf_c6u#*+AyzOOT|Na=?Td1SQ^QL&X05wo?1J2I!JWmBi!=xO{krFJ6BNxxY7e z9ujGtN4u7B;KF$n$$XNO)vq>2nlyaVBdmal(YR-Tf(ru_s$S8-s(vDkI*x#K3M&>Z zofD<7Fi~3L>4VZ(pC}cHnY80f3Yb-M-@F+t%$wQH8BNXY7soL{^HRro35gTtyi$ZWU$W)* zV-ZN~bPeBhoK;IuP*w`?=1aEN)CYKOcTwV~FAP{GumZ8IB>LuRwlvil+-3FEZ-BB8 zeZlG@t64~uaJ6K_+&; zW05{ZnG0%n+I`sx$lUN2@cXi(X6ygimt9FvBuJgp&bZXm``Q>}Dn1X1G4eZ(d?_`C z&fItC$7W2 zYUX{r-zfxUG1eP3Xog_6XKwd^;jf0%B8f_tm6SlM0i6<%EYb=A1z&EG(?MOCn@`{b*id8 zooYzd6Tr5}c&;Ug;7X#k#kLi#1V&D@W?^4*EJ1CE)=H`l*>XZ!NeawmuTm<8jTF$K zFt}4CX!#0dNP*Lp0yTCS##7^ZB(D|}M^8!B!HChMB~^=GQ=#P>V1v{XCNc zb6^{)HIr4LNJMLCf#V6RI`4yUQ(9BoM9RU@Eg=PF{40MWQb2G(5;a{(2^?Q>9c%uG zo4OF*p4!rKS`vjv4I$7#TXbM1u^vg+1vSgqP-`OE>`AC?O75shNE-Szgg`~L42EJo zy(=#BuFOT6ljLg~`HE^|2~5MgPLZXmT>(nY)OBqDmv~ngl5jC-sjauw?ob5K2(!Yw z3XRioQAwCra 1.25 +(pass = geomean < 1 and no cell > 1.25). Also: answers vs the stem, stdout identity (ref vs arm, per unit), and the +wait slack (wall - user - sys of the process tree) of fast runs, which shows the 10 ms polling floor. +usage: analyze.py REF ARM results.jsonl [--slack-max 0.2]""" +import collections, json, math, statistics as st, sys +REF, ARM, path = sys.argv[1], sys.argv[2], sys.argv[3] +SLACK_MAX = float(sys.argv[5]) if len(sys.argv) > 5 else 0.2 +R = [json.loads(l) for l in open(path)] +g = lambda v: math.exp(sum(map(math.log, v)) / len(v)) +U = collections.defaultdict(lambda: collections.defaultdict(list)) # (tier, mode, stem, seed) -> arm -> runs +for r in R: U[(r['tier'], r['mode'], r['stem'], r['seed'])][r['arm']].append(r) + + +def stem_d(stem): + f = stem.split('_')[3] + return int(f) if f.isdigit() else None + + +bad_ans = [(r['stem'], r['mode'], r['seed'], r['arm'], r['o'], r['rc']) for r in R + if r['rc'] != 0 or r['o'] is None or (stem_d(r['stem']) is not None and int(r['o'].split()[1]) != stem_d(r['stem']))] +C = collections.defaultdict(dict) +for (tier, mode, stem, seed), d in U.items(): + if REF in d and ARM in d: + C[(tier, mode, stem)][seed] = {a: (st.median(x['wall'] for x in d[a]), st.median(x['utime'] + x['stime'] for x in d[a])) + for a in (REF, ARM)} +print(f'## Cells ({ARM} vs {REF}; median over reps, then over seeds; wall in s)\n') +print(f'| Tier | Mode | Code | seeds | {REF} wall | {ARM} wall | wall ratio | cpu ratio |') +print('|---|---|---|---:|---:|---:|---:|---:|') +per = collections.defaultdict(list) +for (tier, mode, stem), d in sorted(C.items()): + w0 = st.median(v[REF][0] for v in d.values()); w1 = st.median(v[ARM][0] for v in d.values()) + c0 = st.median(v[REF][1] for v in d.values()); c1 = st.median(v[ARM][1] for v in d.values()) + per[(tier, mode)].append((w1 / w0, stem)) + print(f'| {tier} | {mode} | {stem} | {len(d)} | {w0:.4f} | {w1:.4f} | {w1 / w0:.3f} | {c1 / max(c0, 1e-9):.3f} |') +print(f'\n## Verdict per tier and mode\n') +print('| Tier | Mode | cells | geomean | worst cell | cells > 1.25 | verdict |') +print('|---|---|---:|---:|---|---:|---|') +for (tier, mode), v in sorted(per.items()): + rs = [x for x, _ in v]; mx = max(v) + print(f'| {tier} | {mode} | {len(v)} | {g(rs):.3f} | {mx[0]:.3f} ({mx[1]}) | {sum(x > 1.25 for x in rs)} | ' + f'{"PASS" if g(rs) < 1 and mx[0] <= 1.25 else "FAIL"} |') +for tier in sorted({t for t, _ in per}): + rs = [x for (t, _), v in per.items() if t == tier for x, _ in v] + print(f'| {tier} | all | {len(rs)} | {g(rs):.3f} | {max(rs):.3f} | {sum(x > 1.25 for x in rs)} | ' + f'{"PASS" if g(rs) < 1 and max(rs) <= 1.25 else "FAIL"} |') +# stdout identity per unit +same = differ = 0; nondet_ref = 0; diff_units = [] +for k, d in U.items(): + if REF not in d or ARM not in d: continue + s0 = {x['stdout'] for x in d[REF]}; s1 = {x['stdout'] for x in d[ARM]} + if len(s0) > 1: nondet_ref += 1 + if s0 == s1 and len(s0) == 1: same += 1 + else: differ += 1; diff_units.append((k, len(s0), len(s1), s0 == s1)) +ms_same = sum(1 for k, n0, n1, eq in diff_units + if len({tuple(sorted(x['stdout'].splitlines())) for a in (REF, ARM) for x in U[k][a]}) == 1) +print(f'\n## Logs\n\nunits with byte-identical stdout in every run of both arms: {same}; other units: {differ} ' + f'(of which {REF} itself varies across reps: {nondet_ref}; identical up to line order in every run: {ms_same})') +for k, n0, n1, eq in sorted(diff_units)[:40]: + print(f'- {k}: distinct stdouts {REF} {n0}, {ARM} {n1}, same set: {eq}') +print(f'\n## Answers\n\nruns: {len(R)}; rc != 0 or answer != stem: {len(bad_ans)} {bad_ans[:10]}') +# slack of fast runs +print(f'\n## Wait slack (wall - user - sys) of runs with wall < {SLACK_MAX} s, in ms\n') +print('| Arm | runs | median | p90 | max |') +print('|---|---:|---:|---:|---:|') +for a in (REF, ARM): + s = sorted(1000 * (r['wall'] - r['utime'] - r['stime']) for r in R if r['arm'] == a and r['wall'] < SLACK_MAX) + if s: print(f'| {a} | {len(s)} | {st.median(s):.2f} | {s[int(0.9 * (len(s) - 1))]:.2f} | {s[-1]:.2f} |') diff --git a/optimization/experiments/GH-224/runner/arms_gh224.json b/optimization/experiments/GH-224/runner/arms_gh224.json new file mode 100644 index 00000000..2fc482ef --- /dev/null +++ b/optimization/experiments/GH-224/runner/arms_gh224.json @@ -0,0 +1,2 @@ +{"old": ["/home/yfc/mac-agent-20261009/frozen/server-gh224-main-fecee8c/distqldpc", []], + "new": ["/home/yfc/mac-agent-20261009/frozen/server-gh224-2587b9d/distqldpc", []]} diff --git a/optimization/experiments/GH-224/runner/behaviour.sh b/optimization/experiments/GH-224/runner/behaviour.sh new file mode 100644 index 00000000..2bf849c7 --- /dev/null +++ b/optimization/experiments/GH-224/runner/behaviour.sh @@ -0,0 +1,36 @@ +#!/bin/bash +# GH-224 behaviour checks, old vs new binary, one pinned core (arg 1), 4 GB cap unless stated: +# (1) -cpu-lim wall deadline -> SIGKILL -> TIMEOUT with bounds (MaxSAT and CC); +# (2) a tighter memory cap (prlimit --as) that the child exceeds; +# (3) the child killed from outside (SIGKILL) -> UNKNOWN at once; (4) the child stopped and continued (SIGSTOP/SIGCONT). +# usage (from a worktree root): behaviour.sh CORE OLD NEW [WORKDIR] +C=$1; OLD=$2; NEW=$3; W=${4:-.} +run() { # run LABEL AS_BYTES ARGS... + local lab=$1 as=$2; shift 2 + for arm in old new; do + b=$OLD; [[ $arm == new ]] && b=$NEW + t0=$(date +%s.%N) + out=$(taskset -c $C prlimit --as=$as -- $b "$@" 2>&1 < /dev/null); rc=$? + t1=$(date +%s.%N) + printf '%-28s %-4s rc=%d wall=%.3f %s\n' "$lab" $arm $rc $(echo "$t1 - $t0" | bc) "$(echo "$out" | grep -E '^(c d_lb|c d_ub|c status|o |s |c d )' | tr '\n' '|' )" + done +} +run timeout-maxsat 4294967296 -cpu-lim=3 TN_250_10_15 +run timeout-cc 4294967296 -engine=cc -cpu-lim=3 $(ls data/matrices/tier5 | grep _Hx | grep BB_756 | sed s/_Hx.txt//) +run memcap-200M 209715200 -cpu-lim=60 $(ls data/matrices/tier5 | grep _Hx | grep LP_2610 | sed s/_Hx.txt//) +run memcap-60M-cc 62914560 -engine=cc -cpu-lim=60 $(ls data/matrices/tier5 | grep _Hx | grep LP_2610 | sed s/_Hx.txt//) +for arm in old new; do # (3) external SIGKILL of the child after 1 s + b=$OLD; [[ $arm == new ]] && b=$NEW + t0=$(date +%s.%N) + taskset -c $C prlimit --as=4294967296 -- $b -cpu-lim=60 TN_250_10_15 > $W/gh224_kill_$arm.txt 2>&1 < /dev/null & + p=$!; sleep 1; ch=$(pgrep -P $p -n) + tk=$(date +%s.%N); kill -9 $ch; wait $p; rc=$?; t1=$(date +%s.%N) + printf '%-28s %-4s rc=%d after-kill=%.3f %s\n' child-sigkill $arm $rc $(echo "$t1 - $tk" | bc) "$(grep -E '^(c status|s |o )' $W/gh224_kill_$arm.txt | tr '\n' '|')" +done +for arm in old new; do # (4) SIGSTOP the child for 2 s, then SIGCONT; the run must finish normally + b=$OLD; [[ $arm == new ]] && b=$NEW + t0=$(date +%s.%N) + taskset -c $C prlimit --as=4294967296 -- $b -cpu-lim=60 LP_442_68_10 > $W/gh224_stop_$arm.txt 2>&1 < /dev/null & + p=$!; sleep 0.5; ch=$(pgrep -P $p -n); kill -STOP $ch; sleep 2; kill -CONT $ch; wait $p; rc=$?; t1=$(date +%s.%N) + printf '%-28s %-4s rc=%d wall=%.3f %s\n' child-stop-cont $arm $rc $(echo "$t1 - $t0" | bc) "$(grep -E '^(c status|s |o )' $W/gh224_stop_$arm.txt | tr '\n' '|')" +done diff --git a/optimization/experiments/GH-224/runner/interleave.py b/optimization/experiments/GH-224/runner/interleave.py new file mode 100644 index 00000000..9bd15218 --- /dev/null +++ b/optimization/experiments/GH-224/runner/interleave.py @@ -0,0 +1,108 @@ +#!/usr/bin/env python3 +"""GH-224 interleaved A/B panel for yfclab2 (after GH-217 rep.py and gh217_queue.py). + +A unit is (stem, mode, seed). One unit runs REPS rounds on one pinned core; each round runs every arm once, and the arm +order rotates from round to round (old,new / new,old / ...), so slow phases of the machine hit every arm. Units are +spread over the given cores (72-103 only). Before each unit, the worker samples its core c and the SMT sibling c+128 for +0.5 s (/proc/stat) and skips the core for 20 s if either is busier than 15 %. Every process: + taskset -c C prlimit --as=4294967296 -- BIN ARM_ARGS MODE_ARGS -seed=S -cpu-lim=LIMIT CODE (stdin /dev/null) +Wall time = time.monotonic() around the process; user/sys time from wait4. stdout is stored per run. + +usage: interleave.py --arms ARMS.json --cpus 72-103 --reps 9 --seeds 5 --modes mto,nocard,cc --limit 600 --out DIR STEM... + ARMS.json: {"old": ["/path/bin", [extra args]], "new": [...]} (first arm = reference) + modes: mto = default MaxSAT (both cardinality encodings), nocard = MaxSAT -no-card, cc = -engine=cc (CC defaults) +""" +import argparse, glob, json, os, queue, subprocess, threading, time + +MODES = {'mto': [], 'nocard': ['-no-card'], 'cc': ['-engine=cc']} +ap = argparse.ArgumentParser() +ap.add_argument('--arms', required=True); ap.add_argument('--cpus', required=True) +ap.add_argument('--reps', type=int, default=9); ap.add_argument('--seeds', type=int, default=5) +ap.add_argument('--modes', default='mto,nocard,cc'); ap.add_argument('--limit', type=int, default=600) +ap.add_argument('--out', required=True); ap.add_argument('stems', nargs='+') +a = ap.parse_args() +arms = json.load(open(a.arms)) +cpus = [] +for part in a.cpus.split(','): + lo, _, hi = part.partition('-'); cpus += list(range(int(lo), int(hi or lo) + 1)) +assert cpus and all(72 <= c <= 103 for c in cpus), 'GH-224: yfclab2 logical CPUs 72-103 only' +os.makedirs(a.out + '/tmp', exist_ok=True) +done = set() +if os.path.exists(f'{a.out}/results.jsonl'): + for l in open(f'{a.out}/results.jsonl'): + r = json.loads(l); done.add((r['stem'], r['mode'], r['seed'])) + + +def code_of(stem): + f = glob.glob(f'data/matrices/*/{stem}_Hx.txt') + assert len(f) == 1, (stem, f) + return f[0][:-7], os.path.basename(os.path.dirname(f[0])) + + +units = [(s, m, seed) for s in a.stems for m in a.modes.split(',') for seed in range(a.seeds) if (s, m, seed) not in done] +q = queue.Queue(); [q.put(u) for u in units] +lock = threading.Lock() + + +def stat(): + d = {} + for l in open('/proc/stat'): + if l.startswith('cpu') and l[3].isdigit(): + f = l.split(); v = list(map(int, f[1:])); d[int(f[0][3:])] = (sum(v), v[3] + v[4]) + return d + + +def busy(c): + x = stat(); time.sleep(0.5); y = stat(); out = [] + for k in (c, c + 128): + t = y[k][0] - x[k][0]; out.append(1 - (y[k][1] - x[k][1]) / t if t else 0.0) + return max(out) + + +def run_one(cpu, b, args, code): + cmd = ['taskset', '-c', str(cpu), 'prlimit', '--as=4294967296', '--', b] + args + [f'-cpu-lim={a.limit}', code] + fo, fe = f'{a.out}/tmp/{cpu}.out', f'{a.out}/tmp/{cpu}.err' + with open(fo, 'w') as so, open(fe, 'w') as se: + t0 = time.monotonic() + p = subprocess.Popen(cmd, stdout=so, stderr=se, stdin=subprocess.DEVNULL) + _, st, ru = os.wait4(p.pid, 0) + wall = time.monotonic() - t0 + p.returncode = os.waitstatus_to_exitcode(st) + return wall, p.returncode, ru, open(fo).read(), open(fe).read() + + +def worker(cpu): + while True: + try: u = q.get_nowait() + except queue.Empty: return + tries = 0 + while busy(cpu) > 0.15: + tries += 1 + with lock: + with open(f'{a.out}/skips.log', 'a') as f: f.write(f'{time.time():.0f} cpu {cpu} busy, unit {u}\n') + time.sleep(20) + stem, mode, seed = u + code, tier = code_of(stem) + names = list(arms) + for rep in range(a.reps): + order = names[rep % len(names):] + names[:rep % len(names)] + for arm in order: + b, extra = arms[arm] + args = extra + MODES[mode] + [f'-seed={seed}'] + wall, rc, ru, out, err = run_one(cpu, b, args, code) + o = [l for l in out.splitlines() if l.startswith('o ')] + rec = dict(stem=stem, tier=tier, mode=mode, seed=seed, rep=rep, arm=arm, cpu=cpu, wall=round(wall, 6), + utime=round(ru.ru_utime, 4), stime=round(ru.ru_stime, 4), maxrss_kb=ru.ru_maxrss, + rc=rc, o=o[-1] if o else None, stdout=out, stderr=err[-2000:], start=time.time()) + with lock: + with open(f'{a.out}/results.jsonl', 'a') as f: f.write(json.dumps(rec) + '\n') + with lock: + print(f'{stem} {mode} s{seed} cpu{cpu} done', flush=True) + + +json.dump(dict(arms=arms, cpus=cpus, reps=a.reps, seeds=a.seeds, modes=a.modes, limit=a.limit, units=len(units), + started=time.time()), open(f'{a.out}/config.json', 'w'), indent=1) +ts = [threading.Thread(target=worker, args=(c,)) for c in cpus] +[t.start() for t in ts]; [t.join() for t in ts] +open(f'{a.out}/RUNNER_DONE', 'w').write(f'{time.time():.0f} {len(units)} units\n') +print('done', len(units), 'units') From 3d9fb885f3a2c965317855e8976ef6e87edc0182 Mon Sep 17 00:00:00 2001 From: yfc Date: Thu, 5 Nov 2026 05:34:05 +0800 Subject: [PATCH 3/3] GH-224: MODIFICATIONS note for the parent wait loop Co-Authored-By: Claude Opus 5.5 --- MODIFICATIONS.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/MODIFICATIONS.md b/MODIFICATIONS.md index 92cff272..574f4ea8 100644 --- a/MODIFICATIONS.md +++ b/MODIFICATIONS.md @@ -18,7 +18,7 @@ New code, not derived from MaxCDCL. | Area | Description | |------|-------------| | QLDPC encoding | MaxSAT formulation for stabilizer distance (Hx/Hz/Gx/Gz matrices) | -| Fork + pipe | Child runs solver; parent enforces wall-clock timeout (`-cpu-lim`) via `SIGKILL` | +| Fork + pipe | Child runs solver; parent enforces wall-clock timeout (`-cpu-lim`) via `SIGKILL`; the parent waits in `poll()` on the pipe and a SIGCHLD self-pipe, so it sees the child's exit at once (GH-224; was 10 ms `usleep` polling) | | Bounds sync | Parent reads `TRY` / `LB` / `UB` / `RESULT` lines from pipe | | Progress output | Default mode prints `c trying d:`, `c d_lb:`, `c d_ub:`, `c d:`, `o` | | Quiet / debug | Default `verb=0`; child stdout to `/dev/null`; `-v` / `-debug` for solver log |