slime/show/BENCHMARK.md

129 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# show:逐步实现与本次实测
测量时间:2026-10-08T00:28:41.318982+08:00(Asia/Hong_Kong)。所有表格由 `benchmark.py` 自动生成。
CPU:AMD Ryzen 7 5800H,WSL,16 个逻辑线程。GPU 型号见下面逐项输出;编译器、驱动、源码 SHA256 和全部样本保存在 `results/latest.json`。
## 1. 分段对比:相邻版本在同一负载下测试
主线分成 A、B、C 三组,横线表示更换测试负载。分界两边重复测量衔接版本:A/B 都有 02,B/C 都有 03;只在组内计算速度比。展平实现已移到 experiments,不属于这个阶段。
原来只有 64 个 seed 的极端负载移到 `results/mapping_diagnostics.json`,用于解释并行度,不再作为主线 02→03 的优化倍数。
GPU 各对照版本核对完整 `(seed,x,z)` 命中列表;所有 GPU 命中另由独立 Python Java 算术核验。A/C 与完整 CPU 扫描核对,B 的独立 CPU 验证采用明确列出的窗口。每个版本先跑实际工作量预热,GPU 测量顺序轮换。
CPU 计时包含线程创建、搜索与结果收集;GPU kernel 时间用 CUDA event,scan 时间另含清零、同步与结果回传。两者均不含结果排序,GPU scan 不含一次性的上下文创建及内存分配。
A 的 01→02 用 CPU 搜索时间和 GPU scan 时间比较;B/C 的相邻 CUDA 版本用 kernel 时间比较。B/C 的 CPU 仅用于正确性验证,不列入性能表。
线程映射分段改测时间:2026-10-08T23:15:42.590910+08:00。后面的算法实验沿用上方日期的实测数据,分段实验测量时的源码 SHA256 记录在 metadata.mapping_source_sha256,C 单独复测的源码记录在 metadata.C_source_sha256。
C 组复测时间:2026-10-08T23:58:18.383398+08:00,100 轮轮换测量。
### A:CPU → 按 seed 的 CUDA
`seed=61692151016558` 起共 65,536 个 seed,257×257 个锚点,实心 5×5。候选总数 4,328,587,264。
GPU:NVIDIA GeForce RTX 3060 Laptop GPU。结果完全一致,命中 1 个元组;每版完整预热一次,计时 5 轮。
| 版本 | CPU 搜索/GPU kernel 中位数 | GPU scan 中位数 |
| --- | ---: | ---: |
| 01 CPU | 3550.398 ms | — |
| 02 CUDA/每个 thread 一个 seed | 102.147 ms | 111.110 ms |
| 相邻/分支对照 | 同口径速度比(前项时间/后项时间) |
| --- | ---: |
| 01 → 02(CPU 搜索/GPU scan) | 31.954× |
65536 个 seed 为版本 02 提供足够的独立线程,在 257×257 的完整地图上测量 CPU→CUDA。
---
**测试负载分界:下一组重新测量衔接版本,不跨横线计算加速比。**
### B:大坐标范围的固定坐标策略
`seed=61692151016558` 起共 65,536 个 seed,4097×4097 个锚点,实心 5×5。候选总数 1,100,048,564,224。
GPU:NVIDIA GeForce RTX 3060 Laptop GPU。结果完全一致,命中 1 个元组;每版完整预热一次,计时 5 轮。
| 版本 | CPU 搜索/GPU kernel 中位数 | GPU scan 中位数 |
| --- | ---: | ---: |
| 02 CUDA/每个 thread 一个 seed | 31598.539 ms | 34152.855 ms |
| 03 CUDA/固定坐标,复用多项式后遍历 seed | 17600.387 ms | 19014.153 ms |
| 相邻/分支对照 | 同口径速度比(前项时间/后项时间) |
| --- | ---: |
| 02 → 03(GPU kernel) | 1.795× |
本组使用 65536 个 seed,坐标范围扩大到 4097×4097(16785409 个坐标任务)。02/03 都完整扫描相同的笛卡尔积,GPU 命中列表完全一致。
独立 CPU 核对全部 65536 个 seed 在 `[50941,51197] × [418996,419252]` 的 257×257 窗口;这是窗口验证,不是完整大范围 CPU 重扫。所有 GPU 命中均另作独立精确算术验证。
---
**测试负载分界:下一组重新测量衔接版本,不跨横线计算加速比。**
### C:固定 seed 的坐标扫描与 outer sum
`seed=61692151016558` 起共 1 个 seed,8193×8193 个锚点,实心 5×5。候选总数 67,125,249。
GPU:NVIDIA GeForce RTX 3060 Laptop GPU。结果完全一致,命中 1 个元组;每版完整预热一次,计时 100 轮。
| 版本 | CPU 搜索/GPU kernel 中位数 | GPU scan 中位数 |
| --- | ---: | ---: |
| 03 CUDA/固定坐标,复用多项式后遍历 seed | 2.715 ms | 3.127 ms |
| 04 CUDA/tiled outer sum | 1.598 ms | 1.913 ms |
| 相邻/分支对照 | 同口径速度比(前项时间/后项时间) |
| --- | ---: |
| 03 → 04(GPU kernel) | 1.698× |
本组改为固定 seed,重新测量 03 后再比较 04。03、04 均保持固定坐标后遍历 seed 的策略。
随机数性质的探索独立成章,见 [RANDOM_PROPERTIES.md](RANDOM_PROPERTIES.md)。从状态空间、低位依赖和模运算约束推导搜索方法,不列为局部计时优化。
## 2. 固定 seed:全坐标范围余数过滤
固定 seed `61692151016558`;两轴锚点范围 `[-1875000,1874999]`,总计 14,062,500,000,000 个位置。
完整扫描 2^36 个余数对,保留 180,476 个,展开 36,937,048 个候选,得到 `(51069,419124)`。
| 时间区域 | 中位数 |
| --- | ---: |
| 余数 GPU kernel(实测) | 2.967 s |
| 表准备+kernel+CPU 精查(实测) | 3.622 s |
| 独立进程全流程(实测) | 3.939 s |
| 按 8193×8193 直接扫描吞吐外推全范围 | 568.7 s |
外推直接 kernel 相对余数实测计算流程约 157.0×。分母包含余数方法的准备和 CPU 精查;没有声称实际跑完直接全范围搜索。
07 沿用 research 的首次输出候选模型,尚未覆盖 Java 拒绝尾部例外。锚点范围允许图案向外延伸四格。
## 3. 固定坐标:seed 搜索
锚点 `(51069,419124)`、实心 5×5。CPU/CUDA 解析流程均恢复同一组 24 个已知 seed。
| 版本 | 实测规模 | 搜索/kernel 中位数 | 进程全流程中位数 | 完整 2^48 外推 |
| --- | --- | ---: | ---: | ---: |
| brute_cpu | 2^28 seed | 174.542 ms | 181.317 ms | 183020.0 s |
| brute_cuda | 2^34 seed | 386.768 ms | 777.132 ms | 6336.8 s |
| solver_cpu | 全部 lower35 候选+upper13 解析 | 1013.310 ms | 1022.607 ms | — |
| solver_cuda | 全部 lower35 候选+upper13 解析 | 80.108 ms | 446.468 ms | — |
同 GPU 算法比值:暴力完整空间外推/解析 kernel 约 79,104×。
solver_cpu 的程序内 seconds 计时从通过筛选的低 18 位取值 生成之后开始;进程全流程覆盖全部准备。CUDA 的 milliseconds 为 kernel 时间。
解析流程是首次输出候选模型,不是含全部拒绝尾部分支的严格穷尽。
### 高 13 位优化的受控拆解
相同的 65536 个连续 lower35 平面,从 `16420645998` 开始。枚举与解析都使用首次输出候选模型,并准确验证最终候选。
这里的 lower35 指世界种子的低 35 位。
| 高位策略 | kernel 中位数 |
| --- | ---: |
| enumerate_upper13 | 8.793 ms |
| analytic_upper13 | 0.087 ms |
完整候选结果相同。局部解析加速 101.024×,只适用于这组供给的 lower35 平面。
## 复现与边界
```bash
make -C show -j4
python3 show/test_steps.py --gpu
python3 show/benchmark.py --repeats 5
```
GPU 运行需要宿主 GPU 可用。计时期间 GPU 同时承担桌面工作,时钟、温度和系统负载会影响数字;全部原始样本可检查波动。
01–04 精确覆盖被请求的有限输入范围。07/08 的生成器保留研究原型的拒绝尾部覆盖限制;全 seed × 全世界联合生成仍未实现。
本报告不把“潜在笛卡尔积大小”当作实际访问次数,也不把局部加速比连乘。