Lecture 40: Summary, What’s Next?
6 Great Ideas in Computer Architecture
1. 抽象 (Abstraction)
抽象是计算机架构的核心思想之一,通过抽象不同层次的表示和解释,计算机系统能够有效地管理复杂性。抽象层次的存在使得开发者不必了解底层硬件的细节,而可以专注于更高层次的逻辑设计。比如,程序员在编写代码时使用高级编程语言,而不必关心汇编语言或机器语言的具体实现。抽象也使得不同硬件和软件组件之间可以通过标准化接口进行交互,从而提高了系统的模块化和可扩展性。
2. 摩尔定律 (Moore’s Law)
摩尔定律描述了集成电路中晶体管数量每隔大约18-24个月就会翻一番的趋势。尽管摩尔定律主要是一种经验法则,但它却驱动了半导体行业的发展,导致了计算能力的迅速提升。这一现象推动了计算机的性能不断提高,同时成本逐渐降低。然而,随着物理极限的接近,摩尔定律的增长速度正在放缓,促使行业探索新的技术路径,如量子计算和三维集成电路。
3. 局部性原理/存储层次结构 (Principle of Locality/Memory Hierarchy)
局部性原理是指程序在运行过程中,数据的访问模式具有空间和时间上的局部性。空间局部性意味着如果一个数据被访问,那么它附近的数据很可能也会被访问;时间局部性则表示如果某个数据被访问过,它很可能会在不久的将来再次被访问。存储层次结构基于这一原理进行设计,将快速但昂贵的缓存(如CPU缓存)放置在靠近处理器的位置,而将大容量但较慢的存储器(如磁盘)放在远离处理器的位置。这种分层结构有效地提高了系统的整体性能。
4. 并行性 (Parallelism)
并行性是提高计算机系统性能的关键因素之一。通过并行执行多个任务,计算机系统可以显著减少任务完成的时间。并行性可以在多个层次上实现,包括指令级并行(如超标量处理器),数据级并行(如SIMD指令集),以及任务级并行(如多核处理器)。并行性在现代计算中无处不在,从多核处理器到大规模并行处理(如分布式计算),都依赖于这一思想。
5. 性能测量与改进 (Performance Measurement & Improvement)
为了不断改进计算机系统的性能,必须能够准确地测量系统的性能表现。性能测量的指标包括延迟、吞吐量、能效等。通过这些指标,系统设计者可以识别瓶颈并进行优化。例如,在高性能计算中,分析不同任务的执行时间和资源使用情况可以帮助优化算法的调度策略。性能优化也是一个持续的过程,通常需要在硬件设计、编译器优化和软件算法等多个层次上进行改进。
6. 通过冗余实现可靠性 (Dependability via Redundancy)
冗余设计是提高系统可靠性的重要手段。通过在系统中引入冗余组件,当某个组件发生故障时,系统仍然可以继续正常工作。例如,RAID技术通过将数据冗余存储在多个硬盘上,即使其中一个硬盘损坏,数据仍然可以被恢复。类似地,ECC(错误检测和纠正码)通过增加冗余位来检测和纠正内存中的错误。冗余设计广泛应用于存储、网络和计算硬件中,确保了系统的高可用性和数据完整性。
传统计算机体系结构
上图展示了传统计算机体系结构的各个层次,从最底层的硬件到最上层的软件。整个体系结构的核心思想是如何在硬件和软件之间进行有效的交互和通信。
硬件层
- 晶体管与电路设计:这是计算机的最底层,负责执行基本的逻辑运算和数据存储。通过晶体管和电路的组合,我们可以设计出基本的逻辑门电路,这些逻辑门是构建复杂计算电路的基础。
- 数字设计与数据路径控制:在电路层之上,是数字设计层,包括数据路径控制。这里的任务是设计出能够执行复杂计算的电路,如算术逻辑单元(ALU)和控制单元。数据路径控制确保数据在处理器内流动的正确性与效率。
- 处理器与存储器:这一层是硬件设计的核心部分,处理器(CPU)负责执行指令,而存储器负责数据的存储和读取。I/O系统负责与外部设备的通信,确保数据能够在计算机和其他设备之间传递。
软件层
- 编译器与汇编器:编译器将高级语言(如C、Java等)转换为汇编语言,这种语言更接近机器语言但仍具备一定的可读性。汇编器则进一步将汇编语言转换为机器语言,使得处理器能够直接执行。
- 操作系统:操作系统(如Mac OS X)作为软件与硬件之间的桥梁,管理硬件资源并为应用程序提供服务。它在硬件和应用程序之间抽象出了一层接口,简化了应用程序的开发。
- 应用程序:最上层是应用程序,例如浏览器,它们直接面向用户,提供具体的功能。应用程序通过操作系统调用硬件资源来执行其功能。
指令集架构(ISA)
- 指令集架构:位于硬件和软件之间的接口层,是计算机体系结构的关键部分。它定义了处理器所能执行的指令集,即软件和硬件之间的“语言”。在这个层次,硬件提供执行指令的能力,而软件则利用这些指令来实现各种功能。
这种传统的计算机体系结构提供了一个清晰的分层模型,使得计算机科学家和工程师可以在不同的抽象层次上工作,优化各自的设计和实现。
新式“机器结构”
随着计算机硬件和软件的发展,现代计算机结构变得更加复杂,其中一个重要的发展方向就是利用并行性来提高性能。图中展示了不同层次上的并行性如何在现代计算机中实现。
软件中的并行性
-
并行请求(Parallel Requests):在大规模计算环境中,例如数据中心或云计算平台中,多个请求可以被同时分配给不同的计算机来处理。例如,当用户在搜索“Cats”时,这个搜索请求可以分配给不同的服务器来并行处理,从而加快搜索速度。
-
并行线程(Parallel Threads):在多核处理器中,不同的线程可以被分配到不同的核心上执行。例如,一个线程可能负责广告的查找,另一个线程可能负责数据查询。这种并行线程的处理方式可以充分利用多核处理器的能力。
-
并行指令(Parallel Instructions):在现代处理器中,指令级并行性被广泛应用。一个处理器可以在同一时间处理多条指令,例如通过流水线技术(Pipelining),在不同的阶段处理多条指令。这意味着处理器可以同时进行取指、解码、执行等操作,从而提高了执行效率。
-
并行数据(Parallel Data):数据级并行性指的是在同一时间处理多个数据项。例如,处理器可以同时对多个数据对进行加法运算,这在SIMD(单指令多数据)架构中尤为常见。这种并行性使得处理大量数据的任务(如向量运算)能够更快速地完成。
-
硬件描述的并行性(Hardware Descriptions):硬件级并行性是指在电路设计中,所有的逻辑门可以在同一时间并行工作。这种并行性是硬件本质上的属性,能够在硬件级别上实现高效的计算。
硬件中的并行性
-
计算机:计算机系统中,各个组件(如核心、内存、I/O系统等)通过并行工作来提高整体性能。例如,在多核心处理器中,每个核心可以独立执行任务,同时共享内存和I/O资源。
-
仓库规模计算机(Warehouse Scale Computer):在大型数据中心或仓库规模计算机中,并行性体现在多个服务器和存储系统的协同工作。这些系统通常由数千到数万台服务器组成,通过分布式计算实现大规模数据处理。
-
智能手机:尽管智能手机的计算能力有限,但通过多核处理器、并行任务处理和高效的资源管理,它们也能够实现高性能计算。
总结来看,新式机器结构通过在多个层次上利用并行性来实现高效的计算性能,从最底层的逻辑门到最高层的软件请求处理,整个系统都在多个维度上进行并行工作。这种复杂的并行性设计使得现代计算机能够处理越来越多的数据和任务,同时保持高效的性能。
硬件与软件的联系
在计算机系统中,硬件和软件之间的联系是通过一系列抽象层次来实现的,从高层的编程语言到底层的逻辑电路描述。理解这些层次对于设计和优化计算机系统至关重要。
高级语言程序(High Level Language Program)
高级语言如C语言允许程序员以更接近人类思维的方式编写代码。例如,图中的C代码片段展示了如何交换数组中两个元素的位置。高级语言代码易于理解和编写,但需要转换为计算机能够理解的形式才能执行。
编译器(Compiler)
编译器负责将高级语言代码转换为汇编语言代码。在此过程中,编译器将高级语言中的抽象概念转化为具体的指令。例如,图中展示了C代码被编译为RISC-V架构的汇编指令。每一条汇编指令都对应一个特定的操作,如加载或存储数据。
汇编语言程序(Assembly Language Program)
汇编语言是比高级语言更接近硬件的一种编程语言。它直接与计算机硬件的指令集架构(ISA)对应。例如,RISC-V是一种精简指令集计算(RISC)的架构,汇编语言中的每一条指令都对应于特定的硬件操作。
汇编器(Assembler)
汇编器将汇编语言代码转换为机器语言,也就是二进制代码。机器语言由一系列的0和1组成,是计算机可以直接理解和执行的语言。例如,图中展示了RISC-V的汇编指令被转化为对应的二进制形式,这些二进制代码可以直接在硬件上执行。
硬件架构描述(Hardware Architecture Description)
硬件架构描述通常以方块图的形式呈现,显示了计算机系统中各个硬件组件的组织结构。例如,图中的方块图展示了一个简单的处理器架构,其中包括程序计数器(PC)、指令存储器(IMEM)、寄存器文件(Reg)以及算术逻辑单元(ALU)等组件。这些组件协同工作来执行机器指令。
逻辑电路描述(Logic Circuit Description)
逻辑电路描述是硬件设计的最低层次,通常以电路图的形式表示。电路图展示了各种逻辑门(如与门、或门、非门等)如何连接以实现特定的功能。例如,图中的电路图展示了一个简单的逻辑电路,它实现了AB + CD的运算。逻辑电路是计算机硬件的基础,通过设计和优化这些电路,可以提高整个系统的性能和效率。
通过理解这些层次之间的联系,工程师能够设计出更高效、更可靠的计算机系统,并能够在硬件和软件之间进行优化,以满足特定的应用需求。这种从高级语言到底层硬件的转化过程是计算机科学中一个重要的基础知识。
行政事项:变得积极起来!
期末考试细节
- 考试范围:考试将涵盖从期中考试以来的所有内容,特别是自某些较为简单的内容之后的所有材料。这意味着考试重点可能会集中在近期的课程内容上,因此复习时要特别关注这些部分。
- 考试时间:虽然考试时间是3小时,但我们希望考试实际所需的时间远少于3小时。这提示你考试可能不会过于冗长,但仍需高效答题。
- 允许携带的材料:考试时允许带两张双面手写纸,此外,还会提供一张参考资料表。这给了你准备简洁而关键的笔记的机会,可以帮助你快速回忆重要知识点。
如果你在CS10或61[ABC]课程中表现优秀(B或以上),并希望加入教学团队
- 通常路径:从学术助理(AI)开始,然后可以晋升为导师/读者,最终成为助教(TA)。这种逐步晋升的路径不仅可以帮助你巩固所学知识,还能提升教学能力。
- 申请方式:可以通过链接填写申请表加入助教团队。这是一个进入学术圈、积累教学经验的良好途径,尤其是如果你有志于学术发展或想要提升在简历上的学术经历。
- 鼓励:强烈建议所有在该课程中获得B或以上成绩的学生走上这条路径。成为助教不仅能锻炼自己的学术能力,还能为其他学生提供帮助,进一步提升自身的领导力和沟通技巧。
利用加州大学的机会
- 为什么我们是世界顶尖大学之一?
- 研究,研究,研究!:无论你打算读研究生还是直接进入工业界,研究经历都是你简历上的一大亮点,导师的推荐信也会为你的职业生涯加分。
- 不论是研究生院还是工业界:你都需要有人为你做推荐,而研究经历和教授的推荐信至关重要。就像电影《电子情书》中的一句台词:“教父会回答你生活中的所有问题。”意思是,导师的指导和推荐将会成为你未来道路上的关键助力。
- 技巧
- 找到你喜欢的东西,做大量的网络研究:阅读发表的学术论文,积极参加教授的办公时间,成为一个积极进取的学生。这些技巧不仅能帮助你找到适合的研究方向,还能让你在教授和同行中脱颖而出。
- 网站资源:
- 你可以访问research.berkeley.edu查找研究机会。
- 通过researchmatch.heroku.com寻找匹配的研究项目。这些网站提供了丰富的资源,可以帮助你找到适合的研究课题和导师。
充分利用这些资源和机会,将使你在学术和职业生涯中受益匪浅。
系统中的研究机会
来自Dave Patterson的建议
- 通用应用程序:
- 使Python的运行速度像C语言:通过编译器和硬件的结合来实现。这一研究方向旨在优化Python等高级编程语言,使其在性能上接近C语言的效率。这对于需要高效处理的应用程序特别重要,比如需要实时响应的系统或大数据处理任务。
- 似曾相识(Deja vu):让高级编程语言(HLLs)在RISC(精简指令集计算机)架构上运行得更快。这意味着要优化高级语言的编译和执行,使其在RISC架构上能够以更高效的方式运行。
- 领域特定应用程序(更大的机会?):
- 为重要应用程序开发合适的DSLs(领域特定语言):DSLs是为特定领域设计的编程语言,能够更好地处理该领域内的特定问题。例如,金融计算、物理模拟等领域的特定语言开发。
- DSLs和DSAs的联合设计:不仅要开发新的DSLs,还要设计与之配合的硬件结构(DSAs,领域特定架构)。这需要跨越软件和硬件的边界,找到最佳的组合。
- 高级编译技术用于优化匹配:这是一片新的领域,不再是从C/Fortran中提取高级结构,而是进行匹配和优化。重点在于如何通过编译器技术优化DSL的执行效率。
Dan的研究和开发项目
- 计算机科学教育:
- 改进CS10/Snap!:这可能涉及开发新的教育工具、平台或资源,帮助学生更好地理解计算机科学基础知识。
- “A’s for All”软件:开发帮助学生在课程中取得成功的软件。这可能包括自适应学习系统、自动化的学习建议工具等。
- 有兴趣的话发送邮件:[email protected]
- 计算博弈论:
- 有兴趣的话,加入CS199课程:这门课程提供了大量CS61C课程相关的研究机会,特别是在并行求解器等领域。
- 11点到中午,606 Soda MWF:这是Dan教授提供的一个开放时间段,学生可以直接去讨论研究机会或参与项目。
Lisa的研究和开发
- 当前研究兴趣:
- 机器学习和数据分析在学生编程作业中的应用:Lisa教授目前的研究重点是将机器学习和数据分析技术应用于大规模计算机科学课程中的学生编程作业。这可能涉及如何通过算法自动评分、分析学生的编程风格,或者如何为学生提供个性化的学习反馈。
这些研究机会不仅帮助你深化所学知识,还能在实际应用中锻炼你的研究能力。如果你对某个领域特别感兴趣,主动参与这些研究项目将为你未来的学术或职业生涯打下坚实的基础。
下学期的机会
- CS152(计算机架构与工程)
- 课程概述:如果你对CPU设计感兴趣,这是一个非常适合继续深入学习的课程。CS152将进一步探讨计算机架构的高级概念,特别是如何设计和优化处理器。
- CS162(操作系统与系统编程)
- 课程概述:如果你对操作系统和系统编程感兴趣,CS162将提供更深入的知识,包括进程管理、内存管理、文件系统以及系统的整体设计与实现。
- GamesCrafters CS198 DeCal(博弈论R&D)
- 课程概述:该课程由Dan教授讲授,专注于双人零和博弈(如围棋、国际象棋、连珠等)的软件开发与分析。适合对博弈论或软件开发感兴趣的同学。
- iOS Dev CS198 DeCal(Mac开发者)
- 课程概述:学习如何在Macintosh上进行开发,课程内容涵盖iOS应用程序的开发。建议拥有Mac设备,但不是强制要求。
- UCBUGG CS198 DeCal(休闲图形)
- 课程概述:这门课侧重于计算机生成图像和动画的开发,非常适合对3D图形和动画感兴趣的学生。
下学期的EE课程机会
- EE16A, EE16B(低年级EE课程)
- 课程概述:这些课程涵盖了信号处理、学习、控制以及电路设计的基础知识,通过应用背景来引导学习关键的线性代数概念。
- EE12X(信号、系统、通信、网络与优化)
- 课程概述:如果你喜欢解决复杂问题,并让计算机高效工作,这些课程将非常适合你,涉及信号处理、通信系统及网络优化等领域。
- EE105, 14X系列(电路)
- 课程概述:深入学习电路设计和分析的基础知识,了解“门”以下的电路工作原理,是理解硬件底层逻辑的重要课程。
- EE13X(器件)
- 课程概述:了解集成电路(IC)和计算器件的制造和工作原理,对于希望从事硬件开发的学生来说,这是必修的基础课程。
- EECS151(数字系统与电路导论)
- 课程概述:本课程介绍了数字系统和电路设计的基本概念,包括ASIC设计实验室(EECS151LA)和FPGA实验室(EECS151LB),学生将有机会设计和实现RISC-V处理器及其外围设备,并在FPGA上运行或创建芯片布局。
同伴教学的意见
-
未来技术展望:Dan Garcia教授预测,未来100年最重要的发明将是“湿计算”(wet computing),即直接将大脑与机器连接的能力。目前已经有猴子通过思维控制机械臂的实验,而DARPA也对思维控制的机器人和飞行器非常感兴趣。通过适当的I/O接口,虚拟现实技术也会取得重大进展。
-
相关研究:Jose Carmena教授在脑-机接口(Brain-Machine Interface)方面进行的研究正是这方面的前沿探索。你可以通过这个链接了解更多。
这些课程和研究机会为你提供了多样的选择,助你在学术和研究领域取得进一步的成就。如果你对某个领域特别感兴趣,务必抓住这些机会,深入学习和研究。
站在巨人的肩膀上
这一页表达了对前任CS61C课程讲师们的感谢,他们通过自己的努力和贡献,使这些课程和资源得以不断丰富和完善。正是这些前辈的知识和经验积累,才能让后来的学习者站在巨人的肩膀上,看到更远的未来。
未来的加州大学校友
未来是什么?
- 未来充满了不确定性与无限的可能性。新千年带来了许多颠覆性的技术和概念,包括量子计算、纳米技术、物联网(IoT)、人工智能(AI)以及并行计算革命等。这些新兴技术正迅速改变着我们所熟悉的世界,推动我们进入一个后PC时代。
新千年的特征
- 普及计算与量子计算:计算能力变得无处不在,量子计算的出现为解决复杂问题提供了前所未有的能力。
- 纳米技术:通过操纵物质的最基本单元,纳米技术正在彻底改变从医学到电子学的各个领域。
- 物联网:物联网使得设备之间能够通过网络互联互通,数据的实时共享与分析成为可能。
- 人工智能:AI正在变得越来越强大,它不仅能处理大数据,还能从中学习,做出接近人类智能的决策。
- 并行革命:随着多核处理器的普及,计算任务的并行处理成为了主流,极大地提高了计算的效率与速度。
快速变化的技术
- 新技术的出现速度前所未有,后PC时代的到来意味着传统的个人计算设备正在被更多样化的智能设备所取代。
世界上最好的教育
- 加州大学以其卓越的教育质量著称,培养了无数在各个领域中卓有成就的毕业生。
永不放弃
- 无论未来充满多大的挑战,只要你不放弃,始终保持学习和创新的精神,你就能掌控自己的未来。
“预测未来的最好方法就是去创造它。”——Alan Kay的这句名言,强调了创造力的重要性。未来是充满不确定性的,但正是这些不确定性让创造者有了更多的可能性去塑造和引领世界。正如最后所强调的,“未来掌握在你的手中!”这是对每一位学习者和未来创造者的激励和呼唤。