条件分支样例 (Condition)
本样例展示了如何在 PyPTO 的 JIT 内核中使用条件分支逻辑。
总览介绍
在实际算子开发中,常需要根据不同条件执行不同的计算路径。本样例涵盖了以下场景:
- 嵌套循环中的条件判断: 在多层循环内使用
if_else构建条件分支。 - 动态轴 + 静态条件: 使用编译期布尔标志(
boolflag)控制分支。 - 动态轴 + 动态条件: 使用运行时索引比较(
index comparison)控制分支。 - 动态轴 + 循环边界条件: 使用
is_loop_begin/is_loop_end进行边界处理。
代码结构
condition.py: 包含所有条件分支示例的整合脚本。test_nested_loops_with_conditions: 嵌套循环中的条件判断。test_add_scalar_loop_dyn_axis_static_cond: 动态轴 + 静态条件。test_add_scalar_loop_dynamic_axis_dynamic_cond: 动态轴 + 动态条件。test_add_scalar_loop_dynamic_axis_dynamic_loop_cond: 动态轴 + 循环边界条件。
运行方法
环境准备
# 配置 CANN 环境变量
# 安装完成后请配置环境变量,请用户根据set_env.sh的实际路径执行如下命令。
# 上述环境变量配置只在当前窗口生效,用户可以按需将以上命令写入环境变量配置文件(如.bashrc文件)。
# 默认路径安装,以root用户为例(非root用户,将/usr/local替换为${HOME})
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 设置设备 ID
export TILE_FWK_DEVICE_ID=0
执行脚本
# 运行所有条件分支示例
python3 condition.py
# 列出所有可用的用例
python3 condition.py --list
# 运行特定的用例
python3 condition.py nested_loops_with_conditions::test_nested_loops_with_conditions
注意事项
- 条件分支会影响编译器的代码生成路径,复杂的嵌套条件可能导致编译时间增加。
- 动态条件与静态条件的选择取决于条件值是否在编译期可知。