|
产品 |
是否支持 |
|---|---|
|
|
√ |
|
|
√ |
|
|
x |
|
|
x |
|
|
x |
|
|
x |
|
|
x |
用于设置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 25 26 27 28 29 30 |
// 传initTiling地址的调用方式 REGISTER_TILING_DEFAULT(AlltoAllAllGatherCustomTilingData); //AlltoAllAllGatherCustomTilingData为对应算子头文件定义的结构体 auto tiling = (__gm__ AlltoAllAllGatherCustomTilingData*)tilingGM; __gm__ void *mc2InitTiling = (__gm__ void *)(&(tiling1->mc2InitTiling)); __gm__ void *allToAllTiling = (__gm__ void *)(&(tiling1->allToAllTiling)); __gm__ void *allGatherTiling = (__gm__ void *)(&(tiling1->allGatherTiling)); Hccl hccl_alltoall; Hccl hccl_allgather; GM_ADDR context_0 = AscendC::GetHcclContext<0>(); GM_ADDR context_1 = AscendC::GetHcclContext<1>(); hccl_alltoall.Init(context_0, mc2InitTiling); hccl_allgather.Init(context_1, mc2InitTiling); auto ret = hccl_alltoall.SetCcTiling(allToAllTiling); if (ret != HCCL_SUCCESS) { return; } ret = hccl_allgather.SetCcTiling(allGatherTiling); if (ret != HCCL_SUCCESS) { return; } handleId = hccl_alltoall.AlltoAllV<true>(sendBuf, sendCounts, sDisplacements, dtype, recvBuf, recvCounts, rDisplacements, dtype); hccl_allgather.InterHcclGroupSync(0, handleId); auto allGatherHandleId = hccl_allgather.AllGather<true>(sendBuf, recvBuf, sendCount, HcclDataType::HCCL_DATA_TYPE_FP16, strideCount); hccl_allgather.Wait(allGatherHandleId); // 调用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(); |