性能测试样例)
FixpipeL0C搬出性能测试样例【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit概述本样例用于矩阵计算搬出路径的性能测试覆盖把Cube计算结果从L0C Buffer搬出到L1 Buffer或Unified Buffer简称UB的数据通路。本样例为无业务测试不校验计算结果只采集Fixpipe搬出耗时。本样例支持的产品及CANN软件版本产品架构代号CANN软件版本Ascend 950PR/Ascend 950DTdav-3510 CANN 9.1.0Atlas A3 训练系列产品/Atlas A3 推理系列产品dav-2201 CANN 9.0.0Atlas A2 训练系列产品/Atlas A2 推理系列产品dav-2201 CANN 9.0.0目录结构介绍├── fixpipe_perf │ ├── CMakeLists.txt // 编译工程文件 │ ├── fixpipe_perf.asc // Fixpipe搬出性能测试实现与调用入口 │ ├── perf.sh // 性能测试脚本 │ ├── generate_roofline.py // Roofline 生成脚本 │ ├── README.md // 样例说明文档样例描述本样例通过运行参数SCENARIO_NUM选择不同的搬出通路与数据类型矩阵规格通过./demo SCENARIO_NUM M K N在运行时传入。两条搬出通路使用不同接口通路接口头文件路径支持架构L0C Buffer到L1 BufferDataCopybasic_api/kernel_operator_data_copy_intf.hdav-2201、dav-3510L0C Buffer到UBFixpipebasic_api/kernel_operator_fixpipe_intf.h仅dav-3510根据平台架构支持的测试场景如下Atlas A3/A2训练/推理平台场景SCENARIO_NUM输入数据类型数据源执行路径说明理论带宽(Byte/cycle)带宽延迟(cycle)1floatL0C BufferL0C Buffer - L1 BufferDataCopy 搬出随路 F322F16 转 half128202floatL0C BufferL0C Buffer - L1 BufferDataCopy 搬出随路 QF322B8_PRE 量化为 int8_t6420Ascend 950PR/950DT平台场景SCENARIO_NUM输入数据类型数据源执行路径说明理论带宽(Byte/cycle)带宽延迟(cycle)11floatL0C BufferL0C Buffer - L1 BufferDataCopy 搬出随路 F322F16 转 half1282612floatL0C BufferL0C Buffer - L1 BufferDataCopy 搬出随路 QF322B8_PRE 量化为 int8_t642613floatL0C BufferL0C Buffer - UBFixpipe 搬出 float非双目标模式1282614floatL0C BufferL0C Buffer - UBFixpipe 搬出 float双目标模式按 M 维度拆分25626理论带宽基于硬件搬出并行度计算搬出单元每 cycle 处理 64 个 out 元素理论带宽 64 * sizeof(目的数据类型)Byte/cycle。双目标模式拆两个子核并行等效并行度翻倍。L0C Buffer 到 UB 仅 dav-3510 支持场景 13、14场景 14 把 L0C Buffer 的 M×N 矩阵按 M 维度拆成两半同时写入两个Vec核的 UB。编译运行在本样例根目录下执行如下步骤编译并执行样例。配置环境变量请根据当前环境上CANN开发套件包的安装方式配置环境变量。source ${install_path}/cann/set_env.sh${install_path}为CANN包安装目录未指定安装目录时默认安装至/usr/local/Ascend下。编译样例针对Atlas A3/A2训练/推理平台dav-2201编译mkdir -p build cd build cmake -DCMAKE_ASC_ARCHITECTURESdav-2201 .. make -j cd ..针对Ascend 950PR/950DT平台dav-3510编译mkdir -p build cd build cmake -DCMAKE_ASC_ARCHITECTURESdav-3510 .. make -j cd ..运行样例运行参数顺序为SCENARIO_NUM M K N# Atlas A3/A2训练/推理平台示例场景1、2 ./build/demo 1 128 64 128 ./build/demo 2 128 64 128 # Ascend 950PR/950DT平台示例场景11-14 ./build/demo 11 128 64 128 ./build/demo 12 128 64 128 ./build/demo 13 128 64 128 ./build/demo 14 128 64 128参数说明SCENARIO_NUM测试场景编号Atlas A3/A2训练/推理平台使用1、2Ascend 950PR/950DT平台使用11-14M矩阵行数K矩阵 A 的列数矩阵 B 的行数N矩阵列数矩阵规格需符合对齐要求M、N取16的倍数双目标模式按M维度拆分时M须为2的倍数按N维度拆分时N须为32的倍数。性能数据获取使用msprof工具获取详细性能数据msprof op build/demo 1 128 64 128 使用msprof工具需安装CANN商用/社区版详细信息可参考msprof工具安装指南。命令完成后会在默认目录下生成以OPPROF_{timestamp}_XXX命名的文件夹性能数据文件夹结构示例如下├── dump # 原始性能数据 ├── ArithmeticUtilization.csv # cube/vector指令cycle占比 ├── L2Cache.csv # L2 Cache命中率影响MTE2建议合理规划数据搬运逻辑增加命中率 ├── Memory.csv # UB、L1 Buffer和主存储器读写带宽速率 ├── MemoryL0.csv # L0A Buffer、L0B Buffer和L0C Buffer读写带宽速率 ├── MemoryUB.csv # Vector和Scalar到UB的读写带宽速率 ├── OpBasicInfo.csv # 算子基础信息 ├── PipeUtilization.csv # 计算单元和搬运单元耗时及占比 ├── ResourceConflictRatio.csv # UB bank group、bank conflict和资源冲突率占比 └── visualize_data.bin # MindStudio Insight呈现文件本样例主要关注L0C Buffer搬出的性能数据通过如下方法查看具体的性能数据结果cat ./OPPROF_*/PipeUtilization.csv主要关注如下指标指标说明aic_fixpipe_time(us)fixpipe类型指令L0C Buffer搬出耗时性能测试脚本perf.sh用于批量编译、执行msprof op、提取Fixpipe搬出耗时并生成CSV汇总结果。# 查看帮助 ./perf.sh --help # 测试场景1默认使用dav-2201 ./perf.sh 1 # 测试场景13默认使用dav-3510 ./perf.sh 13 # 明确指定平台须与场景匹配否则报错 ./perf.sh 1 dav-2201 ./perf.sh 13 dav-3510脚本内置的默认shape序列搬出性能只与M、N相关K固定取64用于让Mmad前置产出L0C Buffer数据从很小的M·N起步、逐步增大至满载。dav-2201的L0C Buffer为128KB、dav-3510为256KB满载点不同故两架构末组不同dav-2201默认shape序列Test_IDMKNM·NL0C Buffer占用float11664162561 KB232643210244 KB3646464409616 KB4128641281638464 KB51286425632768128 KBdav-2201满载dav-3510默认shape序列Test_IDMKNM·NL0C Buffer占用float11664162561 KB232643210244 KB3646464409616 KB4128641281638464 KB52566425665536256 KBdav-3510满载其中L0C Buffer搬出数据量为M * N * sizeof(目的类型)K仅用于让Mmad前置在L0C Buffer产出M×N结果、不计入搬出量可以按需调整。如需针对性补点可直接用./build/demo SCENARIO_NUM M K N跑单个shape。测试完成后结果保存在perf_data_${timestamp}_scenario${SCENARIO}/perf_result_scenario${SCENARIO}.csv原始msprof数据保存在同目录下的test_${id}_${M}_${K}_${N}子目录。性能指标说明perf.sh从PipeUtilization.csv提取aic_fixpipe_time(us)并结合平台主频与搬出量计算带宽。CSV中的计算列如下列名计算方式说明AIC_FixPipe_Time(us)取自PipeUtilization.csv的aic_fixpipe_time(us)Fixpipe搬出耗时CycleTime(us) * Frequency(MHz)根据平台主频折算的Cycle数Bandwidth(GB/s)DataSize(bytes) / Time(us) / 1e3数据搬运带宽性能指标计算方法msprof在PipeUtilization.csv中采集到的aic_fixpipe_time(us)为微秒us单位的搬出耗时。perf.sh会读取该时间列并结合平台主频和搬出数据量计算Cycle数与实测带宽。Time转换为Cycle主频单位为MHz即每微秒的周期数因此无需额外换算Cycle Time(us) * Frequency(MHz)例如Atlas A3/A2训练/推理平台主频为1800MHz若aic_fixpipe_time(us) 0.050000Cycle 0.050000 * 1800 90.00 cycles数据搬运量计算perf.sh按场景的目的数据类型计算搬出量作为带宽计算的DataSize(bytes)场景数据量计算数据类型大小1、11M * N * sizeof(half)2 bytes2、12M * N * sizeof(int8_t)1 byte13、14M * N * sizeof(float)4 bytes实测带宽计算带宽按GB/s输出。由于Time(us)是微秒DataSize(bytes) / Time(us)的单位是MB/s继续除以1e3后得到GB/sBandwidth(GB/s) DataSize(bytes) / Time(us) / 1e3例如场景11shape为[128, 64, 128]目的类型halfDataSize 128 * 128 * 2 32768 bytes Time 0.050000 us Bandwidth 32768 / 0.050000 / 1e3 655.360 GB/s理论耗时与带宽利用率场景表中的“理论带宽(Byte/cycle)”和“带宽延迟(cycle)”可用于估算理论耗时。理论带宽由搬出并行度推导搬出单元每cycle处理64个out元素理论带宽64*sizeof(目的类型)双目标模式等效翻倍固定延迟表示一次搬运的基础启动开销。理论传输时间可按如下方式估算TransferCycle DataSize(bytes) / TheoreticalBandwidth(Byte/cycle) TheoryCycle Latency(cycle) TransferCycle TheoryTime(us) TheoryCycle / Frequency(MHz) TheoryBandwidth(GB/s) DataSize(bytes) / TheoryTime(us) / 1e3实测带宽与理论带宽的比例可用于评估带宽利用率BandwidthUtilization MeasuredBandwidth(GB/s) / TheoryBandwidth(GB/s) * 100%平台主频由perf.sh按场景自动设置平台架构代号主频适用场景Atlas A3/A2训练/推理平台dav-22011800MHz1、2Ascend 950PR/950DT平台dav-35101650MHz11-14Roofline分析本样例提供generate_roofline.py可基于perf.sh生成的CSV输出ASCII报告和图片。Python包依赖generate_roofline.py使用Python标准库读取CSV并生成ASCII报告如果需要同时生成PNG/PDF图表需要安装matplotlib和numpy。python3 -m pip install --user matplotlib numpy如果未安装上述依赖脚本仍可生成.txt格式的ASCII分析报告但会跳过图片生成。# 自动查找最新perf_data目录中的结果 python3 generate_roofline.py # 指定CSV文件 python3 generate_roofline.py --csv perf_data_xxx_scenario11/perf_result_scenario11.csv脚本内置各场景的搬出并行度无需手工传入峰值带宽首指令开销默认按场景取dav-2201为20cycle、dav-3510为26cycle主频按场景自动取。图表示例以下为场景1生成的Roofline图示例注意事项场景编号与平台必须匹配dav-2201用场景1、2dav-3510用场景11-14perf.sh会校验不匹配并报错。L0C Buffer到UB通路场景13、14仅dav-3510支持使用Fixpipe接口与混合编程框架。矩阵规格需符合对齐要求M、N取16的倍数双目标模式按M维度拆分时M须为2的倍数按N维度拆分时N须为32的倍数。本样例为纯性能测试不校验计算结果。核函数对L0A Buffer、L0B Buffer数据不初始化保留一条最小Mmad前置产出L0C Buffer数据。Mmad前置与搬出指令之间插入PipeBarrierPIPE_ALL避免流水重叠导致aic_fixpipe_time统计不准。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考