文件名称:
#3073336-lab测评.md
所在目录:
树洞
文件大小:
9.74 KB
下载地址:
文本预览:
#3073336 2022-01-08 20:49 关注数:106 回复数:24
假期无聊,趁着还没忘给学弟学妹测评一下 ics 各个 lab 的难度和任务量,以及做每个 lab 的时候可能遇到的坑。具体内容放在洞内了
标签:datalab bomblab attacklab archlab cachelab shelllab malloclab
#12980036 2022-01-08 20:53
[Alice] mark(
#12980114 2022-01-08 20:56
[洞主] datalab
代码量不大,不需要自己搭框架。要完成一堆关于整数位表示、整数位运算、浮点数位表示的函数。这个 lab 的某些题非常 tricky,比如用位级运算求整数%3、用位级运算求一个整数二进制形式有多少段连续的 1 等等,虽然很有意思但也略烧脑。实在不会可以 google 一下思路,毕竟这些 tricky 的东西也不是 ics 的考察重点
具体操作方面,建议测试代码的时候别运行那个测试用的 test 程序,直接用 check.pl 和 driver.pl 来测试。因为前者数据非常弱,很有迷惑性,很有可能某道题用 test 通过了,交上去拿不到分。但后两个测试程序应该就是评分的时候采用的
#12980437 2022-01-08 21:07
[洞主] bomblab
这个 lab 对应第三章的汇编。一共 6 个 phase,每一关需要阅读汇编语言代码,输入特定的字符串,使得程序正常返回,而不会触发 explode_bomb()函数引爆炸弹。需要阅读的代码量比较大,实际要写的代码量为 0,难度还可以
这个 lab 个人感觉比 datalab 重要,期中期末的汇编大题直接考的就是这方面的东西,所以建议好好做。另外 bomblab 需要用到 gdb 调试工具来运行+调试 bomb 这个可执行文件,这个工具也很重要
#12980638 2022-01-08 21:14
[洞主] 【关键】这个 lab 需要在虚拟机上连接服务器,在服务器上提交字符串,但只要提交了错误答案,引发 explode_bomb()函数引爆炸弹,就会给你扣分。比较普遍的做法是,用 hexedit 工具(是一个能直接修改二进制文件的工具)修改 bomb 文件(修改 initialize_bomb 和 send_msg 两个函数),使得这个文件不用连接服务器,也能在本地运行。修改之后 bomb 爆炸不再扣分,就可以在本地开心地调试 lab 了。具体怎么修改 bomb 文件,可以翻墙去 google 搜索相关博客
一些坑:phase4 涉及到递归,比较麻烦。phase6 涉及到一个 6 个元素的链表,但你有可能只能找到 5 个 node 节点。这个时候不要慌,试试用 gdb 查看 node5 对应的下一个元素地址,有惊喜。
#12980877 2022-01-08 21:24
[洞主] attacklab
和 bomblab 一样需要读大量代码,但实际不用写太多,难度中等。attacklab 内容是输入特定字符串,利用缓冲区溢出来攻击函数栈帧,从而人工改变程序的运行轨迹,跳转到我们想要的函数(有一种当黑客的感觉 x)
关于这个 lab 也没有什么特别需要排坑的事情,大家看懂书上的原理之后直接做就行了
#12981009 2022-01-08 21:31
[洞主] attacklabX
今年助教心血来潮新加的。原来的 attacklab105 分,labX5 分,两个合起来算 110 分。这个 lab dz 没做,目测只有四分之一的人做了,反正对分数没什么影响
labX 的原理好像和 attacklab 差不多,但输入输出之类的格式非常恶心,而且因为是助教整活新加的,所以 lab 本身也非常非常不成熟。以至于做 attacklab 的两周里,洞里骂声不断。今年 ics 体验很好,但如果没有这个玩意,绝对会更好一些
#12981280 2022-01-08 21:41
[洞主] archlab
对应第四章“处理器体系结构”,采用的编程语言是第四章学的 Y86 汇编。这个 lab 按照优化程度给分,代码量和难度中等,想得高分容易,但想优化到满分有点难
第一部分:手写 Y86 汇编程序 第二部分:往 Y86 指令集里加入新指令
第三部分:优化处理器流水线,使得这个流水线跑程序的 CPE 尽可能地小,不做任何优化的 CPE 是 15.1,优化到 10.5 开始有分数,优化到 7.5 满分
一些排坑:1.dz 在做 part2 的时候,本地测试没完全通过,但提交之后就满分了。可供参考。 2.第一部分手写 Y86 程序,不需要使得程序对任何数据都成立,只需要自己在程序里手动添加特定测试数据即可 3.part3 的优化,想拿到满分思路相对单一(循环展开+三叉树+跳转表),【小心查重】【小心查重】【小心查重】
#12981497 2022-01-08 21:50
[洞主] cachelab(擦车 lab)
终于脱离了汇编语言,从 cache 开始的 lab 就都是正经的 C 语言编程了。这个 lab 码量比前几个要大一些,也是按优化给分,优化的过程有点难
lab 分两部分,第一部分:手动模拟一个高速缓存,第二部分:用缓存优化矩阵相乘的程序,降低缓存 miss 次数。part2 的优化挺烧脑的,最后一题 cmu 要求优化到 2000 给满分,贵校的 lab 加强了要求,优化到 1600 才能满(我们 PKU 真是太厉害辣)
排坑:注意 part1 是 64 位地址而不是 32 位!!!坑了不少人的 bug
part2 的解决方式基本唯一:用矩阵分块,实在不会可以去 google 上找文章借鉴一下思路,但别抄代码就行
#12981673 2022-01-08 21:57
[洞主] ----------------------------分割线---------------------------
后三个 lab 明显比前五个更难,而且后半学期学的东西也比前半学期复杂很多。菜鸡期中还能 75+,期末卷面估计上不了 70 了 😥
#12981866 2022-01-08 22:04
[Bob] Re 洞主: archlab 满分思路哪里单一了?可以改 hcl 文件你又不改,只会网上搜思路那做出来确实单一。
cachelab cmu 是 61*67,pku 是 60*68,矩阵都不一样 miss 次数也能拉到一起比是吧?
#12981953 2022-01-08 22:07
[洞主] Re Bob:我是从水平一般的同学的视角测评的,大佬可以不用看。。。
#12982010 2022-01-08 22:09
[洞主] Re Bob: 而且 cachelab61×67 和 60×68 区别也不大啊,矩阵尺寸的影响肯定远小于 miss 要求的影响。。cmu 的第三题真的是随便水水就满分
#12982474 2022-01-08 22:27
[洞主] shelllab
对应第 8 章异常控制流,异常和信号处理的内容,以及第十章的重定位(第 10 章重定位这块一定要好好看,上课存在感比较低,但期末有可能和第 8 章一块出大题)。码量比较大,debug 难度显著大于前几个 lab,菜鸡 dz debug 花了 20 小时左右,供参考
具体内容是写一个简易的 linux shell,内容方面三言两语也说不清楚,就不说了
排坑:1.这个 lab 有助教的手动评分,一定要注意各种编程细节(重要)!!!可以找本班助教或者其他班同学要一份评分标准 2.强烈建议先好好看一遍第八章第十章,读懂书上代码(书上也确实有不少代码可以抄),确保理解了所有书上代码再开始写 3.最后一组测试数据的 kill -1 有点坑;另外有一组测试数据,要屏蔽 SIGHUP 信号(这玩意上课不讲,实在有点坑),学弟学妹们做的时候小心一下
#12983065 2022-01-08 22:47
[洞主] malloclab
具体内容为写一个动态内存分配器。debug 和优化过程极度痛苦,今年降低了难度,但只是降低了优化程序的难度。想 debug 从而跑通程序仍然很难。dz 水平垃圾,跑通程序+优化到接近满分的过程足足花了 30 小时
【建议早点开始,做好心理准备,给 malloc 留出足够多的时间】【建议速战速决,malloclab 在期末季前两周放出来,非常魔鬼。如果为了 3 分 5 分的小优化花上一天时间,实在不太值】
大众思路为分离空闲链表,少数大佬可能会写平衡树,但普通人采用前者,亲测也能 95+
排坑:1.malloclab 也有助教手动评分环节,强烈建议打磨好自己程序的每一个细节 2.地址是 8 字节不是 4 字节!其实可以用 4 字节偏移量表示地址(指针),但需要做特殊处理。千万不要直接用 4 字节表示地址 3.书上的优化方式很有用(比如去脚部),建议写 lab 之前好好把书看一遍,虽然照搬书上的方法会给 0 分,但看懂了就很好写
关于 debug 方式:1.gdb 2.自己写的 checkheap 函数 3.printf 打法打印相关信息
#12983167 2022-01-08 22:51
[洞主] proxylab
内容为实现一个带缓存(第 6 章)带并发(12 章)的网络代理(11 章),今年因为期末提前所以不算分了。dz 稍微看了看,不知道后天 ddl 之前能否写的完,但总之就不测评了
#12983273 2022-01-08 22:54
[洞主] 写完了~如果以后有人在搜 lab 的时候搜到这个洞,祝你们 ics 顺利哈哈哈
#12985514 2022-01-09 00:00
[Carol] Re Bob: 我其实想问一下 hcl 该怎么改……
#12991192 2022-01-09 11:42
[Dave] Re Carol: 自己看书上课后题啊……
#13019154 2022-01-10 15:29
[Eve] Re 洞主: 矩阵尺寸影响大,当尺寸比较“整”的时候和不“整”的时候情况不太一样
#13019207 2022-01-10 15:34
[Eve] 另外补充一下 archlab,这里改分支预测可以尝试一下,改 bbtfnt 能略微提升,进一步改还能提升更多(似乎能有办法全部预测正确?)。
我大改了 hcl,代码只简单做了一下展开和冒险消除,甚至没做三叉跳转表,CPE 能到 7 以下。
#13019235 2022-01-10 15:37
[Eve] cachelab 其实调参能调出刚好 1600 的,或者是差 0.2 0.3 分的分块大小。
#13019261 2022-01-10 15:40
[Eve] bomb 可以把 explode 那个函数直接断了,本地化当然也 ok,如果自认为汇编这块很熟悉,不想在这上面浪费时间的话,可使用 IDA Pro 辅助。
#13036681 2022-01-11 11:29
[洞主] Re Eve: 学到了
#18283076 2022-09-21 18:26
[Francis] Re : mark)
假期无聊,趁着还没忘给学弟学妹测评一下 ics 各个 lab 的难度和任务量,以及做每个 lab 的时候可能遇到的坑。具体内容放在洞内了
标签:datalab bomblab attacklab archlab cachelab shelllab malloclab
#12980036 2022-01-08 20:53
[Alice] mark(
#12980114 2022-01-08 20:56
[洞主] datalab
代码量不大,不需要自己搭框架。要完成一堆关于整数位表示、整数位运算、浮点数位表示的函数。这个 lab 的某些题非常 tricky,比如用位级运算求整数%3、用位级运算求一个整数二进制形式有多少段连续的 1 等等,虽然很有意思但也略烧脑。实在不会可以 google 一下思路,毕竟这些 tricky 的东西也不是 ics 的考察重点
具体操作方面,建议测试代码的时候别运行那个测试用的 test 程序,直接用 check.pl 和 driver.pl 来测试。因为前者数据非常弱,很有迷惑性,很有可能某道题用 test 通过了,交上去拿不到分。但后两个测试程序应该就是评分的时候采用的
#12980437 2022-01-08 21:07
[洞主] bomblab
这个 lab 对应第三章的汇编。一共 6 个 phase,每一关需要阅读汇编语言代码,输入特定的字符串,使得程序正常返回,而不会触发 explode_bomb()函数引爆炸弹。需要阅读的代码量比较大,实际要写的代码量为 0,难度还可以
这个 lab 个人感觉比 datalab 重要,期中期末的汇编大题直接考的就是这方面的东西,所以建议好好做。另外 bomblab 需要用到 gdb 调试工具来运行+调试 bomb 这个可执行文件,这个工具也很重要
#12980638 2022-01-08 21:14
[洞主] 【关键】这个 lab 需要在虚拟机上连接服务器,在服务器上提交字符串,但只要提交了错误答案,引发 explode_bomb()函数引爆炸弹,就会给你扣分。比较普遍的做法是,用 hexedit 工具(是一个能直接修改二进制文件的工具)修改 bomb 文件(修改 initialize_bomb 和 send_msg 两个函数),使得这个文件不用连接服务器,也能在本地运行。修改之后 bomb 爆炸不再扣分,就可以在本地开心地调试 lab 了。具体怎么修改 bomb 文件,可以翻墙去 google 搜索相关博客
一些坑:phase4 涉及到递归,比较麻烦。phase6 涉及到一个 6 个元素的链表,但你有可能只能找到 5 个 node 节点。这个时候不要慌,试试用 gdb 查看 node5 对应的下一个元素地址,有惊喜。
#12980877 2022-01-08 21:24
[洞主] attacklab
和 bomblab 一样需要读大量代码,但实际不用写太多,难度中等。attacklab 内容是输入特定字符串,利用缓冲区溢出来攻击函数栈帧,从而人工改变程序的运行轨迹,跳转到我们想要的函数(有一种当黑客的感觉 x)
关于这个 lab 也没有什么特别需要排坑的事情,大家看懂书上的原理之后直接做就行了
#12981009 2022-01-08 21:31
[洞主] attacklabX
今年助教心血来潮新加的。原来的 attacklab105 分,labX5 分,两个合起来算 110 分。这个 lab dz 没做,目测只有四分之一的人做了,反正对分数没什么影响
labX 的原理好像和 attacklab 差不多,但输入输出之类的格式非常恶心,而且因为是助教整活新加的,所以 lab 本身也非常非常不成熟。以至于做 attacklab 的两周里,洞里骂声不断。今年 ics 体验很好,但如果没有这个玩意,绝对会更好一些
#12981280 2022-01-08 21:41
[洞主] archlab
对应第四章“处理器体系结构”,采用的编程语言是第四章学的 Y86 汇编。这个 lab 按照优化程度给分,代码量和难度中等,想得高分容易,但想优化到满分有点难
第一部分:手写 Y86 汇编程序 第二部分:往 Y86 指令集里加入新指令
第三部分:优化处理器流水线,使得这个流水线跑程序的 CPE 尽可能地小,不做任何优化的 CPE 是 15.1,优化到 10.5 开始有分数,优化到 7.5 满分
一些排坑:1.dz 在做 part2 的时候,本地测试没完全通过,但提交之后就满分了。可供参考。 2.第一部分手写 Y86 程序,不需要使得程序对任何数据都成立,只需要自己在程序里手动添加特定测试数据即可 3.part3 的优化,想拿到满分思路相对单一(循环展开+三叉树+跳转表),【小心查重】【小心查重】【小心查重】
#12981497 2022-01-08 21:50
[洞主] cachelab(擦车 lab)
终于脱离了汇编语言,从 cache 开始的 lab 就都是正经的 C 语言编程了。这个 lab 码量比前几个要大一些,也是按优化给分,优化的过程有点难
lab 分两部分,第一部分:手动模拟一个高速缓存,第二部分:用缓存优化矩阵相乘的程序,降低缓存 miss 次数。part2 的优化挺烧脑的,最后一题 cmu 要求优化到 2000 给满分,贵校的 lab 加强了要求,优化到 1600 才能满(我们 PKU 真是太厉害辣)
排坑:注意 part1 是 64 位地址而不是 32 位!!!坑了不少人的 bug
part2 的解决方式基本唯一:用矩阵分块,实在不会可以去 google 上找文章借鉴一下思路,但别抄代码就行
#12981673 2022-01-08 21:57
[洞主] ----------------------------分割线---------------------------
后三个 lab 明显比前五个更难,而且后半学期学的东西也比前半学期复杂很多。菜鸡期中还能 75+,期末卷面估计上不了 70 了 😥
#12981866 2022-01-08 22:04
[Bob] Re 洞主: archlab 满分思路哪里单一了?可以改 hcl 文件你又不改,只会网上搜思路那做出来确实单一。
cachelab cmu 是 61*67,pku 是 60*68,矩阵都不一样 miss 次数也能拉到一起比是吧?
#12981953 2022-01-08 22:07
[洞主] Re Bob:我是从水平一般的同学的视角测评的,大佬可以不用看。。。
#12982010 2022-01-08 22:09
[洞主] Re Bob: 而且 cachelab61×67 和 60×68 区别也不大啊,矩阵尺寸的影响肯定远小于 miss 要求的影响。。cmu 的第三题真的是随便水水就满分
#12982474 2022-01-08 22:27
[洞主] shelllab
对应第 8 章异常控制流,异常和信号处理的内容,以及第十章的重定位(第 10 章重定位这块一定要好好看,上课存在感比较低,但期末有可能和第 8 章一块出大题)。码量比较大,debug 难度显著大于前几个 lab,菜鸡 dz debug 花了 20 小时左右,供参考
具体内容是写一个简易的 linux shell,内容方面三言两语也说不清楚,就不说了
排坑:1.这个 lab 有助教的手动评分,一定要注意各种编程细节(重要)!!!可以找本班助教或者其他班同学要一份评分标准 2.强烈建议先好好看一遍第八章第十章,读懂书上代码(书上也确实有不少代码可以抄),确保理解了所有书上代码再开始写 3.最后一组测试数据的 kill -1 有点坑;另外有一组测试数据,要屏蔽 SIGHUP 信号(这玩意上课不讲,实在有点坑),学弟学妹们做的时候小心一下
#12983065 2022-01-08 22:47
[洞主] malloclab
具体内容为写一个动态内存分配器。debug 和优化过程极度痛苦,今年降低了难度,但只是降低了优化程序的难度。想 debug 从而跑通程序仍然很难。dz 水平垃圾,跑通程序+优化到接近满分的过程足足花了 30 小时
【建议早点开始,做好心理准备,给 malloc 留出足够多的时间】【建议速战速决,malloclab 在期末季前两周放出来,非常魔鬼。如果为了 3 分 5 分的小优化花上一天时间,实在不太值】
大众思路为分离空闲链表,少数大佬可能会写平衡树,但普通人采用前者,亲测也能 95+
排坑:1.malloclab 也有助教手动评分环节,强烈建议打磨好自己程序的每一个细节 2.地址是 8 字节不是 4 字节!其实可以用 4 字节偏移量表示地址(指针),但需要做特殊处理。千万不要直接用 4 字节表示地址 3.书上的优化方式很有用(比如去脚部),建议写 lab 之前好好把书看一遍,虽然照搬书上的方法会给 0 分,但看懂了就很好写
关于 debug 方式:1.gdb 2.自己写的 checkheap 函数 3.printf 打法打印相关信息
#12983167 2022-01-08 22:51
[洞主] proxylab
内容为实现一个带缓存(第 6 章)带并发(12 章)的网络代理(11 章),今年因为期末提前所以不算分了。dz 稍微看了看,不知道后天 ddl 之前能否写的完,但总之就不测评了
#12983273 2022-01-08 22:54
[洞主] 写完了~如果以后有人在搜 lab 的时候搜到这个洞,祝你们 ics 顺利哈哈哈
#12985514 2022-01-09 00:00
[Carol] Re Bob: 我其实想问一下 hcl 该怎么改……
#12991192 2022-01-09 11:42
[Dave] Re Carol: 自己看书上课后题啊……
#13019154 2022-01-10 15:29
[Eve] Re 洞主: 矩阵尺寸影响大,当尺寸比较“整”的时候和不“整”的时候情况不太一样
#13019207 2022-01-10 15:34
[Eve] 另外补充一下 archlab,这里改分支预测可以尝试一下,改 bbtfnt 能略微提升,进一步改还能提升更多(似乎能有办法全部预测正确?)。
我大改了 hcl,代码只简单做了一下展开和冒险消除,甚至没做三叉跳转表,CPE 能到 7 以下。
#13019235 2022-01-10 15:37
[Eve] cachelab 其实调参能调出刚好 1600 的,或者是差 0.2 0.3 分的分块大小。
#13019261 2022-01-10 15:40
[Eve] bomb 可以把 explode 那个函数直接断了,本地化当然也 ok,如果自认为汇编这块很熟悉,不想在这上面浪费时间的话,可使用 IDA Pro 辅助。
#13036681 2022-01-11 11:29
[洞主] Re Eve: 学到了
#18283076 2022-09-21 18:26
[Francis] Re : mark)
点赞
回复
X