计算机组成与设计 软硬件接口(RISC-V)读书随笔
本来这本书是ckr在上个学期推荐我去看的一本书,那时候我刚好开始学CS61C,于是顺带着看了看书,后面因为考试,比赛导致这本书不了了之,最近终于有时间,把这本书重新拾起来,略读了一遍,感觉受益颇丰。
其实一开始我是先学的CS61C,但是感觉后面的东西看视频讲解太过于枯燥了,于是转而去看书,LAB补到了08,就没再做下去。proj太花时间了,东西学到了,再做下去有点不值得,所以就只做了两个。这门课先从C语言程序开始讲起,然后层层深入,深入到汇编,再深入到电路逻辑,最后讲到计算机组成和设计的一些东西,虽然说是教体系结构,但是感觉已经比一般的课要深入很多了。
说回这本书,第一章大概就是讲了一些抽象的思想,比如优化的步骤,8个伟大思想。第二章开始从程序设计语言深入到汇编,不过这本书的汇编讲的多,实践的少,所以这部分我是主要跟着课程来的,用RISC-V写了一个CNN,大概就过去了,然后了解了一下代码是如何从一大串英文字符变成指令,再变成机器码的,这部分是在我学习的过程中受到的第一次震撼,兴奋了很久。然后继续学下去之后,开始涉及数字电路,这部分也是跟着CS61C走的,花了一些时间画了点神奇的东西,比如四选一选择器这种基础的元件和一些应用场景。随后紧跟着是数据通路的设计,当时真的被那个复杂的电路图给吓到了,但是跟着课程一点一点学下来,之后又看着书巩固了一下,有种茅塞顿开的感觉,基本的32位数据通路变成了一系列的电路逻辑,简直就是天才般的构想,换做是我,估计一辈子也做不出来。了解到了流水线优化和所谓的气泡时间,还学到了RISC V中的指令是怎么变成数字逻辑的。做完这个部分按理来说应该画一个流水线CPU,但是我没有去做这个proj,直接去继续往下学的新东西。后面的部分看着课程很麻烦,就直接去看的书,也就是书本的第五章,层次化存储。这个部分主要就是讲了Cache相关的东西,重点是Cache的命中率和局部性性质。这部分我把lab07补了一下,最让我印象深刻的是多级缓存的设计和局部性性质,三层for循环由于局部性特征导致的缓存命中率不同,进而影响到了运行速度,甚至能差到一个数量级。虚拟内存的存在也使得一些过大的程序得以实现。这很夸张,我真的很难想象到底是什么样的人才能构思出这种神仙的设计,通过一系列中间件来解决物理上的一些限制,后面的I/O我直接跳过了。第六章的并行主要看的课本,大概了解了一下什么是SISD,MIMD,SIMD,MISD和向量机处理模式,了解了一下GPU和CPU的区别,以及多处理器网络拓扑和集群的概念。大概就结束了这本书的主要内容。
这本书真的让我对计算机的认识彻底改观,让我之前一些无法解释的编程中的问题得到了解释,比如矩阵运算的加速那一部分,还有如何从代码变成了二进制。同时还拓展了视野。换做之前,我看到汇编和二进制可能直接就跑了,但是现在,我甚至可以看看汇编指令,理解其中的实现逻辑,然后思考一下能否优化。cache部分的设计理念也给我带来了相当大的震撼,以至于我兴奋的一晚上直接啃完了两个lab外加一个章节。
总结一下学的新东西,大概就是二进制数制运算,基础数字电路,CPU设计,汇编,层次化存储(Cache,SRAM,DRAM),计算机体系结构,以及初步了解并行结构。受益匪浅,深感自己的无知。
总而言之,CS61C和《计算机组成与设计(软硬件接口)》这两样东西是绝对值得去一学的。虽然学的时候会感觉很硬核,很难,但是相信我,学完之后,特别是对于只会写代码不了解底层的人,绝对会带来极大的思维上的提升和理解深度的加深,以及对计算机体系的了解。