用于设置Hccl客户端通信算法的Tiling地址。
1
|
__aicore__ inline int32_t SetCcTiling(__gm__ void *ccOpTilingData) |
参数名 |
输入/输出 |
描述 |
---|---|---|
ccOpTilingData |
输入 |
通信算法的Mc2CcTiling参数的地址。Mc2CcTiling在Host侧计算得出,具体请参考表2 Mc2CcTiling参数说明,由框架传递到Kernel函数中使用,完整示例请参考8.13.1.2-调用示例。 |
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 != HCCL_SUCCESS) { 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 != HCCL_SUCCESS) { return; } ret = hccl.SetCcTiling(allGatherTiling); if (ret != HCCL_SUCCESS) { 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 != HCCL_SUCCESS) { return; } handleId = hccl.AllGather<true>(sendBuf, recvBuf, sendCount, HcclDataType::HCCL_DATA_TYPE_FP16, strideCount); hccl.Wait(handleId); ret = hccl.SetCcTiling(allGatherTiling2); if (ret != HCCL_SUCCESS) { return; } handleId = hccl.AllGather<true>(sendBuf, recvBuf, sendCount, HcclDataType::HCCL_DATA_TYPE_FP16, strideCount); hccl.Wait(handleId); hccl.Finalize(); |