
CANN SHMEM 算子性能评估 Baseline 选择策略HCCL/aclnn 对标与 metric_only 指标验收实践【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem在 CANN SHMEM面向昇腾平台的 OpenSHMEM 标准多机多卡内存通信库算子的性能评估流程中baseline对比基准的选择直接决定了性能结论的可靠性没有明确的对照基准任何快或慢的判断都缺乏依据。本文基于shmem-ops-performance-eval技能规范中的 Baseline 选择策略系统讲解 SHMEM 算子性能采集时如何按优先级选择并接入 baselineHCCL 集合通信算子 → aclnn 扩展算子 → metric_only 指标验收如何编写 C baseline 可执行文件、如何完成三阶段对比采集与达标判定默认 current ≥ baseline 的 80%通信算子带宽利用率 NEVER 低于 20%。读完本文你将掌握一套可直接落地到实际算子性能评估中的 Baseline 选型决策树、记录格式与反模式清单。1. Baseline 硬规则性能采集的前提约束性能采集必须有明确的 baseline 作为对比基准以下是不可违背的硬规则有 HCCL/aclnn baseline 时MUST 接入 baseline——不允许以没有对比对象为由跳过对比有 baseline 时达标线默认 current ≥ baseline 的 80%有 baseline 但未达标时进入性能优化最多 5 轮无直接 baseline 时MUST 记录搜索过程并使用 metric_only 指标验收通信算子能计算带宽利用率时NEVER低于 20%。这四条规则与shmem-ops-performance-eval的总体流程规范一致见 .agents/skills/shmem-ops-performance-eval/references/performance-eval-guide.md性能阶段是强制性阶段只采集当前实现时间不算完成必须有 baseline 对比并达标或在 metric_only 下完成指标测量并达标。适用边界说明shmem-ops-performance-eval技能用于在 CANN SHMEM 生态内评估新开发的通信/计算算子如 AllToAllV、Dispatch、Combine、KV Shuffle 等的性能。文中涉及的custom-ops/op/目录树含baseline/、scripts/perf.sh、data/perf/是该技能约定的交付物布局由 skill 生成或同步不属于 upstream 仓库本体命令代码段以 .agents/skills/shmem-ops-performance-eval/references/perf-workflow.md 为准。2. 优先级 1HCCL / aclnn 算子库对标适用场景算子功能与 HCCL 集合通信算子完全或部分对应。重要声称无 baseline前MUST逐一排查下文的 HCCL 清单。很多集合通信算子在 HCCL 中有对应实现HCCL 库包含 AllToAll 等算子不要误认为 HCCL 只有 AllGather/AllReduce/ReduceScatter从而遗漏 Step 1。2.1 HCCL 集合通信算子清单通信算子在此清单中查找 baselineSHMEM 算子HCCL BaselineHCCL API说明AllGatherHcclAllGatherHcclAllGather(sendBuf, recvBuf, count, dataType, comm, stream)每 PE 数据收集到全部 PEAllReduceHcclAllReduceHcclAllReduce(sendBuf, recvBuf, count, dataType, op, comm, stream)全局归约ReduceScatterHcclReduceScatterHcclReduceScatter(sendBuf, recvBuf, count, dataType, op, comm, stream)归约后分片AllToAllHcclAlltoAllHcclAlltoAll(sendBuf, sendCount, sendType, recvBuf, recvCount, recvType, comm, stream)全交换BroadcastHcclBroadcastHcclBroadcast(buf, count, dataType, root, comm, stream)广播ReduceHcclReduceHcclReduce(sendBuf, recvBuf, count, dataType, op, root, comm, stream)归约到 rootScatterHcclScatterHcclScatter(sendBuf, recvBuf, count, dataType, root, comm, stream)root 分发GatherHcclGatherHcclGather(sendBuf, recvBuf, count, dataType, root, comm, stream)收集到 root从仓库现状看SHMEM 侧这些集合通信语义均有对应示例实现可供对照例如 examples/allgather 演示了 AllGather各 PE 将本地数据汇聚到所有 PE并完成精度验证、性能数据输出到result.csvexamples/tp_allreduce_udma 演示了基于reduce-scatter local reduce all-gather的 AllReduce 流水aclshmem_barrier_all等同步原语在 include/host/data_plane/shmem_host_cc.h 中提供。这些 SHMEM 实现是 baseline 接入时功能对应关系的直接参照。2.2 aclnn 扩展算子SHMEM 算子aclnn BaselineAPI说明AllToAllV 版本aclnnAlltoAllVaclnnAlltoAllV(...)变长全交换AllToAllVHCCL 回退HcclAlltoAllVHcclAlltoAllV(...)CANN 无独立 aclnn 头文件时的MUST回退查找方法在 CANN 安装目录下搜索aclnn开头的头文件按算子语义匹配关键词如 AllToAllV 搜索alltoall。也可查阅 CANN 在线文档的「aclnn 算子接口」章节。AllToAllV 回退若${ASCEND_HOME_PATH}/include无独立aclnnAlltoAllV头文件MUST使用HcclAlltoAllVhccl/hccl.h。技能中的参考实现位于custom-ops/alltoallv/baseline/完整接入与对比流程见 .agents/skills/shmem-ops-performance-eval/references/baseline-compare-workflow.md。2.3 Baseline 接入方式C 可执行文件HCCL 和 aclnn baselineMUST以C 可执行文件方式接入NEVER使用 Python 脚本在算子目录的baseline/子目录下编写独立的 baseline 测试程序和CMakeLists.txtNEVER将 baseline 源码或编译 target 放在算子src/或根目录CMakeLists.txt中。算子根CMakeLists.txt仅通过add_subdirectory(baseline)引入见 .agents/skills/shmem-ops-performance-eval/references/baseline-compare-workflow.md §2.1。HCCL baseline 示例以 AllToAll 为例含预热 事件计时#include hccl/hccl.h #include acl/acl.h bool LaunchHcclBaseline(void *sendBuf, void *recvBuf, int64_t count, HcclComm comm, aclrtStream stream) { HcclResult ret HcclAlltoAll( sendBuf, static_castuint64_t(count), HCCL_DATA_TYPE_FP16, recvBuf, static_castuint64_t(count), HCCL_DATA_TYPE_FP16, comm, stream); return (ret HCCL_SUCCESS); } aclrtEvent startEvent, endEvent; aclrtCreateEvent(startEvent); aclrtCreateEvent(endEvent); for (int i 0; i warmup; i) { LaunchHcclBaseline(sendBuf, recvBuf, count, comm, stream); } aclrtSynchronizeStream(stream); aclrtRecordEvent(startEvent, stream); for (int i 0; i iters; i) { LaunchHcclBaseline(sendBuf, recvBuf, count, comm, stream); } aclrtRecordEvent(endEvent, stream); aclrtSynchronizeStream(stream); float elapsed_ms; aclrtEventElapsedTime(elapsed_ms, startEvent, endEvent); float avg_us elapsed_ms * 1000.0f / iters; printf([BASELINE_PERF] pe%d e2e_us%.2f kernel_us%.2f algo_bandwidth_GBps%.2f e2e_bus_bandwidth_GBps%.2f kernel_bus_bandwidth_GBps%.2f\n, my_pe, avg_us, avg_us, ...);CMake 集成baseline 的 CMakeLists.txt 和源码MUST放在baseline/目录下NEVER混入算子src/add_executable(${OP_NAME}_hccl_baseline baseline/src/${OP_NAME}_hccl.cpp) target_link_libraries(${OP_NAME}_hccl_baseline PRIVATE hccl ascendcl)aclnn baseline 示例以 AllToAllV 为例aclnn 单算子调用需先查询 workspaceSize#include aclnn/aclnn_alltoallv.h #include acl/acl.h uint64_t workspaceSize 0; aclnnAlltoAllVGetWorkspaceSize(...); aclnnAlltoAllV(workspace, workspaceSize, executor, stream);2.4 记录格式与 AllToAllV 对比命令记录格式baseline: type: cann_operator source: HCCL api: HcclAlltoAll latency_us: 125.3 command: ./alltoall_hccl --n_pes 8 --count 1048576 --dtype fp16 --iters 100 environment: cann_version: 8.0.RC1 device: Atlas 800T A2 n_pes: 8AllToAllV 对比命令含 SHMEM baseline完整参数见 .agents/skills/shmem-ops-performance-eval/references/perf-workflow.mdOPalltoallv DEVICE_LIST0,1,2,3,4,5,6,7 BASE_COUNT8388608 DTYPEfloat16 WARMUP10 MEASURE40 ITERS$((WARMUP MEASURE)) # 50 total # 阶段 A独立 shellbaseline bash ${SHMEM_REPO}/custom-ops/${OP}/baseline/scripts/run_baseline.sh \ ${DEVICE_LIST} ${BASE_COUNT} ${DTYPE} ${ITERS} # 阶段 B新 shell间隔 ≥30sSHMEM bash ${SHMEM_REPO}/custom-ops/${OP}/scripts/perf.sh \ ${DEVICE_LIST} ${BASE_COUNT} ${DTYPE} ${ITERS} # 阶段 C离线 python3 ${SHMEM_REPO}/custom-ops/scripts/lib/perf_compare.py \ --shmem-log ${SHMEM_REPO}/custom-ops/${OP}/data/perf/shmem_${BASE_COUNT}_${DTYPE}.log \ --baseline-log ${SHMEM_REPO}/custom-ops/${OP}/data/perf/baseline_${BASE_COUNT}_${DTYPE}.log三阶段流程的要点Hard GateHCCL baseline 与 SHMEM perf NEVER 同 shell / 同docker exec混跑阶段 A 与阶段 B 之间间隔 ≥30s阶段 C 离线对比通过 grep[BASELINE_PERF]/[PERF]两行日志 perf_compare.py解析完成禁止手工抄数。完整工作流见 .agents/skills/shmem-ops-performance-eval/references/baseline-compare-workflow.md。2.5 公平对比的计时边界HCCL 是黑盒 API用户只提供 input/output device buffer其内部 staging、路由、通信开销全部对用户不可见而 SHMEM 的 e2e 计时覆盖从用户 inputDevice GM到结果 outputDevice GM的全部搬运。因此公平对比要求两侧计时边界对齐计时起点均为数据在 Device GM计时终点均为结果在 Device GM详见 .agents/skills/shmem-ops-performance-eval/references/timing-and-metrics-standard.md §1.3。与之配套SHMEM 侧需要区分e2e_latency_us与kernel_latency_us双指标与 HCCL 对比时使用e2e_latency_us内部优化分析时使用kernel_latency_us。3. 优先级 2指标测试无直接 baseline适用场景既找不到对应的 HCCL 算子也找不到 aclnn 扩展算子。使用 metric_only 前MUST说明已逐一检查过以下来源且均无对应实现HCCL 清单§2.1aclnn 扩展§2.2已有 SHMEM example仓库内如 examples/allgather、examples/tp_allreduce_udma 等均可作为参考实现来源用户参考实现。metric_only不是跳过性能采集或指标验收的理由——它只是把验收基准从与 HCCL/aclnn 的比值换成与硬件理论峰值的利用率/与理论时延的对比。3.1 测试策略时延测试测量端到端时延分析是否存在明显的性能瓶颈与理论时延对比如果可计算带宽测试计算算法带宽algo bandwidth和总线带宽bus bandwidth与硬件峰值带宽对比对通信算子能计算带宽利用率时MUST输出 utilization且NEVER低于 20%带宽利用率对于通信算子测量带宽利用率计算理论带宽与实际带宽的比值。3.2 判断标准时延明显过高简单搬运操作耗时超过设计或理论阈值通信算子带宽利用率低于 20%wait/sync 占比显示明显瓶颈存在明显的空闲等待时间。3.3 指标计算公式以下公式来自 .agents/skills/shmem-ops-performance-eval/references/timing-and-metrics-standard.md此处仅引用不作为独立实现标准algo_bandwidth_GBps logical_payload_bytes / latency_s / 1e9 kernel_bus_bandwidth_GBps algo_bandwidth_GBps × bus_factor # kernel 口径 — 达标主指标 e2e_bus_bandwidth_GBps algo_bandwidth_GBps(e2e) × bus_factor # e2e 口径 — 仅参考 bandwidth_utilization_percent kernel_bus_bandwidth_GBps / peak_bandwidth_GBps × 100其中bus_factor按算子语义取值该标准是唯一参照源AllReduce 为2 × (n_pes − 1) / n_pesReduceScatter / AllGather / AllToAll / Shuffle 为(n_pes − 1) / n_pesBroadcast / P2P 为1dispatch / combine 在均匀路由假设下近似(n_pes − 1) / n_pes。peak_bandwidth_GBps必须记录来源SoC、链路类型、PE 数、拓扑决策表同样见 .agents/skills/shmem-ops-performance-eval/references/timing-and-metrics-standard.md §4.4P2P单条 HCCS 链路单向取28 GB/s集合通信8PE full-mesh 聚合取196 GB/s 7 × 28dispatch / combine稀疏路由取 28 GB/s 的 P2P 口径。实际性能采集MUST通过算子--perf输出[PERF]行获取指标值NEVER手工计算或使用 Python 脚本替代 C 性能测试程序。[PERF]行必须包含e2e_us、kernel_us、algo_bandwidth_GBps、e2e_bus_bandwidth_GBps、kernel_bus_bandwidth_GBps、bandwidth_utilization_pct、payload_bytes、bus_factor、peak_bandwidth_GBps等字段格式规范见 .agents/skills/shmem-ops-performance-eval/references/timing-and-metrics-standard.md §5。记录格式baseline: type: metric_only current_latency_us: 245.8 logical_payload_bytes: 4.0 MB algo_bandwidth_GBps: 16.3 kernel_bus_bandwidth_GBps: 8.15 peak_bandwidth_GBps: 300 bandwidth_utilization_percent: 2.7 bottleneck_analysis: 带宽利用率极低4. Baseline 选择决策树Step 1: 查找 HCCL 集合通信算子清单§2.1 ├─ 有完全对应 → 使用 HCCL 算子作为 baseline └─ 无 → Step 2 Step 2: 查找 aclnn 扩展算子§2.2 ├─ 有对应算子 → 使用 aclnn 算子作为 baseline └─ 无 → Step 3 Step 3: 使用指标测试§3metric_only ├─ 测量时延和带宽利用率 └─ 带宽利用率 ≥ 20%关键提醒声称无 baseline前MUST走完 Step 1-2并在报告中记录每步的搜索结果很多集合通信算子在 HCCL 中有对应实现不要遗漏 Step 1HCCL 库包含 AllToAll 等算子不要误认为 HCCL 只有 AllGather/AllReduce/ReduceScatter。在实际评估中选型完成后还需在performance_report.md中填写性能对比表带宽达标场景以kernel_bus_bandwidth_GBps为达标主指标有 baseline 时默认 current ≥ baseline 的 80%时延作为参考列e2e_us/kernel_us并输出 Device Frame Table 用于瓶颈分析frame 划分与打点方法见 .agents/skills/shmem-ops-performance-eval/references/device-profiling-guide.md。5. Baseline 记录要求无论使用哪种 baseline都MUST记录完整的 baseline 信息、测量值、命令、环境与搜索过程baseline: type: hccl | aclnn | metric_only source: HCCL | aclnn | metric_only api: HcclAlltoAll measurement: latency_us: 210.5 algo_bandwidth_GBps: 19.0 kernel_bus_bandwidth_GBps: 28.5 peak_bandwidth_GBps: 28.0 bandwidth_utilization_percent: 9.5 effective_flops: 123000000000000.0 compute_utilization_percent: 42.0 command: ./baseline_test --n_pes 8 --count 1048576 environment: cann_version: 8.0.RC1 device: Atlas 800T A2 soc: Ascend910B3 n_pes: 8 search_process: 已检查 HCCL 清单、aclnn 清单选定 ...这份记录的measurement字段与[PERF]/[BASELINE_PERF]行的输出字段一一对应保证日志 → 报告全程可追溯。search_process字段用于固化决策树 Step 1-3 的排查过程避免出现baseline: none却无搜索记录的反模式。6. 附录 A可选 stitched baseline非默认流程注意当前标准流程design / performance-eval的baseline_search不要求排查拼接方案。仅当 HCCL/aclnn 均无对应且用户明确要求 stitched 对比时可参考本节实现 C 拼接 baseline。通信算子拼接方案组件KV ShufflePut Get Barrieraclshmemx_mte_put_nbiaclshmemx_mte_get_nbiaclshmem_barrier_all拼接 baselineMUST用 C 可执行文件实现NEVER使用 Python 脚本。示例中的aclshmem_barrier_all即为仓库提供的集合同步原语见 include/host/data_plane/shmem_host_cc.hMTE put/get 非阻塞接口aclshmemx_mte_put_nbi/aclshmemx_mte_get_nbi可在 include/device/gm2gm/engine/shmem_device_mte.h 中查阅——这为以 SHMEM 原语拼接出可量化对标路径提供了实现依据。7. 反模式清单NEVER DO❌ 有可用 baseline 却不接入❌ 声称无 baseline但不记录 Step 1-2 的搜索过程❌ AllToAllV 未排查HcclAlltoAllV就直接写 metric_only❌ baseline 用 Python dist / torch 脚本代替 C HCCL 可执行文件❌ 同一 shell / 同一docker exec内混跑 HCCL baseline 与 SHMEM perf须分阶段 离线 compare❌ baseline 与 SHMEM 使用不同的gen_data.py/ sendcounts / shape / dtype / PE 数❌ 只报 SHMEM[PERF]单边数据不报 baseline[BASELINE_PERF]及对比表❌ 通信算子不测量带宽利用率metric_only 下 20% 视为不达标❌ 用 smoke 小 shape 作为性能结论性能 case 要求 8PE S 档 L 档L 档集合通信 ≥256MB 数据量见 .agents/skills/shmem-ops-performance-eval/references/performance-eval-guide.md §4❌ 没有硬件环境却编造性能数据。遵循本节与前述决策树即可保证每次性能评估都具备可复现、可对比、可追溯的 baseline 基础让达标与未达标的判定真正经得起推敲。【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考