前言
从2004年开始,我们在Intel公司的支持下开设了“多核软件设计”课程,开始向本科生和硕士生讲述多核处理器上的软件优化技术。在过去十多年中,我们一直在补充这门课程的教学内容,逐渐涵盖了CPU的一般软件优化技术、SIMD软件设计方法、GPU体系结构与软件设计等多个方面。在此过程中,我们发现现有的教材还有很多需要提升的空间,主要体现在三个方面。
❑在现有计算机科学技术或软件工程的课程体系中,计算机体系结构(组成原理)、操作系统、编译原理等底层技术相关课程的理论性很强,且相对孤立,没有体现出这些底层技术与软件设计的关联以及对软件优化的支持。
❑从计算机专业或软件工程专业学生的编程能力培养角度看,现有的课程往往集中在算法的设计与优化、软件工程规范性等方面,缺少软件性能工程方面的基本训练,使得学生所设计的软件在性能方面难以满足实际应用的要求。
❑学生不了解现优CPU、内存、磁盘、网络等底层系统硬件参数,难以准确估计系统的实际性能和及时预判可能存在的性能瓶颈,直接制约了软件总体结构设计及优化的能力。
这些问题促使我们撰写一本将计算机体系结构、操作系统、编译器、虚拟机等底层技术与软件优化技术相关联的教材,让读者能够理解软件优化的基本方法以及这些方法背后的原理,并通过编程实践掌握提升软件性能的常见方法。与其他教材相比,本书具有以下特点。
❑融合了底层技术和软件优化技术两个层面的内容。介绍软件优化技术时,分底层技术要点、软件优化基本方法、基于优秀开源代码或者学术论文的综合实例分析三个部分进行讲解。通过这些内容,读者可以理解计算机底层技术对软件性能的影响,掌握软件优化的基本方法,并学习实际系统中的应用方法。
❑以编程实践为核心。本书提供了较多的编程习题,核心目标是提升读者的编程能力。这些习题几乎都来自计算机或软件专业本科的常见算法或者实际工作生活中经常遇见的问题,方便读者理解算法的背景和基本原理。通过对同一个问题使用不同的软件优化技术,读者还可以对比不同优化技术的效果。
本书分为七章,其中第1章介绍了软件性能工程、延迟、吞吐率、加速比等基本概念和性能测试方法,后续章节围绕着6个专题展开。每章的内容既相对独立,又相互有联系。很多软件优化问题往往需要综合多章所介绍的技术逐步完成。
教师使用指导
在课程教学中,教师可以根据课时情况选择本书的若干章或者专题讲述底层技术的基本原理及基本优化实例,也可以根据科研情况,讲解其他程序优化实例。其中第1~4章为本科生的基本教学内容,第5~7章可以用于工程硕士研究生的知识扩展。
在日常作业中,教师可以选择书中的实验题作为编程作业。根据已有的教学实践经验,本科学生每两至三周可以完成一个较为复杂的软件优化作业,并根据编程实验书写完整的实验报告。教师可以联系本书作者(chenhu@scut.edu.cn)以获得本书实验题的参考程序。
本课程可以不进行书面考试,而是以学生平时的实验报告作为评分依据。此外,可以考虑采用程序竞赛作为考试的形式,例如对同一个问题(如矩阵乘法),根据学生所优化程序的运行时间长短进行排名和打分。这种方法可以更为有效地激励学生进行软件优化的热情。
学生使用指导
在本课程中,学生需要通过大量的编程练习来提升自己的编程能力,加深对计算机底层技术的理解和认识。在此过程中需要注意以下三点。
❑需要预先做好实验平台的准备,并充分了解实验平台的技术参数。
❑需要重视实验报告的写作。规范的实验报告便于交流技术思想,对实验数据的分析更能促进读者理解多种软件优化技术。
❑需要尽可能阅读相关的参考文献,扩展知识面。本书的篇幅有限,难以完整地涵盖所有的技术细节,需要读者通过参考文献进一步提升自我学习的能力。
需要指出的是,由于作者水平和知识面有限,本书所列举的优化方法不一定是最新或者最好的,还需要读者进一步去探索。
本书的编著工作由本人完成,汤德佑老师和黄敏老师认真审校了本书的主要内容。感谢华为“智能基座”项目的支持。
最后,感谢家人的默默付出,感谢陈焕鑫、刘家辉、陈捷瑞、徐烨威等同学为本书所做的工作。
陈虎
华南理工大学软件学院
2023年8月