循环平铺和展开 - 2022.1 简体中文

AI 引擎内核编码 最佳实践指南 (UG1079)

Document ID
UG1079
Release Date
2022-05-25
Version
2022.1 简体中文

循环可通过 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(*) 完全展开。循环作为一连串重复性的相似独立语句进行展开并重写。