《软件优化技术》课程网站 2026
课程名:软件优化技术
讨论软件优化的核心概念、技术与实践,使学生:
- 了解软件优化的基本概念;
- 了解面向软件优化的体系结构支持,包括指令集、寄存器、缓存、分支预测等;
- 了解面向软件优化的操作系统支持,包括进程调度优化、内存管理优化(页面缓存、页面调度)、文件管理(文件目录缓存)等;
- 了解面向软件优化的运行时支持,包括Just-in-time编译、基于运行时profiling的编译优化、内存管理、垃圾回收等;
- 了解面向软件优化的编译支持,包括常见的编译优化技术;
- 为从事全栈优化框架或者软硬件基础设施的研发打下基础。
课程概要
第0讲 课程介绍
- 课程介绍
- 软件优化的概念与目标
第1讲 专用计算系统及优化
- 例子
- 专用图灵机模型
- 专用图灵机模型上的性能优化
- 专用图灵机的实现及优化
第2讲 通用计算系统——CPU
- 通用图灵机模型
- 通用图灵机的实现——CPU
- CPU的性能优化概述
- 指令内并行优化
- 指令级并行优化
- 线程级并行优化
- 多处理器并行优化
- AI处理器优化
第4讲 访存优化1
- 存储技术概述
- 局部性与访存优化原理
- 寄存器分配优化
第5讲 访存优化2
- 缓存的组织结构和操作
- 缓存的性能度量
- 缓存访问优化
第6讲 编译过程及编译优化
- 编译流程概述
- C语言到汇编的翻译
- 编译优化概述
- 数据流分析
- link与load阶段
- 算法(模型)优化
- 硬件优化
- 软件优化
- 压缩(信息熵)
- 识别和删除无用代码
- 分时重用(swap)
- 指令层次的融合
- Loop层次的融合
- Function层次的融合
- 设计层次的融合
Todo
- 虚拟机优化(解释执行/JIT/AOT/GC)
考核方式:
- 课堂(10%) + 讨论和分享(40%) + 结课报告(50%)
- 从第二次课开始,每次课都会有一个讨论主题(每缺席一次,扣5分)
- 期末之前完成课程报告
讨论与分享
要求
- 每位同学需要对每个讨论主题进行深入研究,在课堂上需要对每道题都要参与发言(发言时,为每道题提供不少于5份参考资料:书籍、论文、翔实的博客均可)。
- 每位同学需要负责一个主题的记录整理,并整理成结课报告的主要部分。
选题
- 软件优化的背景与意义:
- 从自己的经验或思考出发,讨论软件开发过程是否应该融入软件优化的考虑?如果不应该,解释为什么?如果应该,讨论如何做到。
- 在不同的计算领域(比如嵌入式计算、移动计算、云计算、穿戴计算、智能计算),对软件优化的目标和重要性是否有所不同?为什么?
- 软件优化的研究内容
- 软件优化方法如何处理硬件、软件栈上的不同软件层的因素?为了软件优化的目的,硬件上有哪些值得关注的新进展?
- 操作系统、共享库、以及不同类型的应用软件的软件优化目标有何不同?为什么?
- 软件优化目标对应的成本收益模型有哪些?这些模型存在哪些挑战?
- 软件优化与AI之间的关系
- AI for 软件优化:我们能否信任AI(例如,基于LLM的智能体)来自动定位和修复生产环境中的性能漏洞? 这种信任的边界在哪里?如果AI的建议与人类专家的直觉相悖,我们该听谁的?这背后涉及可解释性、责任归属和“最后一公里”的验证问题。
- 软件优化 for AI:训练和部署大型语言模型(LLM)的能耗和成本居高不下 。那么,在追求模型效果和保证可接受的性能/能耗之间,是否存在一个“最佳平衡点”?我们该如何量化并找到这个平衡点?这是可持续AI的核心挑战。
- 数据驱动的软件性能优化
- 性能工程正从经验驱动走向数据驱动,但数据本身也带来了新的问题。从噪声中识别信号:在持续集成(CI)环境中,海量的性能测试结果充满了系统噪声。如何设计更智能的算法,不仅能检测到性能变化(变点),还能自动区分“需要立即响应的性能缺陷”和“可忽略的统计波动”?这直接关系到开发效率。
- 数据驱动 vs. 假设驱动:传统的性能优化往往基于专家的直觉(例如,“这里可能是瓶颈”)。而在数据科学时代,我们是否应该转向纯粹由数据驱动的优化?这两种模式的本质区别是什么?会不会导致“过度优化局部而忽略整体架构”的问题?
- 可视化的力量与局限:如何通过创新的可视化技术,帮助开发和运维人员直观地理解长达数年、跨越多个系统版本的性能演进趋势 ?一个好的可视化应该讲一个什么样的“性能故事”?
- 跨越软硬件边界的性能设计
- 随着硬件异构化,性能优化必须考虑底层架构,这对软件开发模式提出了新要求。为异构计算设计:当面对CPU、GPU、FPGA甚至RISC-V等多种指令集架构时 ,软件开发模式应该如何演进?是否存在一种“一次编写,到处高效运行”的编程模型或语言?还是说,为特定硬件优化是不可避免的宿命?
- 软硬件协同设计的未来:有没有基于软硬件协同设计的成功的商业产品?我们是否应该让软件开发者更深入地理解硬件微架构,还是让硬件去更好地适应软件生态?
- 性能的可移植性:一个为x86架构深度优化的算法,在迁移到ARM架构的云实例上时,性能表现一定会好吗?如果不好,问题可能出在哪些层面(编译器、操作系统、微架构)?我们该如何保证性能的可移植性?
- 软件新特性与软件优化
- 跨语言互操作时代(比如Java调用C++实现的库函数),对软件的优化目标(比如性能、安全)带来哪些挑战?有哪些进展和前景?
- 基于软件复用(比如基于开源软件设施)的软件开发流程,对软件的优化目标(比如性能、安全)带来哪些挑战?有哪些进展和前景?
- 自拟优化相关的题目(需事先与老师沟通,并获同意)
- 参考选题:
- 不同的优化目标:比如通过软件方法提升安全性、缩减代码体积等。
- 新的计算领域:比如面向隐私计算、类脑计算、量子计算的软件性能优化等。
- 该问题的应用背景是什么
- 该领域的困难和挑战是什么
- 该题目领域的优化方法的历史与现状
- 重点展开讨论其中1-2个最有意思的优化方法
- 该题目领域后续的问题及解决思路展望
- <font color=#00FF00>觉得可以在课堂上跟大家分享或讨论的至少2个点(必需)</font>
- 有实验分析或实验对比(bonus)
- 有独到见解,并有支撑(bonus)
结课报告
内容
- 第一部分:本人负责的那个主题的记录和整理
- 第二部分:本人对所负责的主题的总结和评价
加分点与减分点
- +条理清楚、结构清晰、表达流畅
- +有独到见解
- +有创新想法或者改进建议
- -禁止大幅抄袭博客或现有技术资料(本课程会对课程报告,进行网络查重和报告间查重)
- -切勿过泛过浅,缺乏细节展开