Skip to content

update: archlab笔记中循环展开的结果 #11

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions notes/archlab.md
Original file line number Diff line number Diff line change
Expand Up @@ -286,7 +286,7 @@ bool set_cc = icode in { IOPQ, IIADDQ };
使用 `unix> ./benchmark.pl` 自动测试得到平均 CPE 。
最初用给定的代码测试得到 CPI ( cycles per instruction ) 为 1.14 ,平均 CPE 约为 15.18 。这里要拿满分平均 CPE 应在 7.5 以下。
首先和 Part B 一样实现 `iaddq` 指令,此时平均 CPE 降为 13.70 ,将减法改为 `iaddq` 得到 CPE 为 12.70 由于 `iaddq` 会更新状态码,可以利用它减少一个比较指令,得到 CPE 为 11.70 。
考虑将循环展开,这里展开八次,CPE 降为 8.81(这里有个问题,使用 %r15 寄存器会出现错误,不知道什么原因),最终优化的函数保存在 `ncopy.ys` 中,通过了所有的测试,得分为 33.9/60.0 。得分有点低,说明还有很大的优化空间,进一步优化的尝试参见附[1]。
考虑将循环展开,这里展开八次,CPE 降为 8.81(由于Y86-64处理器中没有 %r15 寄存器,调用 %r15 会出现错误),最终优化的函数保存在 `ncopy.ys` 中,通过了所有的测试,得分为 33.9/60.0 。得分有点低,说明还有很大的优化空间,进一步优化的尝试参见附[1]。

## 小结

Expand All @@ -295,4 +295,4 @@ bool set_cc = icode in { IOPQ, IIADDQ };

### 附:

[1]可以很容易看出,循环展开之后的余项可能有八位之多,对性能造成了较大的影响,可以进一步将余项循环展开四次。这里我写了一个四次展开的版本,保存在 [4ncopy.ys](../labs/archlab/sim/pipe/4ncopy.ys) 中,也保存了一份八次展开的版本在 [8ncopy.ys](../labs/archlab/sim/pipe/8ncopy.ys) 中,这两个版本都通过了测试,将八次展开和四次展开综合起来,就得到一个优化版本,保存在 [mncopy.ys](../labs/archlab/sim/pipe/mncopy.ys) 中,但是这个版本只能部分通过测试,这个 bug 太玄学了。。经过近两小时的挣扎,我最终放弃治疗,有时间再看吧
[1]可以很容易看出,循环展开之后的余项可能有八位之多,对性能造成了较大的影响,可以进一步将余项循环展开四次。这里我写了一个四次展开的版本,保存在 [4ncopy.ys](../labs/archlab/sim/pipe/4ncopy.ys) 中,也保存了一份八次展开的版本在 [8ncopy.ys](../labs/archlab/sim/pipe/8ncopy.ys) 中。进一步地,将八次展开和四次展开综合起来,就得到一个优化版本,保存在 [mncopy.ys](../labs/archlab/sim/pipe/mncopy.ys) 中,可以进一步将 CPE 降为 8.64