CANN/HCOMM CCU_ELSE执行控制

CANN/HCOMM CCU_ELSE执行控制

CCU_ELSE

【免费下载链接】hcommHCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm

产品支持情况

  • Ascend 950PR/Ascend 950DT:支持
  • Atlas A3 训练系列产品/Atlas A3 推理系列产品:不支持
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品:不支持

功能说明

在CCU kernel内开始CCU_IF的else分支:当CCU_IF条件不满足时执行该分支。

CCU_ELSE是一个预处理器宏,必须紧跟在CCU_IF { body }之后使用,不能独立出现,与CCU_IF形成完整的if-else结构。

[!NOTE]说明CCU_ELSE是可选的。CCU_IF可以单独使用,不搭配CCU_ELSE也是合法的。

宏语法

CCU_IF(condExpr) { // then 分支body } CCU_ELSE { // else 分支body }

完整用法请参见CCU_IF。

参数说明

CCU_ELSE无参数,与前一个CCU_IF自动配对,用户无需传入任何参数。

返回值

CCU_ELSE为预处理器宏,本身不返回CcuResult;在正常用法下不会失败。

约束说明

  • CCU_ELSE必须紧跟在CCU_IF { body }之后,不可独立出现,不可出现在其他位置。
  • CCU_IF { body } CCU_ELSE { else-body }之间不允许插入其他CCU API调用。

[!CAUTION]注意 中间一旦插入任何CCU API调用(如数据搬运、同步等),框架会自动提前闭合该CCU_IF;随后到达的CCU_ELSE找不到可配对的CCU_IF,其body会被跳过、注册仍然成功,运行期不会有任何错误返回值,极难调试。务必保持CCU_IF { ... } CCU_ELSE { ... }之间无任何CCU API调用。

  • 不支持else if写法,如需多分支可嵌套CCU_IF
CCU_IF(v == 0) { // case 0 } CCU_ELSE { CCU_IF(v == 1) { // case 1 } CCU_ELSE { // other case } }

调用示例

using namespace AscendC::ccu; CcuResult MyKernel(CcuKernelArg arg) { Variable mode; LoadArg(mode, 0); CCU_IF(mode == 0) { // 模式0处理 Variable result; result = 100; } CCU_ELSE { // 非模式0处理 Variable result; result = 200; } return CCU_SUCCESS; }

【免费下载链接】hcommHCOMM(Huawei Communication)是HCCL的通信基础库,提供通信域以及通信资源的管理能力。项目地址: https://gitcode.com/cann/hcomm

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考