{"id":1528,"job_id":2876,"problem_id":1,"lane_id":null,"type":"explore","user_id":1,"model":"deepseek-v4-flash","provider":"deepseek","report_md":"# Job 2876 — route 146 rev 4: the parallel split of the A144311 engine does not deliver its promised speedup\n\n## What was asked\nRoute 146's recorded `next_step`: take the published engine verbatim, split the outermost residue\nloop into 8 worker processes (\"the subtrees are independent\"), run n=20 under a fixed budget, and\nreplace #1527's extrapolated 79# price (11-28 CPU-h) with a measured one.\n\n## What is new (measured, this machine, this session)\nA split harness built from the **verbatim** OEIS source (copied from run-2026-09-23-ai):\n`work/a144311_split.cpp` partitions the outermost K=3 dfs levels across N workers; worker W takes\nexactly the tuples with lexicographic index t ≡ W (mod N). Its single-process path (`splitK=0`) is\nthe unchanged traversal and reproduces the published values (n=15 → 707, n=16 → 869, n=18 → 1079),\nso P1 of the pre-registration holds and the harness is observable to be inert on the verbatim path.\n\n**It gives no wall speedup.** Timed under `sah.py bounded` (`work/split.bounded.log`), N=10:\n\n| level | published | single-process, this machine | N=10 wall | combined value |\n|---|---|---|---|---|\n| n=15 | 707 | 4.59 s (#1527) | **4 s** | 707 ✓ |\n| n=16 | 869 | 16.27 s (re-measured this session) | **18 s** | 869 ✓ |\n| n=18 | 1079 | 236.6 s (#1527) | **277 s** | 1079 ✓ |\n| n=19 | 1283 | 761.5 s (#1527) | killed at the 330 s limit | — |\n\n**F2 fired** (speedup < 3×): the measured speedup is ≤ 1×, not the ~8× the next_step assumes.\n\n## Why, and what is actually established\nTwo measured facts, reported together so the negative is not overread:\n\n1. **The container has 4 CPUs, not 10.** `/sys/fs/cgroup/cpu.max` = `400000 100000` (quota 4.0\n   cores) while `nproc` and `/proc/cpuinfo` report 10. Ten workers therefore oversubscribe the\n   quota. This alone caps any parallel gain here at ~4×, and the concurrent loadavg (1.7–3.5)\n   reduces it further. So *this session's* wall numbers are not a clean efficiency measurement.\n2. **The top-level subtrees are not independent as the next_step asserts.** Running the ten\n   workers of n=16 **sequentially** costs **47.1 s** in total (per worker 3.04–6.13 s), against\n   **16.27 s** for the same binary's single-process path: **2.9× work inflation**. A true partition\n   of an independent search tree cannot cost more than the unpartitioned tree. The cause visible in\n   the source is that `dfs` reuses and mutates the *parent's* `arr` and `v` across the `for i`\n   loop (the post-recursion block pushes onto `arr` and updates `v` in place), so the i-loop's later\n   iterations start from state left by earlier ones; restarting that loop at a different offset in\n   each worker does not reconstruct the same traversal.\n\nEstablished: a top-level split of the published engine, as recorded, does not buy the promised\n8×; the assumption in the route's next_step (\"the subtrees are independent\") is contradicted by a\nmeasured 2.9× inflation, independently of the CPU-quota point above. Not established here: the\nexact split of the 2.9× between (2) and per-worker re-initialisation overhead — the session clock\n(freebuff deadline) cut the diagnostic that would settle it.\n\n## Consequence for the route\nThe 79#/83# CPU-hour prices of #1527 are unchanged and stand; they are CPU-hours, and the route's\n\"one long assignment on 8 cores\" plan is not yet supported by measurement. Nothing here changes\nthe certified rung R=306, A144311(23) ≥ 1841, or any mathematical claim.\n\n## Scope and non-claims\nVerified: the value reproductions at n=15/16/18 by the split harness; the single-process 16.27 s\nre-measurement; the cgroup quota; the ten sequential worker times. **Wall seconds, not nodes** — the\nengine has no counter and its per-node cost grows with `maxm`, so wall conflates node growth with\nper-node cost. Measurements are from one container with a 4-CPU quota and concurrent load; they are\nnot a machine-independent efficiency claim. No new bound, no new OEIS term, no G_2 or β_2 claim; the\ntwin-prime conjecture remains open. 49 of @Benjaminsen's returns wait for a verdict.\n\n## Cheapest next step (see `research.next_step`)\nRe-run the split on a host with ≥ 10 real cores, and make each worker initialise `arr`/`v` afresh per\ntuple (true independence) before quoting any speedup; then measure n=20 and the 79# frontier.\n","patch":null,"cpu_hours":0.5,"hashes":{"work/prereg.md":"6b95ddc4348bae820b56cb7f0190edb744e474cdfad0078f22600354c4f4317e","work/report.md":"0883dc432eea249d56ceb1293f581cf041587fca4e26fc719465a99432e23d08","work/PROGRESS.md":"7baca188fb566d9b82252d1c22016a5faa982923808185dd19289144eb5a0e75","work/run_split.sh":"3bb086ce37ffa2f7052d27ee68afca7293d1da8b53c8efc7b54cfa3890c37d75","work/build_payload.py":"4d86fc91db649d3576896ba29e70dfe795e714fb91fd7bd45321f1f38a43c4f6","work/a144311_split.cpp":"405c5e1957f0c28e7ba4fc21cd5eb7c15e80dcea7e0cd896f31352912994ddb0","work/split.bounded.log":"1d39b0fb7ba9ac2d374a6dc260790415acd8c4381e69e78896386d012aeee8e8","work/transcript.clean.jsonl":"d441ae52d40376f240386157d43bc67e5d12777108bee11d14995eacadafae24"},"author_rung":"verified","status":"recorded","final_rung":"recorded","created_at":"2026-09-23T12:47:09.951Z","repo_url":null,"commit":null,"cites":{"0":1527,"returns":[1527]},"tokens":{"log":"custom","input":0,"models":{"deepseek-v4-flash":0},"output":0,"source":"none","entries":0,"cache_read":0,"cache_write":0,"observed_models":["deepseek-v4-flash"]},"paper_slug":null,"revision_path":null,"revision_sha":null,"recipe_md":"All numerics from one deterministic re-run of a PUBLIC instrument plus one code change: OEIS A144311's linked C++ program (Jinyuan Wang), copied verbatim from run-2026-09-23-ai/work/a144311.cpp into work/a144311_split.cpp, which partitions the outermost K=3 dfs levels by tuple index; built g++ -O3; run as `python3 sah.py bounded --run run-2026-09-23-aj --limit 330 -- bash work/run_split.sh 10`. Control: the same binary with splitK=0 is the verbatim traversal and reproduces 707/869/1079. Predictions pre-registered in work/prereg.md before the timed run. Wall seconds, not nodes. Tool sah-tool/1.0.8; 4-CPU cgroup quota on this container.","verification":null,"target":null,"finding":null,"human_md":null,"provisional":false,"effects_applied_at":null,"effort":null,"also_fix":null,"transcript_omitted":{"share":0,"omitted":0,"outputs":0},"patch_hash":null,"superseded_by":null,"duplicate_of":null,"transcript_resubmitted_at":null,"file_notes":null,"research":{"outcome":"progress","route_id":146,"next_step":{"method":"1) Change a144311_split.cpp so each worker constructs arr and v from scratch for every assigned tuple (no inherited parent state), since the 2.9x inflation measured here shows the top-level loops are state-coupled. 2) Re-check n=15/16/18 against 707/869/1079 and confirm the sum of worker times falls back to the single-process time (no inflation). 3) On a host with >= 10 real cores (`cpu.max` quota, not nproc), run n=20 under `sah.py bounded` and check a(20)=1397 against OEIS; then n=22 for the measured 79# price. 4) Report node counts if a counter is added, since wall conflates node growth with the engine's per-node vector copies.","compute":{"ram_gb":2,"disk_gb":1,"cpu_hours":3},"failure":"Inflation persists after fresh-state workers, or n=20 still exceeds the bounded limit with < 3x speedup: then the published engine has no cheap parallel arm and the 79# decision needs a different instrument (or a published jtwin.c), with #1527's CPU-hour prices standing.","success":"Worker-time sum equals the single-process time at n=16 (independence restored) AND n=20 reproduces a(20)=1397 with >= 6x wall speedup on real cores, replacing #1527's extrapolated 11-28 CPU-h for 79# with a measured figure.","question":"With each worker initialising its own arr/v afresh per tuple (making the top-level subtrees genuinely independent), and on a host with at least 10 real cores rather than this container's 4-CPU quota, does the split of the published A144311 engine reproduce a(20) = 1397 with a >= 6x wall speedup, so the 79# (n=22) decision fits one assignment?","budget_hours":3,"required_tools":[],"required_sources":[]},"depends_on":[1527],"evidence_md":"Route 146's recorded next_step assumes the published A144311 engine parallelises by splitting its\noutermost residue loop (\"the subtrees are independent\"), promising ~8x so the 79# run fits one\nassignment. Measured here: the split reproduces the published values exactly but delivers NO wall\nspeedup (<= 1x), and the independence premise is contradicted.\n\nWHAT WAS ASKED. Take work/a144311.cpp (verbatim OEIS source, already used by #1527) and split the\ntop levels across 8 workers; measure n=20 and replace #1527's extrapolated 79# price.\n\nWHAT WAS DONE. Built work/a144311_split.cpp from the verbatim source: the outermost K levels of\ndfs() are partitioned by the lexicographic index t of the tuple of top-level choices, worker W\ntaking t % N == W. The single-process path (splitK=0) is the unchanged traversal. Pre-registered\nP1-P3/F1-F3 in work/prereg.md BEFORE the timed run.\n\nMEASURED (this container; each level under `sah.py bounded`; published values in brackets):\nsingle-process wall 4.59 s (n=15, 707), 16.27 s (n=16, 869), 236.6 s (n=18, 1079, from #1527,\nre-timed here), 761.5 s (n=19, 1283). With N=10 workers: n=15 wall 4 s -> 707; n=16 wall 18 s ->\n869; n=18 wall 277 s -> 1079; n=19 killed at the 330 s limit. P1 holds (every value reproduced);\nF2 FIRED (speedup < 3x; measured <= 1x).\n\nTWO MEASURED FACTS. (1) The container exposes /sys/fs/cgroup/cpu.max = \"400000 100000\", i.e. a\n4-CPU quota, while nproc and /proc/cpuinfo report 10 cores: ten workers oversubscribe the quota,\ncapping any parallel gain here at ~4x. (2) Independently of the quota, the subtrees are not the\nindependent subtrees assumed: running the ten n=16 workers SEQUENTIALLY costs 47.1 s in total\n(per worker 3.04-6.13 s) against 16.27 s for the same binary's single-process path — a 2.9x\nwork INFLATION. A true partition of an independent search tree can never cost more than the\nunpartitioned tree. Visible cause: dfs() reuses and mutates the parent's arr and v across the\n`for i` loop (the post-recursion block pushes onto arr and updates v in place), so later i\niterations depend on earlier ones and a worker started elsewhere does not reconstruct the same\ntraversal. NOT settled here (session clock): the exact split of the 2.9x between that state\ncoupling and per-worker re-initialisation overhead.\n\nCONSEQUENCE. The route's \"one code change, 8x\" plan is refuted by measurement as recorded; the\n79#/83# CPU-hour prices of #1527 are unchanged and stand (they are CPU-hours), but the parallel\narm must be rebuilt with genuinely independent workers before any speedup is quoted. Nothing here\ntouches the certified rung R=306 or A144311(23) >= 1841.\n\nSCOPE. Verified: value reproductions at n=15/16/18; the 16.27 s single-process re-measurement; the\ncgroup quota; the ten sequential worker times. Wall seconds, not nodes. One container, 4-CPU quota,\nconcurrent loadavg 1.7-3.5: not a machine-independent efficiency claim. No new bound and no new\nOEIS term. 49 of @Benjaminsen's returns wait for a verdict.","prior_art_md":"Updated online prior-work search, 2026-09-23 (for the parallelisation/instrument question).\n\nSOURCES READ. (1) OEIS A144311: 22 terms, a(22)=1709, a(23) NOT published; the ONLY linked\ninstrument is Jinyuan Wang's C++ program https://oeis.org/A144311/a144311.cpp.txt (the source used\nhere, via #1527's verbatim copy). (2) Web search 2026-09-23 for independent computations of a(23),\na 79#/83# refutation, or a parallel implementation of this engine: nothing — results are the twin\nprime literature (Ziller-Morack paired Jacobsthal function, arXiv:1706.00317, arXiv:1706.03668;\nFoo, MathOverflow 88323) and generic twin-prime pages, none computing A144311 or publishing cost\ndata. (3) Served corpus audit research/history/staging/audit-a144311-vocabulary.md: the sequence has\nno theory attached, no asymptotic, no published upper bound. (4) Sibling returns #1524, #1527 in\nthis folder: #1527 measured this same instrument single-core and priced 79# at 11-28 CPU-h.\n\nEXACT REMAINING GAP (unchanged by this run, now sharper). There is still no MEASURED 79# (n=22)\nfigure, and there is still no published parallel engine to borrow. This run adds that the obvious\nparallelisation is not free: it inflates total work ~2.9x and buys no wall time as implemented, so\nthe measured 79# price remains the single-core extrapolation of #1527.\n\nNO OVERLAP CLAIMED. Nothing here is a new mathematical bound or a new OEIS term; #1527's\ninstrument, its reproductions and its prices are used as given, and the certified rung R=306 is\nuntouched."},"research_route_id":146,"verification_plan":null,"verification_fingerprint":null,"review_admitted_at":null,"department_id":"dept_0e793a31e299699dfaaa6fee","run_id":"run_5bbf0315d5fde774ce12e583","triage_lead":null,"revision_base_sha":null,"integration":null,"resolves":null,"handle":"Benjaminsen","job_brief":"First update the online prior-work search for this experiment. If existing work covers it, record that and stop; otherwise run this bounded sprint on the uncovered uncertainty. Use cited published numbers during pursuit; their reproduction belongs in later validation. Build on the supplied findings; do not reconstruct earlier research. Return concrete progress and its cheapest credible check, a useful result for review, or a precisely scoped obstacle. Continued investment requires a distinct experiment.\n\nRead GET <project base>/research-routes/146 and return #1527. Return the ordinary report and transcript plus research: {route_id: 146, outcome: \"promising|progress|blocked|inconclusive|known|result\", evidence_md: \"what the evidence changes, <=4000 chars\", prior_art_md: \"updated online search record, sources and exact remaining gap, <=4000\", next_step: {question, method, success, failure, budget_hours} <only for continued pursuit>, obstacle: {kind, statement, assumptions, evidence, revisit_when} <for blocked/inconclusive>, depends_on: [<return ids actually required>]}. A result with a distinct next_step requests review and continues pursuit concurrently; omit next_step when no further experiment is warranted. Use known with prior_art_md and no next_step or obstacle when cited prior work already covers the proposed contribution; it stops automatic investigation without requesting review. The evidence grade is separate. Do not close a broad route because one proof attempt failed.","review_deferred":false,"in_triage":false,"triage":[],"verification_runs":[],"verification_state":null,"verification_summary":null,"canonical_return":null,"review_history":[],"dependencies":[{"id":"1527","status":"recorded","final_rung":"recorded","canonical_return_id":null}],"research_url":"/projects/twin-primes/research-routes/146","transcript_url":"/projects/twin-primes/return/1528/transcript","files":[],"decided_by_author_handle":false,"reviews":[],"decisions":[],"decision":null,"duplicates":[],"cited_messages":[]}