昇腾社区首页
中文
注册

SetCcTiling

功能说明

用于设置Hccl客户端通信算法的Tiling地址。

函数原型

1
__aicore__ inline int32_t SetCcTiling(__gm__ void *ccOpTilingData)

参数说明

表1 接口参数说明

参数名

输入/输出

描述

ccOpTilingData

输入

通信算法的Mc2CcTiling参数的地址。Mc2CcTiling在Host侧计算得出,具体请参考表2 Mc2CcTiling参数说明,由框架传递到Kernel函数中使用,完整示例请参考8.13.1.2-调用示例

返回值

  • 0,表示成功。
  • -1,表示失败。

支持的型号

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

注意事项

调用示例

  • 仅有一个通信算法
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    // 传initTiling地址的调用方式
    REGISTER_TILING_DEFAULT(AllGatherCustomTilingData); //AllGatherCustomTilingData为对应算子头文件定义的结构体
    auto tiling = (__gm__ AllGatherCustomTilingData*)tilingGM;
    
    Hccl hccl;
    GM_ADDR contextGM = AscendC::GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
    
    __gm__ void *mc2InitTiling = (__gm__ void *)(&tiling->mc2InitTiling);
    __gm__ void *mc2CcTiling = (__gm__ void *)(&(tiling->mc2CcTiling));
    hccl.Init(contextGM, mc2InitTiling);
    auto ret = hccl.SetCcTiling(mc2CcTiling);
    if (ret) {
      return;
    }
    // 调用Hccl的Prepare、Commit、Wait、Finalize接口
    
  • 一个通信域有多个通信算法
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 传initTiling地址的调用方式
    REGISTER_TILING_DEFAULT(AllGatherCustomTilingData); //AllGatherCustomTilingData为对应算子头文件定义的结构体
    auto tiling = (__gm__ AllGatherCustomTilingData*)tilingGM;
    
    Hccl hccl;
    GM_ADDR contextGM = AscendC::GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
    
    __gm__ void *mc2InitTiling = (__gm__ void *)(&tiling->mc2InitTiling);
    __gm__ void *allToAllTiling = (__gm__ void *)(&(tiling->allToAllCcTiling));
    __gm__ void *allGatherTiling = (__gm__ void *)(&(tiling->allGatherCcTiling));
    hccl.Init(contextGM, mc2InitTiling);
    auto ret = hccl.SetCcTiling(allToAllTiling);
    if (ret) {
      return;
    }
    ret = hccl.SetCcTiling(allGatherTiling);
    if (ret) {
      return;
    }
    auto handleId = hccl.AllToAll<true>(sendBuf, recvBuf, dataCount, HcclDataType::HCCL_DATA_TYPE_FP16);
    hccl.Wait(handleId);
    handleId = hccl.AllGather<true>(sendBuf, recvBuf, sendCount, HcclDataType::HCCL_DATA_TYPE_FP16, strideCount);
    hccl.Wait(handleId);
    hccl.Finalize();
    
  • 一个通信域两个相同的算法
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    // 传initTiling地址的调用方式
    REGISTER_TILING_DEFAULT(AllGatherCustomTilingData); //AllGatherCustomTilingData为对应算子头文件定义的结构体
    auto tiling = (__gm__ AllGatherCustomTilingData*)tilingGM;
    
    Hccl hccl;
    GM_ADDR contextGM = AscendC::GetHcclContext<0>();  // AscendC自定义算子kernel中,通过此方式获取Hccl context
    
    __gm__ void *mc2InitTiling = (__gm__ void *)(&tiling->mc2InitTiling);
    __gm__ void *allGatherTiling1 = (__gm__ void *)(&(tiling->allGatherCcTiling1));
    __gm__ void *allGatherTiling2 = (__gm__ void *)(&(tiling->allGatherCcTiling2));
    hccl.Init(contextGM, mc2InitTiling);
    auto ret = hccl.SetCcTiling(allGatherTiling1);
    if (ret) {
      return;
    }
    handleId = hccl.AllGather<true>(sendBuf, recvBuf, sendCount, HcclDataType::HCCL_DATA_TYPE_FP16, strideCount);
    hccl.Wait(handleId);
    ret = hccl.SetCcTiling(allGatherTiling2);
    if (ret) {
      return;
    }
    handleId = hccl.AllGather<true>(sendBuf, recvBuf, sendCount, HcclDataType::HCCL_DATA_TYPE_FP16, strideCount);
    hccl.Wait(handleId);
    hccl.Finalize();