下载
中文
注册

Init

功能说明

Hccl客户端初始化接口。该接口默认在所有核上工作,用户也可以在调用前通过GetBlockIdx指定其在某一个核上运行。

函数原型

1
__aicore__ inline void Init(GM_ADDR context, __gm__ void *initTiling = nullptr)

参数说明

表1 接口参数说明

参数名

输入/输出

描述

context

输入

通信上下文,包含rankDim,rankID等相关信息。

initTiling

输入

可选参数,通信域初始化Mc2InitTiling的地址。Mc2InitTiling在Host侧计算得出,具体请参考表1 Mc2InitTiling参数说明,由框架传递到Kernel函数中使用,完整示例请参考8.13.1.2-调用示例

返回值

支持的型号

Atlas A2 训练系列产品/Atlas 800I A2 推理产品

注意事项

  • 该接口推荐在AI Cube核或者AI Vector核两者之一上调用。
  • 若调用本接口时传入initTiling参数,则必须与SetCcTilling接口配合使用。
  • 不能同时调用传入可选参数initTiling的接口和不传入可选参数initTiling的接口,推荐使用传入initTiling参数的调用方式。
  • 若调用本接口时传入initTiling参数,必须使用标准C++语法定义TilingData结构体的开发方式,具体请参考使用标准C++语法定义TilingData

调用示例

  • 示例1:默认在所有核上创建Hccl对象并调用Init接口初始化。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // 传initTiling地址的调用方式,推荐使用该方式
    REGISTER_TILING_DEFAULT(AllGatherCustomTilingData); //AllGatherCustomTilingData为对应算子头文件定义的结构体
    auto tiling = (__gm__ AllGatherCustomTilingData*)tilingGM; 
    Hccl hccl;
    GM_ADDR contextGM = GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
    
    __gm__ void *mc2InitTiling = (__gm__ void *)(&tiling->mc2InitTiling);
    hccl.Init(contextGM, mc2InitTiling);
    // 调用Hccl的SetCcTiling、Prepare、Commit、Wait、Finalize接口
    
    1
    2
    3
    4
    5
    6
    // 不传initTiling地址的调用方式
    Hccl hccl;
    GM_ADDR contextGM = GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
    hccl.Init(contextGM);
    
    // 调用Hccl的Prepare、Commit、Wait、Finalize接口
    
  • 示例2,只在Vector核上创建Hccl对象并调用Init接口初始化,后续只能在Vector核上调用Hccl其他接口。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    // 传initTiling地址的调用方式,推荐使用该方式
    REGISTER_TILING_DEFAULT(AllGatherCustomTilingData); //AllGatherCustomTilingData为对应算子头文件定义的结构体
    auto tiling = (__gm__ AllGatherCustomTilingData*)tilingGM;
    __gm__ void *mc2InitTiling = (__gm__ void *)(&tiling->mc2InitTiling);
    if ASCEND_IS_AIV { 
      Hccl hccl;
      GM_ADDR contextGM = GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
      hccl.Init(contextGM, mc2InitTiling);
    
      // 调用Hccl的SetCcTiling、Prepare、Commit、Wait、Finalize接口
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    // 不传initTiling地址的调用方式
    if ASCEND_IS_AIV { 
      Hccl hccl;
      GM_ADDR contextGM = GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
      hccl.Init(contextGM);
    
      // 调用Hccl的Prepare、Commit、Wait、Finalize接口
    }
    
  • 示例3,只在Vector的0核上创建Hccl对象并调用Init接口初始化,后续只能在Vector的0核上调用其他接口。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    // 传initTiling地址的调用方式,推荐使用该方式
    REGISTER_TILING_DEFAULT(AllGatherCustomTilingData); //AllGatherCustomTilingData为对应算子头文件定义的结构体
    auto tiling = (__gm__ AllGatherCustomTilingData*)tilingGM;
    __gm__ void *mc2InitTiling = (__gm__ void *)(&tiling->mc2InitTiling);
    if ASCEND_IS_AIV { 
      if (GetBlockIdx()==0) {
        Hccl hccl;
        GM_ADDR contextGM = GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
        hccl.Init(contextGM, mc2InitTiling);
    
        // 调用Hccl的SetCcTiling、Prepare、Commit、Wait、Finalize接口
      }
    }
    
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    // 不传initTiling地址的调用方式
    if ASCEND_IS_AIV { 
      if (GetBlockIdx()==0) {
        Hccl hccl;
        GM_ADDR contextGM = GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
        hccl.Init(contextGM);
    
        // 调用Hccl的Prepare、Commit、Wait、Finalize接口
      }
    }