单机并行
说明公共路径规划调用、低层算法、slice chunks 和 GEMM 线程分别在哪一层并行。
本页目录
并行单位
| 位置 | 可并行工作 | 仍需顺序或同步的部分 |
|---|---|---|
| Auto preset | 公共预设管理的路径规划工作 | 不指定内部任务映射 |
| random_greedy | 多条完整 trials | 一条 trial 的贪心步骤 |
| bisect | 多条独立划分 trials | 一次递归划分的父子调用 |
| order_dp | 同一 interval length 的不同区间 | 区间长度从小到大推进 |
| anneal_paths / treesa_path | 多条独立 chains | 一条 chain 内的 rotations |
| temper_path(s) | 同一轮的 replica segments | 轮末相邻交换和下一轮 |
| native sliced execution | 多个固定 slice chunks | chunk 内和最终 partial merge 的顺序 |
| matrixmultiply mt | 单个 GEMM 内部线程 | 由可选 Cargo feature 和线程上限控制 |
对公开低层算法,并行对象的数量给出阶段并行度上限;给一个阶段更多线程,不代表它能持续占用同样数量的 CPU 核。Auto preset 不规定公开的内部任务数量或同步方式。
线程池与嵌套并行
RAYON_NUM_THREADS=8 cargo run --release --bin tnpath -- \
network.json --method auto --preset heavy --seed 0
RAYON_NUM_THREADS=8 MATMUL_NUM_THREADS=1 tnexec \
--net network.json --load-path plan.json
| 控制项 | 作用域 |
|---|---|
| RAYON_NUM_THREADS | Auto 路径规划、公开低层算法和 native slice chunks |
| MATMUL_NUM_THREADS | 启用 matrixmultiply mt feature 时的单个 GEMM 内线程 |
| CPU affinity / launcher binding | 进程实际可以运行在哪些 CPU 上 |
外层 Rayon 与内层 GEMM 同时扩张会造成 oversubscription。tnexec 在实际 outer chunk 多于 1 且调用者没有显式设置时,把 MATMUL_NUM_THREADS 设为 1;显式环境变量始终由调用者负责。默认 Python wheel 不启用 matrixmultiply 的可选线程池。
线程数、工作量和结果
对低层固定 ntrials、chains、rounds 或 moves 的调用,增加线程主要改变完成这些工作所需的墙钟。Auto 预设可能随资源环境改变实际搜索工作,因此比较不同线程数时必须同时记录路径质量,且不能默认工作量保持不变。
| 比较问题 | 需要固定的量 |
|---|---|
| 固定工作量的线程加速 | 同一入口、trial/chain/round 数、seed、objective 和输出验证 |
| Auto 资源档位的最终质量 | 记录公开配置、实测墙钟和最终路径指标,不称为普通 strong scaling |
| 带 max_time 的结果 | 外部硬墙钟、重复次数和实际完成工作;协作式检查会受运行时序影响 |
| 切片执行加速 | 同一 path、sliced legs、dtype、chunk 规则和后端 |
Warning
资源口径
线程池宽度不是物理核数,也不是实际平均用核。只写 RAYON_NUM_THREADS=8 不能证明阶段使用了 8 个物理核。
并行运行的报告口径
阶段平均 CPU 使用量可以用 process CPU time / wall time 估计。例如比值为 2 表示该窗口内平均每秒消耗 2 个 CPU 秒,不能单独证明使用了多少物理核。等待、内存带宽瓶颈或任务不足都会使该比值低于线程池宽度。
- 记录 CPU affinity、物理核与 SMT 映射,而不只记录逻辑线程数。
- 记录 Rayon worker count,以及是否启用 matrixmultiply mt。
- 记录 process CPU、wall time、RSS 和测量窗口边界。
- 记录 trial、chain、replica、start 或 slice chunk 的总数与完成数。
- 共享服务器上同时跑多个进程提高的是 campaign throughput;不能直接当作单进程 latency speedup。