CANN/pypto循环展开函数文档
pypto.loop_unroll
【免费下载链接】pyptoPyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
功能说明
pypto.loop_unroll是一个支持循环展开的循环迭代器函数,功能与pypto.loop类似,增加了unroll_list参数支持多个展开方式。
函数原型
loop_unroll(*args, **kwargs) -> Iterator[Tuple[SymInt, int]]参数说明
| 参数名 | 输入/输出 | 说明 |
|---|---|---|
| *args | 输入 | 三个可选参数,分别为循环起始值(start),循环结束值(stop),循环步长(step),有以下三种写法: - 单参数形式:stop(SymInt),起始值默认为0,步长默认为1。等价于:loop_unroll(0, stop, 1) - 双参数形式:start(SymInt),stop(SymInt),等价于loop_unroll(start, stop, 1) - 三参数形式:start (SymInt),stop(SymInt),step(SymInt),等价于loop_unroll(start, stop, step) |
| **kwargs | 输入 | - name(str):循环标识名称,默认生成f"loop_{loop_idx}"。 - idx_name(str): 循环索引变量的名称,默认生成f"loop_idx_{loop_idx}"。 - unroll_list(List[int]): 需要展开unroll的循环层数集合,默认为空集合。loop会提供等于该集合长度的几种展开方式,展开次数为n时,循环步长会变成step*n,每次迭代会执行n次循环体。每种展开次数会生成不同的代码路径。 - submit_before_loop(bool): 是否在循环开始前提交计算,默认为False。开启后会在循环开启前强制提交当前累积的计算任务到AICore执行。 |
返回值说明
返回一个迭代器,每次迭代产生一个元组(idx, unroll_factor),idx表示当前循环的索引值,unroll_factor标识当前选择的展开方式。
约束说明
- 展开因子列表会被排序并去重,且总是包含 1
- 展开因子按从大到小排序
- 每个展开因子会生成一个子循环
- 多层循环使用了loop_unroll并且配置unroll_list,会大大增加编译出的图数量,影响编译性能
调用示例
for _ in pypto.loop_unroll(0, 10, 1, name="LOOP_L0_bIdx_mla_prolog", idx_name="b_idx", unroll_list=[1, 2, 4]): ...【免费下载链接】pyptoPyPTO(发音: pai p-t-o):Parallel Tensor/Tile Operation编程范式。项目地址: https://gitcode.com/cann/pypto
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
