---
title: HcclCreateSubCommConfig
description: "| 产品 | 是否支持 |"
url: https://www.hiascend.com/document/detail/zh/canncommercial/latest/API/hcclug/hcclcpp_07_0019.html
sourcePath: /source/zh/canncommercial/900/API/hcclug/hcclcpp_07_0019.html
indexId: e0b8e3ae356d9cbe85ae29424ea64384baf8a8194cd36c9e11a9a55b7e25cb3061
---
# HcclCreateSubCommConfig

#### 产品支持情况

| 产品 | 是否支持 |
| --- | --- |
| Atlas 350 加速卡 | √ |
| Atlas A3 训练系列产品 / Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品 / Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | ☓ |
| Atlas 推理系列产品 | ☓ |
| Atlas 训练系列产品 | √ |


针对 Atlas A2 训练系列产品 / Atlas A2 推理系列产品 ，仅支持Atlas 800T A2 训练服务器、Atlas 900 A2 PoD 集群基础单元、Atlas 200T A2 Box16 异构子框。


#### 功能说明

基于既有的全局通信域，切分具有特定配置的子通信域。

该子通信域创建方式无需进行socket建链与rank信息交换，可应用于业务故障下的快速通信域创建。

如果组网中卡间存在负载不均衡的情况，使用该接口创建的子通信域可能会由于卡间不同步发生建链超时。此时可通过环境变量HCCL_CONNECT_TIMEOUT增加设备间的建链超时时间。示例：

```
export HCCL_CONNECT_TIMEOUT=600
```


#### 函数原型

```
HcclResult HcclCreateSubCommConfig(HcclComm *comm, uint32_t rankNum, uint32_t *rankIds, uint64_t subCommId, uint32_t subCommRankId, HcclCommConfig *config, HcclComm *subComm)
```


#### 参数说明

| 参数名 | 输入/输出 | 描述 |
| --- | --- | --- |
| comm | 输入 | 被切分的全局通信域。 HcclComm类型的定义可参见HcclComm。 |
| rankNum | 输入 | 需要切分的子通信域中的rank数量。 |
| rankIds | 输入 | 子通信域中rank在全局通信域中的rank id组成的数组。 需要注意：该数组应当是有序的，数组中每个rank的下标将映射为其在子通信域的rank id。 |
| subCommId | 输入 | 当前子通信域标识，用户自定义。 若未在config参数中配置子通信域名称“hcclCommName”，系统会使用“{全局通信域名}\_sub\_{subCommId}”作为子通信域名称，此种场景下，需要确保“subCommId”在全局通信域中保持唯一。 若在config参数中配置了子通信域名称“hcclCommName”，则优先以config中配置为准，此参数不再做校验。 |
| subCommRankId | 输入 | 本rank在子通信域中的rank id。 请配置为当前rank在rankIds数组中的下标索引。 |
| config | 输入 | 通信域配置项，包括buffer大小、确定性计算开关、通信域名称、通信算子展开模式等信息，配置参数需确保在合法值域内，关于HcclCommConfig中的详细参数含义及优先级可参见HcclCommConfig的定义。 需要注意：传入的config必须先调用HcclCommConfigInit对其进行初始化。 |
| subComm | 输出 | 将初始化后的子通信域以指针的信息回传给调用者。 HcclComm类型的定义可参见HcclComm。 |


#### 返回值

HcclResult：接口成功返回HCCL_SUCCESS，其他失败。


#### 约束说明

- 属于同一子通信域的rank调用该接口时传入的rankNum、rankIds、subCommId、config均应相同。
- 不需要创建子通信域的rank应当传入rankIds=nullptr和subCommId=0xFFFFFFFF，此场景不会对“subCommId”参数做校验。
- 只支持从全局通信域切分子通信域，不支持在子通信域中进一步切分子通信域。


#### 调用示例

```
// 初始化全局通信域
HcclComm globalHcclComm;
HcclCommInitClusterInfo(rankTableFile, devId, &globalHcclComm);
// 通信域配置
HcclCommConfig config;
HcclCommConfigInit(&config);
config.hcclBufferSize = 50;
strcpy(config.hcclCommName, "comm_1");
// 初始化子通信域
HcclComm hcclComm;
uint32_t rankIds[4] = {0, 1, 2, 3};  // 子通信域的 Rank 列表
// 当前rank在子通信域中的rank id设置为0
HcclCreateSubCommConfig(&globalHcclComm, 4, rankIds, 1, 0, &config, &hcclComm);
```
