已合并
同步 CheckerL2 最新代码到 hccl_vm #4390
git_qk创建于 8月4日
同步 CheckerL2 最新代码到 hccl_vm #4390
已合并
共 37 个文件变更+615-406
| @@ -91,6 +91,7 @@ include(cmake/third_party/nlohmann_json.cmake) | |||
| 91 | include(cmake/third_party/cli11.cmake) | 91 | include(cmake/third_party/cli11.cmake) |
| 92 | include(cmake/third_party/spdlog.cmake) | 92 | include(cmake/third_party/spdlog.cmake) |
| 93 | include(cmake/third_party/sqlite3.cmake) | 93 | include(cmake/third_party/sqlite3.cmake) |
| 94 | +include(cmake/third_party/cann_cmake.cmake) | ||
| 94 | 95 | ||
| 95 | include_directories( | 96 | include_directories( |
| 96 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json | 97 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json |
| @@ -39,7 +39,7 @@ hccl_test是昇腾官方提供的HCCL性能测试工具,详见[HCCL性能测 | |||
| 39 | 39 | ||
| 40 | ### 3.1 一键安装 | 40 | ### 3.1 一键安装 |
| 41 | 41 | ||
| 42 | -一行完成依赖安装、源码拉取、CANN 检测与编译(默认 `campus-2026` 配套方案)。工作目录与手动安装保持一致,用 `/home/workspace`(后文示例路径均以此为准): | 42 | +一行完成依赖安装、源码拉取、CANN 检测与编译(默认 `main` 配套方案)。工作目录与手动安装保持一致,用 `/home/workspace`(后文示例路径均以此为准): |
| 43 | 43 | ||
| 44 | ```bash | 44 | ```bash |
| 45 | # 创建并进入工作目录(脚本默认装到当前目录) | 45 | # 创建并进入工作目录(脚本默认装到当前目录) |
| @@ -56,7 +56,7 @@ curl -fsSL https://raw.gitcode.com/cann/hcomm/raw/competition%2Fcampus-2026/test | |||
| 56 | **hccl_test**:默认一并编译 OpenMPI 与 hccl_test 性能测试工具,`--skip-hccl-test` 可关闭。 | 56 | **hccl_test**:默认一并编译 OpenMPI 与 hccl_test 性能测试工具,`--skip-hccl-test` 可关闭。 |
| 57 | 57 | ||
| 58 | **常用参数**: | 58 | **常用参数**: |
| 59 | -- `--profile <名>`:配套方案(默认 `campus-2026`,`--list-profiles` 列全部) | 59 | +- `--profile <名>`:配套方案(默认 `main`,`--list-profiles` 列全部) |
| 60 | - `--workspace <路径>`:工作目录,源码/编译/产物所在(默认当前目录) | 60 | - `--workspace <路径>`:工作目录,源码/编译/产物所在(默认当前目录) |
| 61 | - `--ascend-path <路径>`:指定 CANN 目录,有则复用、无则装到此处 | 61 | - `--ascend-path <路径>`:指定 CANN 目录,有则复用、无则装到此处 |
| 62 | - `--reinstall-cann`:重新下载覆盖现有 CANN(版本不匹配时用;默认保留) | 62 | - `--reinstall-cann`:重新下载覆盖现有 CANN(版本不匹配时用;默认保留) |
| @@ -89,6 +89,9 @@ source /home/workspace/Ascend/cann/set_env.sh | |||
| 89 | export HCCL_CODE_HOME=/home/workspace/hccl | 89 | export HCCL_CODE_HOME=/home/workspace/hccl |
| 90 | export HCOMM_CODE_HOME=/home/workspace/hcomm | 90 | export HCOMM_CODE_HOME=/home/workspace/hcomm |
| 91 | bash ./build.sh --full | 91 | bash ./build.sh --full |
| 92 | + | ||
| 93 | +# 5.从CANN安装目录拷贝解压aicpu_hcxx.tar.gz | ||
| 94 | +bash build_pkg.sh | ||
| 92 | ``` | 95 | ``` |
| 93 | 96 | ||
| 94 | ### 3.3 使用示例 | 97 | ### 3.3 使用示例 |
| @@ -142,16 +145,7 @@ cd /home/workspace/hcomm/test/hccl_vm/hccl_vm_install/bin | |||
| 142 | 145 | ||
| 143 | AICPU展开模式需要将算法展开步骤放到设备侧执行,因此hccl-vm工具需要将HCCL的设备侧的符号编译并模拟执行。由于设备侧符号是ARM架构的,因此在X86环境上编译时需要借助交叉编译器,运行时需要借助QEMU实现AICPU模式的模拟运行。 | 146 | AICPU展开模式需要将算法展开步骤放到设备侧执行,因此hccl-vm工具需要将HCCL的设备侧的符号编译并模拟执行。由于设备侧符号是ARM架构的,因此在X86环境上编译时需要借助交叉编译器,运行时需要借助QEMU实现AICPU模式的模拟运行。 |
| 144 | 147 | ||
| 145 | -设备侧符号使用hccl和hcomm的源码编译,为了保证Host与Device通信协议正确,需要同时编译Host侧的安装包并进行替换安装。 | 148 | +1. 环境变量配置。 |
| 146 | - | ||
| 147 | -1. HCCL设备侧符号编译、安装、拷贝等(若已用 [3.1 一键安装](#31-一键安装),此步已自动完成,可跳过)。 | ||
| 148 | - | ||
| 149 | -```bash | ||
| 150 | -cd /home/workspace/hcomm/test/hccl_vm/ | ||
| 151 | -bash ./build_pkg.sh | ||
| 152 | -``` | ||
| 153 | - | ||
| 154 | -2. 环境变量配置。 | ||
| 155 | 149 | ||
| 156 | ```bash | 150 | ```bash |
| 157 | # 进入工具安装目录 | 151 | # 进入工具安装目录 |
| @@ -162,7 +156,7 @@ export RANK_TABLE_FILE=$(pwd)/data/ranktable.json | |||
| 162 | export HCCL_OP_EXPANSION_MODE="AI_CPU" | 156 | export HCCL_OP_EXPANSION_MODE="AI_CPU" |
| 163 | ``` | 157 | ``` |
| 164 | 158 | ||
| 165 | -3. 执行 | 159 | +2. 执行 |
| 166 | 160 | ||
| 167 | ```bash | 161 | ```bash |
| 168 | # 需要进入到新的bin文件目录下执行hccl-vm | 162 | # 需要进入到新的bin文件目录下执行hccl-vm |
| @@ -185,7 +179,7 @@ cd /home/workspace/hcomm/test/hccl_vm/hccl_vm_install/bin | |||
| 185 | (hvm)$> exit | 179 | (hvm)$> exit |
| 186 | ``` | 180 | ``` |
| 187 | 181 | ||
| 188 | -4. 验证hccl_test用例运行结果 [Runner结果查看](#491-runner插件结果) [Checker结果查看](#492-checker插件结果) | 182 | +3. 验证hccl_test用例运行结果 [Runner结果查看](#491-runner插件结果) [Checker结果查看](#492-checker插件结果) |
| 189 | 183 | ||
| 190 | #### 3.3.4 AIV模式 | 184 | #### 3.3.4 AIV模式 |
| 191 | 185 | ||
| @@ -242,9 +236,10 @@ export HCCL_CODE_HOME=/home/workspace/hccl | |||
| 242 | export HCOMM_CODE_HOME=/home/workspace/hcomm | 236 | export HCOMM_CODE_HOME=/home/workspace/hcomm |
| 243 | ``` | 237 | ``` |
| 244 | 238 | ||
| 245 | -1. 若您修改了CANN hccl仓代码,请执行bash build_pkg.sh --install hccl。 | 239 | +1. 若您更新/修改了CANN hccl仓代码,请执行`bash build_pkg.sh --install hccl`。 |
| 246 | -2. 若您修改了CANN hcomm仓代码,请执行bash build_pkg.sh --install hcomm。 | 240 | +2. 若您更新/修改了CANN hcomm仓代码,请执行`bash build_pkg.sh --install hcomm`。 |
| 247 | -3. 参考[使用示例](#33-使用示例)步骤,重新运行用例。 | 241 | +3. 若您同时更新/修改了CANN hccl、hcomm仓代码,请执行`bash build_pkg.sh --full`。 |
| 242 | +4. 参考[使用示例](#33-使用示例)步骤,重新运行用例。 | ||
| 248 | 243 | ||
| 249 | --- | 244 | --- |
| 250 | 245 | ||
| @@ -803,6 +798,7 @@ data_size(Bytes): | aveg_time(us): | alg_bandwidth(GB/s): | check_result: | |||
| 803 | | yaml-cpp | 0.8.0 | [yaml-cpp-0.8.0.tar.gz](https://raw.gitcode.com/src-openeuler/yaml-cpp/blobs/d1ead4fff417073b9cdbf98b8b55eb0efc00b0ba/yaml-cpp-0.8.0.tar.gz) | | 798 | | yaml-cpp | 0.8.0 | [yaml-cpp-0.8.0.tar.gz](https://raw.gitcode.com/src-openeuler/yaml-cpp/blobs/d1ead4fff417073b9cdbf98b8b55eb0efc00b0ba/yaml-cpp-0.8.0.tar.gz) | |
| 804 | | sqlite | 3.51.0 | [sqlite-amalgamation-3510300.zip](https://www.sqlite.org/2026/sqlite-amalgamation-3510300.zip) | | 799 | | sqlite | 3.51.0 | [sqlite-amalgamation-3510300.zip](https://www.sqlite.org/2026/sqlite-amalgamation-3510300.zip) | |
| 805 | | googletest | 1.14.0 | [googletest-1.14.0.tar.gz](https://gitcode.com/cann-src-third-party/googletest/releases/download/v1.14.0/googletest-1.14.0.tar.gz) | | 800 | | googletest | 1.14.0 | [googletest-1.14.0.tar.gz](https://gitcode.com/cann-src-third-party/googletest/releases/download/v1.14.0/googletest-1.14.0.tar.gz) | |
| 801 | +| cann-cmake | master-044 | [cmake-master-044.tar.gz](https://raw.gitcode.com/cann/cmake/archive/refs/heads/master-044.tar.gz) | | ||
| 806 | 802 | ||
| 807 | ### 术语表 | 803 | ### 术语表 |
| 808 | 804 | ||
| @@ -9,19 +9,112 @@ | |||
| 9 | 9 | ||
| 10 | set -e | 10 | set -e |
| 11 | 11 | ||
| 12 | +# 脚本所在目录的绝对路径(在任何 cd 之前计算,保证后续函数能找到 asset 目录下的工具脚本) | ||
| 13 | +readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" | ||
| 14 | + | ||
| 15 | +# ========================================== | ||
| 16 | +# 辅助函数: 原地解密并解压 AICPU 算子包 | ||
| 17 | +# ========================================== | ||
| 18 | +# 从 ascen_package_load.ini 解析指定包的 package_path | ||
| 19 | +function parse_ini_package_path() { | ||
| 20 | + # $1 = ini 路径 | ||
| 21 | + # $2 = 要查询的包名(如 aicpu_hccl.tar.gz) | ||
| 22 | + local INI="$1" | ||
| 23 | + local NAME="$2" | ||
| 24 | + awk -v name="$NAME" ' | ||
| 25 | + BEGIN { cur_name=""; cur_path="" } | ||
| 26 | + /^name:/ { cur_name=substr($0, 6); cur_path="" } | ||
| 27 | + /^package_path:/{ cur_path=substr($0, 14) } | ||
| 28 | + cur_name == name && cur_path != "" { print cur_path; exit } | ||
| 29 | + ' "$INI" | ||
| 30 | +} | ||
| 31 | + | ||
| 32 | +# 对指定 tar.gz 包调用 ci_img_headler.py 解密(有头剥头、无头直接拷出), | ||
| 33 | +# 然后解压到指定目标目录(--strip-components=1 去掉 aicpu_kernels_device/ 前缀) | ||
| 34 | +function decrypt_and_extract() { | ||
| 35 | + # $1 = 源 tar.gz 路径(可能带头也可能裸) | ||
| 36 | + # $2 = 解压目标目录(工具目录) | ||
| 37 | + local SRC="$1" | ||
| 38 | + local DEST_DIR="$2" | ||
| 39 | + if [ ! -f "$SRC" ]; then | ||
| 40 | + echo "错误: 找不到源文件 $SRC" | ||
| 41 | + return 1 | ||
| 42 | + fi | ||
| 43 | + | ||
| 44 | + local HEADLER="$SCRIPT_DIR/third_party/cann-cmake/scripts/signtool/image_extract/ci_img_headler.py" | ||
| 45 | + if [ ! -f "$HEADLER" ]; then | ||
| 46 | + echo "错误: 找不到 $HEADLER,请先执行 bash build.sh --full 构建以拉取 cann-cmake 第三方依赖" | ||
| 47 | + return 1 | ||
| 48 | + fi | ||
| 49 | + | ||
| 50 | + # 创建解密临时文件(在 /tmp 下,避免对只读 CANN 目录的写需求) | ||
| 51 | + local RAW_TMP | ||
| 52 | + RAW_TMP="$(mktemp /tmp/.aich_raw.XXXXXX)" || true | ||
| 53 | + if [ -z "$RAW_TMP" ] || [ ! -f "$RAW_TMP" ]; then | ||
| 54 | + echo "错误: mktemp 创建临时文件失败" | ||
| 55 | + return 1 | ||
| 56 | + fi | ||
| 57 | + | ||
| 58 | + echo "解密 $(basename "$SRC") -> $(basename "$RAW_TMP")" | ||
| 59 | + python3 "$HEADLER" -img "$SRC" -raw "$RAW_TMP" --rcvr | ||
| 60 | + | ||
| 61 | + # 创建目标目录 | ||
| 62 | + if ! mkdir -p "$DEST_DIR"; then | ||
| 63 | + rm -f "$RAW_TMP" | ||
| 64 | + echo "错误: 创建目标目录 $DEST_DIR 失败" | ||
| 65 | + return 1 | ||
| 66 | + fi | ||
| 67 | + | ||
| 68 | + echo "解压 $(basename "$RAW_TMP") 到 $DEST_DIR (--strip-components=1)" | ||
| 69 | + if ! tar -zxf "$RAW_TMP" -C "$DEST_DIR" --strip-components=1; then | ||
| 70 | + rm -f "$RAW_TMP" | ||
| 71 | + echo "错误: 解压到 $DEST_DIR 失败" | ||
| 72 | + return 1 | ||
| 73 | + fi | ||
| 74 | + | ||
| 75 | + rm -f "$RAW_TMP" | ||
| 76 | + return 0 | ||
| 77 | +} | ||
| 78 | + | ||
| 79 | +# 部署单个 aicpu 算子包:从 CANN 安装目录读取 tarball,解密解压到指定目录 | ||
| 80 | +function deploy_aicpu_kernel_pkg() { | ||
| 81 | + local PKG_NAME="$1" | ||
| 82 | + local ASCEND_INSTALL_PATH="$2" | ||
| 83 | + local INI_PATH="$3" | ||
| 84 | + local DEST_DIR="$4" | ||
| 85 | + local SUB_PATH | ||
| 86 | + SUB_PATH=$(parse_ini_package_path "$INI_PATH" "$PKG_NAME") | ||
| 87 | + if [ -z "$SUB_PATH" ]; then | ||
| 88 | + echo "错误: $INI_PATH 中找不到 $PKG_NAME 的 package_path" | ||
| 89 | + return 1 | ||
| 90 | + fi | ||
| 91 | + local SRC="$ASCEND_INSTALL_PATH/$SUB_PATH/$PKG_NAME" | ||
| 92 | + decrypt_and_extract "$SRC" "$DEST_DIR" | ||
| 93 | +} | ||
| 94 | + | ||
| 12 | function usage() { | 95 | function usage() { |
| 13 | echo "Usage:" | 96 | echo "Usage:" |
| 14 | echo " sh build_pkg.sh [-h | --help]" | 97 | echo " sh build_pkg.sh [-h | --help]" |
| 15 | echo " [--install <hccl|hcomm>]" | 98 | echo " [--install <hccl|hcomm>]" |
| 99 | + echo " [--full]" | ||
| 16 | echo " [--tool_path <PATH>]" | 100 | echo " [--tool_path <PATH>]" |
| 17 | echo "" | 101 | echo "" |
| 18 | echo "Options:" | 102 | echo "Options:" |
| 19 | echo " -h, --help Print usage" | 103 | echo " -h, --help Print usage" |
| 20 | echo " --install <hccl|hcomm>" | 104 | echo " --install <hccl|hcomm>" |
| 21 | - echo " Specify which component to build/install, default: both" | 105 | + echo " Build/install the specified component, then decrypt+extract" |
| 106 | + echo " its aicpu kernel tarball to \$HCCL_VM_PATH/hccl_vm_install/lib/aarch64/" | ||
| 107 | + echo " --full Build/install both hccl and hcomm, then decrypt+extract both" | ||
| 108 | + echo " aicpu kernel tarballs to \$HCCL_VM_PATH/hccl_vm_install/lib/aarch64/" | ||
| 109 | + echo " (equivalent to \"--install hccl\" followed by \"--install hcomm\")" | ||
| 22 | echo " --tool_path <PATH>" | 110 | echo " --tool_path <PATH>" |
| 23 | echo " Set HCCL_VM_PATH, default: current directory" | 111 | echo " Set HCCL_VM_PATH, default: current directory" |
| 24 | echo "" | 112 | echo "" |
| 113 | + echo "Default (no option): only decrypt+extract aicpu_hccl.tar.gz and aicpu_hcomm.tar.gz" | ||
| 114 | + echo " (from CANN install root, per ascend_package_load.ini)" | ||
| 115 | + echo " to \$HCCL_VM_PATH/hccl_vm_install/lib/aarch64/." | ||
| 116 | + echo " No build/install is performed." | ||
| 117 | + echo "" | ||
| 25 | } | 118 | } |
| 26 | 119 | ||
| 27 | # ========================================== | 120 | # ========================================== |
| @@ -29,8 +122,10 @@ function usage() { | |||
| 29 | # ========================================== | 122 | # ========================================== |
| 30 | 123 | ||
| 31 | # 1.默认值 | 124 | # 1.默认值 |
| 32 | -BUILD_HCCL=true | 125 | +# MODE 四态:deploy_only / install_hccl / install_hcomm / full |
| 33 | -BUILD_HCOMM=true | 126 | +MODE=deploy_only |
| 127 | +BUILD_HCCL=false | ||
| 128 | +BUILD_HCOMM=false | ||
| 34 | TOOL_PATH="" | 129 | TOOL_PATH="" |
| 35 | 130 | ||
| 36 | # 2.解析命令行参数 | 131 | # 2.解析命令行参数 |
| @@ -42,9 +137,11 @@ while [[ $# -gt 0 ]]; do | |||
| 42 | ;; | 137 | ;; |
| 43 | --install) | 138 | --install) |
| 44 | if [ "$2" == "hccl" ]; then | 139 | if [ "$2" == "hccl" ]; then |
| 140 | + MODE=install_hccl | ||
| 45 | BUILD_HCCL=true | 141 | BUILD_HCCL=true |
| 46 | BUILD_HCOMM=false | 142 | BUILD_HCOMM=false |
| 47 | elif [ "$2" == "hcomm" ]; then | 143 | elif [ "$2" == "hcomm" ]; then |
| 144 | + MODE=install_hcomm | ||
| 48 | BUILD_HCCL=false | 145 | BUILD_HCCL=false |
| 49 | BUILD_HCOMM=true | 146 | BUILD_HCOMM=true |
| 50 | else | 147 | else |
| @@ -53,6 +150,12 @@ while [[ $# -gt 0 ]]; do | |||
| 53 | fi | 150 | fi |
| 54 | shift 2 | 151 | shift 2 |
| 55 | ;; | 152 | ;; |
| 153 | + --full) | ||
| 154 | + MODE=full | ||
| 155 | + BUILD_HCCL=true | ||
| 156 | + BUILD_HCOMM=true | ||
| 157 | + shift | ||
| 158 | + ;; | ||
| 56 | --tool_path) | 159 | --tool_path) |
| 57 | if [ -n "$2" ]; then | 160 | if [ -n "$2" ]; then |
| 58 | TOOL_PATH="$2" | 161 | TOOL_PATH="$2" |
| @@ -87,19 +190,19 @@ if [ -z "$ASCEND_HOME_PATH" ]; then | |||
| 87 | exit 1 | 190 | exit 1 |
| 88 | fi | 191 | fi |
| 89 | 192 | ||
| 90 | -# 5.校验并获取 hccl 代码目录 | 193 | +# 4.校验并获取 hccl 代码目录 |
| 91 | if [ "$BUILD_HCCL" = true ] && [ -z "$HCCL_CODE_HOME" ]; then | 194 | if [ "$BUILD_HCCL" = true ] && [ -z "$HCCL_CODE_HOME" ]; then |
| 92 | echo "错误: 环境变量 HCCL_CODE_HOME 未设置" | 195 | echo "错误: 环境变量 HCCL_CODE_HOME 未设置" |
| 93 | exit 1 | 196 | exit 1 |
| 94 | fi | 197 | fi |
| 95 | 198 | ||
| 96 | -# 6.校验并获取 hcomm 代码目录 | 199 | +# 5.校验并获取 hcomm 代码目录 |
| 97 | if [ "$BUILD_HCOMM" = true ] && [ -z "$HCOMM_CODE_HOME" ]; then | 200 | if [ "$BUILD_HCOMM" = true ] && [ -z "$HCOMM_CODE_HOME" ]; then |
| 98 | echo "错误: 环境变量 HCOMM_CODE_HOME 未设置" | 201 | echo "错误: 环境变量 HCOMM_CODE_HOME 未设置" |
| 99 | exit 1 | 202 | exit 1 |
| 100 | fi | 203 | fi |
| 101 | 204 | ||
| 102 | -# 5.获得CANN安装目录: ASCEND_INSTALL_PATH | 205 | +# 6.获得CANN安装目录: ASCEND_INSTALL_PATH |
| 103 | ASCEND_INSTALL_PATH=$(dirname "$ASCEND_HOME_PATH") | 206 | ASCEND_INSTALL_PATH=$(dirname "$ASCEND_HOME_PATH") |
| 104 | 207 | ||
| 105 | MACHINE_ARCH=$(uname -m) | 208 | MACHINE_ARCH=$(uname -m) |
| @@ -123,6 +226,7 @@ if [ "$BUILD_HCOMM" = true ]; then | |||
| 123 | echo "HCOMM_CODE_HOME: $HCOMM_CODE_HOME" | 226 | echo "HCOMM_CODE_HOME: $HCOMM_CODE_HOME" |
| 124 | fi | 227 | fi |
| 125 | echo "构建配置:" | 228 | echo "构建配置:" |
| 229 | +echo " - MODE: $MODE" | ||
| 126 | echo " - HCCL: $BUILD_HCCL" | 230 | echo " - HCCL: $BUILD_HCCL" |
| 127 | echo " - HCOMM: $BUILD_HCOMM" | 231 | echo " - HCOMM: $BUILD_HCOMM" |
| 128 | echo "--------------------------" | 232 | echo "--------------------------" |
| @@ -190,44 +294,35 @@ else | |||
| 190 | fi | 294 | fi |
| 191 | 295 | ||
| 192 | # ========================================== | 296 | # ========================================== |
| 193 | -# 第四步:拷贝并解压 aicpu 相关的 tar.gz 包 | 297 | +# 第四步:从 CANN 安装目录解签名并解压 aicpu 包 |
| 194 | # ========================================== | 298 | # ========================================== |
| 195 | echo "正在处理 aicpu 相关的构建产物..." | 299 | echo "正在处理 aicpu 相关的构建产物..." |
| 196 | 300 | ||
| 197 | -# 1. 定义源文件路径和目标文件夹路径 | 301 | +INI_PATH="$ASCEND_HOME_PATH/conf/ascend_package_load.ini" |
| 198 | -HCCL_AICPU_TAR=$(find "$HCCL_CODE_HOME" -name "aicpu_hccl.tar.gz" -type f | head -n 1) | 302 | +if [ ! -f "$INI_PATH" ]; then |
| 199 | -HCOMM_AICPU_TAR=$(find "$HCOMM_CODE_HOME" -name "aicpu_hcomm.tar.gz" -type f | head -n 1) | 303 | + echo "错误: 找不到 $INI_PATH" |
| 200 | -TARGET_DIR="$HCCL_VM_PATH/hccl_vm_install/lib/aarch64" | 304 | + exit 1 |
| 305 | +fi | ||
| 201 | 306 | ||
| 202 | -# 2.确保目标目录存在 | 307 | +# AICPU 算子解压目标目录 |
| 203 | -mkdir -p "$TARGET_DIR" | 308 | +AICPU_DEPLOY_DIR="$HCCL_VM_PATH/hccl_vm_install/lib/aarch64" |
| 204 | 309 | ||
| 205 | -# 3.拷贝并立即解压 - aicpu_hccl.tar.gz | 310 | +# 默认模式和 install 模式都要从 CANN 根解压,解压到工具目录 |
| 206 | -if [ "$BUILD_HCCL" = true ]; then | 311 | +if [ "$BUILD_HCCL" = true ] || [ "$MODE" = "deploy_only" ]; then |
| 207 | - if [ -f "$HCCL_AICPU_TAR" ]; then | 312 | + echo "部署 aicpu_hccl.tar.gz -> $AICPU_DEPLOY_DIR" |
| 208 | - echo "正在解压 aicpu_hccl.tar.gz..." | 313 | + deploy_aicpu_kernel_pkg "aicpu_hccl.tar.gz" "$ASCEND_HOME_PATH" "$INI_PATH" "$AICPU_DEPLOY_DIR" |
| 209 | - tar -zxvf "$HCCL_AICPU_TAR" -C "$TARGET_DIR" --strip-components=1 | ||
| 210 | - else | ||
| 211 | - echo "警告: aicpu_hccl.tar.gz 未找到 $HCCL_AICPU_TAR" | ||
| 212 | - exit 1 | ||
| 213 | - fi | ||
| 214 | else | 314 | else |
| 215 | echo "跳过 aicpu_hccl.tar.gz 处理..." | 315 | echo "跳过 aicpu_hccl.tar.gz 处理..." |
| 216 | fi | 316 | fi |
| 217 | 317 | ||
| 218 | -# 4.拷贝并立即解压 - aicpu_hcomm.tar.gz | 318 | +if [ "$BUILD_HCOMM" = true ] || [ "$MODE" = "deploy_only" ]; then |
| 219 | -if [ "$BUILD_HCOMM" = true ]; then | 319 | + echo "部署 aicpu_hcomm.tar.gz -> $AICPU_DEPLOY_DIR" |
| 220 | - if [ -f "$HCOMM_AICPU_TAR" ]; then | 320 | + deploy_aicpu_kernel_pkg "aicpu_hcomm.tar.gz" "$ASCEND_HOME_PATH" "$INI_PATH" "$AICPU_DEPLOY_DIR" |
| 221 | - echo "正在解压 aicpu_hcomm.tar.gz..." | ||
| 222 | - tar -zxvf "$HCOMM_AICPU_TAR" -C "$TARGET_DIR" --strip-components=1 | ||
| 223 | - else | ||
| 224 | - echo "警告: aicpu_hccl.tar.gz 未找到 $HCOMM_AICPU_TAR" | ||
| 225 | - exit 1 | ||
| 226 | - fi | ||
| 227 | else | 321 | else |
| 228 | echo "跳过 aicpu_hcomm.tar.gz 处理..." | 322 | echo "跳过 aicpu_hcomm.tar.gz 处理..." |
| 229 | fi | 323 | fi |
| 230 | 324 | ||
| 231 | -sudo chmod -R 755 "$TARGET_DIR" | 325 | +# 修正目录和文件的权限,确保 .so 有足够权限被 dlopen 加载 |
| 326 | +sudo chmod -R 755 "$AICPU_DEPLOY_DIR" | ||
| 232 | 327 | ||
| 233 | echo "所有任务均已执行完成!" | 328 | echo "所有任务均已执行完成!" |
| @@ -0,0 +1,61 @@ | |||
| 1 | +include_guard(GLOBAL) | ||
| 2 | + | ||
| 3 | +set(CANN_CMAKE_VERSION_TAG "master-044") | ||
| 4 | +set(CANN_CMAKE_URL "https://raw.gitcode.com/cann/cmake/archive/refs/heads/${CANN_CMAKE_VERSION_TAG}.tar.gz") | ||
| 5 | +set(CANN_CMAKE_ARCHIVE_FILE "cmake-${CANN_CMAKE_VERSION_TAG}.tar.gz") | ||
| 6 | +set(CANN_CMAKE_PKG_PATH ${CMAKE_SOURCE_DIR}/third_party/${CANN_CMAKE_ARCHIVE_FILE}) | ||
| 7 | +set(CANN_CMAKE_TARGET_DIR ${CMAKE_SOURCE_DIR}/third_party/cann-cmake) | ||
| 8 | +set(CANN_CMAKE_SCRIPT ${CANN_CMAKE_TARGET_DIR}/scripts/signtool/image_extract/ci_img_headler.py) | ||
| 9 | + | ||
| 10 | +message(STATUS "[ThirdParty] CANN_CMAKE_VERSION_TAG=${CANN_CMAKE_VERSION_TAG}") | ||
| 11 | +message(STATUS "[ThirdParty] CANN_CMAKE_URL=${CANN_CMAKE_URL}") | ||
| 12 | +message(STATUS "[ThirdParty] CANN_CMAKE_TARGET_DIR=${CANN_CMAKE_TARGET_DIR}") | ||
| 13 | + | ||
| 14 | +if(EXISTS "${CANN_CMAKE_SCRIPT}") | ||
| 15 | + message(STATUS "[ThirdParty] cann-cmake already available in ${CANN_CMAKE_TARGET_DIR}") | ||
| 16 | +else() | ||
| 17 | + if(NOT EXISTS "${CANN_CMAKE_PKG_PATH}") | ||
| 18 | + message(STATUS "[ThirdParty] Downloading cann-cmake from ${CANN_CMAKE_URL}") | ||
| 19 | + file(DOWNLOAD | ||
| 20 | + ${CANN_CMAKE_URL} | ||
| 21 | + ${CANN_CMAKE_PKG_PATH} | ||
| 22 | + STATUS _dl_status | ||
| 23 | + TIMEOUT 600 | ||
| 24 | + ) | ||
| 25 | + list(GET _dl_status 0 _dl_code) | ||
| 26 | + if(NOT _dl_code EQUAL 0) | ||
| 27 | + file(REMOVE "${CANN_CMAKE_PKG_PATH}") | ||
| 28 | + message(FATAL_ERROR | ||
| 29 | + "[ThirdParty] Failed to download cann-cmake archive (${_dl_status}).\n" | ||
| 30 | + "URL: ${CANN_CMAKE_URL}\n" | ||
| 31 | + "You can manually download and place at: ${CANN_CMAKE_PKG_PATH}") | ||
| 32 | + endif() | ||
| 33 | + message(STATUS "[ThirdParty] cann-cmake archive saved to ${CANN_CMAKE_PKG_PATH}") | ||
| 34 | + else() | ||
| 35 | + message(STATUS "[ThirdParty] Found local cann-cmake package: ${CANN_CMAKE_PKG_PATH}") | ||
| 36 | + endif() | ||
| 37 | + | ||
| 38 | + set(_cann_cmake_extract_dir "${CMAKE_BINARY_DIR}/_cann_cmake_tmp") | ||
| 39 | + file(MAKE_DIRECTORY ${_cann_cmake_extract_dir}) | ||
| 40 | + file(ARCHIVE_EXTRACT | ||
| 41 | + INPUT ${CANN_CMAKE_PKG_PATH} | ||
| 42 | + DESTINATION ${_cann_cmake_extract_dir} | ||
| 43 | + ) | ||
| 44 | + file(GLOB _cann_cmake_extracted_entries "${_cann_cmake_extract_dir}/*") | ||
| 45 | + list(GET _cann_cmake_extracted_entries 0 _cann_cmake_extracted_dir) | ||
| 46 | + | ||
| 47 | + if(EXISTS "${CANN_CMAKE_TARGET_DIR}") | ||
| 48 | + file(REMOVE_RECURSE ${CANN_CMAKE_TARGET_DIR}) | ||
| 49 | + endif() | ||
| 50 | + file(RENAME ${_cann_cmake_extracted_dir} ${CANN_CMAKE_TARGET_DIR}) | ||
| 51 | + file(REMOVE_RECURSE ${_cann_cmake_extract_dir}) | ||
| 52 | + | ||
| 53 | + if(NOT EXISTS "${CANN_CMAKE_SCRIPT}") | ||
| 54 | + message(FATAL_ERROR | ||
| 55 | + "[ThirdParty] cann-cmake extraction failed. " | ||
| 56 | + "Missing ${CANN_CMAKE_SCRIPT}") | ||
| 57 | + endif() | ||
| 58 | + message(STATUS "[ThirdParty] cann-cmake extracted to ${CANN_CMAKE_TARGET_DIR}") | ||
| 59 | +endif() | ||
| 60 | + | ||
| 61 | +set(CANN_CMAKE_DIR "${CANN_CMAKE_TARGET_DIR}" CACHE PATH "Path to cann-cmake") | ||
| @@ -18,7 +18,6 @@ else() | |||
| 18 | file(DOWNLOAD | 18 | file(DOWNLOAD |
| 19 | ${CLI11_URL} | 19 | ${CLI11_URL} |
| 20 | ${CLI11_PKG_PATH} | 20 | ${CLI11_PKG_PATH} |
| 21 | - TLS_VERIFY OFF | ||
| 22 | STATUS _dl_status | 21 | STATUS _dl_status |
| 23 | TIMEOUT 600 | 22 | TIMEOUT 600 |
| 24 | ) | 23 | ) |
| @@ -51,7 +51,6 @@ if(NOT gtest_FOUND) | |||
| 51 | ExternalProject_Add(third_party_gtest | 51 | ExternalProject_Add(third_party_gtest |
| 52 | URL ${GTEST_PROJECT_URL} | 52 | URL ${GTEST_PROJECT_URL} |
| 53 | URL_HASH SHA256=8ad598c73ad796e0d8280b082cebd82a630d73e73cd3c70057938a6501bba5d7 | 53 | URL_HASH SHA256=8ad598c73ad796e0d8280b082cebd82a630d73e73cd3c70057938a6501bba5d7 |
| 54 | - TLS_VERIFY OFF | ||
| 55 | DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/third_party | 54 | DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/third_party |
| 56 | DOWNLOAD_NO_PROGRESS TRUE | 55 | DOWNLOAD_NO_PROGRESS TRUE |
| 57 | CONFIGURE_COMMAND ${CMAKE_COMMAND} ${GTEST_OPTS} <SOURCE_DIR> | 56 | CONFIGURE_COMMAND ${CMAKE_COMMAND} ${GTEST_OPTS} <SOURCE_DIR> |
| @@ -19,7 +19,6 @@ else() | |||
| 19 | file(DOWNLOAD | 19 | file(DOWNLOAD |
| 20 | ${NLOHMANN_JSON_URL} | 20 | ${NLOHMANN_JSON_URL} |
| 21 | ${NLOHMANN_JSON_PKG_PATH} | 21 | ${NLOHMANN_JSON_PKG_PATH} |
| 22 | - TLS_VERIFY OFF | ||
| 23 | STATUS _dl_status | 22 | STATUS _dl_status |
| 24 | TIMEOUT 600 | 23 | TIMEOUT 600 |
| 25 | ) | 24 | ) |
| @@ -19,7 +19,6 @@ if(NOT EXISTS "${SPDLOG_PKG_PATH}") | |||
| 19 | file(DOWNLOAD | 19 | file(DOWNLOAD |
| 20 | ${SPDLOG_URL} | 20 | ${SPDLOG_URL} |
| 21 | ${SPDLOG_PKG_PATH} | 21 | ${SPDLOG_PKG_PATH} |
| 22 | - TLS_VERIFY OFF | ||
| 23 | STATUS _dl_status | 22 | STATUS _dl_status |
| 24 | TIMEOUT 600 | 23 | TIMEOUT 600 |
| 25 | ) | 24 | ) |
| @@ -10,33 +10,28 @@ message(STATUS "[ThirdParty] SQLITE3_VERSION_NUM=${SQLITE3_VERSION_NUM}") | |||
| 10 | message(STATUS "[ThirdParty] SQLITE3_URL=${SQLITE3_URL}") | 10 | message(STATUS "[ThirdParty] SQLITE3_URL=${SQLITE3_URL}") |
| 11 | message(STATUS "[ThirdParty] SQLITE3_TARGET_DIR=${SQLITE3_TARGET_DIR}") | 11 | message(STATUS "[ThirdParty] SQLITE3_TARGET_DIR=${SQLITE3_TARGET_DIR}") |
| 12 | 12 | ||
| 13 | -# 缓存命中:源码目录已存在 | 13 | +# 缓存命中:源码目录已存在,跳过下载/解压;否则下载并解压 |
| 14 | -if(EXISTS "${SQLITE3_TARGET_DIR}/sqlite3.c" AND EXISTS "${SQLITE3_TARGET_DIR}/sqlite3.h") | 14 | +if(NOT (EXISTS "${SQLITE3_TARGET_DIR}/sqlite3.c" AND EXISTS "${SQLITE3_TARGET_DIR}/sqlite3.h")) |
| 15 | - message(STATUS "[ThirdParty] SQLite3 source already available in ${SQLITE3_TARGET_DIR}") | 15 | + # 获取 zip:优先用本地缓存,否则在线下载 |
| 16 | - return() | 16 | + if(NOT EXISTS "${SQLITE3_PKG_PATH}") |
| 17 | -endif() | 17 | + message(STATUS "[ThirdParty] Downloading SQLite3 from ${SQLITE3_URL}") |
| 18 | - | 18 | + file(DOWNLOAD |
| 19 | -# 获取 zip:优先用本地缓存,否则在线下载 | 19 | + ${SQLITE3_URL} |
| 20 | -if(NOT EXISTS "${SQLITE3_PKG_PATH}") | 20 | + ${SQLITE3_PKG_PATH} |
| 21 | - message(STATUS "[ThirdParty] Downloading SQLite3 from ${SQLITE3_URL}") | 21 | + STATUS _dl_status |
| 22 | - file(DOWNLOAD | 22 | + TIMEOUT 600 |
| 23 | - ${SQLITE3_URL} | 23 | + ) |
| 24 | - ${SQLITE3_PKG_PATH} | 24 | + list(GET _dl_status 0 _dl_code) |
| 25 | - TLS_VERIFY OFF | 25 | + if(NOT _dl_code EQUAL 0) |
| 26 | - STATUS _dl_status | 26 | + message(FATAL_ERROR |
| 27 | - TIMEOUT 600 | 27 | + "[ThirdParty] Failed to download SQLite3 archive (${_dl_status}).\n" |
| 28 | - ) | 28 | + "URL: ${SQLITE3_URL}\n" |
| 29 | - list(GET _dl_status 0 _dl_code) | 29 | + "You can manually download and place the zip at: ${SQLITE3_PKG_PATH}") |
| 30 | - if(NOT _dl_code EQUAL 0) | 30 | + endif() |
| 31 | - message(FATAL_ERROR | 31 | + message(STATUS "[ThirdParty] SQLite3 archive saved to ${SQLITE3_PKG_PATH}") |
| 32 | - "[ThirdParty] Failed to download SQLite3 archive (${_dl_status}).\n" | 32 | + else() |
| 33 | - "URL: ${SQLITE3_URL}\n" | 33 | + message(STATUS "[ThirdParty] Found local SQLite3 package: ${SQLITE3_PKG_PATH}") |
| 34 | - "You can manually download and place the zip at: ${SQLITE3_PKG_PATH}") | ||
| 35 | endif() | 34 | endif() |
| 36 | - message(STATUS "[ThirdParty] SQLite3 archive saved to ${SQLITE3_PKG_PATH}") | ||
| 37 | -else() | ||
| 38 | - message(STATUS "[ThirdParty] Found local SQLite3 package: ${SQLITE3_PKG_PATH}") | ||
| 39 | -endif() | ||
| 40 | 35 | ||
| 41 | # 解压 | 36 | # 解压 |
| 42 | set(_sqlite3_extract_dir "${CMAKE_BINARY_DIR}/_sqlite3_tmp") | 37 | set(_sqlite3_extract_dir "${CMAKE_BINARY_DIR}/_sqlite3_tmp") |
| @@ -62,3 +57,4 @@ if(NOT EXISTS "${SQLITE3_TARGET_DIR}/sqlite3.c" OR NOT EXISTS "${SQLITE3_TARGET_ | |||
| 62 | "Missing sqlite3.c or sqlite3.h in ${SQLITE3_TARGET_DIR}") | 57 | "Missing sqlite3.c or sqlite3.h in ${SQLITE3_TARGET_DIR}") |
| 63 | endif() | 58 | endif() |
| 64 | message(STATUS "[ThirdParty] SQLite3 source extracted to ${SQLITE3_TARGET_DIR}") | 59 | message(STATUS "[ThirdParty] SQLite3 source extracted to ${SQLITE3_TARGET_DIR}") |
| 60 | +endif() | ||
| @@ -53,7 +53,6 @@ if(NOT yaml_cpp_FOUND) | |||
| 53 | include(ExternalProject) | 53 | include(ExternalProject) |
| 54 | ExternalProject_Add(third_party_yaml_cpp | 54 | ExternalProject_Add(third_party_yaml_cpp |
| 55 | URL ${YAMLCPP_PROJECT_URL} | 55 | URL ${YAMLCPP_PROJECT_URL} |
| 56 | - TLS_VERIFY OFF | ||
| 57 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE | 56 | DOWNLOAD_EXTRACT_TIMESTAMP TRUE |
| 58 | DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/third_party | 57 | DOWNLOAD_DIR ${CMAKE_SOURCE_DIR}/third_party |
| 59 | DOWNLOAD_NO_PROGRESS TRUE | 58 | DOWNLOAD_NO_PROGRESS TRUE |
| @@ -65,6 +65,7 @@ CANN_SETENV="" # detect_cann 写入:对应的 set_env.sh 全路 | |||
| 65 | CANN_TARGET="" # 解析出的安装目标目录(决定下载/覆盖时由 resolve_cann_target 赋值) | 65 | CANN_TARGET="" # 解析出的安装目标目录(决定下载/覆盖时由 resolve_cann_target 赋值) |
| 66 | CANN_CACHE="" # 下载缓存目录,apply_defaults 里赋 ${WORKSPACE}/.cann-download | 66 | CANN_CACHE="" # 下载缓存目录,apply_defaults 里赋 ${WORKSPACE}/.cann-download |
| 67 | CANN_RUN_FILE="" # 实际下载到的 .run 文件全路径(收尾展示用) | 67 | CANN_RUN_FILE="" # 实际下载到的 .run 文件全路径(收尾展示用) |
| 68 | +OPS_RUN_FILE="" # 实际下载到的 ops 包全路径(收尾展示用) | ||
| 68 | CANN_CHANNEL="master" # CANN 镜像下载通道,apply_defaults 按 profile 落定(campus=legacy / main=master) | 69 | CANN_CHANNEL="master" # CANN 镜像下载通道,apply_defaults 按 profile 落定(campus=legacy / main=master) |
| 69 | HCCL_TEST_RESULT="" # build_hccl_test 写入:built | skipped | failed:<原因> | 70 | HCCL_TEST_RESULT="" # build_hccl_test 写入:built | skipped | failed:<原因> |
| 70 | HCCL_TEST_BIN_DIR="" # build_hccl_test 写入:hccl_test 可执行文件所在目录(原地编译) | 71 | HCCL_TEST_BIN_DIR="" # build_hccl_test 写入:hccl_test 可执行文件所在目录(原地编译) |
| @@ -129,6 +130,7 @@ success_summary() { | |||
| 129 | *) : ;; | 130 | *) : ;; |
| 130 | esac | 131 | esac |
| 131 | [ -n "${CANN_RUN_FILE}" ] && info "CANN 安装包(已保留): ${CANN_RUN_FILE}" | 132 | [ -n "${CANN_RUN_FILE}" ] && info "CANN 安装包(已保留): ${CANN_RUN_FILE}" |
| 133 | + [ -n "${OPS_RUN_FILE:-}" ] && info "CANN ops 包(已保留): ${OPS_RUN_FILE}" | ||
| 132 | local inst="${CHECKER_PATH}/hccl_vm_install" | 134 | local inst="${CHECKER_PATH}/hccl_vm_install" |
| 133 | local setenv="${ASCEND_HOME_PATH:-<CANN>/ascend-toolkit}/set_env.sh" | 135 | local setenv="${ASCEND_HOME_PATH:-<CANN>/ascend-toolkit}/set_env.sh" |
| 134 | local mpirun_extra="" | 136 | local mpirun_extra="" |
| @@ -197,13 +199,13 @@ normalize_arch() { | |||
| 197 | # ── Profile 注册表:一个 profile 只映射 hcomm/hccl 分支;首行为默认;新增版本加一行即可 ── | 199 | # ── Profile 注册表:一个 profile 只映射 hcomm/hccl 分支;首行为默认;新增版本加一行即可 ── |
| 198 | # 每行格式:hcomm_ref|hccl_ref|说明 | 200 | # 每行格式:hcomm_ref|hccl_ref|说明 |
| 199 | profile_all_names() { | 201 | profile_all_names() { |
| 200 | - printf '%s\n' "campus-2026" "main" | 202 | + printf '%s\n' "main" "campus-2026" |
| 201 | } | 203 | } |
| 202 | # 每行格式:hcomm_ref|hccl_ref|说明|是否允许 weekly|CANN 下载通道(master=滚动最新 / legacy=归档) | 204 | # 每行格式:hcomm_ref|hccl_ref|说明|是否允许 weekly|CANN 下载通道(master=滚动最新 / legacy=归档) |
| 203 | profile_row() { | 205 | profile_row() { |
| 204 | case "$1" in | 206 | case "$1" in |
| 205 | - campus-2026) echo "competition/campus-2026|competition/campus-2026|竞赛固定,CANN 从 build.md 提取|false|legacy" ;; | ||
| 206 | main) echo "master|master|主线最新,随官方更新|true|master" ;; | 207 | main) echo "master|master|主线最新,随官方更新|true|master" ;; |
| 208 | + campus-2026) echo "competition/campus-2026|competition/campus-2026|竞赛固定,CANN 从 build.md 提取|false|legacy" ;; | ||
| 207 | *) return 1 ;; | 209 | *) return 1 ;; |
| 208 | esac | 210 | esac |
| 209 | } | 211 | } |
| @@ -235,7 +237,7 @@ show_help() { | |||
| 235 | echo " bash hccl_vm_installer [选项]" | 237 | echo " bash hccl_vm_installer [选项]" |
| 236 | echo "" | 238 | echo "" |
| 237 | echo "常用选项:" | 239 | echo "常用选项:" |
| 238 | - echo " --profile <名称> 配套方案,默认: campus-2026(竞赛固定)" | 240 | + echo " --profile <名称> 配套方案,默认: main(主线最新)" |
| 239 | echo " --list-profiles 查看所有可选配套方案" | 241 | echo " --list-profiles 查看所有可选配套方案" |
| 240 | echo " --workspace <路径> 工作目录 (默认: 当前目录)" | 242 | echo " --workspace <路径> 工作目录 (默认: 当前目录)" |
| 241 | echo " --ascend-path <路径> 指定 CANN 目录:有则复用、没有则装到这里(不指定时探测 <工作目录>/Ascend)" | 243 | echo " --ascend-path <路径> 指定 CANN 目录:有则复用、没有则装到这里(不指定时探测 <工作目录>/Ascend)" |
| @@ -837,6 +839,22 @@ pick_toolkit_file() { | |||
| 837 | echo "${file}" | 839 | echo "${file}" |
| 838 | } | 840 | } |
| 839 | 841 | ||
| 842 | +# $1=快照号 $2=是否允许 weekly(true=主线 profile;否则只取正式发布版) | ||
| 843 | +pick_ops_file() { | ||
| 844 | + local snap="$1" allow_weekly="${2:-false}" base all file arch | ||
| 845 | + arch="$(normalize_arch "$(uname -m)" 2>/dev/null || echo x86_64)" | ||
| 846 | + base="https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/${CANN_CHANNEL}/${snap}" | ||
| 847 | + all="$(curl -fsSL "${base}/" 2>/dev/null | grep -oE "Ascend-cann-950-ops_[^\"< ]*linux-${arch}\\.run" | sort -u)" || true | ||
| 848 | + if [ "${allow_weekly}" = true ]; then | ||
| 849 | + file="$(printf '%s\n' "${all}" | grep -i weekly | sort -V | tail -1)" | ||
| 850 | + [ -n "${file}" ] || file="$(printf '%s\n' "${all}" | sort -V | tail -1)" | ||
| 851 | + else | ||
| 852 | + file="$(printf '%s\n' "${all}" | grep -E "^Ascend-cann-950-ops_[0-9]+(\\.[0-9]+)*_linux-${arch}\\.run$" | sort -V | tail -1)" | ||
| 853 | + fi | ||
| 854 | + [ -n "${file}" ] || return 1 | ||
| 855 | + echo "${file}" | ||
| 856 | +} | ||
| 857 | + | ||
| 840 | detect_cann() { | 858 | detect_cann() { |
| 841 | CANN_INSTALLED=""; CANN_SETENV="" | 859 | CANN_INSTALLED=""; CANN_SETENV="" |
| 842 | local cand se | 860 | local cand se |
| @@ -1111,6 +1129,69 @@ download_and_install_cann() { | |||
| 1111 | CANN_RUN_FILE="${CANN_CACHE}/${file}" | 1129 | CANN_RUN_FILE="${CANN_CACHE}/${file}" |
| 1112 | } | 1130 | } |
| 1113 | 1131 | ||
| 1132 | +# $1=安装目标 <target> | ||
| 1133 | +# 下载并安装 CANN ops 算子包(与 toolkit 安装策略一致,失败则退出) | ||
| 1134 | +download_and_install_cann_ops() { | ||
| 1135 | + local target="$1" | ||
| 1136 | + # 1. 幂等检查(ops 包已装则跳过) | ||
| 1137 | + if [ -d "${target}/ascend-toolkit/latest/ops" ] || [ -d "${target}/ops" ]; then | ||
| 1138 | + info "检测到 ops 包已安装:${target},跳过下载" | ||
| 1139 | + return 0 | ||
| 1140 | + fi | ||
| 1141 | + | ||
| 1142 | + # 2. 选择 ops 包 | ||
| 1143 | + local snap; snap="$(pick_cann_snapshot "" || true)" | ||
| 1144 | + [ -n "${snap}" ] || { warn "无法确定 CANN 快照。"; print_cann_guidance; exit 1; } | ||
| 1145 | + | ||
| 1146 | + local aw; aw="$(profile_allow_weekly "${PROFILE}")" | ||
| 1147 | + local file; file="$(pick_ops_file "${snap}" "${aw}")" || true | ||
| 1148 | + local _arch_for_msg | ||
| 1149 | + _arch_for_msg="$(normalize_arch "$(uname -m)" 2>/dev/null || echo x86_64)" | ||
| 1150 | + [ -n "${file}" ] || { warn "快照目录 ${snap} 未找到可用的 ${_arch_for_msg} ops 包(当前 profile=${PROFILE}$([ "${aw}" = true ] || echo ',仅取正式发布版、不取 weekly'))。"; print_cann_guidance; exit 1; } | ||
| 1151 | + | ||
| 1152 | + # 3. 下载(缓存逻辑同 toolkit) | ||
| 1153 | + local base="https://ascend.devcloud.huaweicloud.com/artifactory/cann-run-mirror/software/${CANN_CHANNEL}/${snap}" | ||
| 1154 | + local url="${base}/${file}" total | ||
| 1155 | + local dl_log="${LOG_DIR}/ops-download-${RUN_TS}.log" | ||
| 1156 | + mkdir -p "${CANN_CACHE}" "${LOG_DIR}" || { warn "无法创建缓存/日志目录"; print_cann_guidance; exit 1; } | ||
| 1157 | + total="$(curl -fsSI "${url}" 2>/dev/null | tr -d '\r' | awk 'tolower($1)=="content-length:"{print $2}' | tail -1)" || true | ||
| 1158 | + | ||
| 1159 | + if [ -f "${CANN_CACHE}/${file}" ] && [ -n "${total}" ] \ | ||
| 1160 | + && [ "$(stat -c%s "${CANN_CACHE}/${file}" 2>/dev/null || echo 0)" = "${total}" ]; then | ||
| 1161 | + info "复用已下载的 ops 包(${CANN_CACHE}/${file},$(( total / 1024 / 1024 ))M),跳过下载" | ||
| 1162 | + else | ||
| 1163 | + info "下载 ops 包..." | ||
| 1164 | + local attempt=1 | ||
| 1165 | + while :; do | ||
| 1166 | + wget -q -O "${CANN_CACHE}/${file}" "${url}" </dev/null 2>>"${dl_log}" & | ||
| 1167 | + local dpid=$! | ||
| 1168 | + spin_on_pid_pct "${dpid}" "下载 ops" "${total:-0}" "${CANN_CACHE}/${file}" | ||
| 1169 | + if wait "${dpid}" && { [ -z "${total}" ] || [ "$(stat -c%s "${CANN_CACHE}/${file}" 2>/dev/null || echo 0)" = "${total}" ]; }; then | ||
| 1170 | + break | ||
| 1171 | + fi | ||
| 1172 | + rm -f "${CANN_CACHE}/${file}" || true | ||
| 1173 | + if [ "${attempt}" -ge 2 ]; then | ||
| 1174 | + warn "ops 包下载失败,末尾日志:"; tail -n 20 "${dl_log}" >&2 | ||
| 1175 | + echo " 请检查网络/代理/防火墙;持续失败可带日志到 https://gitcode.com/cann/hcomm/issues 反馈。" >&2 | ||
| 1176 | + print_cann_guidance; exit 1 | ||
| 1177 | + fi | ||
| 1178 | + warn "ops 包下载失败,3 秒后重试一次……"; attempt=2; sleep 3 || true | ||
| 1179 | + done | ||
| 1180 | + fi | ||
| 1181 | + | ||
| 1182 | + # 4. 安装(安装到同一 target 目录) | ||
| 1183 | + local inst_log="${LOG_DIR}/ops-install-${RUN_TS}.log" | ||
| 1184 | + if ! chmod +x "${CANN_CACHE}/${file}"; then warn "无法给安装包加执行权限:${CANN_CACHE}/${file}"; print_cann_guidance; exit 1; fi | ||
| 1185 | + if ! LANG=C.UTF-8 LC_ALL=C.UTF-8 "${CANN_CACHE}/${file}" --install --install-path="${target}" --quiet </dev/null >>"${inst_log}" 2>&1; then | ||
| 1186 | + warn "ops 包安装失败,末尾日志:"; tail -n 20 "${inst_log}" >&2 | ||
| 1187 | + print_cann_guidance; exit 1 | ||
| 1188 | + fi | ||
| 1189 | + | ||
| 1190 | + OPS_RUN_FILE="${CANN_CACHE}/${file}" | ||
| 1191 | + info "ops 包安装完成:${file}" | ||
| 1192 | + return 0 | ||
| 1193 | +} | ||
| 1194 | + | ||
| 1114 | # 第 5 步:复用第 1 步写好的 CANN_INSTALLED/CANN_SETENV,按四情况处理。$1=build.md 快照(可空) | 1195 | # 第 5 步:复用第 1 步写好的 CANN_INSTALLED/CANN_SETENV,按四情况处理。$1=build.md 快照(可空) |
| 1115 | resolve_cann() { | 1196 | resolve_cann() { |
| 1116 | local snapshot="$1" | 1197 | local snapshot="$1" |
| @@ -1129,11 +1210,13 @@ resolve_cann() { | |||
| 1129 | warn "已按 --offline 保留现有 CANN;请自行确认其与所需配套版本一致。" ;; | 1210 | warn "已按 --offline 保留现有 CANN;请自行确认其与所需配套版本一致。" ;; |
| 1130 | download) | 1211 | download) |
| 1131 | resolve_cann_target "${CANN_INSTALLED}" | 1212 | resolve_cann_target "${CANN_INSTALLED}" |
| 1132 | - download_and_install_cann "${CANN_TARGET}" "${snapshot}" ;; | 1213 | + download_and_install_cann "${CANN_TARGET}" "${snapshot}" |
| 1214 | + download_and_install_cann_ops "${CANN_TARGET}" ;; | ||
| 1133 | auto) | 1215 | auto) |
| 1134 | resolve_cann_target "${CANN_INSTALLED}" | 1216 | resolve_cann_target "${CANN_INSTALLED}" |
| 1135 | if { [ -t 0 ] || [ -e /dev/tty ]; } && prompt_yn "下载配套版并覆盖升级 ${CANN_TARGET} 的现有 CANN? 15 秒内无响应视为保留。[y/N]" N; then | 1217 | if { [ -t 0 ] || [ -e /dev/tty ]; } && prompt_yn "下载配套版并覆盖升级 ${CANN_TARGET} 的现有 CANN? 15 秒内无响应视为保留。[y/N]" N; then |
| 1136 | download_and_install_cann "${CANN_TARGET}" "${snapshot}" | 1218 | download_and_install_cann "${CANN_TARGET}" "${snapshot}" |
| 1219 | + download_and_install_cann_ops "${CANN_TARGET}" | ||
| 1137 | else | 1220 | else |
| 1138 | warn "保留现有 CANN(未覆盖);如需覆盖请加 --reinstall-cann。" | 1221 | warn "保留现有 CANN(未覆盖);如需覆盖请加 --reinstall-cann。" |
| 1139 | fi ;; | 1222 | fi ;; |
| @@ -1142,6 +1225,7 @@ resolve_cann() { | |||
| 1142 | else | 1225 | else |
| 1143 | info "下载 CANN ${snapshot} 并安装到 ${CANN_TARGET}" | 1226 | info "下载 CANN ${snapshot} 并安装到 ${CANN_TARGET}" |
| 1144 | download_and_install_cann "${CANN_TARGET}" "${snapshot}" | 1227 | download_and_install_cann "${CANN_TARGET}" "${snapshot}" |
| 1228 | + download_and_install_cann_ops "${CANN_TARGET}" | ||
| 1145 | fi | 1229 | fi |
| 1146 | # ASCEND_HOME_PATH 兜底:从 ASCEND_TOOLKIT_HOME 或探测到的 CANN 目录推导 | 1230 | # ASCEND_HOME_PATH 兜底:从 ASCEND_TOOLKIT_HOME 或探测到的 CANN 目录推导 |
| 1147 | if [ -z "${ASCEND_HOME_PATH:-}" ]; then | 1231 | if [ -z "${ASCEND_HOME_PATH:-}" ]; then |
| @@ -1209,7 +1293,7 @@ build_hccl_vm() { | |||
| 1209 | fi | 1293 | fi |
| 1210 | } | 1294 | } |
| 1211 | 1295 | ||
| 1212 | -# 编译安装 HCCL/HCOMM 子包(使用 hcomm 仓库自带的 build_pkg.sh) | 1296 | +# 执行 build_pkg.sh 获得aicpu在device侧的符号(使用 hcomm 仓库自带的 build_pkg.sh) |
| 1213 | # build_pkg.sh 位于 CHECKER_PATH(即 hcomm/test/hccl_vm/)下,步骤 4 已 clone 完成 | 1297 | # build_pkg.sh 位于 CHECKER_PATH(即 hcomm/test/hccl_vm/)下,步骤 4 已 clone 完成 |
| 1214 | # 需要以下环境变量: | 1298 | # 需要以下环境变量: |
| 1215 | # ASCEND_HOME_PATH - CANN 安装目录(source CANN set_env.sh 后导出) | 1299 | # ASCEND_HOME_PATH - CANN 安装目录(source CANN set_env.sh 后导出) |
| @@ -1217,7 +1301,7 @@ build_hccl_vm() { | |||
| 1217 | # HCOMM_CODE_HOME - hcomm 源码目录(build_hccl_vm 已导出) | 1301 | # HCOMM_CODE_HOME - hcomm 源码目录(build_hccl_vm 已导出) |
| 1218 | # 通过 --tool_path 传入 checker 安装路径(即 CHECKER_PATH) | 1302 | # 通过 --tool_path 传入 checker 安装路径(即 CHECKER_PATH) |
| 1219 | build_hcomm_hccl_pkg() { | 1303 | build_hcomm_hccl_pkg() { |
| 1220 | - info "编译安装 HCCL/HCOMM 子包..." | 1304 | + info "执行 build_pkg.sh 获得 aicpu 运行在 device 侧的符号..." |
| 1221 | local pkg_script="${CHECKER_PATH}/build_pkg.sh" | 1305 | local pkg_script="${CHECKER_PATH}/build_pkg.sh" |
| 1222 | local pkg_log="${LOG_DIR}/build-pkg-${RUN_TS}.log" | 1306 | local pkg_log="${LOG_DIR}/build-pkg-${RUN_TS}.log" |
| 1223 | 1307 | ||
| @@ -1232,22 +1316,22 @@ build_hcomm_hccl_pkg() { | |||
| 1232 | if [ "${VERBOSE}" = true ]; then | 1316 | if [ "${VERBOSE}" = true ]; then |
| 1233 | bash "${pkg_script}" --tool_path "${CHECKER_PATH}" 2>&1 | tee "${pkg_log}" || rc=${PIPESTATUS[0]} | 1317 | bash "${pkg_script}" --tool_path "${CHECKER_PATH}" 2>&1 | tee "${pkg_log}" || rc=${PIPESTATUS[0]} |
| 1234 | else | 1318 | else |
| 1235 | - info "开始编译子包,预计数分钟。实时日志: tail -f ${pkg_log}" | 1319 | + info "开始执行 build_pkg.sh。实时日志: tail -f ${pkg_log}" |
| 1236 | bash "${pkg_script}" --tool_path "${CHECKER_PATH}" > "${pkg_log}" 2>&1 & | 1320 | bash "${pkg_script}" --tool_path "${CHECKER_PATH}" > "${pkg_log}" 2>&1 & |
| 1237 | local pkg_pid=$! | 1321 | local pkg_pid=$! |
| 1238 | spin_on_pid "${pkg_pid}" "编译子包中" | 1322 | spin_on_pid "${pkg_pid}" "编译子包中" |
| 1239 | wait "${pkg_pid}" || rc=$? | 1323 | wait "${pkg_pid}" || rc=$? |
| 1240 | fi | 1324 | fi |
| 1241 | if [ "${rc}" -ne 0 ]; then | 1325 | if [ "${rc}" -ne 0 ]; then |
| 1242 | - warn "HCCL/HCOMM 子包编译失败,末尾日志:" | 1326 | + warn "执行 build_pkg.sh 失败,末尾日志:" |
| 1243 | tail -n 20 "${pkg_log}" >&2 | 1327 | tail -n 20 "${pkg_log}" >&2 |
| 1244 | echo " 完整日志: ${pkg_log}" >&2 | 1328 | echo " 完整日志: ${pkg_log}" >&2 |
| 1245 | echo " 若为第三方库下载失败(网络/SSL):已清理下载缓存,重跑即可重新下载;若为 gcc 超出 build.md 前置依赖范围(7.3.0–13.3.x)请在满足该范围的环境(如 22.04/24.04)运行。" >&2 | 1329 | echo " 若为第三方库下载失败(网络/SSL):已清理下载缓存,重跑即可重新下载;若为 gcc 超出 build.md 前置依赖范围(7.3.0–13.3.x)请在满足该范围的环境(如 22.04/24.04)运行。" >&2 |
| 1246 | echo " 也可手动执行: bash ${pkg_script} --tool_path ${CHECKER_PATH}" >&2 | 1330 | echo " 也可手动执行: bash ${pkg_script} --tool_path ${CHECKER_PATH}" >&2 |
| 1247 | clean_thirdparty_dl_cache | 1331 | clean_thirdparty_dl_cache |
| 1248 | - error "子包编译未通过,请检查日志后重试。" | 1332 | + error "执行 build_pkg.sh 失败,请检查日志后重试。" |
| 1249 | fi | 1333 | fi |
| 1250 | - info "HCCL/HCOMM 子包编译安装完成!" | 1334 | + info "执行 build_pkg.sh 完成!" |
| 1251 | } | 1335 | } |
| 1252 | 1336 | ||
| 1253 | # 按 README §4.7 准备 /etc/hccl_rootinfo.json:HCCL 初始化通信域时从该文件读 topo.json 路径, | 1337 | # 按 README §4.7 准备 /etc/hccl_rootinfo.json:HCCL 初始化通信域时从该文件读 topo.json 路径, |
| @@ -1265,7 +1349,7 @@ setup_hccl_rootinfo() { | |||
| 1265 | fi | 1349 | fi |
| 1266 | } | 1350 | } |
| 1267 | 1351 | ||
| 1268 | -# 第 9 步:编译 hccl_test(增值步骤,失败只 WARN 不阻断)。前提:build_hcomm_hccl_pkg 已把 libhccl 装进 CANN。 | 1352 | +# 第 9 步:编译 hccl_test(增值步骤,失败只 WARN 不阻断)。 |
| 1269 | build_hccl_test() { | 1353 | build_hccl_test() { |
| 1270 | if [ "${SKIP_HCCL_TEST}" = true ]; then | 1354 | if [ "${SKIP_HCCL_TEST}" = true ]; then |
| 1271 | HCCL_TEST_RESULT="skipped" | 1355 | HCCL_TEST_RESULT="skipped" |
| @@ -1541,7 +1625,7 @@ main() { | |||
| 1541 | clone_repo "hccl" "https://gitcode.com/cann/hccl.git" "${HCCL_REF}" "${HCCL_PATH}" | 1625 | clone_repo "hccl" "https://gitcode.com/cann/hccl.git" "${HCCL_REF}" "${HCCL_PATH}" |
| 1542 | step 7 "${STEP_TOTAL}" "编译 HCCL-VM" | 1626 | step 7 "${STEP_TOTAL}" "编译 HCCL-VM" |
| 1543 | build_hccl_vm | 1627 | build_hccl_vm |
| 1544 | - step 8 "${STEP_TOTAL}" "编译安装 HCCL/HCOMM 子包" | 1628 | + step 8 "${STEP_TOTAL}" "解析 aicpu_hcxx.tar.gz 得到 device 侧符号" |
| 1545 | build_hcomm_hccl_pkg | 1629 | build_hcomm_hccl_pkg |
| 1546 | step 9 "${STEP_TOTAL}" "编译 hccl_test" | 1630 | step 9 "${STEP_TOTAL}" "编译 hccl_test" |
| 1547 | build_hccl_test | 1631 | build_hccl_test |
| @@ -21,7 +21,7 @@ namespace sim { | |||
| 21 | aclError GetDeviceByLogicId(uint32_t deviceId, sim::Device &device); | 21 | aclError GetDeviceByLogicId(uint32_t deviceId, sim::Device &device); |
| 22 | aclError GetDeviceByRankId(uint32_t rankId, sim::Device &device); | 22 | aclError GetDeviceByRankId(uint32_t rankId, sim::Device &device); |
| 23 | aclError GetDeviceByPhysicalId(uint32_t deviceId, sim::Device &device); | 23 | aclError GetDeviceByPhysicalId(uint32_t deviceId, sim::Device &device); |
| 24 | -aclError UpdateDeviceLogicId(uint64_t serverKey, uint32_t phyDevId, uint32_t logicDevId); | 24 | +aclError UpdateDeviceLogicId(uint64_t serverKey, uint32_t phyDevId, uint32_t logicDevId, uint32_t userId); |
| 25 | aclError UpdateSuperDeviceId(uint32_t logicDevId, uint32_t superDeviceId); | 25 | aclError UpdateSuperDeviceId(uint32_t logicDevId, uint32_t superDeviceId); |
| 26 | aclError GetCcuFromDeviceByDieId(uint64_t deviceKey, uint8_t dieId, sim::Ccu &ccu); | 26 | aclError GetCcuFromDeviceByDieId(uint64_t deviceKey, uint8_t dieId, sim::Ccu &ccu); |
| 27 | aclError GetCcuResourceByCcu(uint64_t ccuKey, sim::CcuResource &ccuRes); | 27 | aclError GetCcuResourceByCcu(uint64_t ccuKey, sim::CcuResource &ccuRes); |
| @@ -50,6 +50,7 @@ typedef struct { | |||
| 50 | typedef struct { | 50 | typedef struct { |
| 51 | uint64_t id; // PK | 51 | uint64_t id; // PK |
| 52 | uint32_t server_id; // FK | 52 | uint32_t server_id; // FK |
| 53 | + uint32_t user_id{0xFFFF}; | ||
| 53 | uint32_t logic_id{0xFFFF}; | 54 | uint32_t logic_id{0xFFFF}; |
| 54 | uint32_t physical_id; | 55 | uint32_t physical_id; |
| 55 | uint32_t super_device_id; | 56 | uint32_t super_device_id; |
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | + | ||
| 15 | 16 | ||
| 16 | class InstallPath { | 17 | class InstallPath { |
| 17 | public: | 18 | public: |
| @@ -26,4 +27,8 @@ public: | |||
| 26 | static std::string ResolveToInstallRoot(const std::string& relPath); | 27 | static std::string ResolveToInstallRoot(const std::string& relPath); |
| 27 | }; | 28 | }; |
| 28 | 29 | ||
| 30 | +std::string GetDataTypeStr(HcclDataType type); | ||
| 31 | + | ||
| 32 | +std::string GetReduceOpStr(HcclReduceOp op); | ||
| 33 | + | ||
| 29 | 34 | ||
| @@ -30,7 +30,7 @@ public: | |||
| 30 | 30 | ||
| 31 | int ReleaseCommMem(const char* name); | 31 | int ReleaseCommMem(const char* name); |
| 32 | 32 | ||
| 33 | - int WriteCommMem(const char* name, const void* dataPtr, size_t size); | 33 | + int64_t WriteCommMem(const char* name, const void* dataPtr, size_t size); |
| 34 | 34 | ||
| 35 | int ReadCommMem(const char* name, void* dataPtr, size_t size); | 35 | int ReadCommMem(const char* name, void* dataPtr, size_t size); |
| 36 | 36 | ||
| @@ -62,7 +62,7 @@ private: | |||
| 62 | ~AscendClusterTopoParser() = default; | 62 | ~AscendClusterTopoParser() = default; |
| 63 | private: | 63 | private: |
| 64 | HcclVmResult InitClusterStaticTopoData(); | 64 | HcclVmResult InitClusterStaticTopoData(); |
| 65 | - HcclVmResult InitDynamicModelData(uint64_t serverKey, uint32_t rankId, uint32_t logicDevId, uint32_t phyDevId); | 65 | + HcclVmResult InitDynamicModelData(const TopoMeta& topoMeta); |
| 66 | HcclVmResult BuildLevelList(const Server &server, int srcDevPhyId, | 66 | HcclVmResult BuildLevelList(const Server &server, int srcDevPhyId, |
| 67 | const std::set<int> &commDomainLocalIds, | 67 | const std::set<int> &commDomainLocalIds, |
| 68 | uint32_t spIdx, uint32_t srvIdx, | 68 | uint32_t spIdx, uint32_t srvIdx, |
| @@ -1047,9 +1047,13 @@ HcclVmResult ClearDbTables() | |||
| 1047 | return HcclVmResult::HCCL_SIM_HOST_SUCCESS_CMD; | 1047 | return HcclVmResult::HCCL_SIM_HOST_SUCCESS_CMD; |
| 1048 | } | 1048 | } |
| 1049 | 1049 | ||
| 1050 | +extern uint64_t g_cur_server_key; | ||
| 1051 | + | ||
| 1050 | HcclVmResult HcclVmResetCommDomain() | 1052 | HcclVmResult HcclVmResetCommDomain() |
| 1051 | { | 1053 | { |
| 1052 | AscendClusterTopoParser::GetInstance().SetClusterStatus(HvmClusterStatus::COMM_DOMAIN_UNINIT); | 1054 | AscendClusterTopoParser::GetInstance().SetClusterStatus(HvmClusterStatus::COMM_DOMAIN_UNINIT); |
| 1055 | + // 重置 Host 进程中缓存的 server key,防止跨用例残留 | ||
| 1056 | + g_cur_server_key = 0; | ||
| 1053 | // 重置device的逻辑ID | 1057 | // 重置device的逻辑ID |
| 1054 | auto ret2 = sim::ResetAllDeviceLogicId(); | 1058 | auto ret2 = sim::ResetAllDeviceLogicId(); |
| 1055 | if (!ret2) { | 1059 | if (!ret2) { |
| @@ -37,9 +37,9 @@ void CmdTableShow(std::string &tableName) | |||
| 37 | { | 37 | { |
| 38 | if (tableName == "Device") { | 38 | if (tableName == "Device") { |
| 39 | auto tables = RunnerDB::GetByPred<sim::Device>([](auto &&) { return true; }); | 39 | auto tables = RunnerDB::GetByPred<sim::Device>([](auto &&) { return true; }); |
| 40 | - PrintTable<sim::Device>("| id | server_id | logic_id | physical_id | super_device_id | overflow_mode | soc_version | status |", | 40 | + PrintTable<sim::Device>("| id | server_id | user_id | logic_id | physical_id | super_device_id | overflow_mode | soc_version | status |", |
| 41 | tables, [](const sim::Device &d) { | 41 | tables, [](const sim::Device &d) { |
| 42 | - return "| " + std::to_string(d.id) + " | " + std::to_string(d.server_id) + " | " + | 42 | + return "| " + std::to_string(d.id) + " | " + std::to_string(d.server_id) + " | " + std::to_string(d.user_id) + " | " + |
| 43 | std::to_string(d.logic_id) + " | " + std::to_string(d.physical_id) + " | " + | 43 | std::to_string(d.logic_id) + " | " + std::to_string(d.physical_id) + " | " + |
| 44 | std::to_string(d.super_device_id) + " | " + | 44 | std::to_string(d.super_device_id) + " | " + |
| 45 | std::to_string(d.overflow_mode) + " | " + std::string(d.soc_version) + | 45 | std::to_string(d.overflow_mode) + " | " + std::string(d.soc_version) + |
| @@ -77,10 +77,6 @@ target_link_libraries(device PRIVATE | |||
| 77 | ) | 77 | ) |
| 78 | 78 | ||
| 79 | target_include_directories(device PRIVATE | 79 | target_include_directories(device PRIVATE |
| 80 | - ${HCCL_CODE_ROOT}/src/ops/op_common/inc | ||
| 81 | - ${HCCL_CODE_ROOT}/src/common | ||
| 82 | - ${HCCL_CODE_ROOT}/src/common/hcomm_dlsym | ||
| 83 | - ${HCCL_CODE_ROOT}/src/common/hcomm_dlsym/ccu | ||
| 84 | ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc | 80 | ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc |
| 85 | ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/hccl | 81 | ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/hccl |
| 86 | ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include | 82 | ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include |
| @@ -20,6 +20,7 @@ | |||
| 20 | 20 | ||
| 21 | 21 | ||
| 22 | 22 | ||
| 23 | + | ||
| 23 | 24 | ||
| 24 | 25 | ||
| 25 | 26 | ||
| @@ -240,6 +241,14 @@ void init_lock() { | |||
| 240 | HCCL_VM_ERROR("Failed to open lock file: {}", strerror(errno)); | 241 | HCCL_VM_ERROR("Failed to open lock file: {}", strerror(errno)); |
| 241 | exit(1); | 242 | exit(1); |
| 242 | } | 243 | } |
| 244 | + | ||
| 245 | + // open() 的创建权限会受 umask 影响,显式恢复为所有用户可读写。 | ||
| 246 | + if (fchmod(fd, 0666) == -1 && errno != EPERM) { | ||
| 247 | + HCCL_VM_ERROR("Failed to set lock file permissions: {}", strerror(errno)); | ||
| 248 | + close(fd); | ||
| 249 | + exit(1); | ||
| 250 | + } | ||
| 251 | + | ||
| 243 | if (flock(fd, LOCK_EX | LOCK_NB) == -1) { | 252 | if (flock(fd, LOCK_EX | LOCK_NB) == -1) { |
| 244 | if (errno == EWOULDBLOCK) { | 253 | if (errno == EWOULDBLOCK) { |
| 245 | HCCL_VM_ERROR("Another instance of runner is already running. Exiting."); | 254 | HCCL_VM_ERROR("Another instance of runner is already running. Exiting."); |
| @@ -255,9 +264,9 @@ int main(int argc, char* argv[]) | |||
| 255 | { | 264 | { |
| 256 | (void) argc; | 265 | (void) argc; |
| 257 | (void) argv; | 266 | (void) argv; |
| 258 | - init_lock(); | ||
| 259 | LogConfig config = LoadLogConfig("runner"); | 267 | LogConfig config = LoadLogConfig("runner"); |
| 260 | InitLogger(config); | 268 | InitLogger(config); |
| 269 | + init_lock(); | ||
| 261 | HcclSim::StorageManager& storage = HcclSim::StorageManager::GetInstance(); | 270 | HcclSim::StorageManager& storage = HcclSim::StorageManager::GetInstance(); |
| 262 | storage.SetDataId("runner"); | 271 | storage.SetDataId("runner"); |
| 263 | 272 | ||
| @@ -80,7 +80,24 @@ aclError aclrtSetDevice(int32_t deviceId) | |||
| 80 | uint64_t servId = 0; | 80 | uint64_t servId = 0; |
| 81 | if (!sim::GetRankIdByMPI(rankId, servId)) { | 81 | if (!sim::GetRankIdByMPI(rankId, servId)) { |
| 82 | HCCL_VM_ERROR("get rankId by MPI fail servId:{:d}", servId); | 82 | HCCL_VM_ERROR("get rankId by MPI fail servId:{:d}", servId); |
| 83 | - return 0; | 83 | + return ACL_ERROR_INVALID_PARAM; |
| 84 | + } | ||
| 85 | + | ||
| 86 | + // 查询 Rank 表,获取该 rankId 期望的 device | ||
| 87 | + auto rankEntry = RunnerDB::GetOneByPred<sim::Rank>([rankId](const sim::Rank &r) { | ||
| 88 | + return r.rank_id == rankId; | ||
| 89 | + }); | ||
| 90 | + if (rankEntry.second) { | ||
| 91 | + auto rankDevice = RunnerDB::GetById<sim::Device>(rankEntry.first.device_id); | ||
| 92 | + if (rankDevice.has_value() && rankDevice->logic_id != (uint32_t)deviceId) { | ||
| 93 | + HCCL_VM_ERROR( | ||
| 94 | + "Rank-to-device mismatch detected! rank {} expected logicId={}, " | ||
| 95 | + "but application called aclrtSetDevice({}). " | ||
| 96 | + "This may indicate the MPI scheduling strategy has changed. " | ||
| 97 | + "Please verify your MPI launch configuration (e.g., hostfile order, " | ||
| 98 | + "scheduling policy) matches the round-robin convention assumed by ranktable.json.", | ||
| 99 | + rankId, rankDevice->logic_id, deviceId); | ||
| 100 | + } | ||
| 84 | } | 101 | } |
| 85 | 102 | ||
| 86 | sim::Device device{}; | 103 | sim::Device device{}; |
| @@ -92,7 +109,6 @@ aclError aclrtSetDevice(int32_t deviceId) | |||
| 92 | return ACL_ERROR_INVALID_PARAM; | 109 | return ACL_ERROR_INVALID_PARAM; |
| 93 | } | 110 | } |
| 94 | device = ret.first; | 111 | device = ret.first; |
| 95 | - HCCL_VM_DEBUG("logicId:{:d} serverId:{:d} key:{:d}", device.logic_id, serverId, device.id); | ||
| 96 | 112 | ||
| 97 | uint64_t deviceKey = device.id; | 113 | uint64_t deviceKey = device.id; |
| 98 | SetDevIdPayload payload{}; | 114 | SetDevIdPayload payload{}; |
| @@ -876,6 +892,12 @@ rtError_t rtReleaseDevResAddress(rtDevResInfo * const resInfo) | |||
| 876 | return ACL_SUCCESS; | 892 | return ACL_SUCCESS; |
| 877 | } | 893 | } |
| 878 | 894 | ||
| 895 | +aclError aclrtGetLogicDevIdByUserDevId(const int32_t userDevid, int32_t *const logicDevId) | ||
| 896 | +{ | ||
| 897 | + *logicDevId = userDevid; | ||
| 898 | + return ACL_SUCCESS; | ||
| 899 | +} | ||
| 900 | + | ||
| 879 | 901 | ||
| 880 | } | 902 | } |
| 881 | 903 | ||
| @@ -30,10 +30,25 @@ message(STATUS "HCCL_CODE_ROOT: ${HCCL_CODE_ROOT}") | |||
| 30 | set(AIV_KERNEL_DIR ${CMAKE_CURRENT_SOURCE_DIR}) | 30 | set(AIV_KERNEL_DIR ${CMAKE_CURRENT_SOURCE_DIR}) |
| 31 | MESSAGE(STATUS "AIV_KERNEL_DIR: " ${AIV_KERNEL_DIR}) | 31 | MESSAGE(STATUS "AIV_KERNEL_DIR: " ${AIV_KERNEL_DIR}) |
| 32 | 32 | ||
| 33 | +set(HCCL_AIV_DEFINES | ||
| 34 | + ${HCCL_CODE_ROOT}/src/ops/op_common/template/aiv/aiv_defines.h) | ||
| 35 | +if(NOT EXISTS ${HCCL_AIV_DEFINES}) | ||
| 36 | + message(FATAL_ERROR "HCCL aiv_defines.h not found: ${HCCL_AIV_DEFINES}") | ||
| 37 | +endif() | ||
| 38 | + | ||
| 39 | +set(AIV_SHADOW_DIR ${CMAKE_CURRENT_BINARY_DIR}/hccl_shadow) | ||
| 40 | +file(MAKE_DIRECTORY ${AIV_SHADOW_DIR}) | ||
| 41 | +file(CREATE_LINK | ||
| 42 | + ${HCCL_AIV_DEFINES} | ||
| 43 | + ${AIV_SHADOW_DIR}/aiv_defines.h | ||
| 44 | + SYMBOLIC) | ||
| 45 | +message(STATUS "AIV_SHADOW_DIR: ${AIV_SHADOW_DIR}") | ||
| 46 | + | ||
| 33 | set(AIV_KERNEL_STUB_INCLUDE_LIST | 47 | set(AIV_KERNEL_STUB_INCLUDE_LIST |
| 34 | ${AIV_KERNEL_DIR}/aiv_mode_stub | 48 | ${AIV_KERNEL_DIR}/aiv_mode_stub |
| 35 | ${AIV_KERNEL_DIR}/ascendc_stub | 49 | ${AIV_KERNEL_DIR}/ascendc_stub |
| 36 | ${AIV_KERNEL_DIR}/hccl_op_stub | 50 | ${AIV_KERNEL_DIR}/hccl_op_stub |
| 51 | + ${AIV_SHADOW_DIR} | ||
| 37 | 52 | ||
| 38 | ${HCCL_VM_INCLUDE} | 53 | ${HCCL_VM_INCLUDE} |
| 39 | 54 | ||
| @@ -41,6 +56,7 @@ set(AIV_KERNEL_STUB_INCLUDE_LIST | |||
| 41 | ${THRID_PARTY_DIR}/nlohmann_json | 56 | ${THRID_PARTY_DIR}/nlohmann_json |
| 42 | ${THRID_PARTY_DIR}/dbg_macro # for debug | 57 | ${THRID_PARTY_DIR}/dbg_macro # for debug |
| 43 | 58 | ||
| 59 | + ${ASCEND_CANN_PACKAGE_PATH}/include | ||
| 44 | ${ASCEND_CANN_PACKAGE_PATH}/include/hccl | 60 | ${ASCEND_CANN_PACKAGE_PATH}/include/hccl |
| 45 | ) | 61 | ) |
| 46 | 62 | ||
| @@ -11,163 +11,9 @@ | |||
| 11 | 11 | ||
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | - | ||
| 15 | 14 | ||
| 16 | 15 | ||
| 17 | - | 16 | +#include "aiv_defines.h" |
| 18 | -using namespace AscendC; | ||
| 19 | - | ||
| 20 | - | ||
| 21 | -static const struct FunLevelKType kernel_name##_kernel_type_section __attribute__ \ | ||
| 22 | -((used, section (".ascend.meta." #kernel_name))) \ | ||
| 23 | -= {{F_TYPE_KTYPE, sizeof(unsigned int), K_TYPE_AIV}} | ||
| 24 | - | ||
| 25 | -constexpr uint32_t MAX_RANK_SIZE = 512; // server内最大卡数 | ||
| 26 | -constexpr uint32_t MAX_RANK_SIZE_V = 256; | ||
| 27 | -constexpr uint32_t BR_CTRL_CORE_LIMIT_RANK_SIZE = 16; | ||
| 28 | -constexpr uint64_t BUFFER_OUT_ADDR_OFFSET = 16 * 1024; | ||
| 29 | -constexpr uint64_t TOPO_LEN_Y_OFFSET = 8; | ||
| 30 | -constexpr uint64_t TOPO_LEN_Z_OFFSET = 16; | ||
| 31 | -constexpr uint64_t LOCAL_FLAG_BUF_LEN = 2560; | ||
| 32 | -constexpr uint64_t AIV_TAG_MOVE_RIGHT_BITS = 16; | ||
| 33 | -constexpr uint64_t LOW_16_BITS = 0xFFFF; | ||
| 34 | -constexpr uint64_t DATA_LIMIT = 512 * 1024; | ||
| 35 | -constexpr uint32_t PING_PONG = 2; | ||
| 36 | - | ||
| 37 | -struct ExtraArgs { | ||
| 38 | - uint64_t sendCounts[MAX_RANK_SIZE_V] = {}; | ||
| 39 | - uint64_t sendDispls[MAX_RANK_SIZE_V] = {}; | ||
| 40 | - uint64_t recvCounts[MAX_RANK_SIZE_V] = {}; | ||
| 41 | - uint64_t recvDispls[MAX_RANK_SIZE_V] = {}; | ||
| 42 | -}; | ||
| 43 | - | ||
| 44 | -using AivSuperKernelArgs = struct AivSuperKernelArgsDef { | ||
| 45 | - GM_ADDR buffersIn = nullptr; // 注册的CCLIN地址,所有卡可访问 | ||
| 46 | - uint64_t rank; | ||
| 47 | - uint64_t rankSize; | ||
| 48 | - uint64_t len; | ||
| 49 | - uint64_t dataType; | ||
| 50 | - uint64_t unitSize; | ||
| 51 | - uint64_t reduceOp; | ||
| 52 | - uint64_t numBlocks; | ||
| 53 | - uint64_t tag; // 第几次调用,定时重置成1 | ||
| 54 | - uint64_t clearEnable; | ||
| 55 | - uint64_t inputSliceStride; | ||
| 56 | - uint64_t outputSliceStride; | ||
| 57 | - uint64_t repeatNum; | ||
| 58 | - uint64_t inputRepeatStride; | ||
| 59 | - uint64_t outputRepeatStride; | ||
| 60 | - uint64_t input; | ||
| 61 | - uint64_t output; | ||
| 62 | - uint64_t cclBufferSize; | ||
| 63 | -}; | ||
| 64 | - | ||
| 65 | -enum class AivNotifyType { | ||
| 66 | - ACK, | ||
| 67 | - DataSignal, | ||
| 68 | - Done | ||
| 69 | -}; | ||
| 70 | - | ||
| 71 | -enum class CommPattern { | ||
| 72 | - //server间 | ||
| 73 | - interRank, | ||
| 74 | - //server内 | ||
| 75 | - intraRank | ||
| 76 | -}; | ||
| 77 | - | ||
| 78 | - | ||
| 79 | -GM_ADDR buffIn, \ | ||
| 80 | -uint64_t input, uint64_t output, uint32_t rank, uint32_t sendRecvRemoteRank, uint32_t rankSize, uint64_t xRankSize, uint64_t yRankSize, uint64_t zRankSize, uint64_t len, \ | ||
| 81 | -uint32_t dataType, uint32_t reduceOp, uint32_t root, uint32_t sliceId, \ | ||
| 82 | -uint64_t inputSliceStride, uint64_t outputSliceStride, uint64_t repeatNum, uint64_t inputRepeatStride, uint64_t outputRepeatStride, \ | ||
| 83 | -uint32_t numBlocks, bool isOpBase, \ | ||
| 84 | -GM_ADDR headCountMem, \ | ||
| 85 | -GM_ADDR tailCountMem, GM_ADDR addOneMem, uint32_t counterMemSize, bool isEnableCounter | ||
| 86 | - | ||
| 87 | - | ||
| 88 | -KERNEL_ARGS_DEF, ExtraArgs extraArgs | ||
| 89 | - | ||
| 90 | - | ||
| 91 | -buffIn, \ | ||
| 92 | -input, output, rank, sendRecvRemoteRank, rankSize, xRankSize, yRankSize, zRankSize, len, dataType, reduceOp, root, sliceId, \ | ||
| 93 | -inputSliceStride, outputSliceStride, repeatNum, inputRepeatStride, outputRepeatStride, \ | ||
| 94 | -numBlocks, isOpBase, \ | ||
| 95 | -headCountMem, tailCountMem, addOneMem, counterMemSize, isEnableCounter | ||
| 96 | - | ||
| 97 | - | ||
| 98 | -KERNEL_ARGS_CALL, extraArgs | ||
| 99 | - | ||
| 100 | - | ||
| 101 | -buffIn, input, output,\ | ||
| 102 | -rank, sendRecvRemoteRank, rankSize, xRankSize, yRankSize, zRankSize, len, dataType, reduceOp, root, \ | ||
| 103 | -inputSliceStride, outputSliceStride, repeatNum, inputRepeatStride, outputRepeatStride, \ | ||
| 104 | -headCountMem, tailCountMem, addOneMem, counterMemSize, isEnableCounter, numBlocks | ||
| 105 | - | ||
| 106 | - | ||
| 107 | -uint64_t args_offset | ||
| 108 | - | ||
| 109 | - | ||
| 110 | - GM_ADDR *param_base = (GM_ADDR *)get_para_base();\ | ||
| 111 | - GM_ADDR hiddenInput = param_base[args_offset++];\ | ||
| 112 | - GM_ADDR input = param_base[args_offset++];\ | ||
| 113 | - GM_ADDR output = param_base[args_offset++] | ||
| 114 | - | ||
| 115 | - | ||
| 116 | -GM_ADDR hiddenInput, GM_ADDR input, GM_ADDR output | ||
| 117 | - | ||
| 118 | - | ||
| 119 | -hiddenInput, input, output | ||
| 120 | - | ||
| 121 | - | ||
| 122 | -hiddenInput, input, output | ||
| 123 | - | ||
| 124 | -constexpr uint64_t AIV_FLAG_BUFFER_SIZE = 3 * 1024 * 1024; // aiv算子的flag区域大小 | ||
| 125 | -constexpr uint64_t CLEAR_BUFFER_OFFSET = 1024 * 1024; // 用于清空的aiv buffer的偏移 | ||
| 126 | -constexpr uint64_t SYNC_BUFFER_OFFSET = 2 * 1024 * 1024; // 用于sync的aiv buffer的偏移 | ||
| 127 | -constexpr uint64_t BUFFER_AREA = 1024 * 1024; // aiv算子的单独功能flag区域大小 | ||
| 128 | - | ||
| 129 | -constexpr uint64_t AIV_PING_PONG_FACTOR_TWO = 2; | ||
| 130 | -constexpr uint32_t NUM_BLOCKS_FOUR_PER_RANK_A3 = 4; | ||
| 131 | -constexpr uint32_t MAX_NUM_BLOCKS = 48; | ||
| 132 | - | ||
| 133 | -constexpr uint64_t FLAG_SIZE = 128; | ||
| 134 | -constexpr uint64_t UB_ALIGN_SIZE = 32; | ||
| 135 | -constexpr uint64_t UB_FLAG_SIZE = 32; | ||
| 136 | -constexpr uint64_t UB_FLAG_SIZE_4 = UB_FLAG_SIZE * 4; | ||
| 137 | -constexpr uint64_t UB_FLAG_SIZE_8 = UB_FLAG_SIZE * 8; | ||
| 138 | -constexpr uint64_t UB_MAX_DATA_SIZE = 190 * 1024; | ||
| 139 | -constexpr uint64_t UB_DB_DATA_BATCH_SIZE = UB_MAX_DATA_SIZE / 2; | ||
| 140 | -constexpr uint32_t MaxBufferSize = 200 * 1024 * 1024; | ||
| 141 | - | ||
| 142 | -constexpr uint64_t ATOMIC_FLAG_SIZE = 512; | ||
| 143 | -constexpr uint64_t FLAG_ONE_OFFSET = 0; | ||
| 144 | -constexpr uint64_t FLAG_TWO_OFFSET = FLAG_SIZE; | ||
| 145 | -constexpr uint64_t FLAG_THREE_OFFSET = FLAG_SIZE * 2; | ||
| 146 | -constexpr uint64_t FLAG_FOUR_OFFSET = FLAG_SIZE * 3; | ||
| 147 | -constexpr uint64_t FLAG_FIVE_OFFSET = FLAG_SIZE * 4; | ||
| 148 | - | ||
| 149 | -constexpr uint64_t DOUBLE = 2; | ||
| 150 | -constexpr uint64_t FLAG_BUF_NUM = 3; | ||
| 151 | -constexpr uint64_t TILING_NUM = 4; | ||
| 152 | -constexpr uint64_t CHUNK_SIZE = 2048; | ||
| 153 | - | ||
| 154 | -constexpr int32_t TAG_INIT_VALUE = 1; | ||
| 155 | -constexpr int32_t TAG_RESET_COUNT = 1000; | ||
| 156 | -constexpr uint32_t AIV_FLAG_CLEAR_OFFSET = 512 * 1024; | ||
| 157 | -// 相对于GM_OUT,前同步、尾同步使用的同步标记区的偏移,也是普通标记区的大小 | ||
| 158 | -constexpr uint32_t FLAG1_OFFSET = AivCommInfoLayout::FLAG1_OFFSET; | ||
| 159 | -constexpr uint32_t FLAG2_OFFSET = AivCommInfoLayout::FLAG2_OFFSET; | ||
| 160 | -constexpr uint32_t BASE_FLAG_OFFSET = AivCommInfoLayout::BASE_FLAG_OFFSET; | ||
| 161 | -constexpr uint32_t AIV_FLAG_EMPTY_OFFSET = AivCommInfoLayout::EMPTY_CLEAR_OFFSET; | ||
| 162 | -constexpr uint32_t GM_OUT_PING_OFFSET = AivCommInfoLayout::PING_OFFSET; | ||
| 163 | -constexpr uint32_t GM_OUT_PONG_OFFSET = AivCommInfoLayout::PONG_OFFSET; | ||
| 164 | - | ||
| 165 | -/** | ||
| 166 | - * ccl buffers GM_OUT Tag(大小4) flag1 flag2 BarrierBase Clear data1 data2 | ||
| 167 | - * 0 | 16K | 512K | 1M | 5M | 9M | 10M | 18M | 34M | ||
| 168 | - * BUFFER_OUT_ADDR_OFFSET | AIV_FLAG_CLEAR_OFFSET | FLAG1_OFFSET| FLAG2_OFFSET | BASE_FLAG_OFFSET | AIV_FLAG_EMPTY_OFFSET |GM_OUT_PING_OFFSET | GM_OUT_PONG_OFFSET | ||
| 169 | - */ | ||
| 170 | - | ||
| 171 | 17 | ||
| 172 | class AivCommBase { | 18 | class AivCommBase { |
| 173 | public: | 19 | public: |
| @@ -32,7 +32,7 @@ | |||
| 32 | 32 | ||
| 33 | 33 | ||
| 34 | 34 | ||
| 35 | - | 35 | +#include "sim_common_api.h" |
| 36 | 36 | ||
| 37 | extern "C" uint8_t GetOpExpansionMode(); | 37 | extern "C" uint8_t GetOpExpansionMode(); |
| 38 | 38 | ||
| @@ -360,8 +360,8 @@ HcclResult HcclAlltoAll(const void *sendBuf, uint64_t sendCount, HcclDataType se | |||
| 360 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 360 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 361 | HCCL_VM_INFO("sendCount = {}", sendCount); | 361 | HCCL_VM_INFO("sendCount = {}", sendCount); |
| 362 | HCCL_VM_INFO("recvCount = {}", recvCount); | 362 | HCCL_VM_INFO("recvCount = {}", recvCount); |
| 363 | - HCCL_VM_INFO("sendType = {}", static_cast<int>(sendType)); | 363 | + HCCL_VM_INFO("sendType = {}", GetDataTypeStr(sendType)); |
| 364 | - HCCL_VM_INFO("recvType = {}", static_cast<int>(recvType)); | 364 | + HCCL_VM_INFO("recvType = {}", GetDataTypeStr(recvType)); |
| 365 | HCCL_VM_INFO("comm = {:p}", comm); | 365 | HCCL_VM_INFO("comm = {:p}", comm); |
| 366 | HCCL_VM_INFO("stream = {:p}", stream); | 366 | HCCL_VM_INFO("stream = {:p}", stream); |
| 367 | 367 | ||
| @@ -370,12 +370,12 @@ HcclResult HcclAlltoAll(const void *sendBuf, uint64_t sendCount, HcclDataType se | |||
| 370 | // 注册input、output buffer | 370 | // 注册input、output buffer |
| 371 | uint32_t inDataSize = 0; | 371 | uint32_t inDataSize = 0; |
| 372 | if (sim::GetDataTypeSize(sendType, inDataSize) != HcclResult::HCCL_SUCCESS) { | 372 | if (sim::GetDataTypeSize(sendType, inDataSize) != HcclResult::HCCL_SUCCESS) { |
| 373 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAll send type calc size", static_cast<uint16_t>(sendType)); | 373 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAll send type calc size", GetDataTypeStr(sendType)); |
| 374 | return HcclResult::HCCL_E_NOT_SUPPORT; | 374 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 375 | } | 375 | } |
| 376 | uint32_t outDataSize = 0; | 376 | uint32_t outDataSize = 0; |
| 377 | if (sim::GetDataTypeSize(recvType, outDataSize) != HcclResult::HCCL_SUCCESS) { | 377 | if (sim::GetDataTypeSize(recvType, outDataSize) != HcclResult::HCCL_SUCCESS) { |
| 378 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAll recv type calc size", static_cast<uint16_t>(recvType)); | 378 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAll recv type calc size", GetDataTypeStr(recvType)); |
| 379 | return HcclResult::HCCL_E_NOT_SUPPORT; | 379 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 380 | } | 380 | } |
| 381 | uint64_t inputSize = static_cast<uint64_t>(inDataSize) * sendCount * rankSize; | 381 | uint64_t inputSize = static_cast<uint64_t>(inDataSize) * sendCount * rankSize; |
| @@ -417,8 +417,8 @@ HcclResult HcclAlltoAllVC(const void *sendBuf, const void *sendCountMatrix, Hccl | |||
| 417 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); | 417 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); |
| 418 | HCCL_VM_INFO("sendCountMatrix = {:p}", sendCountMatrix); | 418 | HCCL_VM_INFO("sendCountMatrix = {:p}", sendCountMatrix); |
| 419 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 419 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 420 | - HCCL_VM_INFO("sendType = {}", static_cast<int>(sendType)); | 420 | + HCCL_VM_INFO("sendType = {}", GetDataTypeStr(sendType)); |
| 421 | - HCCL_VM_INFO("recvType = {}", static_cast<int>(recvType)); | 421 | + HCCL_VM_INFO("recvType = {}", GetDataTypeStr(recvType)); |
| 422 | HCCL_VM_INFO("comm = {:p}", comm); | 422 | HCCL_VM_INFO("comm = {:p}", comm); |
| 423 | HCCL_VM_INFO("stream = {:p}", stream); | 423 | HCCL_VM_INFO("stream = {:p}", stream); |
| 424 | 424 | ||
| @@ -440,12 +440,12 @@ HcclResult HcclAlltoAllVC(const void *sendBuf, const void *sendCountMatrix, Hccl | |||
| 440 | 440 | ||
| 441 | uint32_t sendDataSize = 0; | 441 | uint32_t sendDataSize = 0; |
| 442 | if (sim::GetDataTypeSize(sendType, sendDataSize) != HcclResult::HCCL_SUCCESS) { | 442 | if (sim::GetDataTypeSize(sendType, sendDataSize) != HcclResult::HCCL_SUCCESS) { |
| 443 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllVC send type calc size", static_cast<uint16_t>(sendType)); | 443 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllVC send type calc size", GetDataTypeStr(sendType)); |
| 444 | return HcclResult::HCCL_E_NOT_SUPPORT; | 444 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 445 | } | 445 | } |
| 446 | uint32_t recvDataSize = 0; | 446 | uint32_t recvDataSize = 0; |
| 447 | if (sim::GetDataTypeSize(recvType, recvDataSize) != HcclResult::HCCL_SUCCESS) { | 447 | if (sim::GetDataTypeSize(recvType, recvDataSize) != HcclResult::HCCL_SUCCESS) { |
| 448 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllVC recv type calc size", static_cast<uint16_t>(recvType)); | 448 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllVC recv type calc size", GetDataTypeStr(recvType)); |
| 449 | return HcclResult::HCCL_E_NOT_SUPPORT; | 449 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 450 | } | 450 | } |
| 451 | 451 | ||
| @@ -483,8 +483,8 @@ HcclResult HcclAlltoAllV(const void *sendBuf, const void *sendCounts, const void | |||
| 483 | HCCL_VM_INFO("HcclAlltoAllV called with parameters:"); | 483 | HCCL_VM_INFO("HcclAlltoAllV called with parameters:"); |
| 484 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); | 484 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); |
| 485 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 485 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 486 | - HCCL_VM_INFO("sendType = {}", static_cast<int>(sendType)); | 486 | + HCCL_VM_INFO("sendType = {}", GetDataTypeStr(sendType)); |
| 487 | - HCCL_VM_INFO("recvType = {}", static_cast<int>(recvType)); | 487 | + HCCL_VM_INFO("recvType = {}", GetDataTypeStr(recvType)); |
| 488 | HCCL_VM_INFO("comm = {:p}", comm); | 488 | HCCL_VM_INFO("comm = {:p}", comm); |
| 489 | HCCL_VM_INFO("stream = {:p}", stream); | 489 | HCCL_VM_INFO("stream = {:p}", stream); |
| 490 | 490 | ||
| @@ -495,12 +495,12 @@ HcclResult HcclAlltoAllV(const void *sendBuf, const void *sendCounts, const void | |||
| 495 | // auto outDataSize = DATA_TYPE_SIZE_MAP.at(recvType); | 495 | // auto outDataSize = DATA_TYPE_SIZE_MAP.at(recvType); |
| 496 | uint32_t inDataSize = 0; | 496 | uint32_t inDataSize = 0; |
| 497 | if (sim::GetDataTypeSize(sendType, inDataSize) != HcclResult::HCCL_SUCCESS) { | 497 | if (sim::GetDataTypeSize(sendType, inDataSize) != HcclResult::HCCL_SUCCESS) { |
| 498 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllV send type calc size", static_cast<uint16_t>(sendType)); | 498 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllV send type calc size", GetDataTypeStr(sendType)); |
| 499 | return HcclResult::HCCL_E_NOT_SUPPORT; | 499 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 500 | } | 500 | } |
| 501 | uint32_t outDataSize = 0; | 501 | uint32_t outDataSize = 0; |
| 502 | if (sim::GetDataTypeSize(recvType, outDataSize) != HcclResult::HCCL_SUCCESS) { | 502 | if (sim::GetDataTypeSize(recvType, outDataSize) != HcclResult::HCCL_SUCCESS) { |
| 503 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllV recv type calc size", static_cast<uint16_t>(recvType)); | 503 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAlltoAllV recv type calc size", GetDataTypeStr(recvType)); |
| 504 | return HcclResult::HCCL_E_NOT_SUPPORT; | 504 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 505 | } | 505 | } |
| 506 | uint64_t inCountTotal = 0; | 506 | uint64_t inCountTotal = 0; |
| @@ -566,7 +566,7 @@ HcclResult HcclAllGather(void *sendBuf, void *recvBuf, uint64_t sendCount, HcclD | |||
| 566 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); | 566 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); |
| 567 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 567 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 568 | HCCL_VM_INFO("sendCount = {}", sendCount); | 568 | HCCL_VM_INFO("sendCount = {}", sendCount); |
| 569 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 569 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 570 | HCCL_VM_INFO("comm = {:p}", comm); | 570 | HCCL_VM_INFO("comm = {:p}", comm); |
| 571 | HCCL_VM_INFO("stream = {:p}", stream); | 571 | HCCL_VM_INFO("stream = {:p}", stream); |
| 572 | 572 | ||
| @@ -576,7 +576,7 @@ HcclResult HcclAllGather(void *sendBuf, void *recvBuf, uint64_t sendCount, HcclD | |||
| 576 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); | 576 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); |
| 577 | uint32_t dataSize = 0; | 577 | uint32_t dataSize = 0; |
| 578 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 578 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 579 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAllGather calc size", static_cast<uint16_t>(dataType)); | 579 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAllGather calc size", GetDataTypeStr(dataType)); |
| 580 | return HcclResult::HCCL_E_NOT_SUPPORT; | 580 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 581 | } | 581 | } |
| 582 | uint64_t inputSize = static_cast<uint64_t>(dataSize) * sendCount; | 582 | uint64_t inputSize = static_cast<uint64_t>(dataSize) * sendCount; |
| @@ -613,7 +613,7 @@ HcclResult HcclAllGatherV(void *sendBuf, uint64_t sendCount, void *recvBuf, | |||
| 613 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 613 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 614 | HCCL_VM_INFO("recvCounts = {:p}", recvCounts); | 614 | HCCL_VM_INFO("recvCounts = {:p}", recvCounts); |
| 615 | HCCL_VM_INFO("recvDispls = {:p}", recvDispls); | 615 | HCCL_VM_INFO("recvDispls = {:p}", recvDispls); |
| 616 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 616 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 617 | HCCL_VM_INFO("comm = {:p}", comm); | 617 | HCCL_VM_INFO("comm = {:p}", comm); |
| 618 | HCCL_VM_INFO("stream = {:p}", stream); | 618 | HCCL_VM_INFO("stream = {:p}", stream); |
| 619 | 619 | ||
| @@ -638,7 +638,7 @@ HcclResult HcclAllGatherV(void *sendBuf, uint64_t sendCount, void *recvBuf, | |||
| 638 | 638 | ||
| 639 | uint32_t dataSize = 0; | 639 | uint32_t dataSize = 0; |
| 640 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 640 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 641 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAllGatherV calc size", static_cast<uint16_t>(dataType)); | 641 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAllGatherV calc size", GetDataTypeStr(dataType)); |
| 642 | return HcclResult::HCCL_E_NOT_SUPPORT; | 642 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 643 | } | 643 | } |
| 644 | const uint64_t inputSize = sendCount * dataSize; | 644 | const uint64_t inputSize = sendCount * dataSize; |
| @@ -674,7 +674,7 @@ HcclResult HcclBroadcast( | |||
| 674 | HCCL_VM_INFO("HcclBroadcast called with parameters:"); | 674 | HCCL_VM_INFO("HcclBroadcast called with parameters:"); |
| 675 | HCCL_VM_INFO("buf = {:p}", buf); | 675 | HCCL_VM_INFO("buf = {:p}", buf); |
| 676 | HCCL_VM_INFO("count = {}", count); | 676 | HCCL_VM_INFO("count = {}", count); |
| 677 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 677 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 678 | HCCL_VM_INFO("root = {}", root); | 678 | HCCL_VM_INFO("root = {}", root); |
| 679 | HCCL_VM_INFO("comm = {:p}", comm); | 679 | HCCL_VM_INFO("comm = {:p}", comm); |
| 680 | HCCL_VM_INFO("stream = {:p}", stream); | 680 | HCCL_VM_INFO("stream = {:p}", stream); |
| @@ -685,7 +685,7 @@ HcclResult HcclBroadcast( | |||
| 685 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); | 685 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); |
| 686 | uint32_t dataSize = 0; | 686 | uint32_t dataSize = 0; |
| 687 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 687 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 688 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclBroadcast calc size", static_cast<uint16_t>(dataType)); | 688 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclBroadcast calc size", GetDataTypeStr(dataType)); |
| 689 | return HcclResult::HCCL_E_NOT_SUPPORT; | 689 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 690 | } | 690 | } |
| 691 | uint64_t size = static_cast<uint64_t>(dataSize) * count; | 691 | uint64_t size = static_cast<uint64_t>(dataSize) * count; |
| @@ -716,15 +716,15 @@ HcclResult HcclAllReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataT | |||
| 716 | HcclComm comm, aclrtStream stream) | 716 | HcclComm comm, aclrtStream stream) |
| 717 | { | 717 | { |
| 718 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { | 718 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { |
| 719 | - HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclAllReduce", static_cast<uint16_t>(dataType), static_cast<uint16_t>(op)); | 719 | + HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclAllReduce", GetDataTypeStr(dataType), GetReduceOpStr(op)); |
| 720 | return HcclResult::HCCL_E_NOT_SUPPORT; | 720 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 721 | } | 721 | } |
| 722 | HCCL_VM_INFO("HcclAllReduce called with parameters:"); | 722 | HCCL_VM_INFO("HcclAllReduce called with parameters:"); |
| 723 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); | 723 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); |
| 724 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 724 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 725 | HCCL_VM_INFO("count = {}", count); | 725 | HCCL_VM_INFO("count = {}", count); |
| 726 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 726 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 727 | - HCCL_VM_INFO("op = {}", static_cast<int>(op)); | 727 | + HCCL_VM_INFO("op = {}", GetReduceOpStr(op)); |
| 728 | HCCL_VM_INFO("comm = {:p}", comm); | 728 | HCCL_VM_INFO("comm = {:p}", comm); |
| 729 | HCCL_VM_INFO("stream = {:p}", stream); | 729 | HCCL_VM_INFO("stream = {:p}", stream); |
| 730 | 730 | ||
| @@ -734,7 +734,7 @@ HcclResult HcclAllReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataT | |||
| 734 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); | 734 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); |
| 735 | uint32_t dataSize = 0; | 735 | uint32_t dataSize = 0; |
| 736 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 736 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 737 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAllReduce calc size", static_cast<uint16_t>(dataType)); | 737 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclAllReduce calc size", GetDataTypeStr(dataType)); |
| 738 | return HcclResult::HCCL_E_NOT_SUPPORT; | 738 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 739 | } | 739 | } |
| 740 | uint64_t size = static_cast<uint64_t>(dataSize) * count; | 740 | uint64_t size = static_cast<uint64_t>(dataSize) * count; |
| @@ -766,7 +766,7 @@ HcclResult HcclScatter(void *sendBuf, void *recvBuf, uint64_t recvCount, HcclDat | |||
| 766 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); | 766 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); |
| 767 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 767 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 768 | HCCL_VM_INFO("recvCount = {}", recvCount); | 768 | HCCL_VM_INFO("recvCount = {}", recvCount); |
| 769 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 769 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 770 | HCCL_VM_INFO("root = {}", root); | 770 | HCCL_VM_INFO("root = {}", root); |
| 771 | HCCL_VM_INFO("comm = {:p}", comm); | 771 | HCCL_VM_INFO("comm = {:p}", comm); |
| 772 | HCCL_VM_INFO("stream = {:p}", stream); | 772 | HCCL_VM_INFO("stream = {:p}", stream); |
| @@ -777,7 +777,7 @@ HcclResult HcclScatter(void *sendBuf, void *recvBuf, uint64_t recvCount, HcclDat | |||
| 777 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); | 777 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); |
| 778 | uint32_t dataSize = 0; | 778 | uint32_t dataSize = 0; |
| 779 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 779 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 780 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclScatter calc size", static_cast<uint16_t>(dataType)); | 780 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclScatter calc size", GetDataTypeStr(dataType)); |
| 781 | return HcclResult::HCCL_E_NOT_SUPPORT; | 781 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 782 | } | 782 | } |
| 783 | uint64_t inputValueSize = 0; | 783 | uint64_t inputValueSize = 0; |
| @@ -831,15 +831,15 @@ HcclResult HcclReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataType | |||
| 831 | uint32_t root, HcclComm comm, aclrtStream stream) | 831 | uint32_t root, HcclComm comm, aclrtStream stream) |
| 832 | { | 832 | { |
| 833 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { | 833 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { |
| 834 | - HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclReduce", static_cast<uint16_t>(dataType), static_cast<uint16_t>(op)); | 834 | + HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclReduce", GetDataTypeStr(dataType), GetReduceOpStr(op)); |
| 835 | return HcclResult::HCCL_E_NOT_SUPPORT; | 835 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 836 | } | 836 | } |
| 837 | HCCL_VM_INFO("HcclReduce called with parameters:"); | 837 | HCCL_VM_INFO("HcclReduce called with parameters:"); |
| 838 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); | 838 | HCCL_VM_INFO("sendBuf = {:p}", sendBuf); |
| 839 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 839 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 840 | HCCL_VM_INFO("count = {}", count); | 840 | HCCL_VM_INFO("count = {}", count); |
| 841 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 841 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 842 | - HCCL_VM_INFO("reduce op = {}", static_cast<int>(op)); | 842 | + HCCL_VM_INFO("reduce op = {}", GetReduceOpStr(op)); |
| 843 | HCCL_VM_INFO("root = {}", root); | 843 | HCCL_VM_INFO("root = {}", root); |
| 844 | HCCL_VM_INFO("comm = {:p}", comm); | 844 | HCCL_VM_INFO("comm = {:p}", comm); |
| 845 | HCCL_VM_INFO("stream = {:p}", stream); | 845 | HCCL_VM_INFO("stream = {:p}", stream); |
| @@ -850,7 +850,7 @@ HcclResult HcclReduce(void *sendBuf, void *recvBuf, uint64_t count, HcclDataType | |||
| 850 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); | 850 | // auto dataSize = DATA_TYPE_SIZE_MAP.at(dataType); |
| 851 | uint32_t dataSize = 0; | 851 | uint32_t dataSize = 0; |
| 852 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 852 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 853 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclReduce calc size", static_cast<uint16_t>(dataType)); | 853 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclReduce calc size", GetDataTypeStr(dataType)); |
| 854 | return HcclResult::HCCL_E_NOT_SUPPORT; | 854 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 855 | } | 855 | } |
| 856 | uint64_t size = static_cast<uint64_t>(dataSize) * count; | 856 | uint64_t size = static_cast<uint64_t>(dataSize) * count; |
| @@ -882,7 +882,7 @@ HcclResult HcclReduceScatter(void *sendBuf, void *recvBuf, uint64_t recvCount, H | |||
| 882 | HcclComm comm, aclrtStream stream) | 882 | HcclComm comm, aclrtStream stream) |
| 883 | { | 883 | { |
| 884 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { | 884 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { |
| 885 | - HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclReduceScatter", static_cast<uint16_t>(dataType), static_cast<uint16_t>(op)); | 885 | + HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclReduceScatter", GetDataTypeStr(dataType), GetReduceOpStr(op)); |
| 886 | return HcclResult::HCCL_E_NOT_SUPPORT; | 886 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 887 | } | 887 | } |
| 888 | HCCL_VM_INFO("HcclReduceScatter called with parameters:"); | 888 | HCCL_VM_INFO("HcclReduceScatter called with parameters:"); |
| @@ -899,7 +899,7 @@ HcclResult HcclReduceScatter(void *sendBuf, void *recvBuf, uint64_t recvCount, H | |||
| 899 | // 注册input、output buffer | 899 | // 注册input、output buffer |
| 900 | uint32_t dataSize = 0; | 900 | uint32_t dataSize = 0; |
| 901 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 901 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 902 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclReduceScatter calc size", static_cast<uint16_t>(dataType)); | 902 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclReduceScatter calc size", GetDataTypeStr(dataType)); |
| 903 | return HcclResult::HCCL_E_NOT_SUPPORT; | 903 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 904 | } | 904 | } |
| 905 | uint64_t inputSize = static_cast<uint64_t>(dataSize) * recvCount * rankSize; | 905 | uint64_t inputSize = static_cast<uint64_t>(dataSize) * recvCount * rankSize; |
| @@ -931,7 +931,7 @@ HcclResult HcclReduceScatterV(void *sendBuf, const void *sendCounts, const void | |||
| 931 | void *recvBuf, uint64_t recvCount, HcclDataType dataType, HcclReduceOp op, HcclComm comm, aclrtStream stream) | 931 | void *recvBuf, uint64_t recvCount, HcclDataType dataType, HcclReduceOp op, HcclComm comm, aclrtStream stream) |
| 932 | { | 932 | { |
| 933 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { | 933 | if (CheckDataAndReduceOpType(dataType, op) != HcclResult::HCCL_SUCCESS) { |
| 934 | - HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclReduceScatterV", static_cast<uint16_t>(dataType), static_cast<uint16_t>(op)); | 934 | + HCCL_VM_ERROR("HCCL_VM not support data type {} or reduce {} op for HcclReduceScatterV", GetDataTypeStr(dataType), GetReduceOpStr(op)); |
| 935 | return HcclResult::HCCL_E_NOT_SUPPORT; | 935 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 936 | } | 936 | } |
| 937 | HCCL_VM_INFO("HcclReduceScatterV called with parameters:"); | 937 | HCCL_VM_INFO("HcclReduceScatterV called with parameters:"); |
| @@ -940,8 +940,8 @@ HcclResult HcclReduceScatterV(void *sendBuf, const void *sendCounts, const void | |||
| 940 | HCCL_VM_INFO("sendDispls = {:p}", sendDispls); | 940 | HCCL_VM_INFO("sendDispls = {:p}", sendDispls); |
| 941 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); | 941 | HCCL_VM_INFO("recvBuf = {:p}", recvBuf); |
| 942 | HCCL_VM_INFO("recvCount = {}", recvCount); | 942 | HCCL_VM_INFO("recvCount = {}", recvCount); |
| 943 | - HCCL_VM_INFO("dataType = {}", static_cast<int>(dataType)); | 943 | + HCCL_VM_INFO("dataType = {}", GetDataTypeStr(dataType)); |
| 944 | - HCCL_VM_INFO("reduce op = {}", static_cast<int>(op)); | 944 | + HCCL_VM_INFO("reduce op = {}", GetReduceOpStr(op)); |
| 945 | HCCL_VM_INFO("comm = {:p}", comm); | 945 | HCCL_VM_INFO("comm = {:p}", comm); |
| 946 | HCCL_VM_INFO("stream = {:p}", stream); | 946 | HCCL_VM_INFO("stream = {:p}", stream); |
| 947 | 947 | ||
| @@ -966,7 +966,7 @@ HcclResult HcclReduceScatterV(void *sendBuf, const void *sendCounts, const void | |||
| 966 | 966 | ||
| 967 | uint32_t dataSize = 0; | 967 | uint32_t dataSize = 0; |
| 968 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { | 968 | if (sim::GetDataTypeSize(dataType, dataSize) != HcclResult::HCCL_SUCCESS) { |
| 969 | - HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclReduceScatterV calc size", static_cast<uint16_t>(dataType)); | 969 | + HCCL_VM_ERROR("HCCL_VM not support data type {} for HcclReduceScatterV calc size", GetDataTypeStr(dataType)); |
| 970 | return HcclResult::HCCL_E_NOT_SUPPORT; | 970 | return HcclResult::HCCL_E_NOT_SUPPORT; |
| 971 | } | 971 | } |
| 972 | const uint64_t inputSize = totalSendCount * dataSize; | 972 | const uint64_t inputSize = totalSendCount * dataSize; |
| @@ -522,6 +522,14 @@ int RaGetDevEidInfoList(struct RaInfo info, struct HccpDevEidInfo infoList[], un | |||
| 522 | infoList[idx].chipId = info.phyId; // todo: 单server, logic id与rank id相等,但多server此处有问题。 | 522 | infoList[idx].chipId = info.phyId; // todo: 单server, logic id与rank id相等,但多server此处有问题。 |
| 523 | infoList[idx].dieId = endPoints[idx].die_id; | 523 | infoList[idx].dieId = endPoints[idx].die_id; |
| 524 | memcpy(infoList[idx].eid.raw, endPoints[idx].eid, sizeof(endPoints[idx].eid)); | 524 | memcpy(infoList[idx].eid.raw, endPoints[idx].eid, sizeof(endPoints[idx].eid)); |
| 525 | + | ||
| 526 | + Eid eid{}; | ||
| 527 | + for (uint32_t i = 0; i < URMA_EID_LEN; i++) { | ||
| 528 | + eid.raw[i] = endPoints[idx].eid[i]; | ||
| 529 | + } | ||
| 530 | + IpAddress addr(eid); | ||
| 531 | + auto ipAddr = addr.GetIpStr().substr(2); | ||
| 532 | + HCCL_VM_INFO("ipAddr: {}, phyId: {}, serverKey=: {}", ipAddr, info.phyId, g_cur_server_key); | ||
| 525 | } | 533 | } |
| 526 | 534 | ||
| 527 | return 0; | 535 | return 0; |
| @@ -446,14 +446,14 @@ int RaSocketSend(const void *fdHandle, const void *data, unsigned long long size | |||
| 446 | std::string socketKey; | 446 | std::string socketKey; |
| 447 | GetRaSendSocketkeyByFd(socketFd, socketKey); | 447 | GetRaSendSocketkeyByFd(socketFd, socketKey); |
| 448 | 448 | ||
| 449 | - int ret = sim::CommunicationMemoryManager::GetInstance().WriteCommMem(socketKey.data(), data, size); | 449 | + int64_t ret = sim::CommunicationMemoryManager::GetInstance().WriteCommMem(socketKey.data(), data, size); |
| 450 | - if (ret != 0) { | 450 | + if (ret == -1) { |
| 451 | HCCL_VM_ERROR(" cannot pair socket:{:d} role:{:d}, key={}", FD_PAIR_ID(socketFd), | 451 | HCCL_VM_ERROR(" cannot pair socket:{:d} role:{:d}, key={}", FD_PAIR_ID(socketFd), |
| 452 | FD_ROLE(socketFd), socketKey); | 452 | FD_ROLE(socketFd), socketKey); |
| 453 | return -1; | 453 | return -1; |
| 454 | } | 454 | } |
| 455 | 455 | ||
| 456 | - *sentSize = size; | 456 | + *sentSize = ret; |
| 457 | HCCL_VM_INFO(" pair socket:{:d} role:{:d} key={} Send:{:d}", FD_PAIR_ID(socketFd), | 457 | HCCL_VM_INFO(" pair socket:{:d} role:{:d} key={} Send:{:d}", FD_PAIR_ID(socketFd), |
| 458 | FD_ROLE(socketFd), socketKey.data(), size); | 458 | FD_ROLE(socketFd), socketKey.data(), size); |
| 459 | 459 | ||
| @@ -470,7 +470,6 @@ int RaSocketRecv(const void *fdHandle, void *data, unsigned long long size, unsi | |||
| 470 | if (ret == 0) { | 470 | if (ret == 0) { |
| 471 | HCCL_VM_WARN(" socket pair:{:d} role:{:d}, key={} read try again", | 471 | HCCL_VM_WARN(" socket pair:{:d} role:{:d}, key={} read try again", |
| 472 | FD_PAIR_ID(socketFd), FD_ROLE(socketFd), socketKey); | 472 | FD_PAIR_ID(socketFd), FD_ROLE(socketFd), socketKey); |
| 473 | - std::this_thread::sleep_for(std::chrono::milliseconds(500)); | ||
| 474 | return SOCK_EAGAIN; | 473 | return SOCK_EAGAIN; |
| 475 | } else if (ret == -1) { | 474 | } else if (ret == -1) { |
| 476 | HCCL_VM_ERROR(" socket pair:{:d} role:{:d}, key={} recv failed", | 475 | HCCL_VM_ERROR(" socket pair:{:d} role:{:d}, key={} recv failed", |
| @@ -568,7 +567,8 @@ int RaSocketRecvAsync(const void *fdHandle, void *data, unsigned long long size, | |||
| 568 | if (ret == 0) { | 567 | if (ret == 0) { |
| 569 | HCCL_VM_WARN(" socket pair:{:d} role:{:d} key:{} try again", | 568 | HCCL_VM_WARN(" socket pair:{:d} role:{:d} key:{} try again", |
| 570 | FD_PAIR_ID(socketFd), FD_ROLE(socketFd), socketKey); | 569 | FD_PAIR_ID(socketFd), FD_ROLE(socketFd), socketKey); |
| 571 | - std::this_thread::sleep_for(std::chrono::milliseconds(100)); | 570 | + std::this_thread::sleep_for(std::chrono::milliseconds(1)); |
| 571 | + *receivedSize = 0; | ||
| 572 | return 0; | 572 | return 0; |
| 573 | } else if (ret == -1) { | 573 | } else if (ret == -1) { |
| 574 | HCCL_VM_ERROR(" socket pair:{:d} role:{:d} key:{} recv failed", | 574 | HCCL_VM_ERROR(" socket pair:{:d} role:{:d} key:{} recv failed", |
| @@ -927,13 +927,13 @@ int RaGetDevBaseAttr(void *ctxHandle, struct DevBaseAttr *attr) | |||
| 927 | priorityInfo.tpType.bs.rtp = 1; | 927 | priorityInfo.tpType.bs.rtp = 1; |
| 928 | } | 928 | } |
| 929 | 929 | ||
| 930 | - attr->sqMaxDepth = 1024; | 930 | + attr->sqMaxDepth = 8192; // max_jfs_depth |
| 931 | - attr->rqMaxDepth = 1024; | 931 | + attr->rqMaxDepth = 32768; // max_jfr_depth |
| 932 | - attr->sqMaxSge = 8; | 932 | + attr->sqMaxSge = 13; // max_jfs_sge |
| 933 | - attr->rqMaxSge = 8; | 933 | + attr->rqMaxSge = 4; // max_jfr_sge |
| 934 | - attr->maxReadSize = 1024 * 1024; | 934 | + attr->maxReadSize = 256 * 1024 * 1024; // max_read_size |
| 935 | - attr->maxWriteSize = 1024 * 1024; | 935 | + attr->maxWriteSize = 256 * 1024 * 1024; // max_write_size |
| 936 | - attr->maxMsgSize = 2ULL * 1024 * 1024 * 1024; | 936 | + attr->maxMsgSize = 65536; // max_msg_size |
| 937 | 937 | ||
| 938 | return 0; | 938 | return 0; |
| 939 | } | 939 | } |
| @@ -99,7 +99,7 @@ aclError GetDeviceByServerKeyAndPhysicalId(uint64_t serverKey, uint32_t deviceId | |||
| 99 | return ACL_SUCCESS; | 99 | return ACL_SUCCESS; |
| 100 | } | 100 | } |
| 101 | 101 | ||
| 102 | -aclError UpdateDeviceLogicId(uint64_t serverKey, uint32_t phyDevId, uint32_t logicDevId) | 102 | +aclError UpdateDeviceLogicId(uint64_t serverKey, uint32_t phyDevId, uint32_t logicDevId, uint32_t userId) |
| 103 | { | 103 | { |
| 104 | sim::Device device{}; | 104 | sim::Device device{}; |
| 105 | auto ret = GetDeviceByServerKeyAndPhysicalId(serverKey, phyDevId, device); | 105 | auto ret = GetDeviceByServerKeyAndPhysicalId(serverKey, phyDevId, device); |
| @@ -108,8 +108,9 @@ aclError UpdateDeviceLogicId(uint64_t serverKey, uint32_t phyDevId, uint32_t log | |||
| 108 | } | 108 | } |
| 109 | 109 | ||
| 110 | auto deviceKey = device.id; | 110 | auto deviceKey = device.id; |
| 111 | - RunnerDB::Update<sim::Device>(deviceKey, [deviceKey, logicDevId](sim::Device &dev) { | 111 | + RunnerDB::Update<sim::Device>(deviceKey, [deviceKey, logicDevId, userId](sim::Device &dev) { |
| 112 | dev.logic_id = logicDevId; | 112 | dev.logic_id = logicDevId; |
| 113 | + dev.user_id = userId; | ||
| 113 | dev.status = 1;// 设备状态设置为可用 | 114 | dev.status = 1;// 设备状态设置为可用 |
| 114 | }); | 115 | }); |
| 115 | 116 | ||
| @@ -128,8 +129,10 @@ bool ResetAllDeviceLogicId() | |||
| 128 | 129 | ||
| 129 | for (auto &device : allDevices) { | 130 | for (auto &device : allDevices) { |
| 130 | auto deviceKey = device.id; | 131 | auto deviceKey = device.id; |
| 131 | - RunnerDB::Update<sim::Device>(deviceKey, [deviceKey](sim::Device &dev) { | 132 | + RunnerDB::Update<sim::Device>(deviceKey, [deviceKey](sim::Device &dev) { |
| 132 | dev.logic_id = 0xFFFF; | 133 | dev.logic_id = 0xFFFF; |
| 134 | + dev.status = 0; // 重置设备状态,防止残留 status=1 干扰后续 aclrtGetDeviceCount | ||
| 135 | + dev.user_id = 0xFFFF; | ||
| 133 | }); | 136 | }); |
| 134 | } | 137 | } |
| 135 | 138 | ||
| @@ -12,6 +12,7 @@ | |||
| 12 | 12 | ||
| 13 | 13 | ||
| 14 | 14 | ||
| 15 | + | ||
| 15 | 16 | ||
| 16 | 17 | ||
| 17 | 18 | ||
| @@ -110,37 +111,38 @@ int CommunicationMemoryManager::ReleaseCommMem(const char* name) { | |||
| 110 | return 0; | 111 | return 0; |
| 111 | } | 112 | } |
| 112 | 113 | ||
| 113 | -int CommunicationMemoryManager::WriteCommMem(const char* name, const void* dataPtr, size_t size) | 114 | +int64_t CommunicationMemoryManager::WriteCommMem(const char* name, const void* dataPtr, size_t size) |
| 114 | { | 115 | { |
| 115 | if (!name || !dataPtr || size == 0) { | 116 | if (!name || !dataPtr || size == 0) { |
| 116 | HCCL_VM_ERROR("write invalid params, name: {}, dataPtr: {}, size: {}", name, dataPtr, size); | 117 | HCCL_VM_ERROR("write invalid params, name: {}, dataPtr: {}, size: {}", name, dataPtr, size); |
| 117 | return -1; | 118 | return -1; |
| 118 | } | 119 | } |
| 119 | 120 | ||
| 120 | - std::lock_guard<std::mutex> lock(m_mutex); | 121 | + void* ptr = nullptr; |
| 121 | - if (m_commMemMap.find(name) == m_commMemMap.end()) { | 122 | + { |
| 122 | - HCCL_VM_ERROR("write comm mem not found, name: {}", name); | 123 | + std::lock_guard<std::mutex> lock(m_mutex); |
| 123 | - return -1; | 124 | + auto iter = m_commMemMap.find(name); |
| 125 | + if (iter == m_commMemMap.end()) { | ||
| 126 | + HCCL_VM_ERROR("write comm mem not found, name: {}", name); | ||
| 127 | + return -1; | ||
| 128 | + } | ||
| 129 | + ptr = iter->second; | ||
| 124 | } | 130 | } |
| 125 | - void* ptr = m_commMemMap[name]; | ||
| 126 | MemoryManager::GetInstance().LockMemByName(name); | 131 | MemoryManager::GetInstance().LockMemByName(name); |
| 127 | 132 | ||
| 128 | CommMemHead* head = (CommMemHead*)ptr; | 133 | CommMemHead* head = (CommMemHead*)ptr; |
| 129 | 134 | ||
| 130 | - if (size + head->bufferSize > RA_SOCKET_BUF_SIZE) { | 135 | + int64_t realSend = RA_SOCKET_BUF_SIZE - head->bufferSize; |
| 131 | - MemoryManager::GetInstance().UnlockMemByName(name); | 136 | + realSend = std::min((int64_t)size, realSend); |
| 132 | - HCCL_VM_ERROR("write size too large, size: {}, max: {}", size, RA_SOCKET_BUF_SIZE); | ||
| 133 | - return -1; | ||
| 134 | - } | ||
| 135 | 137 | ||
| 136 | - memcpy(head->data + head->bufferSize, dataPtr, size); | 138 | + memcpy(head->data + head->bufferSize, dataPtr, realSend); |
| 137 | - head->bufferSize += size; | 139 | + head->bufferSize += realSend; |
| 138 | - head->writeTotalBytes += size; | 140 | + head->writeTotalBytes += realSend; |
| 139 | uint64_t totalWrite = head->writeTotalBytes; | 141 | uint64_t totalWrite = head->writeTotalBytes; |
| 140 | 142 | ||
| 141 | MemoryManager::GetInstance().UnlockMemByName(name); | 143 | MemoryManager::GetInstance().UnlockMemByName(name); |
| 142 | - HCCL_VM_INFO("write name: {}, size: {}, totalWriteBytes: {}", name, size, totalWrite); | 144 | + HCCL_VM_INFO("write name: {}, size:{} real:{}, totalWriteBytes: {}", name, size, realSend, totalWrite); |
| 143 | - return 0; | 145 | + return realSend; |
| 144 | } | 146 | } |
| 145 | 147 | ||
| 146 | int CommunicationMemoryManager::ReadCommMem(const char* name, void* dataPtr, size_t size) | 148 | int CommunicationMemoryManager::ReadCommMem(const char* name, void* dataPtr, size_t size) |
| @@ -150,12 +152,16 @@ int CommunicationMemoryManager::ReadCommMem(const char* name, void* dataPtr, siz | |||
| 150 | return -1; | 152 | return -1; |
| 151 | } | 153 | } |
| 152 | 154 | ||
| 153 | - std::lock_guard<std::mutex> lock(m_mutex); | 155 | + void* ptr = nullptr; |
| 154 | - if (m_commMemMap.find(name) == m_commMemMap.end()) { | 156 | + { |
| 155 | - HCCL_VM_ERROR("read comm mem not found, name: {}", name); | 157 | + std::lock_guard<std::mutex> lock(m_mutex); |
| 156 | - return -1; | 158 | + auto iter = m_commMemMap.find(name); |
| 159 | + if (iter == m_commMemMap.end()) { | ||
| 160 | + HCCL_VM_ERROR("read comm mem not found, name: {}", name); | ||
| 161 | + return -1; | ||
| 162 | + } | ||
| 163 | + ptr = iter->second; | ||
| 157 | } | 164 | } |
| 158 | - void* ptr = m_commMemMap[name]; | ||
| 159 | MemoryManager::GetInstance().LockMemByName(name); | 165 | MemoryManager::GetInstance().LockMemByName(name); |
| 160 | 166 | ||
| 161 | CommMemHead* head = (CommMemHead*)ptr; | 167 | CommMemHead* head = (CommMemHead*)ptr; |
| @@ -162,21 +162,30 @@ HcclVmResult AscendClusterTopoParser::InitCommunicationDomain(const TopoMeta& to | |||
| 162 | { | 162 | { |
| 163 | HCCL_VM_DEBUG("Enter InitCommunicationDomain"); | 163 | HCCL_VM_DEBUG("Enter InitCommunicationDomain"); |
| 164 | 164 | ||
| 165 | - uint32_t rankId = 0; | 165 | + // 第一步:初始化所有 server 上的 Device(logic_id = physical_id,保持不变) |
| 166 | for (uint32_t superPodIdx = 0; superPodIdx < topoMeta.size(); ++superPodIdx) { | 166 | for (uint32_t superPodIdx = 0; superPodIdx < topoMeta.size(); ++superPodIdx) { |
| 167 | auto superPod = topoMeta[superPodIdx]; | 167 | auto superPod = topoMeta[superPodIdx]; |
| 168 | for (uint32_t serverIdx = 0; serverIdx < superPod.size(); ++serverIdx) { | 168 | for (uint32_t serverIdx = 0; serverIdx < superPod.size(); ++serverIdx) { |
| 169 | auto server = superPod[serverIdx]; | 169 | auto server = superPod[serverIdx]; |
| 170 | - auto logicDevId = 0; | ||
| 171 | auto serverKey = sim::GetServerKeyById(superPodIdx, serverIdx); | 170 | auto serverKey = sim::GetServerKeyById(superPodIdx, serverIdx); |
| 172 | for (uint32_t deviceIdx = 0; deviceIdx < server.size(); ++deviceIdx) { | 171 | for (uint32_t deviceIdx = 0; deviceIdx < server.size(); ++deviceIdx) { |
| 173 | - if (InitDynamicModelData(serverKey, rankId++, logicDevId++, server[deviceIdx]) != HcclVmResult::HCCL_SIM_SUCCESS) { | 172 | + // logic_id = physical_id = deviceIdx,按顺序递增 |
| 173 | + // todo: 暂时不考虑容器场景,userId == logicDevId | ||
| 174 | + auto userId = deviceIdx; | ||
| 175 | + if (sim::UpdateDeviceLogicId(serverKey, deviceIdx, deviceIdx, userId) != ACL_SUCCESS) { | ||
| 176 | + HCCL_VM_ERROR("update device logic id by serverKey {:d} failed", serverKey); | ||
| 174 | return HcclVmResult::HCCL_SIM_E_INTERNAL; | 177 | return HcclVmResult::HCCL_SIM_E_INTERNAL; |
| 175 | } | 178 | } |
| 176 | } | 179 | } |
| 177 | } | 180 | } |
| 178 | } | 181 | } |
| 179 | 182 | ||
| 183 | + // 第二步:按 rankId % deviceCount 的逻辑创建 Rank 表 | ||
| 184 | + if (InitDynamicModelData(topoMeta) != HcclVmResult::HCCL_SIM_SUCCESS) { | ||
| 185 | + HCCL_VM_ERROR("init dynamic model data failed"); | ||
| 186 | + return HcclVmResult::HCCL_SIM_E_INTERNAL; | ||
| 187 | + } | ||
| 188 | + | ||
| 180 | // 通信域未初始化,则需创建ranktable.json文件 | 189 | // 通信域未初始化,则需创建ranktable.json文件 |
| 181 | if (status_ == HvmClusterStatus::COMM_DOMAIN_UNINIT && !withRanktable) { | 190 | if (status_ == HvmClusterStatus::COMM_DOMAIN_UNINIT && !withRanktable) { |
| 182 | // 根据topoMeta生成ranktable.json文件 | 191 | // 根据topoMeta生成ranktable.json文件 |
| @@ -190,45 +199,56 @@ HcclVmResult AscendClusterTopoParser::InitCommunicationDomain(const TopoMeta& to | |||
| 190 | return HcclVmResult::HCCL_SIM_SUCCESS; | 199 | return HcclVmResult::HCCL_SIM_SUCCESS; |
| 191 | } | 200 | } |
| 192 | 201 | ||
| 193 | -HcclVmResult AscendClusterTopoParser::InitDynamicModelData(uint64_t serverKey, uint32_t rankId, uint32_t logicDevId, uint32_t phyDevId) | 202 | +HcclVmResult AscendClusterTopoParser::InitDynamicModelData(const TopoMeta& topoMeta) |
| 194 | { | 203 | { |
| 195 | - HCCL_VM_DEBUG("Enter InitDynamicModelData: {}, {}, {}, {}", serverKey, rankId, logicDevId, phyDevId); | 204 | + // 应用通过 aclrtSetDevice(rank % deviceCount) 选择 device,Rank 表需与之匹配 |
| 205 | + uint32_t rankId = 0; | ||
| 206 | + for (uint32_t superPodIdx = 0; superPodIdx < topoMeta.size(); ++superPodIdx) { | ||
| 207 | + auto superPod = topoMeta[superPodIdx]; | ||
| 208 | + for (uint32_t serverIdx = 0; serverIdx < superPod.size(); ++serverIdx) { | ||
| 209 | + auto server = superPod[serverIdx]; | ||
| 210 | + auto serverKey = sim::GetServerKeyById(superPodIdx, serverIdx); | ||
| 211 | + uint32_t deviceCount = server.size(); | ||
| 212 | + for (uint32_t deviceIdx = 0; deviceIdx < deviceCount; ++deviceIdx) { | ||
| 213 | + // rankId % deviceCount 是应用实际选择的 logicDevId | ||
| 214 | + uint32_t targetLogicDevId = rankId % deviceCount; | ||
| 215 | + // 查找该 server 上 logic_id == targetLogicDevId 的 Device | ||
| 216 | + auto devRet = RunnerDB::GetOneByPred<sim::Device>( | ||
| 217 | + [serverKey, targetLogicDevId](const sim::Device &d) { | ||
| 218 | + return d.server_id == serverKey && d.logic_id == targetLogicDevId; | ||
| 219 | + }); | ||
| 220 | + if (!devRet.second) { | ||
| 221 | + HCCL_VM_ERROR("device not found: serverKey={}, logicDevId={}", serverKey, targetLogicDevId); | ||
| 222 | + return HcclVmResult::HCCL_SIM_E_INTERNAL; | ||
| 223 | + } | ||
| 224 | + auto deviceKey = devRet.first.id; | ||
| 196 | 225 | ||
| 197 | - auto ret = RunnerDB::GetOneByPred<sim::Device>([phyDevId, serverKey](const sim::Device &d) { | 226 | + // 创建 Rank 表记录 |
| 198 | - return d.physical_id == phyDevId && d.server_id == serverKey; | 227 | + sim::Rank rank; |
| 199 | - }); | 228 | + rank.rank_id = rankId; |
| 200 | - if (!ret.second) { | 229 | + rank.device_id = deviceKey; |
| 201 | - HCCL_VM_ERROR("cannot find device by physical id {:d}", phyDevId); | 230 | + rank.state = 1; |
| 202 | - return HCCL_SIM_E_NOT_FOUND; | 231 | + RunnerDB::Add<sim::Rank>(rank); |
| 203 | - } | 232 | + HCCL_VM_DEBUG("Init Rank: rankId={}, deviceKey={}, logicDevId={}, phyDevId={}", |
| 204 | - auto deviceKey = ret.first.id; | 233 | + rankId, deviceKey, devRet.first.logic_id, devRet.first.physical_id); |
| 205 | 234 | ||
| 206 | - // 查找serverKey | 235 | + // 初始化该 device 关联的 CCU 资源 |
| 207 | - HCCL_VM_DEBUG("Update one Device: {}, serverKey= {}, logicDevId= {}, phyDevId= {}", deviceKey, serverKey, logicDevId, phyDevId); | 236 | + auto deviceAllCcu = RunnerDB::GetByPred<sim::Ccu>([deviceKey](const sim::Ccu& d) { |
| 208 | - if (sim::UpdateDeviceLogicId(serverKey, phyDevId, logicDevId) != ACL_SUCCESS) { | 237 | + return d.device_id == deviceKey; |
| 209 | - HCCL_VM_ERROR("update device logic id by serverKey {:d} failed", serverKey); | 238 | + }); |
| 210 | - return HcclVmResult::HCCL_SIM_E_INTERNAL; | 239 | + if (deviceAllCcu.empty()) { |
| 211 | - } | 240 | + HCCL_VM_ERROR("get device all ccu failed"); |
| 212 | - // 初始化Rank表 | 241 | + return HcclVmResult::HCCL_SIM_E_INTERNAL; |
| 213 | - sim::Rank rank; | 242 | + } |
| 214 | - rank.rank_id = rankId; | 243 | + for (const auto& ccu : deviceAllCcu) { |
| 215 | - rank.device_id = deviceKey; | 244 | + InitCcuResource(ccu.id); |
| 216 | - rank.state = 1; // 已初始化 | 245 | + } |
| 217 | - RunnerDB::Add<sim::Rank>(rank); | ||
| 218 | 246 | ||
| 219 | - // 初始化ccu资源表(按照用到的device初始化) | 247 | + rankId++; |
| 220 | - auto deviceAllCcu = RunnerDB::GetByPred<sim::Ccu>([deviceKey](const sim::Ccu& d) { | 248 | + } |
| 221 | - return d.device_id == deviceKey; | 249 | + } |
| 222 | - }); | ||
| 223 | - if (deviceAllCcu.empty()) { | ||
| 224 | - HCCL_VM_ERROR("get device all ccu failed"); | ||
| 225 | - return HcclVmResult::HCCL_SIM_E_INTERNAL; | ||
| 226 | } | 250 | } |
| 227 | 251 | ||
| 228 | - for (const auto& ccu : deviceAllCcu) { | ||
| 229 | - auto ccuKey = ccu.id; | ||
| 230 | - InitCcuResource(ccuKey); | ||
| 231 | - } | ||
| 232 | return HcclVmResult::HCCL_SIM_SUCCESS; | 252 | return HcclVmResult::HCCL_SIM_SUCCESS; |
| 233 | } | 253 | } |
| 234 | 254 | ||
| @@ -409,7 +429,9 @@ HcclVmResult AscendClusterTopoParser::CreateRankTableFile(const TopoMeta &topoMe | |||
| 409 | 429 | ||
| 410 | std::set<int> commDomainLocalIds(serverMeta.begin(), serverMeta.end()); | 430 | std::set<int> commDomainLocalIds(serverMeta.begin(), serverMeta.end()); |
| 411 | 431 | ||
| 412 | - for (PhyDeviceId phyDevId : serverMeta) { | 432 | + for (uint32_t deviceIdx = 0; deviceIdx < serverMeta.size(); ++deviceIdx) { |
| 433 | + uint32_t logicDevId = rankId % serverMeta.size(); | ||
| 434 | + PhyDeviceId phyDevId = serverMeta[logicDevId]; | ||
| 413 | rankTable["rank_list"].push_back( | 435 | rankTable["rank_list"].push_back( |
| 414 | BuildRankEntry(server, phyDevId, commDomainLocalIds, spIdx, srvIdx, rankId)); | 436 | BuildRankEntry(server, phyDevId, commDomainLocalIds, spIdx, srvIdx, rankId)); |
| 415 | rankId++; | 437 | rankId++; |
| @@ -11,12 +11,16 @@ add_library(log STATIC sim_log.cc sim_yaml_config.cc sim_common_api.cc) | |||
| 11 | 11 | ||
| 12 | target_include_directories(log PUBLIC | 12 | target_include_directories(log PUBLIC |
| 13 | ${CMAKE_SOURCE_DIR}/include | 13 | ${CMAKE_SOURCE_DIR}/include |
| 14 | + ${ASCEND_CANN_PACKAGE_PATH}/include | ||
| 15 | + ${ASCEND_CANN_PACKAGE_PATH}/include/hccl | ||
| 14 | ${CMAKE_SOURCE_DIR}/third_party | 16 | ${CMAKE_SOURCE_DIR}/third_party |
| 15 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json | 17 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json |
| 16 | ${CMAKE_SOURCE_DIR}/third_party/yaml-cpp/include | 18 | ${CMAKE_SOURCE_DIR}/third_party/yaml-cpp/include |
| 17 | ) | 19 | ) |
| 18 | 20 | ||
| 19 | target_include_directories(log PRIVATE | 21 | target_include_directories(log PRIVATE |
| 22 | + ${ASCEND_CANN_PACKAGE_PATH}/include | ||
| 23 | + ${ASCEND_CANN_PACKAGE_PATH}/include/hccl | ||
| 20 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc | 24 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc |
| 21 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc/runtime | 25 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc/runtime |
| 22 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc/profiling | 26 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc/profiling |
| @@ -15,6 +15,7 @@ | |||
| 15 | 15 | ||
| 16 | 16 | ||
| 17 | 17 | ||
| 18 | + | ||
| 18 | 19 | ||
| 19 | static std::string GetExePath() | 20 | static std::string GetExePath() |
| 20 | { | 21 | { |
| @@ -74,3 +75,44 @@ std::string InstallPath::ResolveToInstallRoot(const std::string& relPath) | |||
| 74 | } | 75 | } |
| 75 | return GetHcclVmInstallAbsPath() + "/" + relPath; | 76 | return GetHcclVmInstallAbsPath() + "/" + relPath; |
| 76 | } | 77 | } |
| 78 | + | ||
| 79 | +static std::map<HcclDataType, std::string> g_DataType2Str = { | ||
| 80 | + {HcclDataType::HCCL_DATA_TYPE_INT8, "INT8"}, | ||
| 81 | + {HcclDataType::HCCL_DATA_TYPE_INT16, "INT16"}, | ||
| 82 | + {HcclDataType::HCCL_DATA_TYPE_INT32, "INT32"}, | ||
| 83 | + {HcclDataType::HCCL_DATA_TYPE_FP16, "FP16"}, | ||
| 84 | + {HcclDataType::HCCL_DATA_TYPE_UINT64, "UINT64"}, | ||
| 85 | + {HcclDataType::HCCL_DATA_TYPE_UINT8, "UINT8"}, | ||
| 86 | + {HcclDataType::HCCL_DATA_TYPE_UINT16, "UINT16"}, | ||
| 87 | + {HcclDataType::HCCL_DATA_TYPE_UINT32, "UINT32"}, | ||
| 88 | + {HcclDataType::HCCL_DATA_TYPE_FP64, "FP64"}, | ||
| 89 | + {HcclDataType::HCCL_DATA_TYPE_BFP16, "BFP16"}, | ||
| 90 | + {HcclDataType::HCCL_DATA_TYPE_INT128, "INT128"}, | ||
| 91 | + {HcclDataType::HCCL_DATA_TYPE_INT64, "INT64"}, | ||
| 92 | + {HcclDataType::HCCL_DATA_TYPE_HIF8, "HIF8"}, | ||
| 93 | + {HcclDataType::HCCL_DATA_TYPE_FP8E4M3, "FP8E4M3"}, | ||
| 94 | + {HcclDataType::HCCL_DATA_TYPE_FP8E5M2, "FP8E5M2"}, | ||
| 95 | +}; | ||
| 96 | + | ||
| 97 | +static std::map<HcclReduceOp, std::string> g_ReduceOp2Str = { | ||
| 98 | + {HcclReduceOp::HCCL_REDUCE_SUM, "SUM"}, | ||
| 99 | + {HcclReduceOp::HCCL_REDUCE_MIN, "MIN"}, | ||
| 100 | + {HcclReduceOp::HCCL_REDUCE_MAX, "MAX"}, | ||
| 101 | + {HcclReduceOp::HCCL_REDUCE_PROD, "PROD"}, | ||
| 102 | +}; | ||
| 103 | + | ||
| 104 | +std::string GetDataTypeStr(HcclDataType type) | ||
| 105 | +{ | ||
| 106 | + if (g_DataType2Str.find(type) == g_DataType2Str.end()) { | ||
| 107 | + return "UNKNOWN"; | ||
| 108 | + } | ||
| 109 | + return g_DataType2Str[type]; | ||
| 110 | +} | ||
| 111 | + | ||
| 112 | +std::string GetReduceOpStr(HcclReduceOp op) | ||
| 113 | +{ | ||
| 114 | + if (g_ReduceOp2Str.find(op) == g_ReduceOp2Str.end()) { | ||
| 115 | + return "UNKNOWN"; | ||
| 116 | + } | ||
| 117 | + return g_ReduceOp2Str[op]; | ||
| 118 | +} | ||
| @@ -13,16 +13,6 @@ set(CMAKE_CXX_STANDARD 17) | |||
| 13 | set(CMAKE_CXX_STANDARD_REQUIRED True) | 13 | set(CMAKE_CXX_STANDARD_REQUIRED True) |
| 14 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -D_GLIBCXX_USE_CXX11_ABI=0") | 14 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -D_GLIBCXX_USE_CXX11_ABI=0") |
| 15 | 15 | ||
| 16 | -add_subdirectory(cmd) | ||
| 17 | -add_subdirectory(device_arm) | ||
| 18 | -add_subdirectory(plugin) | ||
| 19 | -add_subdirectory(proxy) | ||
| 20 | -add_subdirectory(runnerdb) | ||
| 21 | -add_subdirectory(store) | ||
| 22 | -add_subdirectory(src_root) | ||
| 23 | -add_subdirectory(hccl_plugin_manager) | ||
| 24 | -add_subdirectory(utils) | ||
| 25 | - | ||
| 26 | include_directories( | 16 | include_directories( |
| 27 | ${CMAKE_CURRENT_SOURCE_DIR}/stub_headers | 17 | ${CMAKE_CURRENT_SOURCE_DIR}/stub_headers |
| 28 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc | 18 | ${ASCEND_CANN_PACKAGE_PATH}/pkg_inc |
| @@ -44,5 +34,15 @@ include_directories( | |||
| 44 | ${HCOMM_VM_ROOT_PATH}/src/proxy | 34 | ${HCOMM_VM_ROOT_PATH}/src/proxy |
| 45 | ) | 35 | ) |
| 46 | 36 | ||
| 37 | +add_subdirectory(cmd) | ||
| 38 | +add_subdirectory(device_arm) | ||
| 39 | +add_subdirectory(plugin) | ||
| 40 | +add_subdirectory(proxy) | ||
| 41 | +add_subdirectory(runnerdb) | ||
| 42 | +add_subdirectory(store) | ||
| 43 | +add_subdirectory(src_root) | ||
| 44 | +add_subdirectory(hccl_plugin_manager) | ||
| 45 | +add_subdirectory(utils) | ||
| 46 | + | ||
| 47 | enable_testing() | 47 | enable_testing() |
| 48 | add_test(NAME hccl_host_test COMMAND hccl_host_test) | 48 | add_test(NAME hccl_host_test COMMAND hccl_host_test) |
| @@ -23,19 +23,16 @@ set(COMMON_INCLUDE_DIRS | |||
| 23 | ${CMAKE_SOURCE_DIR}/third_party/CLI11 | 23 | ${CMAKE_SOURCE_DIR}/third_party/CLI11 |
| 24 | ${CMAKE_BINARY_DIR}/_deps/yaml-cpp-src/include | 24 | ${CMAKE_BINARY_DIR}/_deps/yaml-cpp-src/include |
| 25 | ${CMAKE_SOURCE_DIR}/third_party | 25 | ${CMAKE_SOURCE_DIR}/third_party |
| 26 | - $ENV{HCCL_CODE_HOME}/src/ops/op_common/inc | 26 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include/driver |
| 27 | - $ENV{HCCL_CODE_HOME}/src/common | 27 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/driver |
| 28 | - $ENV{HCCL_CODE_HOME}/src/common/hcomm_dlsym | 28 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/runtime |
| 29 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/include/driver | 29 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/toolchain |
| 30 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/driver | 30 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/profiling |
| 31 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/runtime | 31 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc |
| 32 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/toolchain | 32 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/hccl |
| 33 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/profiling | 33 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/base |
| 34 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc | 34 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include |
| 35 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/hccl | 35 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include/hccl |
| 36 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/base | ||
| 37 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/include | ||
| 38 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/include/hccl | ||
| 39 | 36 | ||
| 40 | ${HCOMM_CODE_ROOT}/src/base_comm/resources/ccu/ccu_microcode | 37 | ${HCOMM_CODE_ROOT}/src/base_comm/resources/ccu/ccu_microcode |
| 41 | ) | 38 | ) |
| @@ -21,19 +21,16 @@ set(COMMON_INCLUDE_DIRS | |||
| 21 | ${CMAKE_SOURCE_DIR}/third_party/CLI11 | 21 | ${CMAKE_SOURCE_DIR}/third_party/CLI11 |
| 22 | ${CMAKE_BINARY_DIR}/_deps/yaml-cpp-src/include | 22 | ${CMAKE_BINARY_DIR}/_deps/yaml-cpp-src/include |
| 23 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json | 23 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json |
| 24 | - $ENV{HCCL_CODE_HOME}/src/ops/op_common/inc | 24 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include/driver |
| 25 | - $ENV{HCCL_CODE_HOME}/src/common | 25 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/driver |
| 26 | - $ENV{HCCL_CODE_HOME}/src/common/hcomm_dlsym | 26 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/runtime |
| 27 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/include/driver | 27 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/toolchain |
| 28 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/driver | 28 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/profiling |
| 29 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/runtime | 29 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc |
| 30 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/toolchain | 30 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/hccl |
| 31 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/profiling | 31 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/pkg_inc/base |
| 32 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc | 32 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include |
| 33 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/hccl | 33 | + ${ASCEND_CANN_PACKAGE_PATH}/${CANN_ARCH_DIR}/include/hccl |
| 34 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/pkg_inc/base | ||
| 35 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/include | ||
| 36 | - $ENV{ASCEND_TOOLKIT_HOME}/${CANN_ARCH_DIR}/include/hccl | ||
| 37 | ${HCOMM_CODE_ROOT}/src/base_comm/resources/ccu/ccu_microcode | 34 | ${HCOMM_CODE_ROOT}/src/base_comm/resources/ccu/ccu_microcode |
| 38 | ) | 35 | ) |
| 39 | 36 | ||
| @@ -116,7 +116,7 @@ TEST_F(SimRunnerCommonTest, GetDeviceByPhysicalId_WhenDeviceNotExists_ReturnErro | |||
| 116 | 116 | ||
| 117 | TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenValidParams_UpdateSuccessfully) | 117 | TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenValidParams_UpdateSuccessfully) |
| 118 | { | 118 | { |
| 119 | - auto ret = sim::UpdateDeviceLogicId(1, 0, 100); | 119 | + auto ret = sim::UpdateDeviceLogicId(1, 0, 100, 0); |
| 120 | 120 | ||
| 121 | EXPECT_EQ(ret, ACL_SUCCESS); | 121 | EXPECT_EQ(ret, ACL_SUCCESS); |
| 122 | 122 | ||
| @@ -128,14 +128,14 @@ TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenValidParams_UpdateSuccessful | |||
| 128 | 128 | ||
| 129 | TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenServerKeyInvalid_ReturnError) | 129 | TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenServerKeyInvalid_ReturnError) |
| 130 | { | 130 | { |
| 131 | - auto ret = sim::UpdateDeviceLogicId(999, 0, 100); | 131 | + auto ret = sim::UpdateDeviceLogicId(999, 0, 100, 0); |
| 132 | 132 | ||
| 133 | EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM); | 133 | EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM); |
| 134 | } | 134 | } |
| 135 | 135 | ||
| 136 | TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenPhyDevIdInvalid_ReturnError) | 136 | TEST_F(SimRunnerCommonTest, UpdateDeviceLogicId_WhenPhyDevIdInvalid_ReturnError) |
| 137 | { | 137 | { |
| 138 | - auto ret = sim::UpdateDeviceLogicId(1, 999, 100); | 138 | + auto ret = sim::UpdateDeviceLogicId(1, 999, 100, 0); |
| 139 | 139 | ||
| 140 | EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM); | 140 | EXPECT_EQ(ret, ACL_ERROR_INVALID_PARAM); |
| 141 | } | 141 | } |
| @@ -18,6 +18,9 @@ include_directories( | |||
| 18 | ${CMAKE_SOURCE_DIR}/third_party | 18 | ${CMAKE_SOURCE_DIR}/third_party |
| 19 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json | 19 | ${CMAKE_SOURCE_DIR}/third_party/nlohmann_json |
| 20 | ${CMAKE_SOURCE_DIR}/third_party/yaml-cpp/include | 20 | ${CMAKE_SOURCE_DIR}/third_party/yaml-cpp/include |
| 21 | + ${CMAKE_SOURCE_DIR}/third_party/spdlog | ||
| 22 | + ${ASCEND_CANN_PACKAGE_PATH}/include | ||
| 23 | + ${ASCEND_CANN_PACKAGE_PATH}/include/hccl | ||
| 21 | ) | 24 | ) |
| 22 | 25 | ||
| 23 | link_libraries( | 26 | link_libraries( |