MmadCube矩阵乘性能测试样例【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit概述本样例用于Mmad系列接口的矩阵乘加计算性能测试覆盖矩阵A、B从L0A Buffer/L0B Buffer经Cube计算单元做矩阵乘、结果写入L0C Buffer的计算路径。本样例为无业务测试不校验计算结果只采集Cube计算耗时。本样例支持的产品及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目录结构介绍├── mmad_perf │ ├── CMakeLists.txt // 编译工程文件 │ ├── mmad_perf.asc // Mmad性能测试实现与调用入口 │ ├── perf.sh // 性能测试脚本 │ ├── generate_roofline.py // Roofline 生成脚本 │ ├── README.md // 样例说明文档样例描述本样例通过运行参数SCENARIO_NUM选择不同的数据类型与计算接口矩阵规格通过./demo SCENARIO_NUM M K N在运行时传入核函数名为mmad_perf_custom。根据平台架构支持的测试场景如下平台架构支持场景说明Atlas A3/A2训练/推理平台dav-22011-4普通Mmad的b8、b16、b32与结构化稀疏b8Ascend 950PR/950DT平台dav-351011-15普通Mmad的b8、b16、b32与MX量化mxfp8、mxfp4Atlas A3/A2训练/推理平台场景SCENARIO_NUM接口左矩阵A右矩阵B结果矩阵C说明1Mmadint8_tint8_tint32_tb8普通矩阵乘2Mmadhalfhalffloatb16普通矩阵乘3Mmadfloatfloatfloatb32普通矩阵乘4MmadWithSparseint8_tint8_tint32_tb8的4:2结构化稀疏矩阵乘Ascend 950PR/950DT平台场景SCENARIO_NUM接口左矩阵A右矩阵BScale结果矩阵C说明11Mmadint8_tint8_t-int32_tb8普通矩阵乘12Mmadhalfhalf-floatb16普通矩阵乘13Mmadfloatfloat-floatb32普通矩阵乘14MmadMxfp8_e4m3fn_tfp8_e4m3fn_tfp8_e8m0_tfloatmxfp8量化矩阵乘15MmadMxfp4x2_e2m1_tfp4x2_e2m1_tfp8_e8m0_tfloatmxfp4量化矩阵乘所有场景均不带bias。编译运行在本样例根目录下执行如下步骤编译并执行样例。配置环境变量请根据当前环境上CANN开发套件包的安装方式配置环境变量。source ${install_path}/cann/set_env.sh${install_path}为CANN包安装目录未指定安装目录时默认安装至/usr/local/Ascend下。source后可通过echo ${ASCEND_HOME_PATH}确认CANN包路径已就绪perf.sh编译时默认从该路径推导ASC_DIR。本样例在仿真环境运行需额外配置仿真器动态库路径。不同架构对应不同仿真器型号# dav-2201Atlas A3/A2训练/推理平台 export LD_LIBRARY_PATH${ASCEND_HOME_PATH}/tools/simulator/Ascend910B3/lib:$LD_LIBRARY_PATH # dav-3510Ascend 950PR/950DT平台 export LD_LIBRARY_PATH${ASCEND_HOME_PATH}/tools/simulator/Ascend950PR_9589/lib:$LD_LIBRARY_PATHperf.sh会按场景自动选择对应型号并配置该路径手动运行msprof op simulator时需自行export。编译样例针对Atlas A3/A2训练/推理平台dav-2201编译mkdir -p build cd build cmake -DCMAKE_ASC_ARCHITECTURESdav-2201 -DCMAKE_ASC_RUN_MODEsim .. make -j cd ..针对Ascend 950PR/950DT平台dav-3510编译mkdir -p build cd build cmake -DCMAKE_ASC_ARCHITECTURESdav-3510 -DCMAKE_ASC_RUN_MODEsim .. make -j cd ..运行样例运行参数顺序为SCENARIO_NUM M K N# Atlas A3/A2训练/推理平台示例场景1-4 ./build/demo 1 128 128 128 ./build/demo 4 128 256 128 # Ascend 950PR/950DT平台示例场景11-15 ./build/demo 11 128 128 128 ./build/demo 14 128 512 128参数说明SCENARIO_NUM测试场景编号Atlas A3/A2训练/推理平台使用1-4Ascend 950PR/950DT平台使用11-15M左矩阵A的行数K左矩阵A的列数即右矩阵B的行数N右矩阵B的列数矩阵规格需符合对齐要求M、N取16的倍数K取64的倍数mx场景K必须为64的倍数为统一建议所有场景K均取64的倍数。性能数据获取使用msprof op simulator工具在仿真环境获取详细性能数据msprof op simulator build/demo 1 128 128 128 使用msprof工具需安装CANN商用/社区版详细信息可参考msprof工具安装指南。命令完成后会在默认目录下生成以OPPROF_{timestamp}_XXX命名的文件夹仿真性能数据文件夹结构示例如下├── dump # 原始性能数据 └── simulator ├── trace.json # 整体时序 trace ├── visualize_data.bin # MindStudio Insight呈现文件 └── core0.cubecore0 ├── core0.cubecore0_instr_exe.csv # Cube核逐指令执行明细含cycles、running_time ├── core0.cubecore0_code_exe.csv # 按代码行聚合的执行明细 └── trace.json # Cube核逐指令时序trace含高精度dur本样例主要关注MMAD指令的性能数据通过如下方法查看具体的性能数据结果cat ./OPPROF_*/simulator/core0.cubecore0/core0.cubecore0_instr_exe.csv主要关注如下指标指标来源说明dur(us)core0.cubecore0/trace.json中MMAD事件的dur字段MMAD指令持续时间高精度cyclescore0.cubecore0_instr_exe.csv中MMAD行的cycles列MMAD指令周期数性能测试脚本perf.sh用于批量仿真编译、执行msprof op simulator、提取MMAD指令的持续时间与周期数并生成CSV汇总结果。# 查看帮助 ./perf.sh --help # 测试场景1默认使用dav-2201 ./perf.sh 1 # 测试场景11默认使用dav-3510 ./perf.sh 11 # 明确指定平台须与场景匹配否则报错 ./perf.sh 1 dav-2201 ./perf.sh 14 dav-3510脚本内置的默认shape序列场景数据类型默认shape序列M K N1b8dav-2201(32,32,32) (64,64,64) (128,128,128) (128,256,128) (128,512,128)2b16dav-2201(32,32,32) (64,64,64) (64,128,64) (128,128,128) (128,256,128)3b32dav-2201(32,32,32) (64,64,64) (64,128,64) (128,128,128)4sparse b8dav-2201(64,64,64) (64,128,64) (128,128,128) (128,256,128) (128,512,128)11b8dav-3510(32,32,32) (64,64,64) (128,128,128) (128,256,128) (256,256,256)12b16dav-3510(32,32,32) (64,64,64) (64,128,64) (128,128,128) (256,128,256)13b32dav-3510(32,32,32) (64,64,64) (64,128,64) (128,128,128)14mxfp8dav-3510(64,64,64) (64,128,64) (128,128,128) (128,256,128) (256,256,256)15mxfp4dav-3510(64,64,64) (128,128,128) (128,256,128) (128,512,128) (256,512,256)如需针对性补点可直接用./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从仿真产物core0.cubecore0/中提取MMAD指令的持续时间与周期数落盘到CSV。CSV中的列如下列名来源说明MMAD_Dur(us)core0.cubecore0/trace.json中MMAD事件的dur字段MMAD指令持续时间高精度实测Cyclescore0.cubecore0_instr_exe.csv中MMAD行的cycles列MMAD指令周期数实测性能指标计算方法仿真产物中Cycles为MMAD指令实测周期数MMAD_Dur(us)为对应的持续时间。perf.sh直接读取这两列落盘实测性能与算力利用率由generate_roofline.py基于硬件并行度从Cycles推导无需按主频折算。Mmad性能计算Mmad性能用MAC/cycle表达计算量按MAC数M*N*K计乘加算1次MAC。各数据类型的硬件并行度每cycle处理的元素块cube_m*cube_n*cube_k与等效峰值算力如下架构数据类型cube_mcube_ncube_kk_divisor等效峰值算力MAC/cycledav-2201b816163218192dav-2201b1616161614096dav-2201b321616411024dav-2201sparse b8161632216384dav-3510b816163218192dav-3510b1616161614096dav-3510b32161611256dav-3510mxfp816163218192dav-3510mxfp4161664116384其中k_divisor为K方向有效缩减因子sparse的4:2结构化稀疏中右矩阵稠密化为[K/2, N]硬件K方向实际只遍历K/2个分形故计算cycle减半、等效峰值算力翻倍16*16*32*216384普通场景k_divisor1。理论与实测计算公式首指令开销按0计算计算cycle ceil(M/cube_m) * ceil(N/cube_n) * ceil(K / (cube_k * k_divisor)) 理论总cycle 计算cycle (首指令开销取0) 理论耗时us 理论总cycle / 主频(MHz) 等效峰值 cube_m * cube_n * cube_k * k_divisor (MAC/cycle) 理论性能 M*N*K / 理论总cycle (MAC/cycle, 等于等效峰值) 实测cycle Cycles仿真 instr_exe.csv 中 MMAD 的 cycles直接读取 实测性能 M*N*K / 实测cycle (MAC/cycle) 算力利用率 实测性能 / 等效峰值 * 100%例如场景1dav-2201的b8并行度16×16×32k_divisor1shape为[128, 128, 128]计算cycle ceil(128/16) * ceil(128/16) * ceil(128/32) 8 * 8 * 4 256 理论总cycle 256 (首指令开销取0) 理论耗时 256 / 1800 0.1422 us 理论性能 128*128*128 / 256 8192 MAC/cycle等于峰值8192平台主频由perf.sh按场景自动设置平台架构代号主频适用场景Atlas A3/A2训练/推理平台dav-22011800MHz1-4Ascend 950PR/950DT平台dav-35101650MHz11-15Roofline分析本样例提供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_scenario1/perf_result_scenario1.csv默认输出文件前缀为${perf_data目录名}_cube_roofline生成的.txt文件为ASCII详细分析安装matplotlib后会同时生成.png图表。图表示例以下为场景1生成的Roofline图示例注意事项场景编号与平台必须匹配dav-2201用场景1-4dav-3510用场景11-15perf.sh会校验不匹配并报错。场景4MmadWithSparse仅支持dav-2201场景14、15MmadMx仅支持dav-3510。MmadMx约束K必须是64的倍数A、B起始地址在fp8场景按1024字节对齐在fp4场景按512字节对齐。本样例为纯性能测试不校验计算结果。核函数对L0 Buffer上数据不初始化Mmad指令的执行与耗时只取决于shape与架构与数据内容无关。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考