Aiur – ZelluX 的技术博客

Security, Kernel, Virtualization, Programming Languages

ICS Lab4 经验

377 views | without comments

1. 编译

不安装图形界面:
修改sim/Makefile,把前三行非注释部分用#注释掉,变成
# GUIMODE …
# TKLIB …
# TKINC …
保存后运行make

图形界面:
需要安装Tcl/Tk库
+ Redhat 9:
可以在Redhat菜单->System Settings->Add/Remove Applications中添加X Software Development,根据提示载入相关镜像文件。
然后在sim目录下运行make
+ Arch Linux:
有包管理机制的发行版直接用相关软件安装(比如Arch中pacman -S tcl tk),注意安装好以后生成的动态链接库可能带有版本号(比如libtcl8.5.so libtk8.5.so)
具体版本号通过pacman -Ql tcl tk | grep ‘.so’查得
接着只要修改Makefile中的TKLIBS参数,或者用ln建个链接即可
+ Ubuntu
由于ubuntu默认没有lex词法分析工具,在编译时需要先安装flex
sudo apt-get install flex

图形界面和Arch类似
sudo apt-get install tcl8.5-dev tk8.5-dev tcl8.5 tk8.5
然后修改Makefile
ltcl->ltcl8.5
ltk->ltk8.5
/usr/local/lib/.. -> /usr/lib/..
/usr/local/include/ -> /usr/lib/tcl8.5/include/

2. Part A
用y86写三个小程序,基本上仿照seq/asum.ys写就行了。装了图形界面的模拟器的话调试起来也很方便。
相关命令(假设在seq目录下):
编译 make asum.yo
运行 ../misc/yis asum.yo
调试 ./ssim -g asum.yo

3. Part B
同样不需要花多少力气,把Homework 16的答案写成HCL语言就行,可以参照opl, irmovl, popl这三个指令的写法。
通过ICS主页上的Lab4.pdf中的几个测试命令即可。

4. Part C
通过修改HCL和y86代码优化程序,最麻烦的一块。
在pipe目录下运行./benchmark.pl -f ncopy.ys,这个脚本就会自动运行一系列测试程序并计时,最后一行显示了平均所需的时间。
优化方法很多,系版的精华区的讨论帖里就有不少。
另外可以看看pipe/README这个文件,里面也说了几种方法。
最简单的就是实现iaddl指令,用它替换部分语句缩短时间;还有一个比较重要的就是loop unrolling,所谓loop unrolling就是把一个循环中的语句合并,减少循环次数。
用C语言简单的举一个例子

for (int i = 0; i < 10; i++)
    dst[i] = src[i];

把相邻两个循环合并起来,变成

for (int i = 0; i < 10; i += 2) {
    dst[i] = src[i];
    dst[i + 1] = src[i + 1];
}

这样增加i的值的语句就从原来的10个减少到了现在的5个。
另外这里还有一个潜在的好处,dst[i] = src[i]在执行的时候有个Load/Use Data Hazards,会产生一个bubble,如果先读出src[i],再读出src[i+1],然后依次写入dst[i],dst[i+1],这样就可以消去这个bubble,从而为每个元素节约一个左右的时钟数。

测试方法:
先保证pipe-full.hcl中的iaddl语句的正确,make以后在ptest目录下运行
make SIM=../pipe/psim TFLAGS=-i TFLAGS=-i
之后在pipe目录下运行./correctness.pl -f ncopy.ys测试样例程序,通过以后再运行./benchmark.pl -f ncopy.ys就能看到这个程序的性能了。

5. 其他一些补充
1) correctness.pl这个脚本测试时报的错误可能会和实际不一致,比如Bad count和Incorrect copying貌似会混淆。
2) unrolling的时候建议写个专门生成相关代码片段的脚本,否则改起来太麻烦了。

Related Posts

Written by zellux

March 16th, 2008 at 7:46 pm

Posted in Computer System

Tagged with ,

Leave a Reply

FireStats icon Powered by FireStatsBetter Tag Cloud