diff options
| author | eunhhu <[email protected]> | 2026-10-08 17:48:03 +0100 |
|---|---|---|
| committer | eunhhu <[email protected]> | 2026-10-08 17:48:03 +0100 |
| commit | 59510b75aaf6781fe7dfa10f617c06d5272bd746 (patch) | |
| tree | 0633e7104d5326b0e1e9649595edb60c45a31270 | |
| parent | c38f9f11145445b4d4e3d284fd1256cc891bb3db (diff) | |
| download | pure-59510b75aaf6781fe7dfa10f617c06d5272bd746.tar.gz pure-59510b75aaf6781fe7dfa10f617c06d5272bd746.zip | |
Research 137: the batch executor's stage 4 (columns read in place, comparisons counting their lanes): knapsack 10.07 to 8.25 ms (bar 8.6; b9 11.46, the compiled code 7.9), its instructions 12.2% below b9's; what is left of knapsack's gap is the per-batch interpretation (about 3 ms), not the kernels (ADD 1.7, GT 1.7, the masked set 0.55 ms); the others the same by instructions; make check's server_view_workers timed out once (the known flake), passed 3/3 alone and in a full rerun; bank queries' instructions within 0.1% of b9's, TPC-C -0.3%; the two large gaps left (matmul's nested rounds, BFS's candidate tail) the user's to choose
31 files changed, 333 insertions, 2 deletions
diff --git a/CHECKPOINT.md b/CHECKPOINT.md index c0d099c..ee9a421 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). 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) | +| 수명과 계산 | 값의 수명은 선언이 말한다: `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) | | 보기 밀기 | 보기의 `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/025-batch-programs.md b/docs/design/025-batch-programs.md index 8b9ab78..b79075b 100644 --- a/docs/design/025-batch-programs.md +++ b/docs/design/025-batch-programs.md @@ -12,7 +12,10 @@ matmul ≤ 21 ms). 4바이트 곱하기 뒤 matmul은 26.57 ms다(명령 −20%) 훑기 여섯을 셋으로). 4단계의 막대는 셈으로 ≤ 8.6 ms다: 열 보기가 묶음마다 4 KB 복사 둘(약 500 사이클)을, 비교가 레인을 세면 가르기의 훑기(약 300–400 사이클)를 덜어 묶음마다 약 0.35 µs × 4,886 ≈ 1.7 ms다. 더하기(레인당 넘침 검사와 함께 약 2.5 명령)와 비교(약 1.25)가 따로인 한, 레인 1024에서 knapsack의 범용의 바닥은 약 8.3 ms로 기계어(7.9)의 조금 위다. 그 아래는 두 커널을 합치는 -일이고, 이 설계는 합친 연산을 두지 않는다(133과 같은 결론). [024](024-batch-executor.md)가 처음에 적고 만들지 않은 단계("묶음 프로그램은 루프마다 한 번 +일이고, 이 설계는 합친 연산을 두지 않는다(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)가 처음에 적고 만들지 않은 단계("묶음 프로그램은 루프마다 한 번 만든다")이고, [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). diff --git a/docs/research/137-batch-executor-stage-four.md b/docs/research/137-batch-executor-stage-four.md new file mode 100644 index 0000000..b391ccc --- /dev/null +++ b/docs/research/137-batch-executor-stage-four.md @@ -0,0 +1,66 @@ +# 137 — 묶음 실행기 4단계: 열을 제자리에서 읽고, 비교가 레인을 센다 + +2026-10-08. [025](../design/025-batch-programs.md)의 4단계다. knapsack의 훑기 여섯 가운데 둘(열을 레인 배열로 옮기기 둘)과 하나(가르기의 +세기)를 없앴다. 코드는 `d740ff3`(열 보기)와 `43854e9`(비교가 1을 센다)이고, 같은 방법으로 쟀다(`b15`, `b16`; 번갈아 다섯 번씩, b9와 +세 번씩; 명령 수). + +## 쉬운 말로 + +- **막대를 넘었다.** knapsack은 10.07에서 8.25 ms다(막대 ≤ 8.6). b9의 11.46에서 −28%이고, 기계어(7.9)의 1.04배다. +- **남은 차는 커널이 아니라 묶음마다다.** 지금 knapsack 8.25 ms는 대략 커널 약 4 ms(더하기 1.7, 비교 1.7, 가린 쓰기 0.55), 묶음마다 + 약 3 ms(0.6 µs × 4,886), 표 만들기 약 1 ms다. 더하기와 비교는 레인당 약 0.8 사이클씩이다. 둘을 한 루프로 합치면 같은 열을 두 번 + 읽지 않겠지만, 이 설계는 합친 연산을 두지 않는다(133). 기계어에 닿거나 넘으려면 묶음마다의 해석(135가 이 꼴의 바닥이라 한 것)을 + 줄여야 하고, 그것은 루프마다 미리 짠 프로그램의 일이다. +- **다른 일은 그대로다.** 명령 수로 roots, join, BFS, matmul이 같다. matmul 25.84 → 26.27(+1.7%), sort 57.0 → 58.8(+3.2%), words + 215.3 → 219.0(+1.8%)은 명령이 같거나 이 단계가 닿지 않는 일이라 놓인 자리다. + +## 만든 것 + +- **열 보기**(`cells_at`). 아핀 행이 메모리의 차례(보폭 1; 거꾸로 가는 루프는 레인을 거꾸로 매겨 그렇게 된다)이고 열이 4바이트나 8바이트면, + 읽기는 복사하지 않고 열 자체를 레인으로 가리킨다(`view`, `temp` 아님). `pass` 동안 리스트는 바뀌지 않으므로(136의 grep) 보기는 그 동안 + 맞다. 연산은 피연산자의 레인에 쓰지 않는다(grep: 레인을 읽는 곳은 모두 `const`, 쓰기는 모두 새 버퍼). `pass`를 넘어 남는 것 여섯(지역 + 변수, 미룬 쓰기의 행과 값, 덧붙이기의 칸, 칸에 더하기의 행과 e, 걸러내기의 키, 읽기의 기록)은 보기를 복사한다(`own`). 묶음 끝의 쓰기가 + 열을 바꾸거나 넓히기(`widen`은 열을 다시 잡는다) 때문이다. + - 고정 소스 `VIEW_SOURCE`를 더했다: 지역 변수가 묶음이 쓰는 필드를 쥔 채(마지막 값을 쓰기 뒤에 되씀), 같은 열의 세 행 너머를 읽는 + 쓰기를 읽는 것을 덮어쓰는 차례로, 보기를 쥔 채 열을 8바이트로 넓히는 쓰기. 복사를 빼면 같은 메시지에서 답이 달라지고, sanitized + `pure-run`이 `memcpy`의 겹침을 잡는다. 복사가 있으면 세 길이 같고 sanitized도 깨끗하다. + - knapsack 명령 −4.0%, 사이클 −7.0%, 10.09 → 8.95 ms(셈 약 1.1 ms와 같다). +- **비교가 레인을 센다**(`TEST`, `ones`). 4바이트 비교가 1을 같은 루프에서 세고(벡터 덧셈 하나, 레인 넷에 명령 8개), 값이 그 수를 + 가진다. 모든 레인이 도는 가르기는 다시 세지 않는다. 레인을 그대로 두고 레인 수가 다른 공간으로 넘기는 길은 없다(`gather`, `expand`, + `outer_*`는 레인 값이면 늘 새 값을 만든다). knapsack 명령 −3.1%, 사이클 −4.5%, 8.96 → 8.25 ms. + +## 잰 것 + +| 일 | b9 | b14 (3단계 끝) | b15 (보기) | b16 (세기) | 기계어 | C | +|---|---:|---:|---:|---:|---:|---:| +| knapsack | 11.46 ms | 10.09 | 8.96 | **8.25** | 7.9 | 6.25 | +| matmul | 39.99 | 25.98 | 25.84 | 26.27 | 14.2 | 7.6 | +| roots | 8.97 | 8.29 | 8.31 | 8.28 | 9.57 | 6.86 | +| join | 117.5 | 115.9 | 116.5 | 116.2 | 84.6 | 31.7 | +| BFS | 24.18 | 24.15 | 24.08 | 24.06 | 7.7 | 9.9 | + +- 명령(b9 → b16, 묶음 길): knapsack −12.2%, matmul −25.5%, roots −7.4%, join −1.3%, BFS −0.2%. 실행기만의 길은 다섯 일 모두 같다. +- join의 실행기만의 길은 빌드마다 같은 명령에서 사이클이 ±10% 오간다(136의 +11%, 이번 b15의 −9%). 그 길의 잣대는 명령 수다. + +원본: `041-batches/2026-10-08-pairs.jsonl`, `2026-10-08-counts.jsonl`. + +## 뜻과 맞음 + +- 커밋마다 시드 1, 2, 3, 5, 23의 무작위 프로그램(기본과 `PURE_SELECT=all`), 고정 소스의 세 길(두 모드; 보기는 sanitized로도), 단위 + 시험이 지났다. +- 단계의 끝(`43854e9`)에서 단위 시험 세 모드, ASan 단위 시험(기본과 실행기 모드), sanitized `pure-run`의 고정 소스(두 모드, `VIEW_SOURCE` + 포함)와 시드 23의 프로그램(두 모드), aup의 검사 두 모드가 지났다. Pure의 `make check`는 처음에 `server_view_workers`가 모듈을 바꾼 뒤의 + 흐름을 10초 기다리다 멈췄다(기억해 둔 시간 검사의 흔들림). 홀로 세 번 돌려 세 번 지났고, 다시 돈 전체 `make check`가 지났다. +- 은행 질의의 명령 수는 b9와 ±0.1% 안이다. TPC-C(번갈아 여섯 번)는 b9 117.4만 대 지금 117.0만 신규 주문/분(−0.3%)이다. + +## 스위트의 자리와 남은 두 틈 + +4단계 뒤의 묶음 실행기(기계어 없이)와 기계어: knapsack 8.25 대 7.9(1.04배), matmul 26.3 대 14.2(1.85배), roots 8.28 대 9.57(기계어보다 +빠름), join 116 대 85(1.37배), BFS 24.1 대 7.7(3.1배). 큰 틈은 둘이다. + +1. **matmul의 안쪽 회차마다의 해석(약 14 ms).** 몸체를 회차마다 명령 하나씩 해석하는 값이고, 135가 이 해석기 꼴의 바닥이라 한 것이다. + 줄이려면 루프마다 미리 짠 프로그램(값의 꼴, 리스트의 사실, 의존 검사를 다 미리 정한 것)이 있어야 한다. 다른 값과 위험이다. +2. **BFS의 후보 꼬리(132의 E).** 걸러내기 뒤 후보 하나에 약 250 명령(간선당 26)이다. 리스트 쪽에서 폭 검사를 한 번에, 비트와 칸을 + 함께 하면 줄어든다. 5단계이고 다른 단계와 독립이다. + +어느 쪽으로 갈지(그리고 기계어를 걷어낼지)는 사용자의 몫이다(131). diff --git a/research/experiments/040-against-c/2026-10-08-counts-s16.jsonl b/research/experiments/040-against-c/2026-10-08-counts-s16.jsonl new file mode 100644 index 0000000..03e3b17 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-counts-s16.jsonl @@ -0,0 +1,4 @@ +{"serve": "pure-serve", "per_branch": {"instructions": 27206437, "cycles": 12193908}, "in_credit": {"instructions": 3539491, "cycles": 1590320}, "large": {"instructions": 1419171, "cycles": 620624}, "ranks": {"instructions": 24538485, "cycles": 14924796}, "none": {"instructions": 615600, "cycles": 194460}, "field": {"instructions": 9007132, "cycles": 3290082}, "found": {"instructions": 14138875, "cycles": 10513744}} +{"serve": "pure-serve", "per_branch": {"instructions": 27174503, "cycles": 12152935}, "in_credit": {"instructions": 3532203, "cycles": 1643873}, "large": {"instructions": 1419155, "cycles": 615898}, "ranks": {"instructions": 24519864, "cycles": 15205679}, "none": {"instructions": 615600, "cycles": 194254}, "field": {"instructions": 9007132, "cycles": 3275460}, "found": {"instructions": 14139691, "cycles": 10954635}} +{"serve": "pure-serve", "per_branch": {"instructions": 27142081, "cycles": 12144302}, "in_credit": {"instructions": 3524900, "cycles": 1623796}, "large": {"instructions": 1419123, "cycles": 616959}, "ranks": {"instructions": 24501599, "cycles": 14658870}, "none": {"instructions": 615600, "cycles": 193689}, "field": {"instructions": 9007132, "cycles": 3284131}, "found": {"instructions": 14139267, "cycles": 10851692}} +{"serve": "pure-serve", "per_branch": {"instructions": 27206145, "cycles": 11999425}, "in_credit": {"instructions": 3539418, "cycles": 1785262}, "large": {"instructions": 1419099, "cycles": 611238}, "ranks": {"instructions": 24538778, "cycles": 15150304}, "none": {"instructions": 615600, "cycles": 194966}, "field": {"instructions": 9007132, "cycles": 3261606}, "found": {"instructions": 14138083, "cycles": 10692158}} diff --git a/research/experiments/040-against-c/2026-10-08-load.txt b/research/experiments/040-against-c/2026-10-08-load.txt index e17ec65..7ae2dad 100644 --- a/research/experiments/040-against-c/2026-10-08-load.txt +++ b/research/experiments/040-against-c/2026-10-08-load.txt @@ -10,3 +10,15 @@ 5 s14 16:37:01 up 4 days, 12:58, 2 users, load average: 1.46, 1.64, 1.46 6 s14 16:38:48 up 4 days, 13:00, 2 users, load average: 1.33, 1.67, 1.50 6 s9 16:40:15 up 4 days, 13:01, 2 users, load average: 1.37, 1.65, 1.51 +7 s9 17:28:17 up 4 days, 13:49, 2 users, load average: 1.46, 1.33, 1.24 +7 s16 17:30:04 up 4 days, 13:51, 2 users, load average: 1.41, 1.45, 1.30 +8 s16 17:31:50 up 4 days, 13:53, 2 users, load average: 1.28, 1.50, 1.34 +8 s9 17:33:17 up 4 days, 13:54, 2 users, load average: 1.36, 1.53, 1.36 +9 s9 17:34:44 up 4 days, 13:56, 2 users, load average: 1.38, 1.54, 1.38 +9 s16 17:36:21 up 4 days, 13:57, 2 users, load average: 1.36, 1.59, 1.42 +10 s16 17:37:58 up 4 days, 13:59, 2 users, load average: 1.32, 1.61, 1.45 +10 s9 17:39:35 up 4 days, 14:00, 2 users, load average: 1.43, 1.67, 1.50 +11 s9 17:41:31 up 4 days, 14:02, 2 users, load average: 1.28, 1.70, 1.54 +11 s16 17:42:58 up 4 days, 14:04, 2 users, load average: 1.29, 1.64, 1.53 +12 s16 17:44:35 up 4 days, 14:05, 2 users, load average: 1.31, 1.65, 1.55 +12 s9 17:46:13 up 4 days, 14:07, 2 users, load average: 1.32, 1.67, 1.57 diff --git a/research/experiments/040-against-c/2026-10-08-queries-s16-10.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s16-10.jsonl new file mode 100644 index 0000000..3aae710 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s16-10.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.34, "pure_fastest_ms": 5.27, "sqlite_median_ms": 45.06, "sqlite_fastest_ms": 44.83, "sqlite_indexed_median_ms": 14.01, "sqlite_indexed_fastest_ms": 13.92} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.86, "pure_fastest_ms": 0.81, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.88, "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.48, "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.82, "pure_fastest_ms": 6.74, "sqlite_median_ms": 2841.82, "sqlite_fastest_ms": 2838.35, "sqlite_indexed_median_ms": 7.54, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s16-11.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s16-11.jsonl new file mode 100644 index 0000000..2b215d3 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s16-11.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.28, "pure_fastest_ms": 5.19, "sqlite_median_ms": 45.34, "sqlite_fastest_ms": 45.2, "sqlite_indexed_median_ms": 14.08, "sqlite_indexed_fastest_ms": 14.03} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.84, "pure_fastest_ms": 0.8, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.88, "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.36, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.49, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 7.06, "pure_fastest_ms": 6.66, "sqlite_median_ms": 2843.39, "sqlite_fastest_ms": 2836.98, "sqlite_indexed_median_ms": 7.55, "sqlite_indexed_fastest_ms": 7.51} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s16-12.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s16-12.jsonl new file mode 100644 index 0000000..4a3ce77 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s16-12.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.28, "pure_fastest_ms": 5.18, "sqlite_median_ms": 45.5, "sqlite_fastest_ms": 45.27, "sqlite_indexed_median_ms": 14.15, "sqlite_indexed_fastest_ms": 14.06} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 1.19, "pure_fastest_ms": 1.04, "sqlite_median_ms": 6.29, "sqlite_fastest_ms": 6.26, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 1.06, "pure_fastest_ms": 0.7, "sqlite_median_ms": 1.87, "sqlite_fastest_ms": 1.51, "sqlite_indexed_median_ms": 1.48, "sqlite_indexed_fastest_ms": 1.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 8.2, "pure_fastest_ms": 6.77, "sqlite_median_ms": 2883.56, "sqlite_fastest_ms": 2837.2, "sqlite_indexed_median_ms": 7.61, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s16-7.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s16-7.jsonl new file mode 100644 index 0000000..19e90f5 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s16-7.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.3, "pure_fastest_ms": 5.2, "sqlite_median_ms": 45.29, "sqlite_fastest_ms": 45.12, "sqlite_indexed_median_ms": 14.03, "sqlite_indexed_fastest_ms": 13.98} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.82, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.9, "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.36, "sqlite_median_ms": 1.49, "sqlite_fastest_ms": 1.47, "sqlite_indexed_median_ms": 1.5, "sqlite_indexed_fastest_ms": 1.48} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.76, "pure_fastest_ms": 6.69, "sqlite_median_ms": 2845.34, "sqlite_fastest_ms": 2837.97, "sqlite_indexed_median_ms": 7.59, "sqlite_indexed_fastest_ms": 7.53} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s16-8.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s16-8.jsonl new file mode 100644 index 0000000..0d86f4b --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s16-8.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.45, "sqlite_fastest_ms": 45.14, "sqlite_indexed_median_ms": 14.11, "sqlite_indexed_fastest_ms": 14.08} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.79, "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.39, "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.47} +{"query": "ranks", "rows": 404, "accounts": 100000, "pure_median_ms": 6.75, "pure_fastest_ms": 6.68, "sqlite_median_ms": 2841.25, "sqlite_fastest_ms": 2837.71, "sqlite_indexed_median_ms": 7.63, "sqlite_indexed_fastest_ms": 7.55} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s16-9.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s16-9.jsonl new file mode 100644 index 0000000..d856aa6 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s16-9.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.24, "pure_fastest_ms": 5.14, "sqlite_median_ms": 44.93, "sqlite_fastest_ms": 44.8, "sqlite_indexed_median_ms": 14.02, "sqlite_indexed_fastest_ms": 13.97} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.81, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.86, "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.37, "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.79, "pure_fastest_ms": 6.68, "sqlite_median_ms": 2843.9, "sqlite_fastest_ms": 2841.47, "sqlite_indexed_median_ms": 7.59, "sqlite_indexed_fastest_ms": 7.51} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s9-10.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s9-10.jsonl new file mode 100644 index 0000000..f540655 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s9-10.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.22, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.33, "sqlite_fastest_ms": 45.25, "sqlite_indexed_median_ms": 14.14, "sqlite_indexed_fastest_ms": 14.11} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.91, "sqlite_fastest_ms": 5.88, "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.34, "sqlite_median_ms": 1.49, "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.69, "pure_fastest_ms": 6.65, "sqlite_median_ms": 2842.19, "sqlite_fastest_ms": 2838.4, "sqlite_indexed_median_ms": 7.58, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s9-11.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s9-11.jsonl new file mode 100644 index 0000000..ec6e5d6 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s9-11.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.23, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.27, "sqlite_fastest_ms": 45.09, "sqlite_indexed_median_ms": 14.07, "sqlite_indexed_fastest_ms": 14.05} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.8, "pure_fastest_ms": 0.77, "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.67, "pure_fastest_ms": 6.61, "sqlite_median_ms": 2841.8, "sqlite_fastest_ms": 2836.15, "sqlite_indexed_median_ms": 7.66, "sqlite_indexed_fastest_ms": 7.54} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s9-12.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s9-12.jsonl new file mode 100644 index 0000000..be9690b --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s9-12.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.22, "pure_fastest_ms": 5.16, "sqlite_median_ms": 45.32, "sqlite_fastest_ms": 45.07, "sqlite_indexed_median_ms": 14.12, "sqlite_indexed_fastest_ms": 14.04} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "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.41, "pure_fastest_ms": 0.37, "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.72, "pure_fastest_ms": 6.64, "sqlite_median_ms": 2843.24, "sqlite_fastest_ms": 2836.92, "sqlite_indexed_median_ms": 7.57, "sqlite_indexed_fastest_ms": 7.52} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s9-7.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s9-7.jsonl new file mode 100644 index 0000000..c85c42f --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s9-7.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.19, "pure_fastest_ms": 5.14, "sqlite_median_ms": 45.4, "sqlite_fastest_ms": 45.24, "sqlite_indexed_median_ms": 14.06, "sqlite_indexed_fastest_ms": 14.04} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.83, "pure_fastest_ms": 0.78, "sqlite_median_ms": 5.9, "sqlite_fastest_ms": 5.88, "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.65, "pure_fastest_ms": 6.56, "sqlite_median_ms": 2845.91, "sqlite_fastest_ms": 2839.83, "sqlite_indexed_median_ms": 7.6, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s9-8.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s9-8.jsonl new file mode 100644 index 0000000..28edd99 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s9-8.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.3, "pure_fastest_ms": 5.18, "sqlite_median_ms": 45.15, "sqlite_fastest_ms": 44.88, "sqlite_indexed_median_ms": 14.03, "sqlite_indexed_fastest_ms": 14.02} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.85, "pure_fastest_ms": 0.8, "sqlite_median_ms": 5.92, "sqlite_fastest_ms": 5.88, "sqlite_indexed_median_ms": 0.16, "sqlite_indexed_fastest_ms": 0.16} +{"query": "large", "rows": 212, "accounts": 100000, "pure_median_ms": 0.39, "pure_fastest_ms": 0.37, "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.71, "pure_fastest_ms": 6.63, "sqlite_median_ms": 2843.61, "sqlite_fastest_ms": 2837.04, "sqlite_indexed_median_ms": 7.53, "sqlite_indexed_fastest_ms": 7.5} diff --git a/research/experiments/040-against-c/2026-10-08-queries-s9-9.jsonl b/research/experiments/040-against-c/2026-10-08-queries-s9-9.jsonl new file mode 100644 index 0000000..9d1cc08 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-queries-s9-9.jsonl @@ -0,0 +1,4 @@ +{"query": "per_branch", "rows": 10, "accounts": 100000, "pure_median_ms": 5.5, "pure_fastest_ms": 5.21, "sqlite_median_ms": 44.93, "sqlite_fastest_ms": 44.8, "sqlite_indexed_median_ms": 14.02, "sqlite_indexed_fastest_ms": 13.97} +{"query": "in_credit", "rows": 1, "accounts": 100000, "pure_median_ms": 0.82, "pure_fastest_ms": 0.79, "sqlite_median_ms": 5.88, "sqlite_fastest_ms": 5.86, "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.49, "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.77, "pure_fastest_ms": 6.72, "sqlite_median_ms": 2840.89, "sqlite_fastest_ms": 2838.34, "sqlite_indexed_median_ms": 7.58, "sqlite_indexed_fastest_ms": 7.51} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s16-10.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s16-10.jsonl new file mode 100644 index 0000000..37d622d --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s16-10.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "sqlite_load_s": 1.57, "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": 43700, "new_orders_per_minute": 1169271, "undone_new_orders": 3735, "errors": 0, "new_order": {"done": 393493, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 375662, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 35030, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 34984, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "stock_level": {"done": 34839, "failed": 0, "p50_us": 320, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 44.6, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 460.9, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 460.9, "pure_state_mib": 232.8, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27177, "burst_events": 800477, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s16-11.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s16-11.jsonl new file mode 100644 index 0000000..e0b2227 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s16-11.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "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": 43732, "new_orders_per_minute": 1170025, "undone_new_orders": 3743, "errors": 0, "new_order": {"done": 393752, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 375942, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 35080, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 35007, "failed": 0, "p50_us": 1408, "p99_us": 3968}, "stock_level": {"done": 34863, "failed": 0, "p50_us": 320, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 44.6, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 461.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 461.1, "pure_state_mib": 232.9, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27530, "burst_events": 801043, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s16-12.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s16-12.jsonl new file mode 100644 index 0000000..1d7e195 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s16-12.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "sqlite_load_s": 1.59, "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": 43736, "new_orders_per_minute": 1170461, "undone_new_orders": 3752, "errors": 0, "new_order": {"done": 393908, "failed": 0, "p50_us": 1408, "p99_us": 3968}, "payment": {"done": 375877, "failed": 0, "p50_us": 1408, "p99_us": 3968}, "order_status": {"done": 35067, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 35018, "failed": 0, "p50_us": 1408, "p99_us": 3968}, "stock_level": {"done": 34849, "failed": 0, "p50_us": 320, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 44.8, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 461.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 461.6, "pure_state_mib": 233.0, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27228, "burst_events": 801126, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s16-7.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s16-7.jsonl new file mode 100644 index 0000000..9d75263 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s16-7.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": 43466, "new_orders_per_minute": 1163095, "undone_new_orders": 3715, "errors": 0, "new_order": {"done": 391414, "failed": 0, "p50_us": 1472, "p99_us": 3968}, "payment": {"done": 373599, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 34869, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 34796, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "stock_level": {"done": 34638, "failed": 0, "p50_us": 320, "p99_us": 1664}, "server_threads": "3", "cpu_us_per_transaction": 44.8, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 459.1, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 459.2, "pure_state_mib": 231.6, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27164, "burst_events": 796179, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s16-8.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s16-8.jsonl new file mode 100644 index 0000000..b2ca2c6 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s16-8.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.66, "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": 43823, "new_orders_per_minute": 1172345, "undone_new_orders": 3758, "errors": 0, "new_order": {"done": 394541, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 376720, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35137, "failed": 0, "p50_us": 272, "p99_us": 1600}, "delivery": {"done": 35126, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34936, "failed": 0, "p50_us": 320, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 44.9, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 462.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 462.6, "pure_state_mib": 233.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27411, "burst_events": 802712, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s16-9.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s16-9.jsonl new file mode 100644 index 0000000..766563b --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s16-9.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.59, "pure_load_s": 0.65, "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": 44555, "new_orders_per_minute": 1192195, "undone_new_orders": 3824, "errors": 0, "new_order": {"done": 401224, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 382951, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35736, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 35669, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 35529, "failed": 0, "p50_us": 320, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 44.4, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 469.4, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 469.4, "pure_state_mib": 236.9, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 28140, "burst_events": 816097, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s9-10.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s9-10.jsonl new file mode 100644 index 0000000..ba6ab90 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s9-10.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "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": 43443, "new_orders_per_minute": 1162169, "undone_new_orders": 3717, "errors": 0, "new_order": {"done": 391107, "failed": 0, "p50_us": 1472, "p99_us": 3840}, "payment": {"done": 373496, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 34847, "failed": 0, "p50_us": 288, "p99_us": 1536}, "delivery": {"done": 34798, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34615, "failed": 0, "p50_us": 320, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 45.5, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 458.6, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 458.6, "pure_state_mib": 231.5, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27421, "burst_events": 795770, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s9-11.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s9-11.jsonl new file mode 100644 index 0000000..9e917d2 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s9-11.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.57, "pure_load_s": 0.65, "sqlite_load_s": 1.55, "sqlite_page_size": 4096, "pure_resident_mib": 40.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 43819, "new_orders_per_minute": 1172497, "undone_new_orders": 3754, "errors": 0, "new_order": {"done": 394588, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 376631, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 35152, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 35082, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "stock_level": {"done": 34930, "failed": 0, "p50_us": 320, "p99_us": 1536}, "server_threads": "3", "cpu_us_per_transaction": 44.6, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 462.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 462.5, "pure_state_mib": 233.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27300, "burst_events": 802632, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s9-12.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s9-12.jsonl new file mode 100644 index 0000000..7bc222d --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s9-12.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.6, "pure_load_s": 0.65, "sqlite_load_s": 1.56, "sqlite_page_size": 4096, "pure_resident_mib": 40.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44013, "new_orders_per_minute": 1177574, "undone_new_orders": 3780, "errors": 0, "new_order": {"done": 396316, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 378342, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35284, "failed": 0, "p50_us": 272, "p99_us": 1408}, "delivery": {"done": 35244, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35109, "failed": 0, "p50_us": 320, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 44.9, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 464.0, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 464.0, "pure_state_mib": 234.3, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27563, "burst_events": 806205, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s9-7.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s9-7.jsonl new file mode 100644 index 0000000..9c38301 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s9-7.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "sqlite_load_s": 1.58, "sqlite_page_size": 4096, "pure_resident_mib": 40.2, "sqlite_file_mib": 13.8} +{"step": "run", "system": "pure", "warehouses": 1, "terminals": 64, "transactions_per_second": 44544, "new_orders_per_minute": 1191783, "undone_new_orders": 3813, "errors": 0, "new_order": {"done": 401074, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "payment": {"done": 382915, "failed": 0, "p50_us": 1408, "p99_us": 3712}, "order_status": {"done": 35707, "failed": 0, "p50_us": 272, "p99_us": 1344}, "delivery": {"done": 35669, "failed": 0, "p50_us": 1408, "p99_us": 3584}, "stock_level": {"done": 35516, "failed": 0, "p50_us": 304, "p99_us": 1472}, "server_threads": "3", "cpu_us_per_transaction": 44.1, "core_shares": {"pure-owner": 0.88, "pure-checkpoint": 0.01}, "resident_mib": 468.7, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 468.7, "pure_state_mib": 236.8, "pure_store_mib": 246.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27816, "burst_events": 815931, "checkpoints": 40}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s9-8.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s9-8.jsonl new file mode 100644 index 0000000..64cbe9f --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s9-8.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "sqlite_load_s": 1.59, "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": 43468, "new_orders_per_minute": 1163020, "undone_new_orders": 3717, "errors": 0, "new_order": {"done": 391391, "failed": 0, "p50_us": 1408, "p99_us": 4352}, "payment": {"done": 373661, "failed": 0, "p50_us": 1408, "p99_us": 4352}, "order_status": {"done": 34873, "failed": 0, "p50_us": 272, "p99_us": 1536}, "delivery": {"done": 34817, "failed": 0, "p50_us": 1408, "p99_us": 4096}, "stock_level": {"done": 34621, "failed": 0, "p50_us": 320, "p99_us": 1664}, "server_threads": "3", "cpu_us_per_transaction": 44.3, "core_shares": {"pure-owner": 0.87, "pure-checkpoint": 0.01}, "resident_mib": 459.5, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 459.5, "pure_state_mib": 231.6, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27330, "burst_events": 796229, "checkpoints": 39}} diff --git a/research/experiments/040-against-c/2026-10-08-tpcc-s9-9.jsonl b/research/experiments/040-against-c/2026-10-08-tpcc-s9-9.jsonl new file mode 100644 index 0000000..a968081 --- /dev/null +++ b/research/experiments/040-against-c/2026-10-08-tpcc-s9-9.jsonl @@ -0,0 +1,3 @@ +{"step": "load", "directory": "/dev/shm", "warehouses": 1, "rows": 568758, "generate_s": 0.56, "pure_load_s": 0.65, "sqlite_load_s": 1.57, "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": 43922, "new_orders_per_minute": 1175457, "undone_new_orders": 3775, "errors": 0, "new_order": {"done": 395594, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "payment": {"done": 377473, "failed": 0, "p50_us": 1408, "p99_us": 3840}, "order_status": {"done": 35196, "failed": 0, "p50_us": 272, "p99_us": 1472}, "delivery": {"done": 35162, "failed": 0, "p50_us": 1408, "p99_us": 3968}, "stock_level": {"done": 35015, "failed": 0, "p50_us": 320, "p99_us": 1600}, "server_threads": "3", "cpu_us_per_transaction": 45.0, "core_shares": {"pure-owner": 0.89, "pure-checkpoint": 0.01}, "resident_mib": 463.2, "written_bytes_per_transaction": 0.0, "device_bytes_per_transaction": null, "consistency_failures": []} +{"step": "end", "pure_resident_mib": 463.2, "pure_state_mib": 233.9, "pure_store_mib": 238.7, "sqlite_files_mib": 13.8, "grouped_sqlite_files_mib": 0.0, "pure_counts": {"bursts": 27446, "burst_events": 804538, "checkpoints": 39}} diff --git a/research/experiments/041-batches/2026-10-08-counts.jsonl b/research/experiments/041-batches/2026-10-08-counts.jsonl index 6770a54..5bb8e6b 100644 --- a/research/experiments/041-batches/2026-10-08-counts.jsonl +++ b/research/experiments/041-batches/2026-10-08-counts.jsonl @@ -76,3 +76,23 @@ {"version":"b14","way":"rounds","work":"roots","instructions":2755945510,"cycles":988490613} {"version":"b14","way":"batches","work":"join","instructions":1868676355,"cycles":1061229557} {"version":"b14","way":"rounds","work":"join","instructions":7669661592,"cycles":3636019220} +{"version":"b15","way":"batches","work":"bfs","instructions":3371358070,"cycles":1683804989} +{"version":"b15","way":"rounds","work":"bfs","instructions":4711632364,"cycles":2087134781} +{"version":"b15","way":"batches","work":"knapsack","instructions":357414055,"cycles":109729574} +{"version":"b15","way":"rounds","work":"knapsack","instructions":21688102863,"cycles":7528408912} +{"version":"b15","way":"batches","work":"matmul","instructions":720247202,"cycles":243561132} +{"version":"b15","way":"rounds","work":"matmul","instructions":21436716299,"cycles":6630665371} +{"version":"b15","way":"batches","work":"roots","instructions":156241313,"cycles":109812551} +{"version":"b15","way":"rounds","work":"roots","instructions":2755945292,"cycles":988027768} +{"version":"b15","way":"batches","work":"join","instructions":1868826897,"cycles":1041548501} +{"version":"b15","way":"rounds","work":"join","instructions":7669661601,"cycles":3304217300} +{"version":"b16","way":"batches","work":"bfs","instructions":3367374257,"cycles":1666713364} +{"version":"b16","way":"rounds","work":"bfs","instructions":4715633080,"cycles":2082051266} +{"version":"b16","way":"batches","work":"knapsack","instructions":346367086,"cycles":104749065} +{"version":"b16","way":"rounds","work":"knapsack","instructions":21688103028,"cycles":7527793245} +{"version":"b16","way":"batches","work":"matmul","instructions":721446061,"cycles":243482270} +{"version":"b16","way":"rounds","work":"matmul","instructions":21436715945,"cycles":6622413130} +{"version":"b16","way":"batches","work":"roots","instructions":156268817,"cycles":109368110} +{"version":"b16","way":"rounds","work":"roots","instructions":2755945309,"cycles":988094407} +{"version":"b16","way":"batches","work":"join","instructions":1868827170,"cycles":1071752635} +{"version":"b16","way":"rounds","work":"join","instructions":7669661710,"cycles":3289647015} diff --git a/research/experiments/041-batches/2026-10-08-pairs.jsonl b/research/experiments/041-batches/2026-10-08-pairs.jsonl index 36dd15a..cdf51f1 100644 --- a/research/experiments/041-batches/2026-10-08-pairs.jsonl +++ b/research/experiments/041-batches/2026-10-08-pairs.jsonl @@ -400,3 +400,145 @@ {"version":"b14","way":"batches","turn":3,"work":"words","pure_median_ms":219.174,"c_median_ms":38.390,"ratio":5.709,"agree":true} {"version":"b14","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.934,"c_median_ms":7.564,"ratio":3.428,"agree":true} {"version":"b14","way":"batches","turn":3,"work":"bfs","pure_median_ms":27.887,"c_median_ms":10.578,"ratio":2.636,"agree":true} +{"version":"b14","way":"batches","turn":1,"work":"roots","pure_median_ms":8.304,"c_median_ms":6.867,"ratio":1.209,"agree":true} +{"version":"b14","way":"batches","turn":1,"work":"knapsack","pure_median_ms":10.390,"c_median_ms":6.324,"ratio":1.643,"agree":true} +{"version":"b14","way":"batches","turn":1,"work":"join","pure_median_ms":123.028,"c_median_ms":32.673,"ratio":3.765,"agree":true} +{"version":"b14","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.936,"c_median_ms":7.934,"ratio":3.269,"agree":true} +{"version":"b14","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.193,"c_median_ms":10.072,"ratio":2.402,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"roots","pure_median_ms":8.317,"c_median_ms":6.869,"ratio":1.211,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.963,"c_median_ms":6.250,"ratio":1.434,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"join","pure_median_ms":117.535,"c_median_ms":32.537,"ratio":3.612,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.854,"c_median_ms":8.390,"ratio":3.082,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.414,"c_median_ms":10.010,"ratio":2.439,"agree":true} +{"version":"b14","way":"batches","turn":2,"work":"roots","pure_median_ms":8.286,"c_median_ms":6.865,"ratio":1.207,"agree":true} +{"version":"b14","way":"batches","turn":2,"work":"knapsack","pure_median_ms":10.046,"c_median_ms":6.236,"ratio":1.611,"agree":true} +{"version":"b14","way":"batches","turn":2,"work":"join","pure_median_ms":118.763,"c_median_ms":31.834,"ratio":3.731,"agree":true} +{"version":"b14","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.974,"c_median_ms":7.576,"ratio":3.428,"agree":true} +{"version":"b14","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.294,"c_median_ms":10.078,"ratio":2.411,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"roots","pure_median_ms":8.332,"c_median_ms":6.876,"ratio":1.212,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.950,"c_median_ms":6.231,"ratio":1.436,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"join","pure_median_ms":115.602,"c_median_ms":31.385,"ratio":3.683,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"matmul","pure_median_ms":26.015,"c_median_ms":7.539,"ratio":3.451,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"bfs","pure_median_ms":28.340,"c_median_ms":10.773,"ratio":2.631,"agree":true} +{"version":"b14","way":"batches","turn":3,"work":"roots","pure_median_ms":8.441,"c_median_ms":6.878,"ratio":1.227,"agree":true} +{"version":"b14","way":"batches","turn":3,"work":"knapsack","pure_median_ms":10.228,"c_median_ms":6.289,"ratio":1.626,"agree":true} +{"version":"b14","way":"batches","turn":3,"work":"join","pure_median_ms":119.140,"c_median_ms":31.654,"ratio":3.764,"agree":true} +{"version":"b14","way":"batches","turn":3,"work":"matmul","pure_median_ms":26.016,"c_median_ms":7.588,"ratio":3.429,"agree":true} +{"version":"b14","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.983,"c_median_ms":10.048,"ratio":2.387,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"roots","pure_median_ms":8.301,"c_median_ms":6.862,"ratio":1.210,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.952,"c_median_ms":6.236,"ratio":1.435,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"join","pure_median_ms":119.177,"c_median_ms":32.625,"ratio":3.653,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.804,"c_median_ms":7.541,"ratio":3.422,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"bfs","pure_median_ms":26.325,"c_median_ms":11.614,"ratio":2.267,"agree":true} +{"version":"b14","way":"batches","turn":4,"work":"roots","pure_median_ms":8.272,"c_median_ms":6.865,"ratio":1.205,"agree":true} +{"version":"b14","way":"batches","turn":4,"work":"knapsack","pure_median_ms":10.091,"c_median_ms":6.234,"ratio":1.619,"agree":true} +{"version":"b14","way":"batches","turn":4,"work":"join","pure_median_ms":115.939,"c_median_ms":31.531,"ratio":3.677,"agree":true} +{"version":"b14","way":"batches","turn":4,"work":"matmul","pure_median_ms":26.039,"c_median_ms":7.610,"ratio":3.422,"agree":true} +{"version":"b14","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.469,"c_median_ms":10.074,"ratio":2.429,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"roots","pure_median_ms":8.320,"c_median_ms":6.871,"ratio":1.211,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.949,"c_median_ms":6.245,"ratio":1.433,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"join","pure_median_ms":116.861,"c_median_ms":30.801,"ratio":3.794,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"matmul","pure_median_ms":25.878,"c_median_ms":7.547,"ratio":3.429,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.193,"c_median_ms":10.058,"ratio":2.405,"agree":true} +{"version":"b14","way":"batches","turn":5,"work":"roots","pure_median_ms":8.291,"c_median_ms":6.873,"ratio":1.206,"agree":true} +{"version":"b14","way":"batches","turn":5,"work":"knapsack","pure_median_ms":10.268,"c_median_ms":6.263,"ratio":1.640,"agree":true} +{"version":"b14","way":"batches","turn":5,"work":"join","pure_median_ms":115.695,"c_median_ms":31.020,"ratio":3.730,"agree":true} +{"version":"b14","way":"batches","turn":5,"work":"matmul","pure_median_ms":26.028,"c_median_ms":7.597,"ratio":3.426,"agree":true} +{"version":"b14","way":"batches","turn":5,"work":"bfs","pure_median_ms":25.185,"c_median_ms":10.332,"ratio":2.438,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"roots","pure_median_ms":8.297,"c_median_ms":6.871,"ratio":1.208,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.960,"c_median_ms":6.227,"ratio":1.439,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"join","pure_median_ms":115.226,"c_median_ms":31.860,"ratio":3.617,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"matmul","pure_median_ms":25.834,"c_median_ms":7.536,"ratio":3.428,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"bfs","pure_median_ms":24.095,"c_median_ms":10.083,"ratio":2.390,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"roots","pure_median_ms":8.342,"c_median_ms":6.876,"ratio":1.213,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.983,"c_median_ms":6.234,"ratio":1.441,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"join","pure_median_ms":117.215,"c_median_ms":32.608,"ratio":3.595,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"matmul","pure_median_ms":25.806,"c_median_ms":7.826,"ratio":3.297,"agree":true} +{"version":"b15","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.008,"c_median_ms":10.130,"ratio":2.370,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"roots","pure_median_ms":8.285,"c_median_ms":6.864,"ratio":1.207,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.258,"c_median_ms":6.233,"ratio":1.325,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"join","pure_median_ms":115.975,"c_median_ms":31.269,"ratio":3.709,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"matmul","pure_median_ms":26.355,"c_median_ms":7.513,"ratio":3.508,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"bfs","pure_median_ms":23.973,"c_median_ms":9.977,"ratio":2.403,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"roots","pure_median_ms":8.328,"c_median_ms":6.871,"ratio":1.212,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.977,"c_median_ms":6.227,"ratio":1.442,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"join","pure_median_ms":113.883,"c_median_ms":31.201,"ratio":3.650,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"matmul","pure_median_ms":25.919,"c_median_ms":7.545,"ratio":3.435,"agree":true} +{"version":"b15","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.071,"c_median_ms":10.112,"ratio":2.380,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"roots","pure_median_ms":8.276,"c_median_ms":6.864,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.240,"c_median_ms":6.229,"ratio":1.323,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"join","pure_median_ms":118.536,"c_median_ms":32.309,"ratio":3.669,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"matmul","pure_median_ms":26.280,"c_median_ms":7.511,"ratio":3.499,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"bfs","pure_median_ms":23.929,"c_median_ms":10.029,"ratio":2.386,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"roots","pure_median_ms":8.304,"c_median_ms":6.865,"ratio":1.210,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.945,"c_median_ms":6.228,"ratio":1.436,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"join","pure_median_ms":116.816,"c_median_ms":30.654,"ratio":3.811,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"matmul","pure_median_ms":25.844,"c_median_ms":7.592,"ratio":3.404,"agree":true} +{"version":"b15","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.884,"c_median_ms":10.130,"ratio":2.358,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"roots","pure_median_ms":8.279,"c_median_ms":6.866,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.252,"c_median_ms":6.230,"ratio":1.325,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"join","pure_median_ms":115.206,"c_median_ms":31.838,"ratio":3.619,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"matmul","pure_median_ms":26.378,"c_median_ms":7.573,"ratio":3.483,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"bfs","pure_median_ms":24.072,"c_median_ms":9.961,"ratio":2.417,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"roots","pure_median_ms":8.294,"c_median_ms":6.863,"ratio":1.208,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.949,"c_median_ms":6.229,"ratio":1.437,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"join","pure_median_ms":116.261,"c_median_ms":33.937,"ratio":3.426,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"matmul","pure_median_ms":25.740,"c_median_ms":7.573,"ratio":3.399,"agree":true} +{"version":"b15","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.055,"c_median_ms":10.033,"ratio":2.398,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"roots","pure_median_ms":8.280,"c_median_ms":6.865,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"knapsack","pure_median_ms":8.297,"c_median_ms":6.234,"ratio":1.331,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"join","pure_median_ms":115.647,"c_median_ms":30.014,"ratio":3.853,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"matmul","pure_median_ms":26.269,"c_median_ms":7.554,"ratio":3.478,"agree":true} +{"version":"b16","way":"batches","turn":4,"work":"bfs","pure_median_ms":24.360,"c_median_ms":10.209,"ratio":2.386,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"roots","pure_median_ms":8.311,"c_median_ms":6.870,"ratio":1.210,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"knapsack","pure_median_ms":9.223,"c_median_ms":6.314,"ratio":1.461,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"join","pure_median_ms":114.714,"c_median_ms":30.823,"ratio":3.722,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"matmul","pure_median_ms":25.786,"c_median_ms":7.519,"ratio":3.429,"agree":true} +{"version":"b15","way":"batches","turn":5,"work":"bfs","pure_median_ms":23.896,"c_median_ms":10.008,"ratio":2.388,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"roots","pure_median_ms":8.270,"c_median_ms":6.874,"ratio":1.203,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"knapsack","pure_median_ms":8.257,"c_median_ms":6.229,"ratio":1.326,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"join","pure_median_ms":114.163,"c_median_ms":31.767,"ratio":3.594,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"matmul","pure_median_ms":26.275,"c_median_ms":7.539,"ratio":3.485,"agree":true} +{"version":"b16","way":"batches","turn":5,"work":"bfs","pure_median_ms":24.081,"c_median_ms":10.209,"ratio":2.359,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"roots","pure_median_ms":8.963,"c_median_ms":6.864,"ratio":1.306,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"knapsack","pure_median_ms":11.453,"c_median_ms":6.230,"ratio":1.838,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"sort","pure_median_ms":57.034,"c_median_ms":26.888,"ratio":2.121,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"join","pure_median_ms":116.874,"c_median_ms":30.683,"ratio":3.809,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"words","pure_median_ms":214.317,"c_median_ms":37.953,"ratio":5.647,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"matmul","pure_median_ms":39.994,"c_median_ms":7.550,"ratio":5.297,"agree":true} +{"version":"b9","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.294,"c_median_ms":10.020,"ratio":2.425,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"roots","pure_median_ms":8.287,"c_median_ms":6.862,"ratio":1.208,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"knapsack","pure_median_ms":8.252,"c_median_ms":6.232,"ratio":1.324,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"sort","pure_median_ms":58.840,"c_median_ms":26.953,"ratio":2.183,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"join","pure_median_ms":116.823,"c_median_ms":33.612,"ratio":3.476,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"words","pure_median_ms":219.172,"c_median_ms":38.828,"ratio":5.645,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"matmul","pure_median_ms":26.235,"c_median_ms":7.954,"ratio":3.298,"agree":true} +{"version":"b16","way":"batches","turn":1,"work":"bfs","pure_median_ms":24.185,"c_median_ms":10.045,"ratio":2.408,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"roots","pure_median_ms":8.972,"c_median_ms":6.869,"ratio":1.306,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"knapsack","pure_median_ms":11.468,"c_median_ms":6.226,"ratio":1.842,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"sort","pure_median_ms":57.424,"c_median_ms":26.866,"ratio":2.137,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"join","pure_median_ms":120.022,"c_median_ms":32.514,"ratio":3.691,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"words","pure_median_ms":215.517,"c_median_ms":39.354,"ratio":5.476,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"matmul","pure_median_ms":39.990,"c_median_ms":7.581,"ratio":5.275,"agree":true} +{"version":"b9","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.483,"c_median_ms":10.055,"ratio":2.435,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"roots","pure_median_ms":8.269,"c_median_ms":6.865,"ratio":1.204,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"knapsack","pure_median_ms":8.246,"c_median_ms":6.234,"ratio":1.323,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"sort","pure_median_ms":56.728,"c_median_ms":26.869,"ratio":2.111,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"join","pure_median_ms":116.409,"c_median_ms":31.953,"ratio":3.643,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"words","pure_median_ms":219.039,"c_median_ms":39.378,"ratio":5.562,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"matmul","pure_median_ms":26.219,"c_median_ms":7.545,"ratio":3.475,"agree":true} +{"version":"b16","way":"batches","turn":2,"work":"bfs","pure_median_ms":24.055,"c_median_ms":9.999,"ratio":2.406,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"roots","pure_median_ms":8.954,"c_median_ms":6.871,"ratio":1.303,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"knapsack","pure_median_ms":11.427,"c_median_ms":6.227,"ratio":1.835,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"sort","pure_median_ms":57.095,"c_median_ms":26.878,"ratio":2.124,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"join","pure_median_ms":117.744,"c_median_ms":33.662,"ratio":3.498,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"words","pure_median_ms":215.256,"c_median_ms":38.471,"ratio":5.595,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"matmul","pure_median_ms":39.914,"c_median_ms":7.538,"ratio":5.295,"agree":true} +{"version":"b9","way":"batches","turn":3,"work":"bfs","pure_median_ms":24.366,"c_median_ms":10.138,"ratio":2.403,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"roots","pure_median_ms":8.279,"c_median_ms":6.863,"ratio":1.206,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"knapsack","pure_median_ms":8.257,"c_median_ms":6.228,"ratio":1.326,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"sort","pure_median_ms":59.110,"c_median_ms":26.936,"ratio":2.194,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"join","pure_median_ms":117.957,"c_median_ms":32.476,"ratio":3.632,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"words","pure_median_ms":217.313,"c_median_ms":38.480,"ratio":5.647,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"matmul","pure_median_ms":26.245,"c_median_ms":7.571,"ratio":3.467,"agree":true} +{"version":"b16","way":"batches","turn":3,"work":"bfs","pure_median_ms":23.975,"c_median_ms":10.092,"ratio":2.376,"agree":true} |
