diff options
34 files changed, 489 insertions, 5 deletions
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. |
