实验落地计划

本文档是 experiments-todo.md 的落地版本,描述文件组织、程序划分和执行流程。 状态标记与 experiments-todo.md 保持同步:✅ 已有数据,TODO 待实验。


一、文件夹结构

experiment/
├── plan.md                       ← 本文档
├── experiments-todo.md           ← 实验需求原始清单(权威来源)
├── design.md                     ← ConstrainedTsFileWriter 设计文档
│
├── common/                       ← 跨实验共用的数据生成逻辑
│
├── chap03/                       ← 第三章:内存建模
│   ├── E3_1_write_model/         ← E3-1a(无 flush 动机实验);E3-1b 已有
│   ├── E3_2_write_precision/     ← E3-2(已有,write_memory/ 产出)
│   ├── E3_3_read_memory/         ← E3-3(TODO:读取内存模型验证)
│   └── E3_4_write_budget/        ← E3-4(TODO:不同内存预算写入性能)
│
├── chap04/                       ← 第四章:多线程并行化
│   ├── E4_12_throughput/         ← E4-1 写入 + E4-2 读取加速比(共用程序)
│   ├── E4_3_alpha/               ← E4-3 α 实测(后处理脚本)
│   └── E4_4_combined/            ← E4-4 多线程+SIMD 叠加
│
├── chap05/                       ← 第五章:SIMD 向量化
│   ├── E5_1_codec/               ← E5-1 编解码吞吐 SIMD ON/OFF
│   ├── E5_2_filter_latmat/       ← E5-2 时间过滤+延迟物化(合并)
│   └── E5_3_platform/            ← E5-3 跨平台对比
│
├── chap06/                       ← 第六章:AI 负载接口
│   ├── E6_1_vs_parquet/          ← E6-1 TsFile vs Parquet
│   ├── E6_2_opt_stack/           ← E6-2 优化透传(Python)
│   └── E6_3_stream_mem/          ← E6-3 流式迭代内存控制
│
├── write_memory/                 ← 已有实验(E3-1b/E3-2 产出来源)
└── read_perf/                    ← 已有实验(E6-1 read_benchmark 基础)

二、已完成产出(write_memory/ 已有)

编号类型描述
F3-1顺序写入内存曲线(有 flush,锯齿形)
F3-2混合写入内存曲线(有 flush)
T3-1各模块内存分布
T3-2顺序写入 flush 事件
T3-3混合写入 flush 事件
T3-4两种写入模式对比
T3-5写入内存模型精度(batch_size 5K/6K/8K/10K)

三、TODO 产出与程序对应

需要新开发的程序

程序名所在目录涉及产出编译配置
no_flush_benchchap03/E3_1_write_model/F3-0C5
read_mem_modelchap03/E3_3_read_memory/F3-3, T3-6C5
write_budgetchap03/E3_4_write_budget/F3-4, T3-7C4
throughput_benchchap04/E4_12_throughput/F4-1/F4-2, T4-1~T4-6C1/C2/C4
codec_benchchap05/E5_1_codec/T5-1, T5-2C1/C3
filter_benchchap05/E5_2_filter_latmat/F5-1, F5-2, T5-3C1/C3
stream_mem_benchchap06/E6_3_stream_mem/F6-1C4

扩展现有程序

程序改动涉及产出
read_perf/read_benchmark.cpp增加 --cols 参数,支持 4/8/16 FIELD 列宽T6-1

Python 脚本

脚本名所在目录涉及产出说明
calc_alpha.pychap04/E4_3_alpha/T4-7从 E4-1/E4-2 CSV 反推 α
bench_api.pychap06/E6_2_opt_stack/T6-2Python to_dataframe() 端到端

四、执行顺序(按 experiments-todo.md §七)

阶段一:准备

  1. fit39 上构建 C1–C5 共 5 个编译目录
  2. 用 C5 生成 W0 基线数据(200M 行 → TsFile)
  3. 同一份数据转存 Parquet(第六章用)
  4. pip3 install pyarrow pandas

阶段二:按章跑(第三章 → 第五章 → 第四章 → 第六章)

第三章
  E3-1a  no_flush_bench(C5)        → F3-0(动机对照)
  E3-3   read_mem_model(C5)        → F3-3, T3-6
  E3-4   write_budget(C4)          → F3-4, T3-7

第五章
  E5-1   codec_bench(C1 vs C3)     → T5-1, T5-2
  E5-2   filter_bench(C1 vs C3)    → F5-1, F5-2, T5-3
  E5-3   filter_bench/codec_bench    → T5-4(跨平台,同程序不同硬件)

第四章
  E4-1/2 throughput_bench(C1/C2/C4)→ F4-1, F4-2, T4-1~T4-6
  E4-3   calc_alpha.py               → T4-7(无需新实验,复用 E4-1/4-2 CSV)
  E4-4   throughput_bench(C1/C2/C3/C4)→ T4-8

第六章
  E6-1   read_benchmark(C4)        → T6-1
  E6-2   bench_api.py(C1/C2/C3/C4)→ T6-2
  E6-3   stream_mem_bench(C4)      → F6-1

阶段三:填表

将实验 CSV 数据填入各章 LaTeX 表格和图。


五、全量 TODO 产出清单

产出类型程序
F3-03no_flush_bench
F3-33read_mem_model
F3-43write_budget
T3-63read_mem_model
T3-73write_budget
F4-14throughput_bench
F4-24throughput_bench
T4-1~T4-3表×34throughput_bench(写入,3 种压缩)
T4-4~T4-6表×34throughput_bench(读取,3 种压缩)
T4-74calc_alpha.py
T4-84throughput_bench(4 组配置)
T5-15codec_bench
T5-25codec_bench
F5-15filter_bench
F5-25filter_bench
T5-35filter_bench
T5-45codec_bench + filter_bench
T6-16read_benchmark(扩展)
T6-26bench_api.py
F6-16stream_mem_bench

合计 TODO:8 图 + 16 表(与 experiments-todo.md §八一致)


六、注意事项

  1. E3-4 依赖 ConstrainedTsFileWriter 完成:需确认 get_data_size() / get_meta_size() 接口已合并到 final 分支。

  2. E4-1/4-2 数据文件:不同压缩算法(LZ4/ZSTD)需要重新生成对应的 TsFile,因为压缩算法在写入时确定。

  3. E6-1 Parquet 宽度:列数变化时(4/8/16)需重新生成对应宽度的 Parquet 文件。

  4. E5-3 跨平台:fit39 只有 x86 AVX2;若无 ARM 设备则降级为 AVX2 vs 标量,在论文中注明。

  5. E6-3 10GB 文件:需挂载 HDD(/dev/sda),提前写好数据。

  6. 每组实验至少跑 3 次,CSV 保留每次原始数据,取中位数报告。