From 0a5db4caff447d5d948ddccdc97366c137868b73 Mon Sep 17 00:00:00 2001 From: xinghyfish Date: Wed, 15 Feb 2023 23:49:01 +0800 Subject: [PATCH] =?UTF-8?q?update:=20archlab=E7=AC=94=E8=AE=B0=E4=B8=AD?= =?UTF-8?q?=E5=BE=AA=E7=8E=AF=E5=B1=95=E5=BC=80=E7=9A=84=E7=BB=93=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- notes/archlab.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/notes/archlab.md b/notes/archlab.md index 6d13303..035f6c0 100644 --- a/notes/archlab.md +++ b/notes/archlab.md @@ -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]。 ## 小结 @@ -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 太玄学了。。经过近两小时的挣扎,我最终放弃治疗,有时间再看吧。 \ No newline at end of file +[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。 \ No newline at end of file