SetCcTiling
功能说明
用于设置Hccl客户端通信算法的Tiling地址。
函数原型
1
|
__aicore__ inline int32_t SetCcTiling(__gm__ void *ccOpTilingData) |
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
ccOpTilingData |
输入 |
通信算法的Mc2CcTiling参数的地址。Mc2CcTiling在Host侧计算得出,具体请参考表2 Mc2CcTiling参数说明,由框架传递到Kernel函数中使用,完整示例请参考8.13.1.2-调用示例。 |
返回值
- 0,表示成功。
- -1,表示失败。
支持的型号
注意事项
- 参数相同的同一种通信算法在调用Prepare接口前只需要调用一次本接口,否则需要多次调用本接口。请参考调用示例:•仅有一个通信算法、•一个通信域有多个通信算法。
- 同一种通信算法只支持设置一个ccOpTilingData地址;对于同一种通信算法,重复调用本接口会覆盖该通信算法的ccOpTilingData地址。请参考调用示例:•一个通信域两个相同的算法。
- 若调用本接口,必须与传initTiling地址的Init接口配合使用,且Init接口在本接口前被调用。
- 若调用本接口,必须使用标准C++语法定义TilingData结构体的开发方式,具体请参考使用标准C++语法定义TilingData。
调用示例
- 仅有一个通信算法
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();
父主题: Hccl