楼主:
kyuudonut (善良è€ç™¾å§“)
2020-08-15 16:57:36此回文与原文没什么关系,只是想考生们补充一下:
该文标题叫做 "多重管线循环展开",
千万别在考卷上这样写,保证教授不知道你在写什么。
是多重管线? 还是说多重循环?
多重管线又是什么? 我没有听过这个 term ...
如果是意指 multiple-issue/superscalar processor,
那也很奇怪,
因为 Loop unrolling 不见得一定得在 multiple-issue processor 才能做。
Single-issue pipeline 一样会有不错的效果。
多重循环这个 term 对我来说也意味不明 ...
好像没听过直接来拿翻的,直接写 loop unrolling 还是妥妥的
※ 引述《NTUmaki (西木野真姬)》之铭言:
: https://i.imgur.com/yfPB5rA.jpg
对于一般的 loop 来说,如果你的 tripcount 是 static time 就得知的,
而且又可以整除 unroll factor,的确,Compiler 可以帮你 gen 这么漂亮的 code。
但是现实总是不美好,constant tripcount 可能本来就不会整除了,
更何况是 runtime 才知道的情况?
此时 compiler 除了 Unrolled loop body 之外,还是会保留原本的 loop body,
以防止没有整除 (tail loop) 的情况发生。
有兴趣的人可以往 LLVM 的 LoopUnroll Pass 翻,我相信都会有不错的体悟。
: https://i.imgur.com/V6BQQL0.jpg
千万不要说 Compiler 帮你做 Register Renaming ... >_<
阅卷教授也不会知道你在写什么。
Compiler 做的事情叫做 Register Allocation,
是从 Program 生成的 DAG (Dependency Acyclic Graph) 资讯中,
从 virtual registers 里去分配 architecture (/physical) registers。
阿你可能会说,做的事情不是类似?意思有到就好?
千万别这样想 ...,如果已经有读过 OoO (Out-of-Order) processor 的人应该就知道
Register renaming 的机制是什么,几乎可以说是专有名词了
阅卷教授只会觉得你书没唸懂而已 ... 可能情况还更糟糕。
就酱。