UC Berkeley CS61C《计算机体系结构的伟大思想》:从 C 到 RISC-V 汇编的自学指南(cs-self-learning 体系结构篇)
【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning
本文基于 cs-self-learning 仓库中的 体系结构/CS61C 课程文档整理扩充。它将带你完整了解伯克利 CS61C 的课程定位、先修要求、核心知识点与四大经典 Project,并给出一套可直接照做的课程资源获取与自学路径方案。读完后,你能判断自己是否具备学习条件、按怎样的顺序学完这门课,以及如何利用仓库内其他体系结构课程(Nand2Tetris、ETH DDCA 等)形成完整的自学阶梯。
一、课程定位:伯克利 CS61 系列的收官之作
按仓库 CS61C 课程文档 给出的课程简介,这门课的关键元信息如下:
- 所属大学:UC Berkeley
- 先修要求:CS61A、CS61B
- 编程语言:C
- 课程难度:4 星(仓库采用 5 星制)
- 预计学时:100 小时
CS61C 是伯克利 CS61 系列的最后一门课程。系列三课的分工在仓库 CS61A 文档 中有清晰的描述:CS61A 强调程序抽象、不关注硬件细节;CS61B 注重算法与数据结构及千行级大型程序的构建;而 CS61C 则关注计算机体系结构,让学生理解高级语言(例如 C)是如何一步步转换为机器可以理解的 01 串并在 CPU 上执行的,学生将会学习 RISC-V 架构,并自己用 Logisim 实现一个 CPU。
仓库的 CS 学习规划 对这门课的评价可以作为自学动机的参考:UC Berkeley 作为 RISC-V 架构的发源地,在体系结构领域算得上首屈一指。其课程非常注重实践,你会在 Project 中手写汇编构造神经网络,从零开始搭建一个 CPU,这些实践都会让你对计算机体系结构有更深入的理解,而不是仅停留于"取指译码执行访存写回"的单调背诵里。
在仓库 mkdocs.yml 的站点导航中,"体系结构"栏目共收录四门课,CS61C 的定位可以从横向对比中看得更清楚:
| 课程 | 入门门槛 | 侧重 | 难度 |
|---|---|---|---|
| Coursera: Nand2Tetris | 无基础要求 | 从与非门开始造一台能跑俄罗斯方块的计算机,覆盖编译、虚拟机、数字电路 | 3 星 / 40 小时 |
| UCB CS61C | CS61A、CS61B | C 到 RISC-V 汇编的完整转化链,流水线、Cache、虚存、并发 | 4 星 / 100 小时 |
| ETHz: DDCA | CS50 或同阶,最好有 C 基础 | 数字电路 + 体系结构,9 个 lab 在 FPGA 上从零部署完整 CPU | 3 星 / 100 小时 |
| ETHz: Computer Architecture | DDCA | MIPS 处理器微架构、流水线与超标量执行、高速存储系统 | 4 星 / 70 小时+ |
原文档中有一句直接的对比说明:和 Nand2Tetris 不同,CS61C 在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容。Nand2Tetris 是"麻雀虽小五脏俱全"的入门全景课,刻意略去了现代计算机为性能设计的复杂细节;而 CS61C 恰恰要带你深入这些细节。
二、核心知识脉络:C 语言如何在 CPU 上执行
CS61C 的主线是回答一个贯穿全书的问题:一条 C 语句是如何最终变成 CPU 里晶体管的行为的。原文档将其概括为"深入计算机的硬件细节,带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的"。
围绕这条主线,课程覆盖四个相互衔接的知识块:
- RISC-V 指令集与汇编编程。以 RISC-V 作为载体讲解指令集架构:寄存器组织、寻址方式、指令格式,以及 C 函数调用在汇编层面的栈帧布局与参数传递。这也是 Project2 手写汇编神经网络的基础。
- 流水线(Pipelining)。把指令执行拆分为取指、译码、执行、访存、写回等阶段,讲解数据冒险、结构冒险、控制冒险及转发与停顿等解决手段。Project3 的两级流水线 CPU 就是这一章的落地。
- 缓存(Cache)。地址到缓存块/行/标签的映射方式、命中/缺失行为、写策略,以及缓存层次结构对程序性能的影响。
- 虚存(Virtual Memory)与并发。页表、地址翻译、TLB 等虚拟内存机制,以及多线程与共享内存并发相关的内容。
从仓库其他课程的先修关系看,CS61C 是伯克利系统方向课程群的重要前置:UCB CS162 操作系统、UCB CS161 系统安全 与 UCB CS186 数据库系统 三份文档中,先修要求均明确写有 CS61C。可以推断,学完 CS61C 后再进入操作系统与数据库课程,对地址翻译、并发等概念的接受成本会显著降低。
三、四大 Project 详解:课程精华所在
原文档强调"这门课的 Project 也非常新颖有趣",并逐一描述了四个 Project 的内容。下面完整继承原文描述,并结合仓库内相关文档做适当扩充。
Project1:C 语言热身
Project1 会让你用 C 语言写一个小程序,2020 年秋季学期是著名的游戏Game of Life(生命游戏)。这一阶段的定位是热身与 C 语言功底检验,同时引入用汇编辅助调试 C 程序的思维方式——这正是 CS61C 后续所有 Project 的工作模式。
Project2:RISC-V 手写神经网络
Project2 会让你用 RISC-V 汇编编写一个神经网络,用来识别 MNIST 手写数字。原文档评价这一步"非常锻炼你对汇编代码的理解和运用"。在没有任何库可用、逐条指令手动搬运矩阵乘法与激活函数计算的前提下,你会真切体会到:
- 汇编中的循环展开、寄存器分配如何直接决定性能;
- 数据在寄存器与内存之间移动的成本;
- C 编译器生成的汇编与你手写版本的差异。
这类"手写汇编实现数值计算"的实践,与仓库 CS 学习规划 中"手写汇编构造神经网络"的描述一致,也是这门课区别于其他体系结构课的独特体验。
Project3:Logisim 搭建两级流水线 CPU
Project3 中你会用 Logisim 这个数字电路模拟软件搭建出一个二级流水线的 CPU,并在上面运行 RISC-V 汇编代码。仓库 CS61A 文档 对系列课程的描述也印证了这一点:"学生将会学习 RISC-V 架构并自己用 Logisim 实现一个 CPU"。与 Nand2Tetris 用 Nand2Tetris 工具链搭 CPU 相比,Logisim 的图形化电路搭建更贴近真实的数字电路设计视角。
Project4:OpenMP + SIMD 并行矩阵运算
Project4 会让你使用 OpenMP、SIMD 等方法并行优化矩阵运算,实现一个简易的 Numpy。这一步把视野从单核流水线上拉到多核与向量指令层面:共享内存并行(OpenMP 线程划分)与数据级并行(SIMD 指令)是当下挖掘硬件性能的两条主路径。如果你对这条路线更感兴趣,仓库中 CMU 15-418/Stanford CS149: 并行计算 可以作为 CS61C 之后的进阶补充,它会带你深入理解现代并行计算架构的设计原则,并学会用 CUDA、MPI、OpenMP 等框架编写高性能并行程序。
四、课程资源获取方式
原文档在"课程资源"一节列出了完整的资源清单,自学时需要按以下四类分别获取(具体入口以课程官网当期页面为准):
- 课程网站:主站点为 cs61c.org,会随学期更替;
- 课程网站备份:原文档提供了 Fa24、Fa20 两学期的网页存档快照,以及另一份 Fa20 的课程大纲备份,用于应对官网换季失效的问题;
- 课程视频:收录了 Su20(Summer 2020)与 Fa20(Fall 2020)两季的完整录像,分别提供 Bilibili 与 YouTube 两个渠道;
- 课程作业:收录了 Fa20 学期的作业备份仓库,可对照查看历届 Project 的完整题目与验收标准。
自学建议:优先跟最近一次公开学期(原文档收录了 Fa24 的页面备份)的大纲与作业,视频则任选一季完整跟完即可;作业备份仓库的价值在于让你提前知道每个 Project 的验收要求(例如 Project3 需要你的两级流水线 CPU 通过指定 RISC-V 程序的测试)。
五、社区学习笔记与作业实现仓库
原文档"资源汇总"一节收录了三位学习者的全套资源仓库,覆盖了从 2020 夏季学期到 2024 秋季学期的多届课程资料:
- PKUFlyingPig/CS61C-summer20:仓库主维护者 PKUFlyingPig 学习这门课时用到的所有资源和作业实现;
- InsideEmpire/CS61C-PathwayToSuccess(对外名 CS61C-fall20):InsideEmpire 学习 Fa20 学期的资源与作业实现,同时他也是 Fa20 课程作业备份的提供者;
- RisingUppercut/CS61C_2024_Fall:RisingUppercut 学习 Fa24 学期的资源与作业实现。
这类"个人学习资源汇总仓库"是仓库中课程文档的固定模式(与 template.md 中"资源汇总"一节的要求一致),对自学者有三重价值:对照官方讲义的逐节笔记、作业实现代码参考、以及历届作业题目的归档。
六、在自学体系中的衔接位置
结合 mkdocs.yml 的站点结构与各课程文档之间的先修引用,CS61C 处于这样的学习阶梯上:
CS50 / CS50P(编程入门,C 或 Python) ↓ CS61A(程序抽象,Python/Scheme/SQL)→ CS61B(数据结构与算法,Java) ↓ CS61C(体系结构,C + RISC-V 汇编 + Logisim) ← 本文主题 ↓ CS162 操作系统 / CS161 系统安全 / CS186 数据库系统(均以 CS61C 为先修)入门阶段若对 01 世界与"从与非门造计算机"有好奇心,建议先用 Nand2Tetris(无门槛、40 小时)建立全局鸟瞰,再进入 CS61C 处理现代机器的复杂细节;偏硬件电路路线、有 FPGA 开发板条件的学习者可以走 ETH DDCA 的 9 个 lab 路线;若完成 CS61C 后仍觉得意犹未尽,可上 ETH Computer Architecture——按该文档引用的同学反馈,ETH CA 从课程本身的难度上说至少高于 CS61C,部分内容十分前沿。此外,CMU 15-213: CSAPP 虽定位为系统入门课,但同样覆盖体系结构、链接、并行等主题,其教材与 CS61C 的知识面互补,适合作为理论深化的读物。
七、自学要点与建议
基于原文档给出的先修要求、难度评级(4 星)与预计学时(100 小时),给出以下自学注意事项:
- 先修不可跳级。CS61C 明确以 CS61A、CS61B 为先修,C 语言编程能力(指针、函数调用、内存布局)与基本的 C 调试能力是四个 Project 的硬性门槛;C 基础薄弱者建议先完成 CS50 系列 或 CS50P 补齐。
- 按 100 小时做时间规划。100 学时意味着按每天 2 小时需要约两个月,其中四个 Project 是大头,建议给 Project2(汇编神经网络)与 Project3(Logisim CPU)预留额外调试时间。
- 以 Project 为纲组织学习。这门课的价值高度集中在"手写汇编构造神经网络、从零搭建 CPU"的实践里,建议每学完一个知识模块立即进入对应 Project 验收理解深度,而不是听完全部课程再动手。
- 善用资源备份。课程官网会随学期更替,务必按第四节的清单提前保存课程大纲、录像与作业备份入口;遇到当期资源缺失时,回到历届备份仓库查找。
- 学完后顺藤摸瓜。按照第六节的阶梯,下一步最自然的延伸是操作系统(CS162)或并行计算(CS149),两者都能直接复用 CS61C 打下的流水线、虚存与并发基础。
原文档作者给出的总评是:总而言之,这是个人上过的最好的计算机体系结构的课程。结合仓库 CS 学习规划 的推荐与三份系统课程文档中反复出现的 CS61C 先修标记,这门课在伯克利乃至更广泛的体系结构自学路线中,都是绕不开的枢纽性课程。
【免费下载链接】cs-self-learning计算机自学指南项目地址: https://gitcode.com/GitHub_Trending/cs/cs-self-learning
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考