Kernoscope 0.2.0 · 协议 c70726cc8474
------------------------------------------------------------------------------------------------
[ok  ] 最耗时的是 copy_k(const float *, float *, long)（7941.163 ms / 12383 次，占 kernel 时间 100.0%），进程内 kernel 时间合计 7941.163 ms  (7941.163 ms, exact)
        前提 该 kernel 占全部 kernel 时间的比例：100.0%
        前提 kernel 时间占进程 wall 的比例：68.4%
        下一步：用 -k 只选这个 kernel 再跑一次，拿到它的 DRAM/occupancy/roofline 判词
[soft] 整窗口 DRAM 约 7.29 TB（代理口径：NVML 显存忙碌 × 本机实测峰值）  (7285839600000.0 B, estimated)
        前提 窗口是否被被测负载主导：95.2%（门槛 50.0%）→ 满足
        前提 参与积分的窗口内显存忙碌均值：95.2%
        下一步：与你的账本对拍（--ks-ledger-total-mb）确认这个量级是否符合预期
[soft] 每次 launch 约 588 MB（代理口径）  (588370000.0 B, estimated)
        前提 窗口是否被被测负载主导：95.2%（门槛 80.0%）→ 满足
        前提 被匹配 kernel 是否占窗口 kernel 时间 ≥95%：100.0%（门槛 95.0%）→ 满足
        下一步：改一次 kernel 再跑 diff：差值小于 MDD 就是噪声，不要当成改进
[no  ] 不给数字：访存轨迹给不出字节数
        怎么办：轨迹口径给不出字节时，改用 NVML 代理口径（--ks-calibration + --…（代价 ≈20s）
[soft] 与账本相差 +9.6%（同口径对拍）  (9.6 %, derived)
        下一步：误差超出本机误差带才值得继续优化；否则先改测量口径
[soft] 理论上界 100.0%；限制因素 threads+warps  (100.0 %, exact)
        下一步：装上 NVBit 探针可拿到实测 occupancy（不只是上界）

没测到什么（共 4 个指标，按原因归组）：
  - 2 个 counters_denied（硬件计数器被权限/驱动策略拒绝）（例：sm__maximum_warps_per_active_cycle_pct, sm__throughput.avg.pct_of_peak_sustained_elap…）；怎么办：计数器是 host-wide 的，容器内无法突破（不要用 sudo/setuid 试）；换…
  - 1 个 no_workload（没有给工作量（FLOPs/bytes））（例：est__achieved_tflops）；怎么办：给出每次 launch 的工作量：--ks-gemm M,N,K 或 --ks-flops…（代价 ≈0）
  - 1 个 trace_unavailable（访存轨迹给不出字节数）（例：est__dram_bytes_per_launch_trace）；怎么办：轨迹口径给不出字节时，改用 NVML 代理口径（--ks-calibration + --…（代价 ≈20s）

本次代价：wall 11.607s · 包 3842B · 12383 次 launch · 无本机误差带（跑 kernoscope selftest 后 diff 才有 MDD）
建议的下一步：
  - kernel_time：用 -k 只选这个 kernel 再跑一次，拿到它的 DRAM/occupancy/roofline 判词
  - dram_bytes：与你的账本对拍（--ks-ledger-total-mb）确认这个量级是否符合预期
  - dram_bytes_per_launch：改一次 kernel 再跑 diff：差值小于 MDD 就是噪声，不要当成改进
  - dram_bytes_trace：轨迹口径给不出字节时，改用 NVML 代理口径（--ks-calibration + --…
