循环可通过 chess_flatten_loop
编译指示来完全平铺。由于 AI 引擎编译器无法以最优方式来自动执行某些小型循环,对于这类小型循环,平铺很有用。在最终调度(例如,代码生成)阶段完成的平铺仍是基于循环构造来完成的。
对于循环平铺,编译器可以判定循环计数。如果工具无法自动判定循环计数,则可使用
chess_loop_count
编译指示来设置循环计数。例如:for(int i=0;i<6;i++) chess_flatten_loop {...}
for(...) chess_loop_count(6) chess_flatten_loop {...}
凭借 chess_unroll_loop(N)
,可以将循环主体复制 N-1
次,并且循环计数可以除以 N
。循环也可由 chess_unroll_loop(*)
完全展开。循环作为一连串重复性的相似独立语句进行展开并重写。