| @@ -22,7 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | 获取指定通信域的HCCL配置信息。 | 23 | 获取指定通信域的HCCL配置信息。 |
| 24 | 24 | ||
| 25 | -根据配置项类型查询对应的配置信息,并写入调用者提供的缓冲区中,当前支持查询通信算子的展开模式与通信算法配置字符串。 | 25 | +根据配置项类型查询对应的配置信息,并写入调用者提供的缓冲区中,当前支持查询通信算子的展开模式、通信算法配置字符串及UB多channel数量。 |
| 26 | 26 | ||
| 27 | ## 函数原型 | 27 | ## 函数原型 |
| 28 | 28 | ||
| @@ -36,7 +36,7 @@ HcclResult HcclConfigGetInfo(HcclComm comm, HcclConfigType cfgType, uint32_t inf | |||
| 36 | | --- | --- | --- | | 36 | | --- | --- | --- | |
| 37 | | comm | 输入 | 通信域句柄。<br>HcclComm类型的定义可参见[HcclComm](./data_type_definition/HcclComm.md)。 | | 37 | | comm | 输入 | 通信域句柄。<br>HcclComm类型的定义可参见[HcclComm](./data_type_definition/HcclComm.md)。 | |
| 38 | | cfgType | 输入 | 需要查询的配置项类型,HcclConfigType的定义可参见[HcclConfigType](./data_type_definition/HcclConfigType.md)。 | | 38 | | cfgType | 输入 | 需要查询的配置项类型,HcclConfigType的定义可参见[HcclConfigType](./data_type_definition/HcclConfigType.md)。 | |
| 39 | -| infoLen | 输入 | 目标配置类型的大小(字节数),查询HCCL_CONFIG_TYPE_OP_EXPANSION_MODE时必须等于待查询配置类型的实际大小,查询HCCL_CONFIG_TYPE_HCCL_ALGO时必须不小于HCCL_COMM_ALGO_MAX_LENGTH字节数。 | | 39 | +| infoLen | 输入 | 目标配置类型的大小(字节数),查询HCCL_CONFIG_TYPE_OP_EXPANSION_MODE时必须等于待查询配置类型的实际大小,查询HCCL_CONFIG_TYPE_HCCL_ALGO时必须不小于HCCL_COMM_ALGO_MAX_LENGTH字节数,查询HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM时必须等于sizeof(uint32_t)。 | |
| 40 | | info | 输出 | 配置信息输出缓冲区,必须按目标配置类型对齐且可写。 | | 40 | | info | 输出 | 配置信息输出缓冲区,必须按目标配置类型对齐且可写。 | |
| 41 | 41 | ||
| 42 | ## 返回值 | 42 | ## 返回值 |
| @@ -58,4 +58,9 @@ HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_OP_EXPANSION_MODE, siz | |||
| 58 | char algoInfo[HCCL_COMM_ALGO_MAX_LENGTH]; | 58 | char algoInfo[HCCL_COMM_ALGO_MAX_LENGTH]; |
| 59 | uint32_t algoSize = HCCL_COMM_ALGO_MAX_LENGTH; // 必须不小于HCCL_COMM_ALGO_MAX_LENGTH | 59 | uint32_t algoSize = HCCL_COMM_ALGO_MAX_LENGTH; // 必须不小于HCCL_COMM_ALGO_MAX_LENGTH |
| 60 | HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_HCCL_ALGO, algoSize, algoInfo); | 60 | HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_HCCL_ALGO, algoSize, algoInfo); |
| 61 | + | ||
| 62 | +// 查询UB多channel数量 | ||
| 63 | +uint32_t multiChannelNum = 0; | ||
| 64 | +uint32_t numSize = sizeof(uint32_t); // 必须等于目标类型大小 | ||
| 65 | +HcclResult ret = HcclConfigGetInfo(comm, HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM, numSize, &multiChannelNum); | ||
| 61 | ``` | 66 | ``` |
| @@ -2,14 +2,15 @@ | |||
| 2 | 2 | ||
| 3 | ## 功能说明 | 3 | ## 功能说明 |
| 4 | 4 | ||
| 5 | -配置通信算子的展开模式和通信算法配置字符串。 | 5 | +配置通信算子的展开模式、通信算法配置字符串及UB多channel数量。 |
| 6 | 6 | ||
| 7 | ## 定义原型 | 7 | ## 定义原型 |
| 8 | 8 | ||
| 9 | ```c | 9 | ```c |
| 10 | typedef enum { | 10 | typedef enum { |
| 11 | - HCCL_CONFIG_TYPE_INVALID = -1, /* 无效配置项类型 */ | 11 | + HCCL_CONFIG_TYPE_INVALID = -1, /* 无效配置项类型 */ |
| 12 | - HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0, /* 算子展开模式,对应类型为hcclOpExpansionMode */ | 12 | + HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0, /* 算子展开模式,对应类型为hcclOpExpansionMode */ |
| 13 | - HCCL_CONFIG_TYPE_HCCL_ALGO = 1, /* 通信算法配置字符串,对应类型为长度HCCL_COMM_ALGO_MAX_LENGTH的char数组, 新增枚举字段向后兼容,不影响旧版本的代码 */ | 13 | + HCCL_CONFIG_TYPE_HCCL_ALGO = 1, /* 通信算法配置字符串,对应类型为长度HCCL_COMM_ALGO_MAX_LENGTH的char数组, 新增枚举字段向后兼容,不影响旧版本的代码 */ |
| 14 | + HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM = 2, /* UB多channel数量,对应类型为uint32_t */ | ||
| 14 | } HcclConfigType; | 15 | } HcclConfigType; |
| 15 | ``` | 16 | ``` |
| @@ -393,7 +393,8 @@ typedef enum { | |||
| 393 | typedef enum { | 393 | typedef enum { |
| 394 | HCCL_CONFIG_TYPE_INVALID = -1, | 394 | HCCL_CONFIG_TYPE_INVALID = -1, |
| 395 | HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0, | 395 | HCCL_CONFIG_TYPE_OP_EXPANSION_MODE = 0, |
| 396 | - HCCL_CONFIG_TYPE_HCCL_ALGO = 1 | 396 | + HCCL_CONFIG_TYPE_HCCL_ALGO = 1, |
| 397 | + HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM = 2 | ||
| 397 | } HcclConfigType; | 398 | } HcclConfigType; |
| 398 | 399 | ||
| 399 | typedef HcclOpExpansionMode HcclConfigTypeOpExpansionMode; | 400 | typedef HcclOpExpansionMode HcclConfigTypeOpExpansionMode; |
| @@ -21,6 +21,7 @@ | |||
| 21 | #include "rank_consistentcy_checker.h" | 21 | #include "rank_consistentcy_checker.h" |
| 22 | #include "externalinput_pub.h" | 22 | #include "externalinput_pub.h" |
| 23 | #include "env_config.h" | 23 | #include "env_config.h" |
| 24 | +#include "env_config/env_config_v2.h" | ||
| 24 | #include "../common/src/topo/topoinfo_detect.h" | 25 | #include "../common/src/topo/topoinfo_detect.h" |
| 25 | #include "../common/src/topo/topoinfo_ranktable_partition.h" | 26 | #include "../common/src/topo/topoinfo_ranktable_partition.h" |
| 26 | #include "../common/src/state_guard.h" | 27 | #include "../common/src/state_guard.h" |
| @@ -3788,6 +3789,61 @@ static HcclConfigTypeOpExpansionMode OpExpansionModeValueToModeEnum(const uint32 | |||
| 3788 | } | 3789 | } |
| 3789 | #endif | 3790 | #endif |
| 3790 | 3791 | ||
| 3792 | +#if (!defined(HCCD)) && (!defined(CCL_KERNEL_AICPU)) | ||
| 3793 | +static HcclResult GetOpExpansionModeConfig(hccl::CollComm* collComm, uint32_t infoLen, void* info) | ||
【软件架构】新增功能,与A3无关不要放在legacy目录中 环境变量解析在src目录非legacy已经有新目录了,从软件架构上考虑建议前移过去,目标文件名:base_config.h/.cc ![]() ![]() | |||
| 3794 | +{ | ||
| 3795 | + constexpr size_t infoExpectedLen = sizeof(HcclConfigTypeOpExpansionMode); | ||
| 3796 | + if (static_cast<size_t>(infoLen) != infoExpectedLen) { | ||
| 3797 | + HCCL_ERROR("[%s] infoLen[%u] less than expected[%zu].", __func__, infoLen, infoExpectedLen); | ||
| 3798 | + return HcclResult::HCCL_E_PARA; | ||
| 3799 | + } | ||
| 3800 | + auto* myRank = collComm->GetMyRank(); | ||
| 3801 | + CHK_PTR_NULL(myRank); | ||
| 3802 | + const uint32_t opExpansionModeValue = myRank->GetOpExpansionMode(); | ||
| 3803 | + const auto opExpansionMode = OpExpansionModeValueToModeEnum(opExpansionModeValue); | ||
| 3804 | + if (opExpansionMode == HcclOpExpansionMode::HCCL_OP_EXPANSION_MODE_INVALID) { | ||
| 3805 | + HCCL_ERROR("[%s] unknown expansion mode[%d].", __func__, opExpansionMode); | ||
| 3806 | + return HcclResult::HCCL_E_INTERNAL; | ||
| 3807 | + } | ||
| 3808 | + *static_cast<HcclConfigTypeOpExpansionMode*>(info) = opExpansionMode; | ||
| 3809 | + return HcclResult::HCCL_SUCCESS; | ||
| 3810 | +} | ||
| 3811 | + | ||
| 3812 | +static HcclResult GetHcclAlgoConfig(hccl::CollComm* collComm, uint32_t infoLen, void* info) | ||
| 3813 | +{ | ||
| 3814 | + constexpr size_t infoExpectedLen = static_cast<size_t>(HCCL_COMM_ALGO_MAX_LENGTH); | ||
| 3815 | + if (static_cast<size_t>(infoLen) < infoExpectedLen) { | ||
| 3816 | + HCCL_ERROR("[%s] infoLen[%u] less than expected[%zu].", __func__, infoLen, infoExpectedLen); | ||
| 3817 | + return HcclResult::HCCL_E_PARA; | ||
| 3818 | + } | ||
| 3819 | + const std::string& hcclAlgo = collComm->GetCommConfig().GetConfigHcclAlgoStr(); | ||
| 3820 | + auto* algoInfo = static_cast<char*>(info); | ||
| 3821 | + int32_t ret = memset_s(algoInfo, infoLen, 0, infoLen); | ||
| 3822 | + CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memset error, ret[%d].", __func__, ret), HCCL_E_INTERNAL); | ||
| 3823 | + if (!hcclAlgo.empty() && hcclAlgo.size() < infoLen) { | ||
| 3824 | + ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), hcclAlgo.size() + 1); | ||
| 3825 | + } else if (!hcclAlgo.empty()) { | ||
| 3826 | + ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), infoLen); | ||
| 3827 | + } | ||
| 3828 | + CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memcpy error, ret[%d].", __func__, ret), HCCL_E_INTERNAL); | ||
| 3829 | + return HcclResult::HCCL_SUCCESS; | ||
| 3830 | +} | ||
| 3831 | + | ||
| 3832 | +// UB多channel数量为进程级全局配置(解析自环境变量、进程内唯一),不依赖通信域, | ||
| 3833 | +// 故不同于 GetOpExpansionModeConfig/GetHcclAlgoConfig,无需 collComm 入参。 | ||
| 3834 | +static HcclResult GetUbMultiChannelNumConfig(uint32_t infoLen, void* info) | ||
[MEDIUM] 新特性代码落在 src/legacy/,违反 legacy 不承接新特性约束 PR 标题为「多jetty:hcomm支持环境变量HCCL_UB_MULTI_JETTY_NUM的解析」,属新特性。核心变更 虽然 建议:如必须通过 HcclConfigGetInfo(legacy 接口)暴露,至少将 GetUbMultiChannelNumConfig 的实现移到 coll_communicator_mgr 层并通过函数指针或回调注册到 legacy 接口,避免在 legacy 中直接新增业务逻辑。 ![]() ![]() huangbolin 8月31日 评论: 8月31日 评论: [LOW] GetUbMultiChannelNumConfig 不需要 collComm 参数,与其他两个函数签名不一致
![]() ![]() | |||
| 3835 | +{ | ||
| 3836 | + constexpr size_t infoExpectedLen = sizeof(uint32_t); | ||
| 3837 | + if (static_cast<size_t>(infoLen) != infoExpectedLen) { | ||
| 3838 | + HCCL_ERROR("[%s] infoLen[%u] not expected[%zu].", __func__, infoLen, infoExpectedLen); | ||
| 3839 | + return HcclResult::HCCL_E_PARA; | ||
| 3840 | + } | ||
| 3841 | + const uint32_t num = Hccl::EnvConfig::GetInstance().GetUbConfig().GetUbMultiChannelNum(); | ||
| 3842 | + *static_cast<uint32_t*>(info) = num; | ||
| 3843 | + return HcclResult::HCCL_SUCCESS; | ||
| 3844 | +} | ||
| 3845 | +#endif | ||
| 3846 | + | ||
| 3791 | HcclResult HcclConfigGetInfo( | 3847 | HcclResult HcclConfigGetInfo( |
| 3792 | [[maybe_unused]] HcclComm comm, [[maybe_unused]] HcclConfigType cfgType, [[maybe_unused]] uint32_t infoLen, | 3848 | [[maybe_unused]] HcclComm comm, [[maybe_unused]] HcclConfigType cfgType, [[maybe_unused]] uint32_t infoLen, |
| 3793 | [[maybe_unused]] void* info) | 3849 | [[maybe_unused]] void* info) |
| @@ -3798,43 +3854,16 @@ HcclResult HcclConfigGetInfo( | |||
| 3798 | auto* hcclComm = static_cast<hccl::hcclComm*>(comm); | 3854 | auto* hcclComm = static_cast<hccl::hcclComm*>(comm); |
| 3799 | auto* collComm = hcclComm->GetCollComm(); | 3855 | auto* collComm = hcclComm->GetCollComm(); |
| 3800 | CHK_PTR_NULL(collComm); | 3856 | CHK_PTR_NULL(collComm); |
| 3801 | - if (cfgType == HcclConfigType::HCCL_CONFIG_TYPE_OP_EXPANSION_MODE) { | 3857 | + switch (cfgType) { |
| 3802 | - constexpr size_t infoExpectedLen = sizeof(HcclConfigTypeOpExpansionMode); | 3858 | + case HcclConfigType::HCCL_CONFIG_TYPE_OP_EXPANSION_MODE: |
| 3803 | - if (static_cast<size_t>(infoLen) != infoExpectedLen) { | 3859 | + return GetOpExpansionModeConfig(collComm, infoLen, info); |
| 3804 | - HCCL_ERROR("cfgType[%d] infoLen[%u] less than expected[%zu].", cfgType, infoLen, infoExpectedLen); | 3860 | + case HcclConfigType::HCCL_CONFIG_TYPE_HCCL_ALGO: |
| 3861 | + return GetHcclAlgoConfig(collComm, infoLen, info); | ||
| 3862 | + case HcclConfigType::HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM: | ||
| 3863 | + return GetUbMultiChannelNumConfig(infoLen, info); | ||
| 3864 | + default: | ||
| 3865 | + HCCL_ERROR("[%s] cfgType[%d] is invalid.", __func__, cfgType); | ||
| 3805 | return HcclResult::HCCL_E_PARA; | 3866 | return HcclResult::HCCL_E_PARA; |
| 3806 | - } | ||
| 3807 | - auto* myRank = collComm->GetMyRank(); | ||
| 3808 | - CHK_PTR_NULL(myRank); | ||
| 3809 | - const uint32_t opExpansionModeValue = myRank->GetOpExpansionMode(); | ||
| 3810 | - const auto opExpansionMode = OpExpansionModeValueToModeEnum(opExpansionModeValue); | ||
| 3811 | - if (opExpansionMode == HcclOpExpansionMode::HCCL_OP_EXPANSION_MODE_INVALID) { | ||
| 3812 | - HCCL_ERROR("[%s] unknown expansion mode[%d].", __func__, opExpansionMode); | ||
| 3813 | - return HcclResult::HCCL_E_INTERNAL; | ||
| 3814 | - } | ||
| 3815 | - auto* modeInfo = static_cast<HcclConfigTypeOpExpansionMode*>(info); | ||
| 3816 | - *modeInfo = opExpansionMode; | ||
| 3817 | - return HcclResult::HCCL_SUCCESS; | ||
| 3818 | - } else if (cfgType == HcclConfigType::HCCL_CONFIG_TYPE_HCCL_ALGO) { | ||
| 3819 | - constexpr size_t infoExpectedLen = static_cast<size_t>(HCCL_COMM_ALGO_MAX_LENGTH); | ||
| 3820 | - if (static_cast<size_t>(infoLen) < infoExpectedLen) { | ||
| 3821 | - HCCL_ERROR("cfgType[%d] infoLen[%u] less than expected[%zu].", cfgType, infoLen, infoExpectedLen); | ||
| 3822 | - return HcclResult::HCCL_E_PARA; | ||
| 3823 | - } | ||
| 3824 | - const std::string& hcclAlgo = collComm->GetCommConfig().GetConfigHcclAlgoStr(); | ||
| 3825 | - auto* algoInfo = static_cast<char*>(info); | ||
| 3826 | - int32_t ret = memset_s(algoInfo, infoLen, 0, infoLen); | ||
| 3827 | - CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memset error, ret[%d].", __func__, ret), HCCL_E_INTERNAL); | ||
| 3828 | - if (!hcclAlgo.empty() && hcclAlgo.size() < infoLen) { | ||
| 3829 | - ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), hcclAlgo.size() + 1); | ||
| 3830 | - } else if (!hcclAlgo.empty()) { | ||
| 3831 | - ret = memcpy_s(algoInfo, infoLen, hcclAlgo.c_str(), infoLen); | ||
| 3832 | - } | ||
| 3833 | - CHK_PRT_RET(ret != EOK, HCCL_ERROR("[%s] memcpy error, ret[%d].", __func__, ret), HCCL_E_INTERNAL); | ||
| 3834 | - return HcclResult::HCCL_SUCCESS; | ||
| 3835 | - } else { | ||
| 3836 | - HCCL_ERROR("[%s] cfgType[%d] is invalid.", __func__, cfgType); | ||
| 3837 | - return HcclResult::HCCL_E_PARA; | ||
| 3838 | } | 3867 | } |
| 3839 | #endif | 3868 | #endif |
| 3840 | HCCL_ERROR("[%s] is not support for hccd or kernel.", __func__); | 3869 | HCCL_ERROR("[%s] is not support for hccd or kernel.", __func__); |
| @@ -365,6 +365,18 @@ u32 EnvRdmaConfig::GetRdmaMultiQpThreshold() const { return multiQpThreshold.Get | |||
| 365 | 365 | ||
| 366 | const MultiQpSrcPortConfig& EnvRdmaConfig::GetMultiQpSrcPortConfig() const { return multiQpSrcPortConfig_; } | 366 | const MultiQpSrcPortConfig& EnvRdmaConfig::GetMultiQpSrcPortConfig() const { return multiQpSrcPortConfig_; } |
| 367 | 367 | ||
| 368 | +// EnvUbConfig | ||
| 369 | + | ||
| 370 | +void EnvUbConfig::Parse() | ||
| 371 | +{ | ||
| 372 | + ubMultiChannelNum.Parse(); | ||
| 373 | + HCCL_RUN_INFO( | ||
| 374 | + "[HCCL_ENV] HCCL_UB_MULTI_CHANNEL_NUM set by %s to [%u]", ubMultiChannelNum.GetSource(), | ||
| 375 | + GetUbMultiChannelNum()); | ||
| 376 | +} | ||
| 377 | + | ||
| 378 | +u32 EnvUbConfig::GetUbMultiChannelNum() const { return ubMultiChannelNum.Get(); } | ||
| 379 | + | ||
| 368 | // EnvAlgoConfig | 380 | // EnvAlgoConfig |
| 369 | 381 | ||
| 370 | void EnvAlgoConfig::Parse() | 382 | void EnvAlgoConfig::Parse() |
| @@ -170,6 +170,22 @@ private: | |||
| 170 | MultiQpSrcPortConfig multiQpSrcPortConfig_; | 170 | MultiQpSrcPortConfig multiQpSrcPortConfig_; |
| 171 | }; | 171 | }; |
| 172 | 172 | ||
| 173 | +// UB配置 | ||
src/legacy/ascend950/framework/env_config/base_config_legacy.h,不再新增代码 ![]() ![]() | |||
| 174 | +class EnvUbConfig : public BaseConfig { | ||
| 175 | +public: | ||
| 176 | + void Parse() override; | ||
| 177 | + u32 GetUbMultiChannelNum() const; | ||
| 178 | + | ||
| 179 | + static constexpr u32 HCCL_UB_MULTI_CHANNEL_NUM_DEFAULT = 1; // UB多channel默认数量(1表示不使能) | ||
| 180 | + static constexpr u32 HCCL_UB_MULTI_CHANNEL_NUM_MIN = 1; // UB多channel数量最小值 | ||
| 181 | + static constexpr u32 HCCL_UB_MULTI_CHANNEL_NUM_MAX = 16; // UB多channel数量最大值 | ||
| 182 | + | ||
| 183 | +private: | ||
| 184 | + CfgField<u32> ubMultiChannelNum{ | ||
| 185 | + "HCCL_UB_MULTI_CHANNEL_NUM", u32(HCCL_UB_MULTI_CHANNEL_NUM_DEFAULT), Str2T<u32>, | ||
| 186 | + CHK_RANGE_CLOSED<u32>(HCCL_UB_MULTI_CHANNEL_NUM_MIN, HCCL_UB_MULTI_CHANNEL_NUM_MAX)}; | ||
| 187 | +}; | ||
| 188 | + | ||
| 173 | // 算法配置 | 189 | // 算法配置 |
| 174 | class EnvAlgoConfig : public BaseConfig { | 190 | class EnvAlgoConfig : public BaseConfig { |
| 175 | public: | 191 | public: |
| @@ -26,6 +26,7 @@ void EnvConfig::Parse() | |||
| 26 | socketCfg.Parse(); | 26 | socketCfg.Parse(); |
| 27 | rtsCfg.Parse(); | 27 | rtsCfg.Parse(); |
| 28 | rdmaCfg.Parse(); | 28 | rdmaCfg.Parse(); |
| 29 | + ubCfg.Parse(); | ||
| 29 | algoCfg.Parse(); | 30 | algoCfg.Parse(); |
| 30 | logCfg.Parse(); | 31 | logCfg.Parse(); |
| 31 | detourCfg.Parse(); | 32 | detourCfg.Parse(); |
| @@ -39,6 +40,8 @@ const EnvRtsConfig& EnvConfig::GetRtsConfig() { return rtsCfg; } | |||
| 39 | 40 | ||
| 40 | const EnvRdmaConfig& EnvConfig::GetRdmaConfig() { return rdmaCfg; } | 41 | const EnvRdmaConfig& EnvConfig::GetRdmaConfig() { return rdmaCfg; } |
| 41 | 42 | ||
| 43 | +const EnvUbConfig& EnvConfig::GetUbConfig() { return ubCfg; } | ||
| 44 | + | ||
| 42 | const EnvAlgoConfig& EnvConfig::GetAlgoConfig() { return algoCfg; } | 45 | const EnvAlgoConfig& EnvConfig::GetAlgoConfig() { return algoCfg; } |
| 43 | 46 | ||
| 44 | const EnvLogConfig& EnvConfig::GetLogConfig() { return logCfg; } | 47 | const EnvLogConfig& EnvConfig::GetLogConfig() { return logCfg; } |
| @@ -33,6 +33,8 @@ public: | |||
| 33 | 33 | ||
| 34 | const EnvRdmaConfig& GetRdmaConfig(); | 34 | const EnvRdmaConfig& GetRdmaConfig(); |
| 35 | 35 | ||
| 36 | + const EnvUbConfig& GetUbConfig(); | ||
| 37 | + | ||
| 36 | const EnvAlgoConfig& GetAlgoConfig(); | 38 | const EnvAlgoConfig& GetAlgoConfig(); |
| 37 | 39 | ||
| 38 | const EnvLogConfig& GetLogConfig(); | 40 | const EnvLogConfig& GetLogConfig(); |
| @@ -50,6 +52,7 @@ private: | |||
| 50 | EnvSocketConfig socketCfg; | 52 | EnvSocketConfig socketCfg; |
| 51 | EnvRtsConfig rtsCfg; | 53 | EnvRtsConfig rtsCfg; |
| 52 | EnvRdmaConfig rdmaCfg; | 54 | EnvRdmaConfig rdmaCfg; |
| 55 | + EnvUbConfig ubCfg; | ||
| 53 | EnvAlgoConfig algoCfg; | 56 | EnvAlgoConfig algoCfg; |
| 54 | EnvLogConfig logCfg; | 57 | EnvLogConfig logCfg; |
| 55 | EnvDetourConfig detourCfg; | 58 | EnvDetourConfig detourCfg; |
| @@ -250,6 +250,7 @@ global: | |||
| 250 | "Hccl::EnvConfig::GetRdmaConfig()"; # _ZN4Hccl9EnvConfig13GetRdmaConfigEv | 250 | "Hccl::EnvConfig::GetRdmaConfig()"; # _ZN4Hccl9EnvConfig13GetRdmaConfigEv |
| 251 | "Hccl::EnvConfig::GetRtsConfig()"; # _ZN4Hccl9EnvConfig12GetRtsConfigEv | 251 | "Hccl::EnvConfig::GetRtsConfig()"; # _ZN4Hccl9EnvConfig12GetRtsConfigEv |
| 252 | "Hccl::EnvConfig::GetSocketConfig()"; # _ZN4Hccl9EnvConfig15GetSocketConfigEv | 252 | "Hccl::EnvConfig::GetSocketConfig()"; # _ZN4Hccl9EnvConfig15GetSocketConfigEv |
| 253 | + "Hccl::EnvConfig::GetUbConfig()"; # _ZN4Hccl9EnvConfig11GetUbConfigEv | ||
| 253 | "Hccl::EnvHostNicConfig::GetControlIfIp() const"; # _ZNK4Hccl16EnvHostNicConfig14GetControlIfIpEv | 254 | "Hccl::EnvHostNicConfig::GetControlIfIp() const"; # _ZNK4Hccl16EnvHostNicConfig14GetControlIfIpEv |
| 254 | "Hccl::EnvHostNicConfig::GetDeviceSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig24GetDeviceSocketPortRangeEv | 255 | "Hccl::EnvHostNicConfig::GetDeviceSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig24GetDeviceSocketPortRangeEv |
| 255 | "Hccl::EnvHostNicConfig::GetHostSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig22GetHostSocketPortRangeEv | 256 | "Hccl::EnvHostNicConfig::GetHostSocketPortRange() const"; # _ZNK4Hccl16EnvHostNicConfig22GetHostSocketPortRangeEv |
| @@ -268,6 +269,7 @@ global: | |||
| 268 | "Hccl::EnvRtsConfig::GetExecTimeOut() const"; # _ZNK4Hccl12EnvRtsConfig14GetExecTimeOutEv | 269 | "Hccl::EnvRtsConfig::GetExecTimeOut() const"; # _ZNK4Hccl12EnvRtsConfig14GetExecTimeOutEv |
| 269 | "Hccl::EnvSocketConfig::GetLinkTimeOut() const"; # _ZNK4Hccl15EnvSocketConfig14GetLinkTimeOutEv | 270 | "Hccl::EnvSocketConfig::GetLinkTimeOut() const"; # _ZNK4Hccl15EnvSocketConfig14GetLinkTimeOutEv |
| 270 | "Hccl::EnvSocketConfig::GetSocketFamily() const"; # _ZNK4Hccl15EnvSocketConfig15GetSocketFamilyEv | 271 | "Hccl::EnvSocketConfig::GetSocketFamily() const"; # _ZNK4Hccl15EnvSocketConfig15GetSocketFamilyEv |
| 272 | + "Hccl::EnvUbConfig::GetUbMultiChannelNum() const"; # _ZNK4Hccl11EnvUbConfig20GetUbMultiChannelNumEv | ||
| 271 | "Hccl::ExceptionInfo::GetErrorCode(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo12GetErrorCodeERKNS_13ExceptionTypeE | 273 | "Hccl::ExceptionInfo::GetErrorCode(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo12GetErrorCodeERKNS_13ExceptionTypeE |
| 272 | "Hccl::ExceptionInfo::GetErrorMsg(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo11GetErrorMsgERKNS_13ExceptionTypeE | 274 | "Hccl::ExceptionInfo::GetErrorMsg(Hccl::ExceptionType const&)"; # _ZN4Hccl13ExceptionInfo11GetErrorMsgERKNS_13ExceptionTypeE |
| 273 | "Hccl::GetMultiQpPortsNumByIpPair(Hccl::MultiQpSrcPortConfig const&, Hccl::IpAddress const&, Hccl::IpAddress const&)"; # _ZN4Hccl26GetMultiQpPortsNumByIpPairERKNS_20MultiQpSrcPortConfigERKNS_9IpAddressES5_ | 275 | "Hccl::GetMultiQpPortsNumByIpPair(Hccl::MultiQpSrcPortConfig const&, Hccl::IpAddress const&, Hccl::IpAddress const&)"; # _ZN4Hccl26GetMultiQpPortsNumByIpPairERKNS_20MultiQpSrcPortConfigERKNS_9IpAddressES5_ |
| @@ -21,6 +21,6 @@ GTEST_API_ int main(int argc, char** argv) | |||
| 21 | setTargetPort(27743, 31123); | 21 | setTargetPort(27743, 31123); |
| 22 | testing::InitGoogleTest(&argc, argv); | 22 | testing::InitGoogleTest(&argc, argv); |
| 23 | setenv("HCCL_DEBUG_CONFIG", "alg", 1); | 23 | setenv("HCCL_DEBUG_CONFIG", "alg", 1); |
| 24 | - setenv("HCCL_DFS_CONFIG", "connection_fault_detction_time:0", 1); | 24 | + setenv("HCCL_DFS_CONFIG", "task_exception:on", 1); |
[LOW] 测试 main.cc 中 HCCL_DFS_CONFIG 环境变量修改与本 PR 功能无关 main.cc 将 建议:如确实需要此修改,在 PR 描述中补充说明原因;如不需要,恢复原值避免影响其他测试用例。 ![]() ![]() [MEDIUM] 修改了 HCCL_DFS_CONFIG 环境变量值但未在 PR 描述中说明原因 main.cc 将 ![]() ![]() | |||
| 25 | return RUN_ALL_TESTS(); | 25 | return RUN_ALL_TESTS(); |
| 26 | } | 26 | } |
| @@ -51,6 +51,35 @@ TEST_F(OpBaseMiscTest, Ut_HcclConfigGetInfo_When_CollCommIsNotInit_And_CfgTypeIs | |||
| 51 | Ut_Comm_Destroy(comm); | 51 | Ut_Comm_Destroy(comm); |
| 52 | } | 52 | } |
| 53 | 53 | ||
| 54 | +TEST_F(OpBaseMiscTest, Ut_HcclConfigGetInfo_When_CfgTypeIsUB_MULTI_CHANNEL_NUM_Expect_ReturnIsHCCL_SUCCESS) | ||
| 55 | +{ | ||
| 56 | + UT_COMM_CREATE_DEFAULT(comm); | ||
| 57 | + CollComm collComm(nullptr, 0, "ut_comm", ManagerCallbacks{}, CollCommInitMode::simpleMode); | ||
| 58 | + MOCKER_CPP(&hcclComm::GetCollComm).stubs().will(returnValue(&collComm)); | ||
| 59 | + uint32_t multiChannelNum = 0; | ||
| 60 | + HcclResult ret = HcclConfigGetInfo( | ||
| 61 | + comm, HcclConfigType::HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM, sizeof(uint32_t), &multiChannelNum); | ||
| 62 | + EXPECT_EQ(ret, HCCL_SUCCESS); | ||
| 63 | + EXPECT_GE(multiChannelNum, 1u); | ||
| 64 | + EXPECT_LE(multiChannelNum, 16u); | ||
| 65 | + Ut_Comm_Destroy(comm); | ||
| 66 | +} | ||
| 67 | + | ||
| 68 | +TEST_F(OpBaseMiscTest, Ut_HcclConfigGetInfo_When_CfgTypeIsOP_EXPANSION_MODE_Expect_ReturnIsHCCL_SUCCESS) | ||
| 69 | +{ | ||
| 70 | + UT_COMM_CREATE_DEFAULT(comm); | ||
| 71 | + CollComm collComm(nullptr, 0, "ut_comm", ManagerCallbacks{}, CollCommInitMode::simpleMode); | ||
| 72 | + MOCKER_CPP(&hcclComm::GetCollComm).stubs().will(returnValue(&collComm)); | ||
| 73 | + MyRank myRank(nullptr, 0, collComm.GetCommConfig(), ManagerCallbacks{}, nullptr, nullptr); | ||
| 74 | + MOCKER_CPP(&CollComm::GetMyRank).stubs().will(returnValue(&myRank)); | ||
| 75 | + MOCKER_CPP(&MyRank::GetOpExpansionMode).stubs().will(returnValue(0u)); | ||
| 76 | + HcclOpExpansionMode opExpansionMode = HcclOpExpansionMode::HCCL_OP_EXPANSION_MODE_INVALID; | ||
| 77 | + HcclResult ret = HcclConfigGetInfo( | ||
| 78 | + comm, HcclConfigType::HCCL_CONFIG_TYPE_OP_EXPANSION_MODE, sizeof(HcclOpExpansionMode), &opExpansionMode); | ||
| 79 | + EXPECT_EQ(ret, HCCL_SUCCESS); | ||
| 80 | + Ut_Comm_Destroy(comm); | ||
| 81 | +} | ||
| 82 | + | ||
| 54 | TEST_F(OpBaseMiscTest, Ut_HcclCommSymWinGet_When_GetCommSymWinSucceeds_Expect_ReturnIsHCCL_SUCCESS) | 83 | TEST_F(OpBaseMiscTest, Ut_HcclCommSymWinGet_When_GetCommSymWinSucceeds_Expect_ReturnIsHCCL_SUCCESS) |
| 55 | { | 84 | { |
| 56 | UT_COMM_CREATE_DEFAULT(comm); | 85 | UT_COMM_CREATE_DEFAULT(comm); |


[MEDIUM] 新增枚举值 HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM 但未同步更新文档
在对外头文件
include/hccl/hccl_comm.h的HcclConfigType枚举中新增了HCCL_CONFIG_TYPE_UB_MULTI_CHANNEL_NUM = 2。这是对外 API 的枚举值新增,属于向后兼容的扩展(新增枚举值不破坏已有值),但 PR 描述「文档更新」一节为空,未提及对外头文件 API 变更。建议:1. 在 PR 描述中补充对外 API 变更说明(新增枚举值、用途、调用方式)。2. 同步更新 docs/ 下的 API 参考文档(如有 HcclConfigGetInfo 的接口说明)。3. 确认 HCCL 仓是否已同步感知新的枚举值。