ascendc_perftest【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem示例概述ascendc_perftest是一个用于测试AscendC::DataCopy性能并可与shmem的put/get接口进行比较的参数化测试示例支持多种测试类型、多种数据类型和灵活的参数配置。该示例可以测试不同核数和数据量下的性能表现帮助用户评估和比较两种数据传输方式的性能差异为性能优化提供参考。该脚本测试结果仅做参考性能以实际场景为准测试目的本示例主要用于比较以下两种数据传输方式的性能AscendC::DataCopy基于Ascend C的数据传输接口shmem的put/get接口共享内存的数据传输接口通过对比测试结果用户可以了解在不同场景下哪种数据传输方式具有更好的性能表现。功能特性支持的测试类型put: 测试跨设备PUT操作的性能从本地设备内存传输到远端设备内存get: 测试跨设备GET操作的性能从远端设备内存传输到本地设备内存ub2gm_local: 测试本地设备UB到GM的数据传输性能ub2gm_remote: 测试远端设备UB到GM的数据传输性能gm2ub_local: 测试本地设备GM到UB的数据传输性能gm2ub_remote: 测试远端设备GM到UB的数据传输性能all: 运行所有测试类型支持的数据类型浮点型:float有符号整型:int8,int16,int32,int64无符号整型:uint8,uint16,uint32,uint64字符型:charall: 测试所有数据类型其他特性✅ 可配置核数范围默认32核✅ 可配置数据量范围支持2的幂次方✅ 可指定设备ID进行跨设备测试✅ 可设置循环次数以获得稳定性能数据✅ 自动数据正确性验证✅ 生成CSV格式性能报告✅ 支持批量测试all选项编译说明在shmem根目录下编译示例# 方法1使用build.sh脚本编译所有示例 bash scripts/build.sh -examples # 方法2手动编译 mkdir -p build cd build cmake -DUSE_EXAMPLESON .. source /usr/local/Ascend/ascend-toolkit/set_env.sh make -j使用方法基本用法# 进入示例目录 cd examples//mte_perftest/ascendc_perftest # 运行测试脚本 source /usr/local/Ascend/ascend-toolkit/set_env.sh ./run.sh [选项]命令行参数参数缩写描述默认值--test-type type-t type测试类型 (put/get/ub2gm_local/ub2gm_remote/gm2ub_local/gm2ub_remote/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-20--device1 id-设置设备1 ID1--device2 id-设置设备2 ID2--loop-count count-设置循环次数1000--ub-size size-设置UB size(KB), 默认1616使用示例1. 测试单个操作类型和数据类型# 测试PUT操作float类型32核数据量从2^8到2^20字节100次循环 ./run.sh -t put -d float --block-size 32 --exponent-range 8 20 --device1 1 --device2 2 --loop-count 1000 # 测试GET操作int32类型 ./run.sh -t get -d int32 --block-size 32 --exponent-range 8 20 --device1 1 --device2 2 --loop-count 10002. 测试所有操作类型指定数据类型# 测试所有操作类型PUT/GET/UB2GM/GM2UB使用float数据类型 ./run.sh -t all -d float --block-size 32 --exponent-range 8 20 --device1 1 --device2 2 --loop-count 10003. 测试所有数据类型指定操作类型# 测试PUT操作使用所有数据类型 ./run.sh -t put -d all --block-size 32 --exponent-range 8 20 --device1 1 --device2 2 --loop-count 10004. 测试所有操作类型和数据类型# 测试所有操作类型和所有数据类型 ./run.sh -t all -d all --block-size 32 --exponent-range 8 20 --device1 1 --device2 2 --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文件文件名格式为{rank}_{test_type}_{data_type}.csv例如0_put_float.csv- PUT操作float类型0_get_int32.csv- GET操作int32类型0_ub2gm_local_float.csv- 本地UB到GM操作float类型0_gm2ub_remote_int32.csv- 远端GM到UB操作int32类型CSV文件内容CSV文件包含以下字段字段描述DataSize/B数据大小字节Npus使用的NPU数量Blocks核数UBsize/KBUB大小KBBandwidth/GB/s带宽大小GB/sCoreMaxTime/us最大核时间微秒SingleCoreTime/us单核时间微秒数据验证测试过程中仅PUT/GET会自动进行数据正确性验证PUT操作: 验证源数据是否完整传输到目标地址GET操作: 验证从远端读取的数据是否正确验证成功时会显示[Verification] SUCCESS: All cores first values transferred correctly!注意事项环境配置: 运行前请确保已正确设置Ascend环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh设备配置: 确保指定的设备IDdevice1和device2可用且支持Peer Access数据量计算: 测试数据量的计算方式为2^exponent字节参数范围: 核数范围不能大于设备最大值内存要求: 大数据量测试需要足够的设备内存数据类型支持: 某些数据类型如uint64、char可能在特定场景下存在限制性能稳定性: 建议使用较大的循环次数如1000次以获得稳定的性能数据性能分析建议对比不同测试类型put/get/ub2gm_local/ub2gm_remote/gm2ub_local/gm2ub_remote的性能差异对比不同数据类型的性能表现根据实际硬件配置调整核数参数观察性能变化针对不同的数据量范围分析性能瓶颈结合测试结果选择最适合实际应用场景的数据传输方式和数据类型对比本地操作_local和远端操作_remote的性能差异故障排查常见问题设备不可用错误错误: 设备ID无效解决方案使用npu-smi info检查可用设备确保device1和device2参数正确内存分配失败错误: aclrtMalloc failed解决方案减小数据量范围或核数确保设备有足够内存Peer Access失败错误: aclrtDeviceEnablePeerAccess failed解决方案确保两个设备之间支持Peer Access数据验证失败[Verification] FAILED: Data mismatch解决方案检查设备状态可能需要重置设备或重新运行测试【免费下载链接】shmemCANN SHMEM 是面向昇腾平台的多机多卡内存通信库基于OpenSHMEM 标准协议实现跨设备的高效内存访问与数据同步。项目地址: https://gitcode.com/cann/shmem创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考