CS61C: Great Ideas in Computer Architecture
Descriptions
- Offered by: UC Berkeley
- Prerequisites: CS61A, CS61B
- Programming Languages: C
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 100 hours
This is the last course in Berkeley's CS61 series, which dives into the internal of computer architecture and will make you understand how the C language is translated into RISC-V assembly language and executed on the CPU. Unlike Nand2Tetris, this course is much more difficult and more in-depth, covering pipelining, cache, virtual memory, and concurrency-related content.
The projects are very innovative and interesting. Project1 is a warmup assignment in C. In 2020Fall, you will implement the famous Game of Life. Project2 requires you to write a fully-connected neural network in RISC-V assembly to classify handwritten digits in MNIST dataset, which is a great exercise to write assembly code. In Project3, you will use Logisim, a digital circuit simulation software, to build a two-stage pipeline CPU from scratch and run RISC-V assembly code on it. In Project4 you will implement a toy version of Numpy, using OpenMP, SIMD, and other techniques to speed up matrix operations.
In a word, this is the best computer architecture course I have ever taken.
Course Resources
- Course Website
- Course Website (Backup): Fa24-WayBack Machine, Fa20-WayBack Machine, Fa20-Backup
- Recordings: Su20-Bilibili, Su20-Youtube, Fa20-Bilibili, Fa20-Youtube
- Assignments: Fa20-Backup
Personal Resources
All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS61C-summer20 - GitHub.
All the resources and assignments used by @InsideEmpire in this course are maintained in @InsideEmpire/CS61C-fall20 - GitHub.
All the resources and assignments used by @RisingUppercut in this course are maintained in @RisingUppercut/CS61C-fall24 - GitHub.
CS61C: Great Ideas in Computer Architecture
Descriptions
- Offered by: UC Berkeley
- Prerequisites: CS61A, CS61B
- Programming Languages: C
- Difficulty: 🌟🌟🌟🌟
- Class Hour: 100 hours
This is the last course in Berkeley's CS61 series, which dives into the internal of computer architecture and will make you understand how the C language is translated into RISC-V assembly language and executed on the CPU. Unlike Nand2Tetris, this course is much more difficult and more in-depth, covering pipelining, cache, virtual memory, and concurrency-related content.
The projects are very innovative and interesting. Project1 is a warmup assignment in C. In 2020Fall, you will implement the famous Game of Life. Project2 requires you to write a fully-connected neural network in RISC-V assembly to classify handwritten digits in MNIST dataset, which is a great exercise to write assembly code. In Project3, you will use Logisim, a digital circuit simulation software, to build a two-stage pipeline CPU from scratch and run RISC-V assembly code on it. In Project4 you will implement a toy version of Numpy, using OpenMP, SIMD, and other techniques to speed up matrix operations.
In a word, this is the best computer architecture course I have ever taken.
Course Resources
- Course Website
- Course Website (Backup): Fa24-WayBack Machine, Fa20-WayBack Machine, Fa20-Backup
- Recordings: Su20-Bilibili, Su20-Youtube, Fa20-Bilibili, Fa20-Youtube
- Assignments: Fa20-Backup
Personal Resources
All the resources and assignments used by @PKUFlyingPig in this course are maintained in PKUFlyingPig/CS61C-summer20 - GitHub.
All the resources and assignments used by @InsideEmpire in this course are maintained in @InsideEmpire/CS61C-fall20 - GitHub.
All the resources and assignments used by @RisingUppercut in this course are maintained in @RisingUppercut/CS61C-fall24 - GitHub.
LaTeX
为什么学 LaTeX
如果你需要写论文,那么请直接跳到下一节,因为你不学也得学。
LaTeX 是一种基于 TeX 的排版系统,由图灵奖得主 Lamport 开发,而 Tex 则是由 Knuth 最初开发,这两位都是计算机界的巨擘。当然开发者强并不是我们学习 LaTeX 的理由,LaTeX 和常见的所见即所得的 Word 文档最大的区别就是用户只需要关注写作的内容,而排版则完全交给软件自动完成。这让没有任何排版经验的普通人得以写出排版非常专业的论文或文章。
Berkeley 计算机系教授 Christos Papadimitriou 曾说过一句半开玩笑的话:
Every time I read a LaTeX document, I think, wow, this must be correct!
如何学习 LaTeX
推荐的学习路线如下:
- LaTeX 的环境配置是个比较头疼的问题。如果你本地配置 LaTeX 环境出现了问题,可以考虑使用 Overleaf 这个在线 LaTeX 编辑网站。站内不仅有各种各样的 LaTeX 模版供你选择,还免去了环境配置的难题。
- 阅读下面三篇 Tutorial: Part-1, Part-2, Part-3。
- 学习 LaTeX 最好的方式当然是写论文,不过从一门数学课入手用 LaTeX 写作业也是一个不错的选择。
其他值得推荐的入门学习资料如下:
- 一份简短的安装 LaTeX 的介绍 [GitHub] 或者 TEX Live 指南(texlive-zh-cn)[PDF] 可以帮助你完成安装和环境配置过程
- 一份(不太)简短的 LaTeX2ε 介绍(lshort-zh-cn)[PDF] [GitHub] 是由 CTEX 开发小组翻译的,可以帮助你快速准确地入门,建议通读一遍
- 刘海洋的《LaTeX 入门》,可以当作工具书来阅读,有问题再查找,跳过 CTEX 套装部分
- 现代 LaTeX 入门讲座
- 一份其实很短的 LaTeX 入门文档
LaTeX
Why Learn LaTeX
If you need to write academic papers, please skip directly to the next section, as learning LaTeX is not just a choice but a necessity.
LaTeX is a typesetting system based on TeX, developed by Turing Award winner Lamport, while TeX was originally developed by Knuth, both of whom are giants in the field of computer science. Of course, the developers' prowess is not the reason we learn LaTeX. The biggest difference between LaTeX and the commonly used WYSIWYG (What You See Is What You Get) Word documents is that in LaTeX, users only need to focus on the content of the writing, leaving the typesetting entirely to the software. This allows people without any typesetting experience to produce papers or articles with highly professional formatting.
Berkeley computer science professor Christos Papadimitriou once jokingly said:
Every time I read a LaTeX document, I think, wow, this must be correct!
How to Learn LaTeX
The recommended learning path is as follows:
- Setting up the LaTeX environment can be a headache. If you encounter problems with configuring LaTeX locally, consider using Overleaf, an online LaTeX editor. The site not only offers a variety of LaTeX templates to choose from but also eliminates the difficulty of environment setup.
- Read the following three tutorials: Part-1, Part-2, Part-3.
- The best way to learn LaTeX is, of course, by writing papers. However, starting with a math class and using LaTeX for homework is also a good choice.
Other recommended introductory materials include:
- A brief guide to installing LaTeX [GitHub] or the TEX Live Guide (texlive-zh-cn) [PDF] can help you with installation and environment setup.
- A (not so) brief introduction to LaTeX2ε (lshort-zh-cn) [PDF] [GitHub], translated by the CTEX development team, helps you get started quickly and accurately. It's recommended to read it thoroughly.
- Liu Haiyang's "Introduction to LaTeX" can be used as a reference book, to be consulted when you have specific questions. Skip the section on CTEX suite.
- Modern LaTeX Introduction Seminar
- A Very Short LaTeX Introduction Document
LaTeX
Why Learn LaTeX
If you need to write academic papers, please skip directly to the next section, as learning LaTeX is not just a choice but a necessity.
LaTeX is a typesetting system based on TeX, developed by Turing Award winner Lamport, while TeX was originally developed by Knuth, both of whom are giants in the field of computer science. Of course, the developers' prowess is not the reason we learn LaTeX. The biggest difference between LaTeX and the commonly used WYSIWYG (What You See Is What You Get) Word documents is that in LaTeX, users only need to focus on the content of the writing, leaving the typesetting entirely to the software. This allows people without any typesetting experience to produce papers or articles with highly professional formatting.
Berkeley computer science professor Christos Papadimitriou once jokingly said:
Every time I read a LaTeX document, I think, wow, this must be correct!
How to Learn LaTeX
The recommended learning path is as follows:
- Setting up the LaTeX environment can be a headache. If you encounter problems with configuring LaTeX locally, consider using Overleaf, an online LaTeX editor. The site not only offers a variety of LaTeX templates to choose from but also eliminates the difficulty of environment setup.
- Read the following three tutorials: Part-1, Part-2, Part-3.
- The best way to learn LaTeX is, of course, by writing papers. However, starting with a math class and using LaTeX for homework is also a good choice.
Other recommended introductory materials include:
- A brief guide to installing LaTeX [GitHub] or the TEX Live Guide (texlive-zh-cn) [PDF] can help you with installation and environment setup.
- A (not so) brief introduction to LaTeX2ε (lshort-zh-cn) [PDF] [GitHub], translated by the CTEX development team, helps you get started quickly and accurately. It's recommended to read it thoroughly.
- Liu Haiyang's "Introduction to LaTeX" can be used as a reference book, to be consulted when you have specific questions. Skip the section on CTEX suite.
- Modern LaTeX Introduction Seminar
- A Very Short LaTeX Introduction Document
CS220: Programming Principles
Descriptions
- Offered by: KAIST
- Prerequisites: Any programming language
- Programming Languages: Rust
- Difficulty: 🌟🌟🌟
- Class Hour: 40 hours
Jeehoon Kang from KAIST and his Concurrency and Parallelism Laboratory appear to be strong advocates of the Rust programming language. Their contributions include CS431 and CS420 in the csidy curriculum. Naturally, they have developed an introductory course for Rust, which is this course. It covers most of the essential topics needed to get started with Rust.
This course does not have an official textbook. The course homepage recommends using the Rust book for learning and provides a structured learning path in the slides. Although there are no publicly available lecture videos, the comprehensive testing system makes this course an excellent resource for practicing Rust. Some exercises can serve as a great supplement to CS110L. If you still feel the need for more practice after completing CS110L, this course is a good choice. Some exercises are quite challenging, and Jeehoon Kang encourages the use of AI-assisted programming. However, AI is not perfect, and the core work must still be done by yourself.
Course Resources
- Course Website: Github Repository
- Recordings: None
- Textbooks: slides
- Assignments: Github Repository
Personal Resources
There are no publicly available answer keys, and it is unclear whether the course instructor supports the idea of sharing solutions. If you encounter difficulties, you can find discussions about the assignments in the ISSUE section of the repository.
CS220: Programming Principles
Descriptions
- Offered by: KAIST
- Prerequisites: Any programming language
- Programming Languages: Rust
- Difficulty: 🌟🌟🌟
- Class Hour: 40 hours
Jeehoon Kang from KAIST and his Concurrency and Parallelism Laboratory appear to be strong advocates of the Rust programming language. Their contributions include CS431 and CS420 in the csidy curriculum. Naturally, they have developed an introductory course for Rust, which is this course. It covers most of the essential topics needed to get started with Rust.
This course does not have an official textbook. The course homepage recommends using the Rust book for learning and provides a structured learning path in the slides. Although there are no publicly available lecture videos, the comprehensive testing system makes this course an excellent resource for practicing Rust. Some exercises can serve as a great supplement to CS110L. If you still feel the need for more practice after completing CS110L, this course is a good choice. Some exercises are quite challenging, and Jeehoon Kang encourages the use of AI-assisted programming. However, AI is not perfect, and the core work must still be done by yourself.
Course Resources
- Course Website: Github Repository
- Recordings: None
- Textbooks: slides
- Assignments: Github Repository
Personal Resources
There are no publicly available answer keys, and it is unclear whether the course instructor supports the idea of sharing solutions. If you encounter difficulties, you can find discussions about the assignments in the ISSUE section of the repository.
CS61C: Great Ideas in Computer Architecture
课程简介
- 所属大学:UC Berkeley
- 先修要求:CS61A, CS61B
- 编程语言:C
- 课程难度:🌟🌟🌟🌟
- 预计学时:100 小时
伯克利 CS61 系列的最后一门课程,深入计算机的硬件细节,带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的。和 Nand2Tetris 不同,这门课 在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容。
这门课的 Project 也非常新颖有趣。Project1 会让你用 C 语言写一个小程序,20 年秋季学期是著名的游戏 Game of Life。Project2 会让你用 RISC-V 汇编编写一个神经网络,用来 识别 MNIST 手写数字,非常锻炼你对汇编代码的理解和运用。Project3 中你会用 Logisim 这个数字电路模拟软件搭建出一个二级流水线的 CPU,并在上面运行 RISC-V 汇编代码。Project4 会让你使用 OpenMP, SIMD 等方法并行优化矩阵运算,实现一个简易的 Numpy。
总而言之,这是个人上过的最好的计算机体系结构的课程。
课程资源
- 课程网站
- 课程网站 (页面备份): Fa24-WayBack Machine, Fa20-WayBack Machine, Fa20-备份
- 课程视频: Su20-Bilibili, Su20-Youtube, Fa20-Bilibili, Fa20-Youtube
- 课程作业: Fa20-备份
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS61C-summer20 - GitHub 中。
@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 @InsideEmpire/CS61C-fall20 - GitHub 中。
@RisingUppercut 在学习这门课中用到的所有资源和作业实现都汇总在 @RisingUppercut/CS61C-fall24 - GitHub 中。
CS61C: Great Ideas in Computer Architecture
课程简介
- 所属大学:UC Berkeley
- 先修要求:CS61A, CS61B
- 编程语言:C
- 课程难度:🌟🌟🌟🌟
- 预计学时:100 小时
伯克利 CS61 系列的最后一门课程,深入计算机的硬件细节,带领学生逐步理解 C 语言是如何一步步转化为 RISC-V 汇编并在 CPU 上执行的。和 Nand2Tetris 不同,这门课 在难度和深度上都会提高很多,具体会涉及到流水线、Cache、虚存以及并发相关的内容。
这门课的 Project 也非常新颖有趣。Project1 会让你用 C 语言写一个小程序,20 年秋季学期是著名的游戏 Game of Life。Project2 会让你用 RISC-V 汇编编写一个神经网络,用来 识别 MNIST 手写数字,非常锻炼你对汇编代码的理解和运用。Project3 中你会用 Logisim 这个数字电路模拟软件搭建出一个二级流水线的 CPU,并在上面运行 RISC-V 汇编代码。Project4 会让你使用 OpenMP, SIMD 等方法并行优化矩阵运算,实现一个简易的 Numpy。
总而言之,这是个人上过的最好的计算机体系结构的课程。
课程资源
- 课程网站
- 课程网站 (页面备份): Fa24-WayBack Machine, Fa20-WayBack Machine, Fa20-备份
- 课程视频: Su20-Bilibili, Su20-Youtube, Fa20-Bilibili, Fa20-Youtube
- 课程作业: Fa20-备份
资源汇总
@PKUFlyingPig 在学习这门课中用到的所有资源和作业实现都汇总在 PKUFlyingPig/CS61C-summer20 - GitHub 中。
@InsideEmpire 在学习这门课中用到的所有资源和作业实现都汇总在 @InsideEmpire/CS61C-fall20 - GitHub 中。
@RisingUppercut 在学习这门课中用到的所有资源和作业实现都汇总在 @RisingUppercut/CS61C-fall24 - GitHub 中。