PidStepResponseFeatures Delivery Note
结论
PidStepResponseFeatures 是本轮更合适的“新算子”交付目标。它此前只有 Python reference、测试和本机 benchmark,本轮新增了 Ascend C host/kernel/CMake/smoke/benchmark,使其成为可构建、可运行、可验证的 NPU 原型算子。
这个算子是干啥的
它用于 PID 候选控制轨迹的批量后处理。上游 rollout、仿真或预测已经生成:
pv_candidates[B, C, N], sp[B, N]
该算子在 NPU 上把每条候选轨迹压缩为:
features[B, C, 12]
输出特征包括初值、终值、终值误差、峰值、谷值、超调、欠调、上升时间、峰值时间、调节时间、IAE 和 ISE。下游可以直接用这些特征做候选筛选、加权评分或 best candidate reduce。
为什么值得做
- 它不做闭环递推,不受强时序依赖限制,适合把上游轨迹当作 device-resident 数据做后处理。
- 工作量随
B * C * N增长,输出只有B * C * 12,适合 NPU 侧融合扫描。 - 它可以替代“把完整候选轨迹搬回 CPU 再逐候选算特征”的流程,减少 D2H 数据量。
- 它和后续候选评分方向互补:先提取可解释特征,再由 host 策略或未来 fused scorer 做权重评分和 best reduce。
本次交付
op_host/pid_step_response_features_host.hop_host/pid_step_response_features_host.cppop_host/pid_step_response_features_def.cppop_kernel/pid_step_response_features_kernel.cppexamples/test_aclnn_pid_step_response_features.cpptests/benchmark_pid_step_response_features_aclnn.cppCMakeLists.txtREADME.mddocs/algorithm.mddocs/api_reference.mddocs/benchmark.md
验收结果
本地 Python reference:
4 passed
node202 / Ascend910B3:
CANN build: PASSED
ACLNN smoke: PASSED
Smoke 输出:
PidStepResponseFeatures smoke initial=0 final=10 peak=11 overshoot=0.1 rise_time=2 peak_time=4 settling_time=5 iae=15 ise=91
PASSED
Benchmark:
B=64 C=32 N=1024
cpu_64T_ms=4.41643
npu_kernel_ms=0.0547166
npu_resident_e2e_ms=0.101893
feature_max_abs=0
B=128 C=64 N=1024
cpu_64T_ms=6.87986
npu_kernel_ms=0.0792977
npu_resident_e2e_ms=0.164775
feature_max_abs=0
边界说明
- 当前 benchmark 是 resident 口径,假设
pv_candidates/sp已在 Device。 - cold H2D 端到端尚未统计,完整候选轨迹来自 Host 时需要单独评估搬运成本。
- 当前 kernel 是 GlobalTensor 标量扫描原型,后续可继续做 UB 分块、向量化和与候选评分的融合。