展开因子 4 跑几轮
按模型,循环跑 10 次、展开因子 4,unroll_count(10, 4) 交回几轮?
循环优化模型:is_invariant(用到的变量, 循环变量)=式子不含循环变量就是循环不变、可外提;hoistable 数能外提的条数;循环跑 n 次、展开因子 factor,unroll_count=n//factor、remainder=n%factor。
def is_invariant(expr_vars, loop_var):
"""一条式子用到的变量里不含循环变量 -> 它是「循环不变」的,可提到循环外。"""
return loop_var not in expr_vars
def hoistable(exprs, loop_var):
"""一组式子里,有几条能提到循环外(不含循环变量)。exprs: 每条是它用到的变量列表。"""
return sum(1 for e in exprs if loop_var not in e)
def unroll_count(n, factor):
"""循环跑 n 次、展开因子 factor:展开后的循环体跑几轮(整除部分)。"""
return n // factor
def remainder(n, factor):
"""展开后还剩几次收尾(余数)。"""
return n % factor
print(unroll_count(10, 4))
全部评论