Init
功能说明
Hccl客户端初始化接口。该接口默认在所有核上工作,用户也可以在调用前通过GetBlockIdx指定其在某一个核上运行。
函数原型
1
|
__aicore__ inline void Init(GM_ADDR context, __gm__ void *initTiling = nullptr) |
参数说明
参数名 |
输入/输出 |
描述 |
---|---|---|
context |
输入 |
通信上下文,包含rankDim,rankID等相关信息。 |
initTiling |
输入 |
可选参数,通信域初始化Mc2InitTiling的地址。Mc2InitTiling在Host侧计算得出,具体请参考表1 Mc2InitTiling参数说明,由框架传递到Kernel函数中使用,完整示例请参考8.13.1.2-调用示例。 |
返回值
无
支持的型号
注意事项
- 该接口推荐在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接口 } }
父主题: Hccl