From f47f0caa14889013436438f2bcb2c482a58e630b Mon Sep 17 00:00:00 2001 From: eunhhu Date: Fri, 9 Oct 2026 15:41:24 +0100 Subject: Research 138: the batch executor's stage 5, design 025 made: sums into cells at once in integers (join 116.0 to 110.5 ms, short of 108: what is left is the same cells' memory, read, add and write again), decide's bit found once (BFS 23.2, short of 21.5: the tail's time was its loads more than its instructions), and the batch executor's loops aligned to 64-byte lines (the hot loops' placement had swung knapsack 6% at the same instructions; the lists' loops aligned too cost the bank's queries 1-2% more instructions, so not they); against b9 matmul -36%, knapsack -28%, roots -7.6%, join -6.2%, BFS -3.9%, the executor alone, the bank queries and TPC-C (+0.7%) as they were; 025's bars and what each stage measured; 024 and CHECKPOINT say so --- CHECKPOINT.md | 2 +- docs/design/024-batch-executor.md | 2 +- docs/design/025-batch-programs.md | 9 +- docs/research/138-batch-executor-stage-five.md | 79 +++++++ .../040-against-c/2026-10-09-counts-s19.jsonl | 4 + .../040-against-c/2026-10-09-counts-s20.jsonl | 4 + .../experiments/040-against-c/2026-10-09-load.txt | 12 + .../040-against-c/2026-10-09-queries-s20-13.jsonl | 4 + .../040-against-c/2026-10-09-queries-s20-14.jsonl | 4 + .../040-against-c/2026-10-09-queries-s20-15.jsonl | 4 + .../040-against-c/2026-10-09-queries-s20-16.jsonl | 4 + .../040-against-c/2026-10-09-queries-s20-17.jsonl | 4 + .../040-against-c/2026-10-09-queries-s20-18.jsonl | 4 + .../040-against-c/2026-10-09-queries-s9-13.jsonl | 4 + .../040-against-c/2026-10-09-queries-s9-14.jsonl | 4 + .../040-against-c/2026-10-09-queries-s9-15.jsonl | 4 + .../040-against-c/2026-10-09-queries-s9-16.jsonl | 4 + .../040-against-c/2026-10-09-queries-s9-17.jsonl | 4 + .../040-against-c/2026-10-09-queries-s9-18.jsonl | 4 + .../040-against-c/2026-10-09-tpcc-s20-13.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s20-14.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s20-15.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s20-16.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s20-17.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s20-18.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s9-13.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s9-14.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s9-15.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s9-16.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s9-17.jsonl | 3 + .../040-against-c/2026-10-09-tpcc-s9-18.jsonl | 3 + .../041-batches/2026-10-09-counts.jsonl | 50 +++++ .../experiments/041-batches/2026-10-09-pairs.jsonl | 246 +++++++++++++++++++++ research/experiments/041-batches/runs.sh | 2 + 34 files changed, 489 insertions(+), 5 deletions(-) create mode 100644 docs/research/138-batch-executor-stage-five.md create mode 100644 research/experiments/040-against-c/2026-10-09-counts-s19.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-counts-s20.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-load.txt create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s20-13.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s20-14.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s20-15.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s20-16.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s20-17.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s20-18.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s9-13.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s9-14.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s9-15.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s9-16.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s9-17.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-queries-s9-18.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s20-13.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s20-14.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s20-15.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s20-16.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s20-17.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s20-18.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s9-13.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s9-14.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s9-15.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s9-16.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s9-17.jsonl create mode 100644 research/experiments/040-against-c/2026-10-09-tpcc-s9-18.jsonl create mode 100644 research/experiments/041-batches/2026-10-09-counts.jsonl create mode 100644 research/experiments/041-batches/2026-10-09-pairs.jsonl diff --git a/CHECKPOINT.md b/CHECKPOINT.md index ee9a421..a3bbca4 100644 --- a/CHECKPOINT.md +++ b/CHECKPOINT.md @@ -13,7 +13,7 @@ | 영역 | 확인한 것 | 근거 | |---|---|---| | 앱 표현 | 상태(수, `bool`, 정확한 64비트 정수 `i64`, text와 커서·마크, 레코드의 리스트와 키 있는 리스트, 인덱스), 입력(키, text, 필드 있는 메시지, 타이머), 원자적 이벤트 핸들러, 순수 보기(조건식, 표와 걸러진 표, count·sum·max·min·first), `fn`·`use` 라이브러리, text 비교, 시간(`now`, `every`, `floor`, `%`). 로드할 때 타입·스택·합류·커서와 인덱스의 소속을 모두 검증하고 이벤트의 실행량에 상한이 있다 | 008, [016](docs/design/016-bool-and-i64.md), aup `docs/design/002-dsl-direction.md`, aup `make check`(파이썬 참조 모델 대조, 진단 223건) | -| 수명과 계산 | 값의 수명은 선언이 말한다: `state`(저장), `transient state`(앱이 도는 동안: 저장소에 쓰지 않고 다시 시작하면 초기값, SD 카드에서 쓰기 17배), `let`(이벤트 동안). 핸들러와 보기가 계산한다: 이벤트의 리스트(`let seen: list of Seen by node`), 세는 `for i in a .. b`, `break`, 8겹까지의 중첩, 그리고 `view 이름(인자) { … return … }`(스냅숏에서 돌아 소유자를 막지 않는다). 모든 반복은 시작할 때 횟수의 상한을 갖고, 모든 이벤트와 보기는 실행량 예산(정하지 않으면 2^28 명령)과 메모리 몫(2^28 바이트) 안에서 끝난다. 노드 10만·간선 100만의 BFS 한 이벤트가 HTTP로 90 ms였고(처음 397, 020 뒤 191; CPython 452, C 9.1, 123), 022 뒤 코어는 7.4 ms다(같은 프로세스의 C 9.9): 많이 찾는 저장된 리스트를 배열과 칸의 색인으로 펴고, 열을 값만큼 좁히고, 루프 묶음을 레지스터의 기계어로 돈다(리눅스 AArch64의 JIT; 다른 곳은 실행기, 답은 같다). 다만 C를 넘은 것은 미리 읽기 덕이고, 끄면 15.7 ms로 C의 1.57배다. 일곱 가지 일(실수 루프, 배낭, 정렬, 조인, 텍스트, 행렬, BFS)로 C와 견주면 124에서는 3–300배 느렸고, 023의 계층과 표현(HASHED: 차례를 어긴 키는 해시 표의 칸에, 위치가 필요할 때 정렬)으로 지금은 1.19–5.58배(기하 평균 1.92)다(125). Pure의 표현과 뜻대로 손으로 쓴 바닥은 C의 0.90배이고 뜻의 검사는 끌어내면 0–3%라, 막는 것은 실행 계층이다(124). 모든 블록을 SSA로 올리는 최적화 계층(023)의 첫 걸음들이 들어갔고, 텍스트(실행기로 돈다)와 BFS(계층이 덧붙이기를 못 한다)가 남았다. 기계어를 만들지 않는 길로, 루프를 회차 256개의 묶음으로 돌고 연산마다 빌드 때 만든 C 루프를 쓰는 묶음 실행기(024)를 시제품으로 재니 연산을 따로 해석하면 roots 0.99배, 배낭 0.71배(4바이트 레인), BFS 1.03배, join 1.77배, 행렬 곱 2.50배이고, 행렬 곱은 곱해 더하기를 합치면 0.94배였다(계층 1.20–2.46배, 기하 평균 1.92 대 1.58, 합친 꼴로 1.24; 041, 손으로 짠 천장). 1단계(세는 루프의 레인 꼴 몸체, 회차 1024개씩)가 들어가 knapsack이 실행기에서 1,041 ms에서 13.6 ms가 됐다(계층 7.5, 안쪽 루프는 1.17배). 묶음 루프가 없는 모듈의 실행기는 명령과 사이클이 그대로다(126). 2단계(중첩 루프를 레인마다 함께, `x = x + e`·`min`·`max` 모으기)로 roots가 9.13 ms가 되어 기계어 없이 계층(9.57)보다 빠르고, matmul은 914.9에서 50.0 ms다(계층 14.3, 127). 덧붙이기, 점화식, 칸에 더하기, 걷기를 묶어 join이 실행기의 423에서 161 ms가 됐다(계층 74). 남은 값은 덧붙이기 하나 약 100 ns(실행기와 같다), join의 점화식 회차당 약 60 ns, 레인이 적은 중첩 몸체의 해석이고, BFS는 묶이지 않아 기계어를 아직 걷어낼 수 없다(128). 덧붙이기를 리스트의 한 호출로, 점화식을 레지스터 꼴로, 모으기의 끝을 차례 없이 하자 knapsack 10.8, matmul 36.4, join 118, sort 55.5 ms가 됐다(기계어 7.9, 14.2, 72–79, 35.6; 129). BFS는 프런티어 묶음으로 셈하면 차례대로 할 꼬리가 간선의 약 10%다(129). 가드 루프, 묶음 안의 걷기, 커지기만 하는 걸러내기로 BFS도 묶음으로 돌아 93에서 41 ms가 됐다(기계어 7.7, C 10). 간선당 명령 211개 대 38.5개이고, 이 꼴의 바닥(약 50개)이 기계어 위라서 기계어를 걷어내려면 합친 연산이 필요하다(130). 범용 장치만으로(같은 코드의 값 다시 쓰기, 고르기, 비트로 묻기, 아핀 `first + i`) 간선당 112개, 24.0 ms가 됐고, 범용의 바닥은 기계어의 약 2배로 보인다(131). 레지스터 타일 해석기를 시제품으로 재니(133) 산수의 사슬은 C보다 빠르고(roots 5.8 ms) 모으기가 있는 몸체는 졌으며(배낭 4배, BFS 2.4배), 같은 자리에서 꽉 짠 훑기가 BFS 기계어의 1.2배·배낭 0.4배였다: 훑기의 꼴은 옳고 3배는 구현이라, 묶음 프로그램을 로드 때 한 번 만들고 루프를 꽉 짜는 길로 간다. 그 값을 재니 배낭에서 묶음마다 0.90 µs(시간의 38%)이고, 블록의 모양에서 나오는 사실은 로드 때, 값에서 나오는 사실만 묶음마다 보는 설계를 다섯 단계로 세웠다(025). 1단계(블록의 사실을 로드 때 한 번)로 배낭의 묶음마다 값이 0.90에서 0.68 µs, 배낭이 11.48에서 10.34 ms가 됐다. 막대(0.60 µs, 10.3 ms)에는 못 미쳤고, 남은 값은 명령마다의 해석이다(134). 2단계(균일·아핀 조각을 스칼라로 한 번에)는 matmul을 38.2에서 36.1 ms로 줄였지만(중첩 회차의 해석) 배낭의 묶음마다 값은 0.63 µs에 머물렀다: 그 값은 키로 찾기와 레인 연산의 준비에 있다(135). 다음은 요소마다다. 3단계(4바이트 곱하기, 레인 없이 시작하는 모으기, 리스트의 칸을 묶음에 한 번)로 b9 대비 matmul 40.0 → 26.0 ms, knapsack 11.5 → 10.1, roots 9.0 → 8.3이 됐고(기계어 14.2, 7.9, 9.57), 실행기와 은행 질의의 명령 수, TPC-C는 그대로다(136). 4단계(열을 제자리에서 읽기, 비교가 레인을 세기)로 knapsack이 8.25 ms가 되어 기계어(7.9)의 1.04배다. 남은 큰 틈은 matmul(26.3 대 14.2: 안쪽 회차마다의 해석)과 BFS(24.1 대 7.7: 후보 꼬리)다(137). TPC-C −2.8%(기준 3% 안), 은행 질의의 명령 수는 1% 안. 같은 계산이 Pi(JIT)·WSL2·M3 Mac에서 같다. 같은 탐색을 보기로 하면 쓰기는 CPU를 나누는 만큼만 줄고(이벤트로 하면 0.2%로 멈춘다), 본문이 있는 보기는 보기의 스레드(`--view-workers`)가 계산해 연결 스레드를 막지 않는다(쓰기 최대 지연이 CPU만 나눌 때의 1.0배, 연결 스레드 하나에서 묻는 연결 둘이 1.95배) | [018](docs/design/018-lifetimes-and-computation.md), [020](docs/design/020-computing-faster.md), [117](docs/research/117-transient-states.md), [118](docs/research/118-computing-in-one-event.md), [119](docs/research/119-views-that-compute.md), [121](docs/research/121-computing-faster.md), [122](docs/research/122-views-off-the-connection-threads.md), [021](docs/design/021-past-c.md), [123](docs/research/123-past-c.md), [022](docs/design/022-arrays-and-registers.md), [124](docs/research/124-against-c.md), [023](docs/design/023-optimizing-tier.md), [125](docs/research/125-tier-first-steps.md), [024](docs/design/024-batch-executor.md), [126](docs/research/126-batch-executor-stage-one.md), [127](docs/research/127-batch-executor-stage-two.md), [128](docs/research/128-batch-executor-tables-and-costs.md), [129](docs/research/129-batch-executor-costs-cut.md), [130](docs/research/130-batch-executor-frontiers.md), [131](docs/research/131-batch-executor-general-cuts.md), [132](docs/research/132-batch-executor-floor-and-the-way-past.md), [133](docs/research/133-register-tiles-measured.md), [025](docs/design/025-batch-programs.md), [134](docs/research/134-batch-plans-stage-one.md), [135](docs/research/135-batch-plans-stage-two.md), [136](docs/research/136-batch-executor-stage-three.md), [137](docs/research/137-batch-executor-stage-four.md) | +| 수명과 계산 | 값의 수명은 선언이 말한다: `state`(저장), `transient state`(앱이 도는 동안: 저장소에 쓰지 않고 다시 시작하면 초기값, SD 카드에서 쓰기 17배), `let`(이벤트 동안). 핸들러와 보기가 계산한다: 이벤트의 리스트(`let seen: list of Seen by node`), 세는 `for i in a .. b`, `break`, 8겹까지의 중첩, 그리고 `view 이름(인자) { … return … }`(스냅숏에서 돌아 소유자를 막지 않는다). 모든 반복은 시작할 때 횟수의 상한을 갖고, 모든 이벤트와 보기는 실행량 예산(정하지 않으면 2^28 명령)과 메모리 몫(2^28 바이트) 안에서 끝난다. 노드 10만·간선 100만의 BFS 한 이벤트가 HTTP로 90 ms였고(처음 397, 020 뒤 191; CPython 452, C 9.1, 123), 022 뒤 코어는 7.4 ms다(같은 프로세스의 C 9.9): 많이 찾는 저장된 리스트를 배열과 칸의 색인으로 펴고, 열을 값만큼 좁히고, 루프 묶음을 레지스터의 기계어로 돈다(리눅스 AArch64의 JIT; 다른 곳은 실행기, 답은 같다). 다만 C를 넘은 것은 미리 읽기 덕이고, 끄면 15.7 ms로 C의 1.57배다. 일곱 가지 일(실수 루프, 배낭, 정렬, 조인, 텍스트, 행렬, BFS)로 C와 견주면 124에서는 3–300배 느렸고, 023의 계층과 표현(HASHED: 차례를 어긴 키는 해시 표의 칸에, 위치가 필요할 때 정렬)으로 지금은 1.19–5.58배(기하 평균 1.92)다(125). Pure의 표현과 뜻대로 손으로 쓴 바닥은 C의 0.90배이고 뜻의 검사는 끌어내면 0–3%라, 막는 것은 실행 계층이다(124). 모든 블록을 SSA로 올리는 최적화 계층(023)의 첫 걸음들이 들어갔고, 텍스트(실행기로 돈다)와 BFS(계층이 덧붙이기를 못 한다)가 남았다. 기계어를 만들지 않는 길로, 루프를 회차 256개의 묶음으로 돌고 연산마다 빌드 때 만든 C 루프를 쓰는 묶음 실행기(024)를 시제품으로 재니 연산을 따로 해석하면 roots 0.99배, 배낭 0.71배(4바이트 레인), BFS 1.03배, join 1.77배, 행렬 곱 2.50배이고, 행렬 곱은 곱해 더하기를 합치면 0.94배였다(계층 1.20–2.46배, 기하 평균 1.92 대 1.58, 합친 꼴로 1.24; 041, 손으로 짠 천장). 1단계(세는 루프의 레인 꼴 몸체, 회차 1024개씩)가 들어가 knapsack이 실행기에서 1,041 ms에서 13.6 ms가 됐다(계층 7.5, 안쪽 루프는 1.17배). 묶음 루프가 없는 모듈의 실행기는 명령과 사이클이 그대로다(126). 2단계(중첩 루프를 레인마다 함께, `x = x + e`·`min`·`max` 모으기)로 roots가 9.13 ms가 되어 기계어 없이 계층(9.57)보다 빠르고, matmul은 914.9에서 50.0 ms다(계층 14.3, 127). 덧붙이기, 점화식, 칸에 더하기, 걷기를 묶어 join이 실행기의 423에서 161 ms가 됐다(계층 74). 남은 값은 덧붙이기 하나 약 100 ns(실행기와 같다), join의 점화식 회차당 약 60 ns, 레인이 적은 중첩 몸체의 해석이고, BFS는 묶이지 않아 기계어를 아직 걷어낼 수 없다(128). 덧붙이기를 리스트의 한 호출로, 점화식을 레지스터 꼴로, 모으기의 끝을 차례 없이 하자 knapsack 10.8, matmul 36.4, join 118, sort 55.5 ms가 됐다(기계어 7.9, 14.2, 72–79, 35.6; 129). BFS는 프런티어 묶음으로 셈하면 차례대로 할 꼬리가 간선의 약 10%다(129). 가드 루프, 묶음 안의 걷기, 커지기만 하는 걸러내기로 BFS도 묶음으로 돌아 93에서 41 ms가 됐다(기계어 7.7, C 10). 간선당 명령 211개 대 38.5개이고, 이 꼴의 바닥(약 50개)이 기계어 위라서 기계어를 걷어내려면 합친 연산이 필요하다(130). 범용 장치만으로(같은 코드의 값 다시 쓰기, 고르기, 비트로 묻기, 아핀 `first + i`) 간선당 112개, 24.0 ms가 됐고, 범용의 바닥은 기계어의 약 2배로 보인다(131). 레지스터 타일 해석기를 시제품으로 재니(133) 산수의 사슬은 C보다 빠르고(roots 5.8 ms) 모으기가 있는 몸체는 졌으며(배낭 4배, BFS 2.4배), 같은 자리에서 꽉 짠 훑기가 BFS 기계어의 1.2배·배낭 0.4배였다: 훑기의 꼴은 옳고 3배는 구현이라, 묶음 프로그램을 로드 때 한 번 만들고 루프를 꽉 짜는 길로 간다. 그 값을 재니 배낭에서 묶음마다 0.90 µs(시간의 38%)이고, 블록의 모양에서 나오는 사실은 로드 때, 값에서 나오는 사실만 묶음마다 보는 설계를 다섯 단계로 세웠다(025). 1단계(블록의 사실을 로드 때 한 번)로 배낭의 묶음마다 값이 0.90에서 0.68 µs, 배낭이 11.48에서 10.34 ms가 됐다. 막대(0.60 µs, 10.3 ms)에는 못 미쳤고, 남은 값은 명령마다의 해석이다(134). 2단계(균일·아핀 조각을 스칼라로 한 번에)는 matmul을 38.2에서 36.1 ms로 줄였지만(중첩 회차의 해석) 배낭의 묶음마다 값은 0.63 µs에 머물렀다: 그 값은 키로 찾기와 레인 연산의 준비에 있다(135). 다음은 요소마다다. 3단계(4바이트 곱하기, 레인 없이 시작하는 모으기, 리스트의 칸을 묶음에 한 번)로 b9 대비 matmul 40.0 → 26.0 ms, knapsack 11.5 → 10.1, roots 9.0 → 8.3이 됐고(기계어 14.2, 7.9, 9.57), 실행기와 은행 질의의 명령 수, TPC-C는 그대로다(136). 4단계(열을 제자리에서 읽기, 비교가 레인을 세기)로 knapsack이 8.25 ms가 되어 기계어(7.9)의 1.04배다. 남은 큰 틈은 matmul(26.3 대 14.2: 안쪽 회차마다의 해석)과 BFS(24.1 대 7.7: 후보 꼬리)다(137). 5단계(칸에 더하기를 정수로 한 번에, `decide`의 비트를 한 번, 묶음 실행기의 루프 정렬)로 025를 마쳤다: b9 대비 matmul 40.0 → 25.8 ms, knapsack 11.5 → 8.2, roots 9.0 → 8.3, join 117.9 → 110.5, BFS 24.2 → 23.2(기계어 14.2, 7.9, 9.57, 84.6, 7.7); 실행기의 명령, 은행 질의, TPC-C는 그대로다(138). 남은 틈(matmul의 안쪽 회차, BFS)은 이 해석기 꼴의 바닥이다. TPC-C −2.8%(기준 3% 안), 은행 질의의 명령 수는 1% 안. 같은 계산이 Pi(JIT)·WSL2·M3 Mac에서 같다. 같은 탐색을 보기로 하면 쓰기는 CPU를 나누는 만큼만 줄고(이벤트로 하면 0.2%로 멈춘다), 본문이 있는 보기는 보기의 스레드(`--view-workers`)가 계산해 연결 스레드를 막지 않는다(쓰기 최대 지연이 CPU만 나눌 때의 1.0배, 연결 스레드 하나에서 묻는 연결 둘이 1.95배) | [018](docs/design/018-lifetimes-and-computation.md), [020](docs/design/020-computing-faster.md), [117](docs/research/117-transient-states.md), [118](docs/research/118-computing-in-one-event.md), [119](docs/research/119-views-that-compute.md), [121](docs/research/121-computing-faster.md), [122](docs/research/122-views-off-the-connection-threads.md), [021](docs/design/021-past-c.md), [123](docs/research/123-past-c.md), [022](docs/design/022-arrays-and-registers.md), [124](docs/research/124-against-c.md), [023](docs/design/023-optimizing-tier.md), [125](docs/research/125-tier-first-steps.md), [024](docs/design/024-batch-executor.md), [126](docs/research/126-batch-executor-stage-one.md), [127](docs/research/127-batch-executor-stage-two.md), [128](docs/research/128-batch-executor-tables-and-costs.md), [129](docs/research/129-batch-executor-costs-cut.md), [130](docs/research/130-batch-executor-frontiers.md), [131](docs/research/131-batch-executor-general-cuts.md), [132](docs/research/132-batch-executor-floor-and-the-way-past.md), [133](docs/research/133-register-tiles-measured.md), [025](docs/design/025-batch-programs.md), [134](docs/research/134-batch-plans-stage-one.md), [135](docs/research/135-batch-plans-stage-two.md), [136](docs/research/136-batch-executor-stage-three.md), [137](docs/research/137-batch-executor-stage-four.md), [138](docs/research/138-batch-executor-stage-five.md) | | 보기 밀기 | 보기의 `GET`에 `Accept: text/event-stream`이면 그 값을 민다(SSE, 브라우저의 `EventSource` 그대로). 같은 보기와 인자를 보는 구독자는 계산 한 번을 나누고, 값이 바뀔 때만, 많아야 10 ms마다 한 번 보낸다. 느린 구독자에게는 가장 새 값 하나만 기다리게 한다. 모듈이 바뀌어도 같은 이름의 보기로 이어 가고, 토큰을 빼면 끊는다. 구독자 1,000에 쓰기 초당 100번까지 신선도 p99 11 ms 이하, 초당 1번이면 100 ms 폴링의 약 10분의 1 CPU(이벤트 하나와 요청 하나의 값이 같아 메시지 수의 비다), 구독자 1만에 구독자마다 0.3–0.4 KiB, 1만에게 퍼지기까지 p99 45 ms | [019](docs/design/019-pushing-views.md), [120](docs/research/120-pushing-views.md) | | 영속 | 선언한 상태가 곧 영속 상태다. 목록은 이미지와 로그(저장마다 바뀐 기록 한 항목, 재사용하는 할당 구간, 앞 항목의 다이제스트로 이어짐)에, 나머지는 트리 저장소에(커밋당 한 연속 구간과 동기화 한 번). 이벤트 묶음마다 저장 한 번, 이미지는 소유자 밖에서 체크포인트. `kill -9`와 커밋 각 단계의 죽음 뒤 확인 응답한 이벤트가 모두 남는다. 레코드·키가 바뀐 모듈로 바꿔도 데이터가 이름으로 옮겨진다 | [076](docs/research/076-one-sync-commit.md), [081](docs/research/081-tail-records.md), [092](docs/research/092-tpcc.md), 008 상태 영속·교체 | | 인터페이스 | 한 명세가 TUI(셀 단위 갱신), CLI, 문장(NUI), 웹 GUI가 된다. 저장하면 실행 중인 앱이 상태를 이어 새 모듈로 바뀐다(`aup watch`, `vega … --watch`) | Vega `docs/design/001-first-component.md`, Vega `make check`(가상 터미널, 헤드리스 Chromium 포함) | diff --git a/docs/design/024-batch-executor.md b/docs/design/024-batch-executor.md index 0605c4d..a0f9ce0 100644 --- a/docs/design/024-batch-executor.md +++ b/docs/design/024-batch-executor.md @@ -1,6 +1,6 @@ # 024 — 묶음 실행기: 기계어 없이 루프를 C 가까이 -작성일: 2026-10-05. 상태: 제안과 시제품([041](../../research/experiments/041-batches/)). 1단계를 만들었다([126](../research/126-batch-executor-stage-one.md): knapsack이 실행기에서 1,041 ms → 13.6 ms, 안쪽 루프는 계층의 1.17배로 기준 미달). 2단계(중첩 루프를 함께, 모으기)를 만들었다([127](../research/127-batch-executor-stage-two.md): roots 9.13 ms로 계층 9.57보다 빠름, matmul 50 ms). 4단계의 앞 절반(덧붙이기), 5단계(점화식), 칸에 더하기, 걷기를 만들었다([128](../research/128-batch-executor-tables-and-costs.md): join이 실행기의 423에서 161 ms, 계층 74). 남은 값은 덧붙이기 하나 약 100 ns, join의 점화식 회차당 약 60 ns, 레인이 적은 중첩 몸체의 해석이고, BFS는 아직 묶이지 않는다(바뀌는 개수, 커지기만 하는 걸러내기, 중첩 걷기가 필요하다). 그 셋을 줄였다([129](../research/129-batch-executor-costs-cut.md): 한꺼번에 덧붙이기, 점화식을 레지스터 꼴로, 차례 없는 모으기; knapsack 10.8, matmul 36.4, join 118 ms, roots 8.87로 계층 9.57보다 빠름). BFS를 셈하니 차례대로 할 꼬리가 간선의 약 10%라, 꼬리를 묶음의 C로 하고 간선을 레인으로 펼치면 계층과 겨룰 만하다(약 6–7 ms 예상). 가드, 묶음 안의 걷기(함께, 펼치기), 걸러내기를 만들어 BFS가 묶음으로 돈다([130](../research/130-batch-executor-frontiers.md): 93 → 41 ms, 계층 7.7). 간선당 명령은 211개(계층 38.5)이고, 후보만 골라 돌게 해도 연산마다 레인을 훑는 꼴의 바닥이 약 50개라, 계층을 넘으려면 합친 연산의 표가 필요하다. 사용자는 범용의 길을 택했다(2026-10-08). 같은 코드의 값 다시 쓰기, `if !c`의 분기 하나, 고르기(적은 레인의 갈래를 그 레인만), 비트로 묻기, 아핀 `first + i`로 BFS가 간선당 112개, 24.0 ms가 됐다([131](../research/131-batch-executor-general-cuts.md)); 범용의 바닥은 계층의 약 2배로 보인다. 레지스터 타일(값을 NEON 레지스터에 두는 해석기)을 시제품으로 재니 산수의 사슬(roots)은 C보다 빠르지만 모으기가 있는 몸체(배낭 4배, BFS 2.4배)에서 졌고, 같은 자리에서 꽉 짠 훑기는 BFS 1.2배·배낭 0.4배였다([133](../research/133-register-tiles-measured.md)): 꼴은 옳고, 묶음 프로그램을 로드 때 한 번 만들고 루프를 타입·폭·보폭으로 꽉 짜는 것이 길이다. 묶음마다의 값을 다시 재니 배낭에서 0.90 µs, 시간의 38%이고(132의 "6,500 명령"은 세 배로 잘못 나눈 수였다), 블록의 모양에서 나오는 사실은 로드 때 한 번, 값에서 나오는 사실만 묶음마다 보는 묶음 프로그램을 다섯 단계로 설계했다([025](025-batch-programs.md)). 그 1–4단계를 만들었다(134–137: knapsack 11.46 → 8.25 ms로 기계어의 1.04배, matmul 40.0 → 26.3, roots 8.97 → 8.28; 남은 큰 틈은 matmul의 안쪽 회차마다의 해석과 BFS의 후보 꼬리). +작성일: 2026-10-05. 상태: 제안과 시제품([041](../../research/experiments/041-batches/)). 1단계를 만들었다([126](../research/126-batch-executor-stage-one.md): knapsack이 실행기에서 1,041 ms → 13.6 ms, 안쪽 루프는 계층의 1.17배로 기준 미달). 2단계(중첩 루프를 함께, 모으기)를 만들었다([127](../research/127-batch-executor-stage-two.md): roots 9.13 ms로 계층 9.57보다 빠름, matmul 50 ms). 4단계의 앞 절반(덧붙이기), 5단계(점화식), 칸에 더하기, 걷기를 만들었다([128](../research/128-batch-executor-tables-and-costs.md): join이 실행기의 423에서 161 ms, 계층 74). 남은 값은 덧붙이기 하나 약 100 ns, join의 점화식 회차당 약 60 ns, 레인이 적은 중첩 몸체의 해석이고, BFS는 아직 묶이지 않는다(바뀌는 개수, 커지기만 하는 걸러내기, 중첩 걷기가 필요하다). 그 셋을 줄였다([129](../research/129-batch-executor-costs-cut.md): 한꺼번에 덧붙이기, 점화식을 레지스터 꼴로, 차례 없는 모으기; knapsack 10.8, matmul 36.4, join 118 ms, roots 8.87로 계층 9.57보다 빠름). BFS를 셈하니 차례대로 할 꼬리가 간선의 약 10%라, 꼬리를 묶음의 C로 하고 간선을 레인으로 펼치면 계층과 겨룰 만하다(약 6–7 ms 예상). 가드, 묶음 안의 걷기(함께, 펼치기), 걸러내기를 만들어 BFS가 묶음으로 돈다([130](../research/130-batch-executor-frontiers.md): 93 → 41 ms, 계층 7.7). 간선당 명령은 211개(계층 38.5)이고, 후보만 골라 돌게 해도 연산마다 레인을 훑는 꼴의 바닥이 약 50개라, 계층을 넘으려면 합친 연산의 표가 필요하다. 사용자는 범용의 길을 택했다(2026-10-08). 같은 코드의 값 다시 쓰기, `if !c`의 분기 하나, 고르기(적은 레인의 갈래를 그 레인만), 비트로 묻기, 아핀 `first + i`로 BFS가 간선당 112개, 24.0 ms가 됐다([131](../research/131-batch-executor-general-cuts.md)); 범용의 바닥은 계층의 약 2배로 보인다. 레지스터 타일(값을 NEON 레지스터에 두는 해석기)을 시제품으로 재니 산수의 사슬(roots)은 C보다 빠르지만 모으기가 있는 몸체(배낭 4배, BFS 2.4배)에서 졌고, 같은 자리에서 꽉 짠 훑기는 BFS 1.2배·배낭 0.4배였다([133](../research/133-register-tiles-measured.md)): 꼴은 옳고, 묶음 프로그램을 로드 때 한 번 만들고 루프를 타입·폭·보폭으로 꽉 짜는 것이 길이다. 묶음마다의 값을 다시 재니 배낭에서 0.90 µs, 시간의 38%이고(132의 "6,500 명령"은 세 배로 잘못 나눈 수였다), 블록의 모양에서 나오는 사실은 로드 때 한 번, 값에서 나오는 사실만 묶음마다 보는 묶음 프로그램을 다섯 단계로 설계했다([025](025-batch-programs.md)). 다섯 단계를 모두 만들었다(134–138: knapsack 11.45 → 8.19 ms로 기계어의 1.04배, matmul 40.0 → 25.8, roots 8.97 → 8.29, join 117.9 → 110.5, BFS 24.2 → 23.2; 남은 큰 틈은 matmul의 안쪽 회차마다의 해석과 BFS로, 이 해석기 꼴의 바닥이다). [023](023-optimizing-tier.md)의 계층은 루프 묶음을 SSA로 올려 AArch64 기계어를 실행 시간에 만든다. 일곱 가지 일의 기하 평균을 C의 3–300배에서 1.92배로 줄였지만([125](../research/125-tier-first-steps.md)), 실행 가능한 메모리에 코드를 쓰고 리눅스 AArch64에서만 diff --git a/docs/design/025-batch-programs.md b/docs/design/025-batch-programs.md index 994e52e..b5190b0 100644 --- a/docs/design/025-batch-programs.md +++ b/docs/design/025-batch-programs.md @@ -15,7 +15,10 @@ matmul ≤ 21 ms). 4바이트 곱하기 뒤 matmul은 26.57 ms다(명령 −20%) 일이고, 이 설계는 합친 연산을 두지 않는다(133과 같은 결론). 4단계를 닫았다([137](../research/137-batch-executor-stage-four.md): 열을 제자리에서 읽고(보기, `pass`를 넘어 남는 여섯 자리는 복사) 비교가 레인을 세어 knapsack 10.07 → 8.25 ms(막대 ≤ 8.6, 기계어의 1.04배). 남은 차는 커널이 아니라 묶음마다의 해석(약 3 ms)이다. 남은 큰 틈은 matmul의 안쪽 회차마다의 해석(루프마다 미리 짠 프로그램의 일)과 BFS의 후보 -꼬리(5단계)이고, 어느 쪽으로 갈지는 사용자의 몫이다). [024](024-batch-executor.md)가 처음에 적고 만들지 않은 단계("묶음 프로그램은 루프마다 한 번 +꼬리(5단계)이고, 어느 쪽으로 갈지는 사용자의 몫이다). 5단계를 닫아 이 설계를 마쳤다([138](../research/138-batch-executor-stage-five.md): 칸에 더하기를 정수로 한 번에(join 116.0 → +110.5, 막대 ≤ 108 못 미침: 남은 것은 같은 칸의 메모리 이어짐), `decide`의 비트를 한 번(BFS 23.2, 막대 ≤ 21.5 못 미침: 꼬리의 시간은 +명령보다 메모리), 묶음 실행기의 루프 정렬(커밋마다 6% 흔들리던 놓인 자리를 멈춤). b9 대비 matmul −36%, knapsack −28%, roots −7.6%, +join −6.2%, BFS −3.9%; 실행기, 은행 질의, TPC-C는 그대로). [024](024-batch-executor.md)가 처음에 적고 만들지 않은 단계("묶음 프로그램은 루프마다 한 번 만든다")이고, [132](../research/132-batch-executor-floor-and-the-way-past.md)의 A, [133](../research/133-register-tiles-measured.md)이 정한 길이다. 사용자의 방향: 범용 장치로, 합친 연산의 표 없이, 기계어 없이, 메모리를 적게(2026-10-05, 2026-10-08). @@ -177,9 +180,9 @@ matmul은 j를 레인 200개로 묶고 k를 레인이 함께 돈다. 묶음은 2 |---|---:|---:|---:|---:|---:|---:|---:|---:| | knapsack | 11.5 ms | ≤ 10.3 (10.34) | ≤ 9.2 (10.51) | 3단계 10.07, 4단계 ≤ 8.6 | | 4.55 (꽉 짠 두 훑기 1.87) | 7.9 | 6.25 | | matmul | 40.0 | ≤ 39 (38.2) | ≤ 33 (36.1) | ≤ 21 (곱하기 뒤 26.57) | | 17.75 | 14.2 | 7.6 | -| BFS | 24.0 | ≤ 24 | ≤ 22 | ≤ 21 | ≤ 21.5 (b16에서 다시) | 10.3 (꽉 짠 9.8) | 7.7 | 9.9 | +| BFS | 24.0 | ≤ 24 | ≤ 22 | ≤ 21 | ≤ 21.5 (b16에서 다시; 23.21) | 10.3 (꽉 짠 9.8) | 7.7 | 9.9 | | roots | 8.97 | ≤ 9.0 | ≤ 8.6 | | | 6.8 | 9.57 | 6.86 | -| join | 117 | ≤ 116 | ≤ 115 | | ≤ 108 (b16에서 다시) | 57.8 | 84.6 | 31.7 | +| join | 117 | ≤ 116 | ≤ 115 | | ≤ 108 (b16에서 다시; 110.5) | 57.8 | 84.6 | 31.7 | | 묶음마다 (배낭) | 0.90 µs | ≤ 0.60 (0.68) | ≤ 0.45 | | | | | | | 묶음마다 (sum0, `icount`) | 2,330 명령 | ≤ 1,550 (1,822) | ≤ 1,300 | | | | | | diff --git a/docs/research/138-batch-executor-stage-five.md b/docs/research/138-batch-executor-stage-five.md new file mode 100644 index 0000000..d3e46bf --- /dev/null +++ b/docs/research/138-batch-executor-stage-five.md @@ -0,0 +1,79 @@ +# 138 — 묶음 실행기 5단계: 꼬리 둘, 그리고 루프의 정렬 + +2026-10-09. [025](../design/025-batch-programs.md)의 마지막 단계다. 걸러내기 후보의 꼬리(BFS)와 칸에 더하기의 꼬리(join)를 줄였고, 뜨거운 루프가 +놓이는 자리가 커밋마다 흔들리던 것을 빌드 플래그 하나로 멈췄다. 코드는 `956a6cf`(칸에 더하기를 한 번에), `ad44b68`(`decide`가 비트를 한 번), +`2ce9ce1`(루프 정렬)과 `3e76a60`(정렬은 묶음 실행기에만)이다. 같은 방법으로 쟀다(`b17`, `b18`, `b18a`, `b19`, `b20`; 번갈아, 명령 수). + +## 쉬운 말로 + +- **막대 셋에 못 미쳤다.** + - join은 116.0에서 110.8 ms다(막대 ≤ 108). 칸에 더하기의 꼬리는 약 17에서 약 12 ms로 줄었다. 회차의 루프는 이제 정수뿐이고 명령이 + 합 하나에 약 20개인데, 회차당 약 30 사이클이 든다. 남은 것은 같은 칸을 읽고 더해 쓰는 메모리의 이어짐이다(16행에 행이 되풀이된다). + 그것을 끊는 범용의 길(묶음 안에서 행마다 먼저 모으고 칸에는 한 번 쓰기)은 행 수만큼의 자리가 있어야 하고, 이 설계 밖이다. + - BFS는 23.98에서 23.17 ms다(막대 ≤ 21.5). `decide`는 2.5에서 1.6 ms가 됐다. 132의 "후보당 250"은 명령이었는데, 꼬리의 시간은 + 대부분 그것이 읽는 메모리(비트, 남긴 회차)였다. 그래서 명령을 반 가까이 덜어도 시간은 3분의 1만 돌아왔다. 남은 꼬리 약 5.2 ms에 + 1.5 ms를 넘는 것이 하나도 없어 멈췄다. + - knapsack은 4단계에서 8.25 ms였는데, 이 단계의 첫 커밋 뒤에 같은 명령으로 8.74 ms가 됐다(사이클 +3.4%). 놓인 자리다. 루프 정렬 뒤 + 8.21 ms다. +- **루프 정렬**(`-falign-loops=64`, `BATCH_OPTIMIZE`). 묶음 실행기의 루프가 각각 64바이트 줄의 처음에서 시작한다. 이것이 없으면 파일의 + 어디를 고쳐도 뜨거운 루프가 움직였다(`words_op`의 더하기 루프가 64바이트 줄의 28, 60, 20 …에서 시작). 정렬하자 묶음으로 도는 일의 + 사이클이 모두 줄었다(knapsack 5.3%, matmul 1.9%, BFS 1.5%, join 1.2%). 명령은 채움 때문에 0.7–2.3% 늘었다. 처음에는 리스트의 루프도 + 정렬했는데(`LIST_OPTIMIZE`를 함께 써서), 은행 질의의 명령이 b9보다 0.8–2.0% 늘고(기준 1%) 사이클은 오르내려 이득이 없었다. 그래서 + 묶음 실행기에만 준다. +- **b9(025를 시작하기 전)와 견주면**(마지막 빌드 b20): matmul 40.0 → 25.8 ms(−36%), knapsack 11.45 → 8.19(−28%), roots 8.97 → 8.29(−7.6%), + join 117.9 → 110.5(−6.2%), BFS 24.15 → 23.21(−3.9%), sort 57.0 → 55.9, words 215.3 → 217.7(묶이지 않는 일). + +## 만든 것 + +- **칸에 더하기를 한 번에**(`sums_in_words`). 회차 0부터, 먼저 행과 e를 4바이트로 바꾸고(벡터 코드) e가 2^32 아래의 정수가 아닌 첫 회차를 + 찾는다. 그 앞의 회차는 회차마다 합을 차례대로 한다: 1·4바이트 칸은 정수로, 제 바이트에 드는 동안. 8바이트 칸은 수로, 유한한 동안. + 실행기의 더하기가 만들 수와 같고, 결함도 넓히기도 없다. 처음으로 아닌 회차와 합에서 지금의 길(회차마다, 넓히기와 결함을 그 회차에서)이 + 이어서 돈다. 그 앞에서 아무것도 넓어지거나 결함이 나지 않았으므로 되돌릴 것이 없다. + - 고정 소스 `SUMS_SOURCE`를 더했다: 16행이 되풀이되는 표, 묶음 중간에 1바이트에서 4바이트로 넓어지는 열, 2^32를 넘어 8바이트로 가는 열, + 가린 회차에 더하는 분수. 메시지 여섯에서 7,912 회차를 한 번에, 3,228 회차를 지금의 길로 돌고, 세 길(묶음, 실행기, 기계어)이 같다. + - 처음 짠 것은 8바이트 칸을 받지 않아 열 하나가 8바이트면 묶음 전체가 지금의 길로 갔다. 이 소스가 그것을 보였다(13 묶음 모두 회차 0에서). +- **`decide`의 비트를 한 번**. 남긴 회차마다 키를 비트 자리로 한 번 바꾸고, 걸러내기가 더하는 키가 물은 키와 같으면 그 자리를 쓴다(걸러내기는 + 그렇다). 우리 비트를 지울 때는 세운 비트의 낱말만 지운다(세울 때 적어 둔다). BFS 명령 −0.4%. +- **루프 정렬**. 위와 같다(묶음 실행기에만). + +## 잰 것 + +| 일 | b9 | b16 (4단계 끝) | b17 (칸) | b18 (`decide`) | b19 (둘 다 정렬) | b20 (묶음만 정렬) | 기계어 | C | +|---|---:|---:|---:|---:|---:|---:|---:|---:| +| matmul | 39.99 ms | 26.27 | 26.36 | 26.24 | 25.76 | **25.77** | 14.2 | 7.6 | +| knapsack | 11.45 | 8.26 | 8.74 | 8.74 | 8.20 | **8.19** | 7.9 | 6.25 | +| roots | 8.97 | 8.28 | 8.29 | 8.28 | 8.30 | **8.29** | 9.57 | 6.86 | +| join | 117.9 | 116.0 | 111.8 | 111.4 | 110.9 | **110.5** | 84.6 | 31.7 | +| BFS | 24.15 | 23.98 | 24.24 | 23.56 | 23.11 | **23.21** | 7.7 | 9.9 | + +- 명령(b9 → b20, 묶음 길): matmul −23.7%, knapsack −11.7%, roots −7.3%, join −4.0%, BFS 0.0%(`decide`의 −0.5%와 정렬의 채움). +- 실행기만의 길: 다섯 일 모두 b9와 같은 명령이다(±0.1%). 리스트의 루프까지 정렬했던 b19에서는 BFS가 +1.0%였다. +- 원본: `041-batches/2026-10-08-pairs.jsonl`과 `2026-10-09-pairs.jsonl`, `2026-10-08-counts.jsonl`과 `2026-10-09-counts.jsonl`(측정이 + 날짜를 넘었다); 은행 질의 `040-against-c/2026-10-09-counts-s19.jsonl`(둘 다 정렬), `2026-10-09-counts-s20.jsonl`(묶음만). + +## 뜻과 맞음 + +- 커밋마다 시드 1, 2, 3, 5, 23의 무작위 프로그램(기본과 `PURE_SELECT=all`), 고정 소스의 세 길(두 모드; GRAPH의 `exists`, `memory`, `work` + 결함이 제 회차에), 단위 시험이 지났다. +- 단계의 끝에서(`2ce9ce1`) 단위 시험 세 모드, ASan 단위 시험(기본과 실행기 모드), sanitized `pure-run`의 고정 소스(두 모드, `SUMS_SOURCE`와 + GRAPH 포함)와 시드 23의 프로그램(두 모드), aup의 검사 두 모드가 지났다. Pure의 `make check`는 다시 `server_view_workers`의 시간 초과로 + 한 번 멈췄고(4단계 끝과 같은 흔들림), 홀로 세 번 지나고 다시 돈 전체가 지났다. 정렬을 묶음 실행기에만 준 `3e76a60`에서 단위 시험 네 + 모드와 고정 소스(두 모드)를 다시 돌렸다. +- 은행 질의의 명령 수(`3e76a60`)는 b9와 ±0.9% 안이다(같은 빌드에서도 1% 안팎 오가는 수). TPC-C(번갈아 여섯 번)는 b9 121.5만 대 지금 + 122.4만 신규 주문/분(+0.7%)이다. + +## 025를 닫으며 + +다섯 단계의 막대와 잰 수: + +| 단계 | 막대 | 잰 수 | +|---|---|---| +| 1. 블록의 사실을 로드 때 | knapsack ≤ 10.3 ms, 묶음마다 ≤ 0.60 µs | 10.34, 0.68 (못 미침) | +| 2. 균일·아핀 조각 | knapsack ≤ 9.2, ≤ 0.45 µs, matmul ≤ 33 | 10.51, 0.63, 36.1 (못 미침) | +| 3. 꼴과 폭에 맞춘 커널 | matmul ≤ 21, sum0 ≤ 1.5 | 26.6 (못 미침), 1.01 | +| 4. 훑기의 수 | knapsack ≤ 8.6 | 8.25 | +| 5. 꼬리 | BFS ≤ 21.5, join ≤ 108 | 23.17, 110.8 (못 미침) | + +못 미친 막대는 모두 셈이 빠뜨린 것이 있었다(1단계: 명령마다의 머리, 2단계: 조각이 덮는 명령의 값, 3단계: 회차마다의 해석과 행렬 만들기, +5단계: 명령과 메모리의 시간). 남은 큰 틈은 둘이다. matmul의 안쪽 회차마다의 해석(약 14 ms)과 BFS(기계어의 3배)의 노드와 간선마다의 해석이다. +둘 다 이 해석기 꼴의 바닥(135)이고, 루프마다 미리 짠 프로그램이 그 수단이다. 025 밖이다. diff --git a/research/experiments/040-against-c/2026-10-09-counts-s19.jsonl b/research/experiments/040-against-c/2026-10-09-counts-s19.jsonl new file mode 100644 index 0000000..bd9fb8e --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-counts-s19.jsonl @@ -0,0 +1,4 @@ +{"serve": "pure-serve", "per_branch": {"instructions": 27028260, "cycles": 12034307}, "in_credit": {"instructions": 3499415, "cycles": 1655915}, "large": {"instructions": 1419219, "cycles": 624053}, "ranks": {"instructions": 24439860, "cycles": 14804928}, "none": {"instructions": 615600, "cycles": 191743}, "field": {"instructions": 9007132, "cycles": 3298090}, "found": {"instructions": 14140131, "cycles": 10482262}} +{"serve": "pure-serve", "per_branch": {"instructions": 27424133, "cycles": 12137944}, "in_credit": {"instructions": 3593701, "cycles": 1676054}, "large": {"instructions": 1431730, "cycles": 616384}, "ranks": {"instructions": 24700058, "cycles": 15057545}, "none": {"instructions": 623103, "cycles": 193783}, "field": {"instructions": 9014635, "cycles": 3247081}, "found": {"instructions": 14266286, "cycles": 11003523}} +{"serve": "pure-serve", "per_branch": {"instructions": 27122224, "cycles": 12038968}, "in_credit": {"instructions": 3520445, "cycles": 1763107}, "large": {"instructions": 1419131, "cycles": 642816}, "ranks": {"instructions": 24491522, "cycles": 14633695}, "none": {"instructions": 615600, "cycles": 193641}, "field": {"instructions": 9007132, "cycles": 3277552}, "found": {"instructions": 14140026, "cycles": 10819097}} +{"serve": "pure-serve", "per_branch": {"instructions": 27310837, "cycles": 11973352}, "in_credit": {"instructions": 3568159, "cycles": 1661220}, "large": {"instructions": 1431802, "cycles": 600077}, "ranks": {"instructions": 24636476, "cycles": 14975477}, "none": {"instructions": 623103, "cycles": 194730}, "field": {"instructions": 9014738, "cycles": 3281677}, "found": {"instructions": 14268414, "cycles": 10823038}} diff --git a/research/experiments/040-against-c/2026-10-09-counts-s20.jsonl b/research/experiments/040-against-c/2026-10-09-counts-s20.jsonl new file mode 100644 index 0000000..f85993b --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-counts-s20.jsonl @@ -0,0 +1,4 @@ +{"serve": "pure-serve", "per_branch": {"instructions": 27190859, "cycles": 11923628}, "in_credit": {"instructions": 3535971, "cycles": 1621370}, "large": {"instructions": 1419075, "cycles": 1246561}, "ranks": {"instructions": 24529209, "cycles": 16370948}, "none": {"instructions": 615600, "cycles": 191761}, "field": {"instructions": 9007132, "cycles": 3273249}, "found": {"instructions": 14136507, "cycles": 10671807}} +{"serve": "pure-serve", "per_branch": {"instructions": 27031077, "cycles": 11782678}, "in_credit": {"instructions": 3500145, "cycles": 1580355}, "large": {"instructions": 1419147, "cycles": 612261}, "ranks": {"instructions": 24442044, "cycles": 14890489}, "none": {"instructions": 615600, "cycles": 192773}, "field": {"instructions": 9007235, "cycles": 3271664}, "found": {"instructions": 14138547, "cycles": 10580891}} +{"serve": "pure-serve", "per_branch": {"instructions": 27276075, "cycles": 12075868}, "in_credit": {"instructions": 3555034, "cycles": 1620511}, "large": {"instructions": 1419131, "cycles": 612866}, "ranks": {"instructions": 24576003, "cycles": 14886106}, "none": {"instructions": 615608, "cycles": 195681}, "field": {"instructions": 9007140, "cycles": 3299747}, "found": {"instructions": 14138907, "cycles": 10953537}} +{"serve": "pure-serve", "per_branch": {"instructions": 27153659, "cycles": 11946880}, "in_credit": {"instructions": 3527635, "cycles": 1632103}, "large": {"instructions": 1419075, "cycles": 620533}, "ranks": {"instructions": 24509685, "cycles": 14902018}, "none": {"instructions": 615600, "cycles": 194552}, "field": {"instructions": 9007235, "cycles": 3263885}, "found": {"instructions": 14138019, "cycles": 10716180}} diff --git a/research/experiments/040-against-c/2026-10-09-load.txt b/research/experiments/040-against-c/2026-10-09-load.txt new file mode 100644 index 0000000..7994ced --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-load.txt @@ -0,0 +1,12 @@ +13 s9 15:20:04 up 5 days, 11:41, 2 users, load average: 1.02, 1.27, 1.03 +13 s20 15:21:31 up 5 days, 11:42, 2 users, load average: 1.48, 1.44, 1.12 +14 s20 15:23:18 up 5 days, 11:44, 2 users, load average: 1.34, 1.55, 1.20 +14 s9 15:24:55 up 5 days, 11:46, 2 users, load average: 1.33, 1.60, 1.26 +15 s9 15:26:49 up 5 days, 11:48, 2 users, load average: 1.28, 1.56, 1.29 +15 s20 15:28:43 up 5 days, 11:50, 2 users, load average: 1.33, 1.67, 1.37 +16 s20 15:30:21 up 5 days, 11:51, 2 users, load average: 1.44, 1.74, 1.43 +16 s9 15:31:58 up 5 days, 11:53, 2 users, load average: 1.35, 1.71, 1.45 +17 s9 15:33:24 up 5 days, 11:54, 2 users, load average: 1.39, 1.69, 1.47 +17 s20 15:34:51 up 5 days, 11:56, 2 users, load average: 1.40, 1.66, 1.48 +18 s20 15:36:26 up 5 days, 11:57, 2 users, load average: 1.42, 1.65, 1.50 +18 s9 15:38:33 up 5 days, 11:59, 2 users, load average: 1.49, 1.68, 1.53 diff --git a/research/experiments/040-against-c/2026-10-09-queries-s20-13.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s20-13.jsonl new file mode 100644 index 0000000..2483a20 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s20-13.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 7.07, "pure_fastest_ms": 7.04, "sqlite_median_ms": 45.26, "sqlite_fastest_ms": 45.12, "sqlite_indexed_median_ms": 14.12, "sqlite_indexed_fastest_ms": 14.05} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.84, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.89, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.36, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.48} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.71, "pure_fastest_ms": 6.58, "sqlite_median_ms": 2842.21, "sqlite_fastest_ms": 2837.58, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.51} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s20-14.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s20-14.jsonl new file mode 100644 index 0000000..616807b --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s20-14.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.18, "pure_fastest_ms": 5.15, "sqlite_median_ms": 44.98, "sqlite_fastest_ms": 44.88, "sqlite_indexed_median_ms": 14.05, "sqlite_indexed_fastest_ms": 13.98} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.68, "pure_fastest_ms": 6.57, "sqlite_median_ms": 2839.68, "sqlite_fastest_ms": 2837.51, "sqlite_indexed_median_ms": 7.88, "sqlite_indexed_fastest_ms": 7.67} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s20-15.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s20-15.jsonl new file mode 100644 index 0000000..1929b69 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s20-15.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.25, "pure_fastest_ms": 5.19, "sqlite_median_ms": 45.28, "sqlite_fastest_ms": 45.13, "sqlite_indexed_median_ms": 14.06, "sqlite_indexed_fastest_ms": 13.98} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.87, "pure_fastest_ms": 0.81, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.48} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.66, "pure_fastest_ms": 6.58, "sqlite_median_ms": 2839.66, "sqlite_fastest_ms": 2837.7, "sqlite_indexed_median_ms": 7.58, "sqlite_indexed_fastest_ms": 7.51} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s20-16.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s20-16.jsonl new file mode 100644 index 0000000..d05d4ff --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s20-16.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.29, "pure_fastest_ms": 5.19, "sqlite_median_ms": 44.97, "sqlite_fastest_ms": 44.82, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.04} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.87, "pure_fastest_ms": 0.81, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.4, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.53, "sqlite_indexed_fastest_ms": 1.49} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.71, "pure_fastest_ms": 6.61, "sqlite_median_ms": 2842.26, "sqlite_fastest_ms": 2839.45, "sqlite_indexed_median_ms": 7.61, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s20-17.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s20-17.jsonl new file mode 100644 index 0000000..7f4348a --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s20-17.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.34, "pure_fastest_ms": 5.3, "sqlite_median_ms": 48.31, "sqlite_fastest_ms": 48.11, "sqlite_indexed_median_ms": 14.32, "sqlite_indexed_fastest_ms": 14.28} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.77, "sqlite_median_ms": 6.77, "sqlite_fastest_ms": 6.75, "sqlite_indexed_median_ms": 0.2, "sqlite_indexed_fastest_ms": 0.2} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.4, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.68, "sqlite_fastest_ms": 1.66, "sqlite_indexed_median_ms": 1.67, "sqlite_indexed_fastest_ms": 1.67} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.66, "pure_fastest_ms": 6.59, "sqlite_median_ms": 3340.42, "sqlite_fastest_ms": 3333.47, "sqlite_indexed_median_ms": 8.82, "sqlite_indexed_fastest_ms": 8.76} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s20-18.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s20-18.jsonl new file mode 100644 index 0000000..b22341a --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s20-18.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.3, "pure_fastest_ms": 5.19, "sqlite_median_ms": 45.28, "sqlite_fastest_ms": 45.05, "sqlite_indexed_median_ms": 14.1, "sqlite_indexed_fastest_ms": 14.03} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.85, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.48, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.73, "pure_fastest_ms": 6.66, "sqlite_median_ms": 2842.24, "sqlite_fastest_ms": 2839.31, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s9-13.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s9-13.jsonl new file mode 100644 index 0000000..a113454 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s9-13.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.21, "pure_fastest_ms": 5.13, "sqlite_median_ms": 45.0, "sqlite_fastest_ms": 44.87, "sqlite_indexed_median_ms": 14.05, "sqlite_indexed_fastest_ms": 14.03} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.84, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.37, "pure_fastest_ms": 0.36, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.47, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.64, "pure_fastest_ms": 6.58, "sqlite_median_ms": 2838.51, "sqlite_fastest_ms": 2835.42, "sqlite_indexed_median_ms": 7.6, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s9-14.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s9-14.jsonl new file mode 100644 index 0000000..785af94 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s9-14.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.18, "pure_fastest_ms": 5.09, "sqlite_median_ms": 47.83, "sqlite_fastest_ms": 47.52, "sqlite_indexed_median_ms": 14.2, "sqlite_indexed_fastest_ms": 14.18} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.78, "sqlite_median_ms": 6.77, "sqlite_fastest_ms": 6.73, "sqlite_indexed_median_ms": 0.18, "sqlite_indexed_fastest_ms": 0.18} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.36, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.68, "sqlite_fastest_ms": 1.68, "sqlite_indexed_median_ms": 1.68, "sqlite_indexed_fastest_ms": 1.67} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.59, "pure_fastest_ms": 6.52, "sqlite_median_ms": 3342.61, "sqlite_fastest_ms": 3329.2, "sqlite_indexed_median_ms": 8.61, "sqlite_indexed_fastest_ms": 8.58} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s9-15.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s9-15.jsonl new file mode 100644 index 0000000..ea28943 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s9-15.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.13, "pure_fastest_ms": 5.07, "sqlite_median_ms": 48.16, "sqlite_fastest_ms": 48.06, "sqlite_indexed_median_ms": 14.47, "sqlite_indexed_fastest_ms": 14.43} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.79, "pure_fastest_ms": 0.76, "sqlite_median_ms": 6.8, "sqlite_fastest_ms": 6.74, "sqlite_indexed_median_ms": 0.2, "sqlite_indexed_fastest_ms": 0.2} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.48, "pure_fastest_ms": 0.44, "sqlite_median_ms": 1.67, "sqlite_fastest_ms": 1.67, "sqlite_indexed_median_ms": 1.68, "sqlite_indexed_fastest_ms": 1.67} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.65, "pure_fastest_ms": 6.59, "sqlite_median_ms": 3334.39, "sqlite_fastest_ms": 3329.6, "sqlite_indexed_median_ms": 8.76, "sqlite_indexed_fastest_ms": 8.69} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s9-16.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s9-16.jsonl new file mode 100644 index 0000000..77e4906 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s9-16.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.2, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.29, "sqlite_fastest_ms": 45.17, "sqlite_indexed_median_ms": 14.05, "sqlite_indexed_fastest_ms": 14.04} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.84, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.38, "pure_fastest_ms": 0.35, "sqlite_median_ms": 1.47, "sqlite_fastest_ms": 1.46, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.7, "pure_fastest_ms": 6.64, "sqlite_median_ms": 2833.02, "sqlite_fastest_ms": 2829.14, "sqlite_indexed_median_ms": 7.67, "sqlite_indexed_fastest_ms": 7.54} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s9-17.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s9-17.jsonl new file mode 100644 index 0000000..73e6798 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s9-17.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.26, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.36, "sqlite_fastest_ms": 45.11, "sqlite_indexed_median_ms": 14.06, "sqlite_indexed_fastest_ms": 14.01} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.81, "pure_fastest_ms": 0.77, "sqlite_median_ms": 5.89, "sqlite_fastest_ms": 5.87, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.41, "pure_fastest_ms": 0.38, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.48, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.62, "pure_fastest_ms": 6.56, "sqlite_median_ms": 2839.96, "sqlite_fastest_ms": 2837.11, "sqlite_indexed_median_ms": 7.55, "sqlite_indexed_fastest_ms": 7.51} diff --git a/research/experiments/040-against-c/2026-10-09-queries-s9-18.jsonl b/research/experiments/040-against-c/2026-10-09-queries-s9-18.jsonl new file mode 100644 index 0000000..a180899 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-queries-s9-18.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.14, "pure_fastest_ms": 5.09, "sqlite_median_ms": 44.99, "sqlite_fastest_ms": 44.76, "sqlite_indexed_median_ms": 14.08, "sqlite_indexed_fastest_ms": 13.98} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.91, "pure_fastest_ms": 0.77, "sqlite_median_ms": 6.08, "sqlite_fastest_ms": 6.05, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.51, "pure_fastest_ms": 0.49, "sqlite_median_ms": 1.66, "sqlite_fastest_ms": 1.61, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 7.61, "pure_fastest_ms": 7.42, "sqlite_median_ms": 2841.77, "sqlite_fastest_ms": 2838.44, "sqlite_indexed_median_ms": 7.68, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s20-13.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s20-13.jsonl new file mode 100644 index 0000000..2f74dd9 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s20-13.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.68, "sqlite_load_s": 1.54, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 46612, "new_orders_per_minute": 1246736, "undone_new_orders": 4010, "errors": 0, "new_order": {"done": 419590, "failed": 0, "p50_us": 1344, "p99_us": 3328}, "payment": {"done": 400800, "failed": 0, "p50_us": 1344, "p99_us": 3328}, "order_status": {"done": 37387, "failed": 0, "p50_us": 256, "p99_us": 1216}, "delivery": {"done": 37325, "failed": 0, "p50_us": 1344, "p99_us": 3328}, "stock_level": {"done": 37132, "failed": 0, "p50_us": 288, "p99_us": 1280}, "server_threads": "3", "cpu_us_per_transaction": 42.2, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 488.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 488.4, "pure_state_mib": 246.7, "pure_store_mib": 254.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 29067, "burst_events": 853782, "checkpoints": 42}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s20-14.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s20-14.jsonl new file mode 100644 index 0000000..d5c58ce --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s20-14.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45779, "new_orders_per_minute": 1224641, "undone_new_orders": 3935, "errors": 0, "new_order": {"done": 412149, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 393539, "failed": 0, "p50_us": 1344, "p99_us": 3712}, "order_status": {"done": 36726, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 36672, "failed": 0, "p50_us": 1344, "p99_us": 3712}, "stock_level": {"done": 36489, "failed": 0, "p50_us": 288, "p99_us": 1344}, "server_threads": "3", "cpu_us_per_transaction": 42.5, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 480.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 480.0, "pure_state_mib": 242.7, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28384, "burst_events": 838510, "checkpoints": 41}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s20-15.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s20-15.jsonl new file mode 100644 index 0000000..f41a7a0 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s20-15.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45767, "new_orders_per_minute": 1224205, "undone_new_orders": 3946, "errors": 0, "new_order": {"done": 412022, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 393525, "failed": 0, "p50_us": 1344, "p99_us": 3584}, "order_status": {"done": 36682, "failed": 0, "p50_us": 272, "p99_us": 1280}, "delivery": {"done": 36636, "failed": 0, "p50_us": 1344, "p99_us": 3584}, "stock_level": {"done": 36484, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 42.4, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 480.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 480.2, "pure_state_mib": 242.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28490, "burst_events": 838323, "checkpoints": 41}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s20-16.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s20-16.jsonl new file mode 100644 index 0000000..3daa9b2 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s20-16.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44335, "new_orders_per_minute": 1186103, "undone_new_orders": 3804, "errors": 0, "new_order": {"done": 399172, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "payment": {"done": 381121, "failed": 0, "p50_us": 1344, "p99_us": 4096}, "order_status": {"done": 35542, "failed": 0, "p50_us": 272, "p99_us": 1600}, "delivery": {"done": 35494, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "stock_level": {"done": 35372, "failed": 0, "p50_us": 304, "p99_us": 1792}, "server_threads": "3", "cpu_us_per_transaction": 43.1, "core_shares": {"pure-owner": 0.87, "pure-checkpoint": 0.01}, "resident_mib": 467.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 467.2, "pure_state_mib": 235.8, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27727, "burst_events": 812069, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s20-17.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s20-17.jsonl new file mode 100644 index 0000000..4badd49 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s20-17.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.66, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45705, "new_orders_per_minute": 1222824, "undone_new_orders": 3933, "errors": 0, "new_order": {"done": 411541, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "payment": {"done": 392907, "failed": 0, "p50_us": 1344, "p99_us": 3584}, "order_status": {"done": 36669, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 36546, "failed": 0, "p50_us": 1344, "p99_us": 3456}, "stock_level": {"done": 36437, "failed": 0, "p50_us": 304, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 42.5, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 480.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 480.0, "pure_state_mib": 242.4, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28521, "burst_events": 837146, "checkpoints": 41}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s20-18.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s20-18.jsonl new file mode 100644 index 0000000..3c558cb --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s20-18.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45672, "new_orders_per_minute": 1221730, "undone_new_orders": 3921, "errors": 0, "new_order": {"done": 411165, "failed": 0, "p50_us": 1344, "p99_us": 3840}, "payment": {"done": 392629, "failed": 0, "p50_us": 1344, "p99_us": 3840}, "order_status": {"done": 36642, "failed": 0, "p50_us": 272, "p99_us": 1536}, "delivery": {"done": 36574, "failed": 0, "p50_us": 1344, "p99_us": 3840}, "stock_level": {"done": 36425, "failed": 0, "p50_us": 288, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 42.6, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 479.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 479.6, "pure_state_mib": 242.2, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28900, "burst_events": 836516, "checkpoints": 41}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s9-13.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s9-13.jsonl new file mode 100644 index 0000000..009b3ab --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s9-13.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.73, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44038, "new_orders_per_minute": 1177835, "undone_new_orders": 3784, "errors": 0, "new_order": {"done": 396397, "failed": 0, "p50_us": 1408, "p99_us": 4352}, "payment": {"done": 378690, "failed": 0, "p50_us": 1344, "p99_us": 4352}, "order_status": {"done": 35329, "failed": 0, "p50_us": 272, "p99_us": 1664}, "delivery": {"done": 35247, "failed": 0, "p50_us": 1344, "p99_us": 4352}, "stock_level": {"done": 35102, "failed": 0, "p50_us": 304, "p99_us": 1792}, "server_threads": "3", "cpu_us_per_transaction": 42.8, "core_shares": {"pure-owner": 0.86, "pure-checkpoint": 0.01}, "resident_mib": 464.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 464.7, "pure_state_mib": 234.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27806, "burst_events": 806634, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s9-14.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s9-14.jsonl new file mode 100644 index 0000000..7fcceae --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s9-14.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45556, "new_orders_per_minute": 1218677, "undone_new_orders": 3912, "errors": 0, "new_order": {"done": 410138, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "payment": {"done": 391603, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "order_status": {"done": 36519, "failed": 0, "p50_us": 256, "p99_us": 1344}, "delivery": {"done": 36494, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "stock_level": {"done": 36359, "failed": 0, "p50_us": 304, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 42.6, "core_shares": {"pure-owner": 0.87, "pure-checkpoint": 0.01}, "resident_mib": 478.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 478.6, "pure_state_mib": 241.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28179, "burst_events": 834409, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s9-15.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s9-15.jsonl new file mode 100644 index 0000000..ce6e980 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s9-15.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.63, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45609, "new_orders_per_minute": 1219983, "undone_new_orders": 3918, "errors": 0, "new_order": {"done": 410579, "failed": 0, "p50_us": 1344, "p99_us": 3840}, "payment": {"done": 392132, "failed": 0, "p50_us": 1344, "p99_us": 3840}, "order_status": {"done": 36578, "failed": 0, "p50_us": 256, "p99_us": 1344}, "delivery": {"done": 36522, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "stock_level": {"done": 36374, "failed": 0, "p50_us": 288, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 42.4, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 478.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 478.7, "pure_state_mib": 241.9, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28142, "burst_events": 835401, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s9-16.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s9-16.jsonl new file mode 100644 index 0000000..3d69378 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s9-16.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.63, "sqlite_load_s": 1.54, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45559, "new_orders_per_minute": 1218639, "undone_new_orders": 3910, "errors": 0, "new_order": {"done": 410124, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 391677, "failed": 0, "p50_us": 1344, "p99_us": 3584}, "order_status": {"done": 36563, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 36512, "failed": 0, "p50_us": 1344, "p99_us": 3584}, "stock_level": {"done": 36309, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 43.1, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 478.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 478.9, "pure_state_mib": 241.6, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28663, "burst_events": 834487, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s9-17.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s9-17.jsonl new file mode 100644 index 0000000..cbe6b48 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s9-17.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45286, "new_orders_per_minute": 1211543, "undone_new_orders": 3891, "errors": 0, "new_order": {"done": 407739, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "payment": {"done": 389267, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "order_status": {"done": 36332, "failed": 0, "p50_us": 256, "p99_us": 1280}, "delivery": {"done": 36295, "failed": 0, "p50_us": 1344, "p99_us": 3968}, "stock_level": {"done": 36082, "failed": 0, "p50_us": 288, "p99_us": 1408}, "server_threads": "3", "cpu_us_per_transaction": 42.6, "core_shares": {"pure-owner": 0.87, "pure-checkpoint": 0.01}, "resident_mib": 475.8, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 475.8, "pure_state_mib": 240.4, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27911, "burst_events": 829490, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-09-tpcc-s9-18.jsonl b/research/experiments/040-against-c/2026-10-09-tpcc-s9-18.jsonl new file mode 100644 index 0000000..6ac9dcf --- /dev/null +++ b/research/experiments/040-against-c/2026-10-09-tpcc-s9-18.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.64, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.3, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 45305, "new_orders_per_minute": 1212117, "undone_new_orders": 3891, "errors": 0, "new_order": {"done": 407930, "failed": 0, "p50_us": 1344, "p99_us": 3840}, "payment": {"done": 389450, "failed": 0, "p50_us": 1344, "p99_us": 3712}, "order_status": {"done": 36316, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 36272, "failed": 0, "p50_us": 1344, "p99_us": 3712}, "stock_level": {"done": 36141, "failed": 0, "p50_us": 304, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 43.2, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 476.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 476.2, "pure_state_mib": 240.5, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28488, "burst_events": 829840, "checkpoints": 40}} diff --git a/research/experiments/041-batches/2026-10-09-counts.jsonl b/research/experiments/041-batches/2026-10-09-counts.jsonl new file mode 100644 index 0000000..fd27cc6 --- /dev/null +++ b/research/experiments/041-batches/2026-10-09-counts.jsonl @@ -0,0 +1,50 @@ +{"version":"b17","way":"batches","work":"bfs","instructions":3372361685,"cycles":1662769271} +{"version":"b17","way":"rounds","work":"bfs","instructions":4711634753,"cycles":2146053261} +{"version":"b17","way":"batches","work":"knapsack","instructions":346249299,"cycles":108294052} +{"version":"b17","way":"rounds","work":"knapsack","instructions":21688102990,"cycles":7537022923} +{"version":"b17","way":"batches","work":"matmul","instructions":722168228,"cycles":243543563} +{"version":"b17","way":"rounds","work":"matmul","instructions":21436716360,"cycles":6622287253} +{"version":"b17","way":"batches","work":"roots","instructions":156270409,"cycles":109357759} +{"version":"b17","way":"rounds","work":"roots","instructions":2755945428,"cycles":987822900} +{"version":"b17","way":"batches","work":"join","instructions":1785480194,"cycles":1045726026} +{"version":"b17","way":"rounds","work":"join","instructions":7669661655,"cycles":3293254442} +{"version":"b18","way":"batches","work":"bfs","instructions":3354780672,"cycles":1678703944} +{"version":"b18","way":"rounds","work":"bfs","instructions":4711634589,"cycles":2158517282} +{"version":"b18","way":"batches","work":"knapsack","instructions":346278917,"cycles":110306318} +{"version":"b18","way":"rounds","work":"knapsack","instructions":21688103033,"cycles":7539558132} +{"version":"b18","way":"batches","work":"matmul","instructions":722169426,"cycles":244273534} +{"version":"b18","way":"rounds","work":"matmul","instructions":21436716136,"cycles":6629417934} +{"version":"b18","way":"batches","work":"roots","instructions":156271065,"cycles":109401152} +{"version":"b18","way":"rounds","work":"roots","instructions":2755945335,"cycles":988017595} +{"version":"b18","way":"batches","work":"join","instructions":1785486888,"cycles":1014201644} +{"version":"b18","way":"rounds","work":"join","instructions":7669661614,"cycles":3274195702} +{"version":"b18a","way":"batches","work":"bfs","instructions":3415214142,"cycles":1654028985} +{"version":"b18a","way":"rounds","work":"bfs","instructions":4756854854,"cycles":2082766502} +{"version":"b18a","way":"batches","work":"knapsack","instructions":348655109,"cycles":104422210} +{"version":"b18a","way":"rounds","work":"knapsack","instructions":21690506067,"cycles":7550381236} +{"version":"b18a","way":"batches","work":"matmul","instructions":738967770,"cycles":239762688} +{"version":"b18a","way":"rounds","work":"matmul","instructions":21438655022,"cycles":6617574225} +{"version":"b18a","way":"batches","work":"roots","instructions":156406511,"cycles":109617310} +{"version":"b18a","way":"rounds","work":"roots","instructions":2755945390,"cycles":988151399} +{"version":"b18a","way":"batches","work":"join","instructions":1817357687,"cycles":1001603947} +{"version":"b18a","way":"rounds","work":"join","instructions":7677309842,"cycles":3308432834} +{"version":"b19","way":"batches","work":"bfs","instructions":3419213280,"cycles":1659846921} +{"version":"b19","way":"rounds","work":"bfs","instructions":4756853584,"cycles":2090971921} +{"version":"b19","way":"batches","work":"knapsack","instructions":348655180,"cycles":104441272} +{"version":"b19","way":"rounds","work":"knapsack","instructions":21690505967,"cycles":7559412712} +{"version":"b19","way":"batches","work":"matmul","instructions":738968020,"cycles":241227046} +{"version":"b19","way":"rounds","work":"matmul","instructions":21438654915,"cycles":6626938337} +{"version":"b19","way":"batches","work":"roots","instructions":156406418,"cycles":109518518} +{"version":"b19","way":"rounds","work":"roots","instructions":2755945412,"cycles":987957693} +{"version":"b19","way":"batches","work":"join","instructions":1817357840,"cycles":994370112} +{"version":"b19","way":"rounds","work":"join","instructions":7677309661,"cycles":3308013838} +{"version":"b20","way":"batches","work":"bfs","instructions":3374694290,"cycles":1667948983} +{"version":"b20","way":"rounds","work":"bfs","instructions":4715631551,"cycles":2085456396} +{"version":"b20","way":"batches","work":"knapsack","instructions":348396437,"cycles":105113739} +{"version":"b20","way":"rounds","work":"knapsack","instructions":21688102987,"cycles":7530407581} +{"version":"b20","way":"batches","work":"matmul","instructions":738920970,"cycles":239616567} +{"version":"b20","way":"rounds","work":"matmul","instructions":21436716426,"cycles":6633313221} +{"version":"b20","way":"batches","work":"roots","instructions":156406480,"cycles":109640251} +{"version":"b20","way":"rounds","work":"roots","instructions":2755945401,"cycles":987942621} +{"version":"b20","way":"batches","work":"join","instructions":1816206410,"cycles":1020698335} +{"version":"b20","way":"rounds","work":"join","instructions":7669661669,"cycles":3290913542} diff --git a/research/experiments/041-batches/2026-10-09-pairs.jsonl b/research/experiments/041-batches/2026-10-09-pairs.jsonl new file mode 100644 index 0000000..bd06a14 --- /dev/null +++ b/research/experiments/041-batches/2026-10-09-pairs.jsonl @@ -0,0 +1,246 @@ +{"version":"b16","way":"batches","turn":1,"work":"roots","pure_median_ms":8.267,"c_median_ms":6.864,"ratio":1.204,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.255,"c_median_ms":6.224,"ratio":1.326,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"join","pure_median_ms":115.448,"c_median_ms":30.659,"ratio":3.766,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"matmul","pure_median_ms":26.315,"c_median_ms":7.920,"ratio":3.323,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.897,"c_median_ms":10.029,"ratio":2.383,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"roots","pure_median_ms":8.293,"c_median_ms":6.861,"ratio":1.209,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.915,"c_median_ms":6.318,"ratio":1.411,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"join","pure_median_ms":115.284,"c_median_ms":32.879,"ratio":3.506,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"matmul","pure_median_ms":26.302,"c_median_ms":7.525,"ratio":3.495,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.220,"c_median_ms":10.024,"ratio":2.416,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"roots","pure_median_ms":8.279,"c_median_ms":6.861,"ratio":1.207,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.251,"c_median_ms":6.230,"ratio":1.324,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"join","pure_median_ms":114.829,"c_median_ms":34.220,"ratio":3.356,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"matmul","pure_median_ms":26.257,"c_median_ms":7.514,"ratio":3.494,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.827,"c_median_ms":10.019,"ratio":2.378,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"roots","pure_median_ms":8.293,"c_median_ms":6.864,"ratio":1.208,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.722,"c_median_ms":6.234,"ratio":1.399,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"join","pure_median_ms":109.769,"c_median_ms":31.357,"ratio":3.501,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"matmul","pure_median_ms":26.391,"c_median_ms":7.531,"ratio":3.504,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.244,"c_median_ms":9.946,"ratio":2.438,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"roots","pure_median_ms":8.270,"c_median_ms":6.859,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.271,"c_median_ms":6.225,"ratio":1.329,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"join","pure_median_ms":117.211,"c_median_ms":33.106,"ratio":3.540,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"matmul","pure_median_ms":26.278,"c_median_ms":7.821,"ratio":3.360,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.866,"c_median_ms":9.957,"ratio":2.397,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"roots","pure_median_ms":8.290,"c_median_ms":6.870,"ratio":1.207,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.747,"c_median_ms":6.230,"ratio":1.404,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"join","pure_median_ms":111.845,"c_median_ms":32.083,"ratio":3.486,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"matmul","pure_median_ms":26.356,"c_median_ms":7.588,"ratio":3.473,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"bfs","pure_median_ms":27.877,"c_median_ms":10.121,"ratio":2.754,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"roots","pure_median_ms":8.275,"c_median_ms":6.862,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.242,"c_median_ms":6.225,"ratio":1.324,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"join","pure_median_ms":113.759,"c_median_ms":30.151,"ratio":3.773,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"matmul","pure_median_ms":26.227,"c_median_ms":7.528,"ratio":3.484,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.064,"c_median_ms":9.960,"ratio":2.416,"agree":true} +{"version":"b17","way":"batches","turn":4,"work":"roots","pure_median_ms":8.284,"c_median_ms":6.876,"ratio":1.205,"agree":true} +{"version":"b17","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.736,"c_median_ms":6.229,"ratio":1.403,"agree":true} +{"version":"b17","way":"batches","turn":4,"work":"join","pure_median_ms":117.599,"c_median_ms":34.006,"ratio":3.458,"agree":true} +{"version":"b17","way":"batches","turn":4,"work":"matmul","pure_median_ms":26.413,"c_median_ms":7.897,"ratio":3.345,"agree":true} +{"version":"b17","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.196,"c_median_ms":10.081,"ratio":2.400,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"roots","pure_median_ms":8.283,"c_median_ms":6.866,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.297,"c_median_ms":6.236,"ratio":1.331,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"join","pure_median_ms":117.200,"c_median_ms":31.838,"ratio":3.681,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"matmul","pure_median_ms":26.311,"c_median_ms":7.608,"ratio":3.458,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"bfs","pure_median_ms":23.928,"c_median_ms":10.094,"ratio":2.371,"agree":true} +{"version":"b17","way":"batches","turn":5,"work":"roots","pure_median_ms":8.279,"c_median_ms":6.863,"ratio":1.206,"agree":true} +{"version":"b17","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.727,"c_median_ms":6.222,"ratio":1.403,"agree":true} +{"version":"b17","way":"batches","turn":5,"work":"join","pure_median_ms":110.546,"c_median_ms":29.922,"ratio":3.694,"agree":true} +{"version":"b17","way":"batches","turn":5,"work":"matmul","pure_median_ms":26.300,"c_median_ms":7.543,"ratio":3.487,"agree":true} +{"version":"b17","way":"batches","turn":5,"work":"bfs","pure_median_ms":23.826,"c_median_ms":10.263,"ratio":2.322,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"roots","pure_median_ms":8.326,"c_median_ms":6.879,"ratio":1.210,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.758,"c_median_ms":6.230,"ratio":1.406,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"join","pure_median_ms":111.714,"c_median_ms":33.066,"ratio":3.379,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"matmul","pure_median_ms":26.229,"c_median_ms":7.533,"ratio":3.482,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.265,"c_median_ms":10.099,"ratio":2.304,"agree":true} +{"version":"b18a","way":"batches","turn":1,"work":"roots","pure_median_ms":8.299,"c_median_ms":6.857,"ratio":1.210,"agree":true} +{"version":"b18a","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.180,"c_median_ms":6.231,"ratio":1.313,"agree":true} +{"version":"b18a","way":"batches","turn":1,"work":"join","pure_median_ms":110.048,"c_median_ms":31.209,"ratio":3.526,"agree":true} +{"version":"b18a","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.831,"c_median_ms":7.754,"ratio":3.331,"agree":true} +{"version":"b18a","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.285,"c_median_ms":10.063,"ratio":2.314,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"roots","pure_median_ms":8.281,"c_median_ms":6.868,"ratio":1.206,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.749,"c_median_ms":6.230,"ratio":1.404,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"join","pure_median_ms":116.691,"c_median_ms":31.788,"ratio":3.671,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"matmul","pure_median_ms":26.446,"c_median_ms":8.297,"ratio":3.188,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.441,"c_median_ms":10.001,"ratio":2.344,"agree":true} +{"version":"b18a","way":"batches","turn":2,"work":"roots","pure_median_ms":8.292,"c_median_ms":6.866,"ratio":1.208,"agree":true} +{"version":"b18a","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.182,"c_median_ms":6.227,"ratio":1.314,"agree":true} +{"version":"b18a","way":"batches","turn":2,"work":"join","pure_median_ms":113.431,"c_median_ms":32.117,"ratio":3.532,"agree":true} +{"version":"b18a","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.748,"c_median_ms":7.544,"ratio":3.413,"agree":true} +{"version":"b18a","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.102,"c_median_ms":9.948,"ratio":2.322,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"roots","pure_median_ms":8.279,"c_median_ms":6.861,"ratio":1.207,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.724,"c_median_ms":6.226,"ratio":1.401,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"join","pure_median_ms":109.634,"c_median_ms":31.164,"ratio":3.518,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"matmul","pure_median_ms":26.243,"c_median_ms":7.554,"ratio":3.474,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.406,"c_median_ms":10.073,"ratio":2.324,"agree":true} +{"version":"b18a","way":"batches","turn":3,"work":"roots","pure_median_ms":8.294,"c_median_ms":6.867,"ratio":1.208,"agree":true} +{"version":"b18a","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.203,"c_median_ms":6.230,"ratio":1.317,"agree":true} +{"version":"b18a","way":"batches","turn":3,"work":"join","pure_median_ms":111.484,"c_median_ms":30.335,"ratio":3.675,"agree":true} +{"version":"b18a","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.820,"c_median_ms":7.936,"ratio":3.254,"agree":true} +{"version":"b18a","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.528,"c_median_ms":10.032,"ratio":2.345,"agree":true} +{"version":"b18","way":"batches","turn":4,"work":"roots","pure_median_ms":8.280,"c_median_ms":6.862,"ratio":1.207,"agree":true} +{"version":"b18","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.732,"c_median_ms":6.227,"ratio":1.402,"agree":true} +{"version":"b18","way":"batches","turn":4,"work":"join","pure_median_ms":111.086,"c_median_ms":31.492,"ratio":3.527,"agree":true} +{"version":"b18","way":"batches","turn":4,"work":"matmul","pure_median_ms":26.277,"c_median_ms":7.561,"ratio":3.475,"agree":true} +{"version":"b18","way":"batches","turn":4,"work":"bfs","pure_median_ms":23.694,"c_median_ms":10.159,"ratio":2.332,"agree":true} +{"version":"b18a","way":"batches","turn":4,"work":"roots","pure_median_ms":8.294,"c_median_ms":6.866,"ratio":1.208,"agree":true} +{"version":"b18a","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.211,"c_median_ms":6.230,"ratio":1.318,"agree":true} +{"version":"b18a","way":"batches","turn":4,"work":"join","pure_median_ms":112.167,"c_median_ms":31.202,"ratio":3.595,"agree":true} +{"version":"b18a","way":"batches","turn":4,"work":"matmul","pure_median_ms":25.731,"c_median_ms":7.532,"ratio":3.416,"agree":true} +{"version":"b18a","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.308,"c_median_ms":11.484,"ratio":2.117,"agree":true} +{"version":"b18","way":"batches","turn":5,"work":"roots","pure_median_ms":8.278,"c_median_ms":6.865,"ratio":1.206,"agree":true} +{"version":"b18","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.739,"c_median_ms":6.234,"ratio":1.402,"agree":true} +{"version":"b18","way":"batches","turn":5,"work":"join","pure_median_ms":111.430,"c_median_ms":32.352,"ratio":3.444,"agree":true} +{"version":"b18","way":"batches","turn":5,"work":"matmul","pure_median_ms":26.243,"c_median_ms":7.526,"ratio":3.487,"agree":true} +{"version":"b18","way":"batches","turn":5,"work":"bfs","pure_median_ms":23.667,"c_median_ms":10.002,"ratio":2.366,"agree":true} +{"version":"b18a","way":"batches","turn":5,"work":"roots","pure_median_ms":8.300,"c_median_ms":6.870,"ratio":1.208,"agree":true} +{"version":"b18a","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.236,"c_median_ms":6.234,"ratio":1.321,"agree":true} +{"version":"b18a","way":"batches","turn":5,"work":"join","pure_median_ms":111.445,"c_median_ms":30.545,"ratio":3.649,"agree":true} +{"version":"b18a","way":"batches","turn":5,"work":"matmul","pure_median_ms":25.771,"c_median_ms":7.584,"ratio":3.398,"agree":true} +{"version":"b18a","way":"batches","turn":5,"work":"bfs","pure_median_ms":22.890,"c_median_ms":10.273,"ratio":2.228,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.690,"c_median_ms":6.232,"ratio":1.394,"agree":true} +{"version":"b17","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.232,"c_median_ms":10.041,"ratio":2.413,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"knapsack","pure_median_ms":9.299,"c_median_ms":6.430,"ratio":1.446,"agree":true} +{"version":"b18","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.536,"c_median_ms":10.004,"ratio":2.353,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.739,"c_median_ms":6.232,"ratio":1.402,"agree":true} +{"version":"b17","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.246,"c_median_ms":10.206,"ratio":2.376,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.701,"c_median_ms":6.227,"ratio":1.397,"agree":true} +{"version":"b18","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.928,"c_median_ms":10.066,"ratio":2.377,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.750,"c_median_ms":6.232,"ratio":1.404,"agree":true} +{"version":"b17","way":"batches","turn":3,"work":"bfs","pure_median_ms":24.789,"c_median_ms":10.091,"ratio":2.457,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.762,"c_median_ms":6.281,"ratio":1.395,"agree":true} +{"version":"b18","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.577,"c_median_ms":10.064,"ratio":2.343,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"roots","pure_median_ms":8.958,"c_median_ms":6.871,"ratio":1.304,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"knapsack","pure_median_ms":11.400,"c_median_ms":6.225,"ratio":1.831,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"sort","pure_median_ms":58.200,"c_median_ms":26.907,"ratio":2.163,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"join","pure_median_ms":122.351,"c_median_ms":30.111,"ratio":4.063,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"words","pure_median_ms":215.824,"c_median_ms":38.556,"ratio":5.598,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"matmul","pure_median_ms":39.954,"c_median_ms":7.523,"ratio":5.311,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.149,"c_median_ms":10.002,"ratio":2.414,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"roots","pure_median_ms":8.292,"c_median_ms":6.861,"ratio":1.208,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.263,"c_median_ms":6.227,"ratio":1.327,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"sort","pure_median_ms":57.109,"c_median_ms":26.882,"ratio":2.124,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"join","pure_median_ms":112.788,"c_median_ms":31.889,"ratio":3.537,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"words","pure_median_ms":218.230,"c_median_ms":37.574,"ratio":5.808,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.725,"c_median_ms":7.867,"ratio":3.270,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.133,"c_median_ms":10.181,"ratio":2.272,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"roots","pure_median_ms":8.974,"c_median_ms":6.863,"ratio":1.308,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"knapsack","pure_median_ms":11.472,"c_median_ms":6.236,"ratio":1.840,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"sort","pure_median_ms":56.924,"c_median_ms":26.881,"ratio":2.118,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"join","pure_median_ms":121.237,"c_median_ms":29.843,"ratio":4.062,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"words","pure_median_ms":213.988,"c_median_ms":38.420,"ratio":5.570,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"matmul","pure_median_ms":40.026,"c_median_ms":8.064,"ratio":4.964,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.298,"c_median_ms":10.115,"ratio":2.402,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"roots","pure_median_ms":8.292,"c_median_ms":6.867,"ratio":1.208,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.200,"c_median_ms":6.225,"ratio":1.317,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"sort","pure_median_ms":56.938,"c_median_ms":26.916,"ratio":2.115,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"join","pure_median_ms":110.755,"c_median_ms":30.315,"ratio":3.654,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"words","pure_median_ms":217.238,"c_median_ms":39.112,"ratio":5.554,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.766,"c_median_ms":7.535,"ratio":3.420,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.399,"c_median_ms":10.060,"ratio":2.326,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"roots","pure_median_ms":8.963,"c_median_ms":6.871,"ratio":1.305,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"knapsack","pure_median_ms":11.439,"c_median_ms":6.229,"ratio":1.836,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"sort","pure_median_ms":57.778,"c_median_ms":26.960,"ratio":2.143,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"join","pure_median_ms":119.053,"c_median_ms":30.341,"ratio":3.924,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"words","pure_median_ms":215.859,"c_median_ms":40.440,"ratio":5.338,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"matmul","pure_median_ms":39.949,"c_median_ms":7.529,"ratio":5.306,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"bfs","pure_median_ms":24.057,"c_median_ms":10.089,"ratio":2.385,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"roots","pure_median_ms":8.309,"c_median_ms":6.869,"ratio":1.210,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.205,"c_median_ms":6.231,"ratio":1.317,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"sort","pure_median_ms":57.273,"c_median_ms":26.864,"ratio":2.132,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"join","pure_median_ms":109.361,"c_median_ms":31.111,"ratio":3.515,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"words","pure_median_ms":218.364,"c_median_ms":39.240,"ratio":5.565,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.744,"c_median_ms":8.234,"ratio":3.127,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.171,"c_median_ms":9.917,"ratio":2.336,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"roots","pure_median_ms":8.295,"c_median_ms":6.862,"ratio":1.209,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.197,"c_median_ms":6.225,"ratio":1.317,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"join","pure_median_ms":116.152,"c_median_ms":33.290,"ratio":3.489,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.680,"c_median_ms":7.509,"ratio":3.420,"agree":true} +{"version":"b19","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.083,"c_median_ms":10.201,"ratio":2.263,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"roots","pure_median_ms":8.295,"c_median_ms":6.865,"ratio":1.208,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.210,"c_median_ms":6.245,"ratio":1.315,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"join","pure_median_ms":110.403,"c_median_ms":29.169,"ratio":3.785,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.804,"c_median_ms":7.519,"ratio":3.432,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.353,"c_median_ms":9.954,"ratio":2.346,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"roots","pure_median_ms":8.297,"c_median_ms":6.861,"ratio":1.209,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.225,"c_median_ms":6.224,"ratio":1.321,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"join","pure_median_ms":113.403,"c_median_ms":29.971,"ratio":3.784,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.762,"c_median_ms":7.508,"ratio":3.431,"agree":true} +{"version":"b19","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.043,"c_median_ms":9.971,"ratio":2.311,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"roots","pure_median_ms":8.294,"c_median_ms":6.867,"ratio":1.208,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.198,"c_median_ms":6.226,"ratio":1.317,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"join","pure_median_ms":112.222,"c_median_ms":31.045,"ratio":3.615,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.746,"c_median_ms":7.553,"ratio":3.409,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.206,"c_median_ms":9.975,"ratio":2.326,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"roots","pure_median_ms":8.304,"c_median_ms":6.866,"ratio":1.209,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.219,"c_median_ms":6.228,"ratio":1.320,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"join","pure_median_ms":110.355,"c_median_ms":32.475,"ratio":3.398,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.830,"c_median_ms":7.540,"ratio":3.426,"agree":true} +{"version":"b19","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.315,"c_median_ms":9.919,"ratio":2.350,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"roots","pure_median_ms":8.287,"c_median_ms":6.866,"ratio":1.207,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.170,"c_median_ms":6.233,"ratio":1.311,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"join","pure_median_ms":109.037,"c_median_ms":31.893,"ratio":3.419,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.862,"c_median_ms":7.566,"ratio":3.418,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.027,"c_median_ms":9.955,"ratio":2.313,"agree":true} +{"version":"b19","way":"batches","turn":4,"work":"roots","pure_median_ms":8.298,"c_median_ms":6.871,"ratio":1.208,"agree":true} +{"version":"b19","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.196,"c_median_ms":6.227,"ratio":1.316,"agree":true} +{"version":"b19","way":"batches","turn":4,"work":"join","pure_median_ms":109.268,"c_median_ms":32.774,"ratio":3.334,"agree":true} +{"version":"b19","way":"batches","turn":4,"work":"matmul","pure_median_ms":25.769,"c_median_ms":7.523,"ratio":3.425,"agree":true} +{"version":"b19","way":"batches","turn":4,"work":"bfs","pure_median_ms":23.085,"c_median_ms":9.890,"ratio":2.334,"agree":true} +{"version":"b20","way":"batches","turn":4,"work":"roots","pure_median_ms":8.288,"c_median_ms":6.864,"ratio":1.207,"agree":true} +{"version":"b20","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.191,"c_median_ms":6.229,"ratio":1.315,"agree":true} +{"version":"b20","way":"batches","turn":4,"work":"join","pure_median_ms":110.643,"c_median_ms":30.878,"ratio":3.583,"agree":true} +{"version":"b20","way":"batches","turn":4,"work":"matmul","pure_median_ms":25.847,"c_median_ms":7.574,"ratio":3.413,"agree":true} +{"version":"b20","way":"batches","turn":4,"work":"bfs","pure_median_ms":23.049,"c_median_ms":9.946,"ratio":2.317,"agree":true} +{"version":"b19","way":"batches","turn":5,"work":"roots","pure_median_ms":8.291,"c_median_ms":6.865,"ratio":1.208,"agree":true} +{"version":"b19","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.191,"c_median_ms":6.224,"ratio":1.316,"agree":true} +{"version":"b19","way":"batches","turn":5,"work":"join","pure_median_ms":110.978,"c_median_ms":31.351,"ratio":3.540,"agree":true} +{"version":"b19","way":"batches","turn":5,"work":"matmul","pure_median_ms":25.771,"c_median_ms":7.537,"ratio":3.419,"agree":true} +{"version":"b19","way":"batches","turn":5,"work":"bfs","pure_median_ms":22.905,"c_median_ms":9.952,"ratio":2.301,"agree":true} +{"version":"b20","way":"batches","turn":5,"work":"roots","pure_median_ms":8.298,"c_median_ms":6.864,"ratio":1.209,"agree":true} +{"version":"b20","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.201,"c_median_ms":6.227,"ratio":1.317,"agree":true} +{"version":"b20","way":"batches","turn":5,"work":"join","pure_median_ms":109.204,"c_median_ms":31.332,"ratio":3.485,"agree":true} +{"version":"b20","way":"batches","turn":5,"work":"matmul","pure_median_ms":25.797,"c_median_ms":7.530,"ratio":3.426,"agree":true} +{"version":"b20","way":"batches","turn":5,"work":"bfs","pure_median_ms":23.223,"c_median_ms":9.946,"ratio":2.335,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"roots","pure_median_ms":8.973,"c_median_ms":6.864,"ratio":1.307,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"knapsack","pure_median_ms":11.476,"c_median_ms":6.228,"ratio":1.843,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"sort","pure_median_ms":55.942,"c_median_ms":26.895,"ratio":2.080,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"join","pure_median_ms":117.696,"c_median_ms":30.614,"ratio":3.845,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"words","pure_median_ms":213.361,"c_median_ms":38.825,"ratio":5.495,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"matmul","pure_median_ms":39.955,"c_median_ms":8.112,"ratio":4.925,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.153,"c_median_ms":9.898,"ratio":2.440,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"roots","pure_median_ms":8.289,"c_median_ms":6.863,"ratio":1.208,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.183,"c_median_ms":6.227,"ratio":1.314,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"sort","pure_median_ms":56.175,"c_median_ms":26.923,"ratio":2.087,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"join","pure_median_ms":111.044,"c_median_ms":31.599,"ratio":3.514,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"words","pure_median_ms":218.102,"c_median_ms":38.733,"ratio":5.631,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.714,"c_median_ms":7.544,"ratio":3.409,"agree":true} +{"version":"b20","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.229,"c_median_ms":9.901,"ratio":2.346,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"roots","pure_median_ms":8.970,"c_median_ms":6.872,"ratio":1.305,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"knapsack","pure_median_ms":11.419,"c_median_ms":6.228,"ratio":1.834,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"sort","pure_median_ms":55.817,"c_median_ms":26.899,"ratio":2.075,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"join","pure_median_ms":119.041,"c_median_ms":32.972,"ratio":3.610,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"words","pure_median_ms":214.026,"c_median_ms":38.285,"ratio":5.590,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"matmul","pure_median_ms":40.001,"c_median_ms":7.554,"ratio":5.295,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.252,"c_median_ms":9.892,"ratio":2.452,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"roots","pure_median_ms":8.302,"c_median_ms":6.866,"ratio":1.209,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.208,"c_median_ms":6.231,"ratio":1.317,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"sort","pure_median_ms":55.863,"c_median_ms":26.928,"ratio":2.075,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"join","pure_median_ms":110.880,"c_median_ms":31.843,"ratio":3.482,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"words","pure_median_ms":216.515,"c_median_ms":39.203,"ratio":5.523,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.747,"c_median_ms":7.529,"ratio":3.420,"agree":true} +{"version":"b20","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.078,"c_median_ms":9.908,"ratio":2.329,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"roots","pure_median_ms":8.957,"c_median_ms":6.862,"ratio":1.305,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"knapsack","pure_median_ms":11.440,"c_median_ms":6.233,"ratio":1.835,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"sort","pure_median_ms":55.707,"c_median_ms":26.882,"ratio":2.072,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"join","pure_median_ms":119.493,"c_median_ms":31.648,"ratio":3.776,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"words","pure_median_ms":215.632,"c_median_ms":39.222,"ratio":5.498,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"matmul","pure_median_ms":39.989,"c_median_ms":7.555,"ratio":5.293,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"bfs","pure_median_ms":24.153,"c_median_ms":9.915,"ratio":2.436,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"roots","pure_median_ms":8.289,"c_median_ms":6.867,"ratio":1.207,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.178,"c_median_ms":6.221,"ratio":1.315,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"sort","pure_median_ms":55.745,"c_median_ms":26.858,"ratio":2.076,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"join","pure_median_ms":109.806,"c_median_ms":32.546,"ratio":3.374,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"words","pure_median_ms":217.701,"c_median_ms":40.009,"ratio":5.441,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.751,"c_median_ms":7.543,"ratio":3.414,"agree":true} +{"version":"b20","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.663,"c_median_ms":9.930,"ratio":2.383,"agree":true} diff --git a/research/experiments/041-batches/runs.sh b/research/experiments/041-batches/runs.sh index 4da74fb..ba168b9 100755 --- a/research/experiments/041-batches/runs.sh +++ b/research/experiments/041-batches/runs.sh @@ -67,3 +67,5 @@ esac # 2026-10-08-batch-costs.jsonl (design 025): knapsack's time a round by # function and line, b9's code at BATCH 1024 and 256 under a 2 kHz sampled # profile (ms by the in-process C's samples); sum0's times at both. +# A series run over midnight writes two days' files (2026-10-08 and +# 2026-10-09 for design 025's stage 5): read both. -- cgit v1.2.3