CANN/shmem MTE性能测试示例
shmem_perftest【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem示例概述shmem_perftest是一个用于测试shmem MTEMemory Transfer Engine性能的参数化测试示例支持多种测试类型、多种数据类型和灵活的参数配置。该示例通过SHMEMI_PROF_START/END宏采集性能数据测试不同核数和数据量下的MTE传输带宽帮助用户评估MTE数据传输性能。该脚本测试结果仅做参考性能以实际场景为准测试目的本示例主要用于测试以下MTE数据传输操作的性能单向Put: 仅PE0执行put操作将数据传输到远端PE双向Put: 两个PE同时执行put操作互相传输数据单向Get: 仅PE0执行get操作从远端PE读取数据双向Get: 两个PE同时执行get操作互相读取数据通过测试结果用户可以了解MTE接口在不同场景下的性能表现。功能特性支持的测试类型put: 单向put操作仅环境变量SHMEM_CYCLE_PROF_PE指定的PE执行数据搬运未指定时默认PE0bi_put: 双向put操作两个PE都执行数据搬运get: 单向get操作仅环境变量SHMEM_CYCLE_PROF_PE指定的PE执行数据搬运未指定时默认PE0bi_get: 双向get操作两个PE都执行数据搬运all: 运行所有测试类型支持的数据类型浮点型:float有符号整型:int8,int16,int32,int64无符号整型:uint8,uint16,uint32,uint64字符型:charall: 测试所有数据类型其他特性✅ 可配置核数范围默认32核✅ 可配置数据量范围支持2的幂次方✅ 可设置循环次数以获得稳定性能数据✅ 使用SHMEMI_PROF采集各核性能数据✅ 生成CSV格式性能报告✅ 支持批量测试all选项编译说明在shmem根目录下编译示例source /usr/local/Ascend/ascend-toolkit/set_env.sh bash scripts/build.sh -examples使用方法基本用法# 进入示例目录 cd examples/mte_perftest/shmem_perftest/ # 运行测试脚本 ./run.sh [选项]命令行参数参数缩写描述默认值--test-type type-t type测试类型 (put/bi_put/get/bi_get/all)put--datatype type-d type数据类型 (float/int8/int16/int32/int64/uint8/uint16/uint32/uint64/char/all)float--block-size size-b size设置单个核数32--block-range min max-设置核数范围32-32--exponent exponent-e exponent设置数据量的幂数 (2^exponent)---exponent-range min max-设置数据量的幂数范围3-17--loop-count count-设置循环次数1000-pes size-设置PE数量暂不支持修改2-ipport ip:port-设置通信地址tcp://127.0.0.1:8764-gnpus num-设置NPU数量暂不支持修改2-fnpu id-设置首个NPU ID控制起始NPU0-fpe id-设置首个PE ID暂不支持修改0使用示例1. 测试单个操作类型和数据类型# 测试单向PUT操作float类型32核数据量从2^8到2^20字节 ./run.sh -t put -d float --block-size 32 --exponent-range 8 20 --loop-count 1000 # 测试双向GET操作int32类型 ./run.sh -t bi_get -d int32 --block-size 32 --exponent-range 8 20 --loop-count 10002. 测试所有操作类型指定数据类型# 测试所有操作类型put/bi_put/get/bi_get使用float数据类型 ./run.sh -t all -d float --block-size 32 --exponent-range 8 20 --loop-count 10003. 测试所有数据类型指定操作类型# 测试PUT操作使用所有数据类型 ./run.sh -t put -d all --block-size 32 --exponent-range 8 20 --loop-count 10004. 测试所有操作类型和数据类型# 测试所有操作类型和所有数据类型 ./run.sh -t all -d all --block-size 32 --exponent-range 8 20 --loop-count 10005. 使用默认参数运行# 使用默认参数运行put测试 ./run.sh # 运行所有测试类型 ./run.sh -t all6. 图形化数据# 使用perf_data_process.py -d 传入csv数据存储路径图形化结果将存储在csv存储路径下picture文件夹下。 python ../utils/perf_data_process.py -d output输出说明CSV文件格式测试运行后会在当前目录下生成output文件夹其中包含测试结果的CSV文件文件名格式为{test_type}_{data_type}_{prof_pe}.csv例如put_float_0.csv- 单向PUT操作float类型bi_get_int32_0.csv- 双向GET操作int32类型CSV文件内容CSV文件包含以下字段字段描述DataSize/B数据大小字节Npus使用的NPU数量Blocks核数Bandwidth/GBps带宽大小GB/sCoreMaxTime/us最大核时间微秒SingleCoreTime/us单核时间微秒每个核一列性能采集说明本示例使用SHMEMI_PROF_START/END宏进行性能数据采集采集PE: 通过环境变量SHMEM_CYCLE_PROF_PE指定默认为0最大记录核数:ACLSHMEM_CYCLE_PROF_MAX_BLOCK32核最大记录帧数:ACLSHMEM_CYCLE_PROF_FRAME_CNT32帧只有环境变量指定的PE会输出CSV文件其他PE的数据不会被采集。注意事项环境配置: 运行前请确保已正确设置Ascend环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh数据量计算: 测试数据量的计算方式为2^exponent字节参数范围:核数范围超过ACLSHMEM_CYCLE_PROF_MAX_BLOCK32核不做记录帧数不能超过ACLSHMEM_CYCLE_PROF_FRAME_CNT32帧内存要求: 大数据量测试需要足够的设备内存性能稳定性: 建议使用较大的循环次数如1000次以获得稳定的性能数据单向/双向区别:单向操作put/get只有SHMEM_CYCLE_PROF_PE指定的PE执行搬运双向操作bi_put/bi_get两个PE都执行搬运常见问题内存分配失败错误: aclrtMalloc failed解决方案减小数据量范围或核数确保设备有足够内存CSV文件无数据解决方案检查SHMEM_CYCLE_PROF_PE环境变量是否正确设置确保指定的PE有执行测试frame_id超过最大值警告: frame_id 超过最大值 32, 停止测试解决方案减小测试范围确保测试帧数不超过32。测试帧数计算公式测试帧数 (max_block_size - min_block_size 1) × (max_exponent - min_exponent 1)例如--block-range 16 32 --exponent-range 10 20的测试帧数为(32 - 16 1) × (20 - 10 1) 17 × 11 187 32超出限制【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考