Skip to content

欢迎来到 HPC 101 超算短学期

课程信息

HPC 101 是浙江大学超算队开设的一门短学期课程,旨在帮助同学走进 Linux 和 HPC (高性能计算) 的世界,了解 HPC 领域的基本概念、超算的体系结构、编程技术等。

课程的正式名称是“课程综合实践 Ⅰ”,课程代码为 CS1030M,学分为 2.5 学分。

HPC 101 可以用来申请替代计算机学院非计科专业的短学期课程。

选课报名

2025 QQ Group

欢迎扫码进入 2025 HPC101 课程交流群了解更多信息:

本课程不设置在选课系统中,有意的同学务必提前报名

我们会通过邮件报名的情况以名单的方式直接在后台将选课的同学录入系统。

同时有意选本课程的同学请不要在一轮二轮选课时选择其他 “课程综合实践Ⅰ” 课程,以免系统中出现冲突。(如果报名人数实在过多不得不进行筛选,没选上的同学仍可以参与其他课程的补选,不必担心没有课上)

请有意向选课的同学完成 Lab 1 (MiniCluster) 实验并提交实验报告,如果你实在没有时间完成实验,也可以提交个人简介。

同时我们也提供了 Lab 0 (Linux Crash Course) 实验,帮助你快速上手 Linux 系统,你可以根据自身情况选择性完成,并将实验结果一并提交。

请将实验报告或个人简介发送到邮箱:

  • 邮箱[email protected]
  • 邮件标题【2025 短学期报名表】姓名 学号,例:【2025 短学期报名表】张三 3220100001
  • 邮件内容:个人联系方式(邮箱、电话、QQ、微信等)
  • 邮件附件:Lab 1 实验报告或个人简介至少一个
  • 截止时间:5 月 30 日晚 23:59
  • 一起聊聊:我们希望同每一位希望修读该课程的同学聊聊天,请不要将该环节当作面试。请在 ZJUSCT-HPC101-2025 - Schej 上选择你方便的时间段,并在邮件内说明,方便我们安排时间。将以群聊的形式进行,每场约半小时。

如果一切正常...

你会收到一份确认邮件,包含如下内容: 🎉恭喜,你已经成功提交了报名材料🎉

我们会优先考虑实验完成度高的同学,而且实验本身是作为短学期的一次作业使用的。欢迎大家踊跃报名!

课程安排

  • 上课时间:上午 8:30 - 11:30,下午 14:00-17:00
  • 上课地点:待定
时间 内容安排 讲师
6.25 超算概述 陈建海老师
6.26 集群软硬件及运维基础 郝星星
6.27 HPC 中的计算机系统 - 1 李晨潇
6.28 HPC 中的计算机系统 - 2 何水兵老师/宋浩喆
6.29 休息(HPC-PL) /
6.30 向量化并行计算基础 陈宏哲
7.1 Cuda C 编程基础 王则可老师/陈楷骐
7.2 (上午)OpenMP/MPI 并行计算基础
(下午)C++ 并行编程
李晨潇
朱宝林
7.3 高性能计算高级话题 王则可老师
7.4 休息 /
7.5 性能分析技术基础 Profiling 朱宝林
7.6 机器学习基础 林熙
7.7 机器学习高级话题 张寅老师

导言:Hello HPC World

第一次听到 HPC 这个词,你是不是觉得很陌生?没关系,我第一次听到时也是一头雾水。几乎没有学生在学习这门课程之前了解过 HPC,这是一个相对陌生的领域。在这门课程中,我们会一步步地带你走进 HPC 的世界,带你了解这个领域的基础知识和技术,带你感受到 HPC 的魅力。

Image title

最快的超级计算机 Frontier 每秒能提供 \(10^{18}\) 次浮点运算,相当于 \(10^6\) 张 4090 显卡。

HPC 是什么?

HPC 是 High Performance Compute 的缩写,意思是高性能计算,通常是指通过聚合计算能力来提供比传统计算机或服务器更强大的计算性能,处理海量多维数据集(大数据),并以极高的速度解决复杂问题。HPC 系统的运行速度通常要比最快的商用台式机、笔记本电脑或服务器系统快一百万倍以上。

标准计算系统主要使用串行计算来解决问题,它将工作负载分成一系列任务,然后在同一处理器上依次执行这些任务。相比之下,HPC 则利用以下技术来提高计算速度:

  • 大规模并行计算。并行计算是在多个计算机服务器或处理器上同时运行多个任务。大规模并行计算则是使用数万到数百万个处理器或处理器核心的并行计算。
  • 计算机集群(也称为 HPC 集群)。HPC 集群由多个联网的高速计算机服务器组成,并有一个集中式调度器来管理并行计算工作负载。这些计算机被称为节点,可能会使用高性能多核 CPU,如今更有可能使用 GPU(图形处理单元),它们非常适合处理严格的数学计算、机器学习模型和图形密集型任务。单个 HPC 集群可能包括 100,000 个或更多节点。
  • 高性能组件:HPC 集群中的所有其他计算资源(网络、内存、存储和文件系统)都是高速、高吞吐量、低延迟组件,可以与节点同步,优化集群的计算能力和性能。

下图展示了一个典型的 HPC 集群架构:

hpc-architecture

HPC 提供的超高性能,使得它在很多领域都有着广泛的应用。随着 AI 技术的发展,HPC 应用也已成为 AI 应用的代名词,尤其是机器学习和深度学习应用。HPC 应用正在推动以下领域的持续创新:

  • 科学研究。HPC 在科学研究中的应用包括气候建模、天气预报、宇宙学、地震学、生物学、物理学、化学、材料科学和地球科学。这些学科需要处理大量数据、进行复杂的模拟和建模,以及进行大规模的数据分析。
  • 医疗保健、基因组学和生命科学。人类基因组测序的首次尝试耗时长达 13 年;而如今,HPC 系统可以在不到一天的时间内完成这项工作。在医疗保健和生命科学领域,HPC 的其他应用还包括药物发现和设计、癌症快速诊断和分子建模。
  • 金融服务。除了自动交易和欺诈检测,HPC 还支持蒙特卡罗模拟和其他风险分析方法的应用。
  • 政府和国防。在这一领域,两个日益增长的 HPC 用例是天气预报和气候建模,这两个用例都涉及处理大量的历史气象数据和气候相关数据点每日数百万次的变化。其他政府和国防应用包括能源研究和情报工作。
  • 能源。能源相关 HPC 应用包括地震数据处理、油藏模拟和建模、地理空间分析、风场模拟和地形测绘。

在这个短学期课程中,你会学到什么?

在这门课中,你能够学习到的知识和技能大致如下:

  • 🏗 前置知识:计算机体系结构


    要学习并行程序设计,首先要理解现有的硬件(如 CPU、GPU 等)是如何工作的、为并行做了哪些优化。并行化的目的之一,是为了最大化利用现有的硬件资源,对大量数据进行快速操作。对于 CPU,我们会了解指令集、存储器层次结构和局部性原理,知道 Cache 一致性问题的原因和解决办法,掌握 SIMD(Single Instruction Multiple Data)并行方法。对于 GPU(以 NVIDIA 为主),我们会了解流处理器(Stream Processor,SP)、CUDA Core(甚至是 Tensor Core)的组织方式,掌握 CUDA 编程的基本方法。上面只提及了最重要的知识,你应该能体会到内容非常之多且陌生,这些内容大概会用 4 天的时间完成讲授。在这门短学期课程中,我们只需要对这些知识有基本的了解即可。一定程度上,对硬件的理解越深入,并行编程技术也会越好,所以这是值得在日后深入学习的模块。

  • 💻 核心技术:并行编程技术


    在本课程中,我们将学习三种经典的并行编程技术:OpenMP/MPI 和 CUDA。前者两者主要用于 CPU,后者用于 GPU(当然二者可以结合使用,不过课程中不会涉及)。表面上,学习一些 API 就能写并行程序了,但性能并不会得到很大的提升。基于对现有硬件的理解进行针对性的优化是非常重要的一环。

    在基本的 API 之外,我们还将学习并行算法,深入体会不同算法的特点,以及如何根据硬件特性进行选择。并行编程的难点在于数据的并行化和任务的并行化,这需要对算法有深入的理解。因此你也需要经常阅读经典例程、他人的优化思路和效果,学习并积累经验。对 CUDA 来说,多看例程尤为重要。CUDA 提供了多层次的 API,我们使用的主要是 CUDART(CUDA RunTime API)。它与具体的 CUDA 硬件无关,但你仍然需要考虑数据会如何被存储在具体的硬件上、如何优化存取、运算和线程调度。比如,在 2080Ti 上调优过的程序,在 A100 上的性能表现可能会大打折扣。

  • 🐧 辅助技术:Linux 相关


    本课程全程使用 Linux 环境。如果你对 Linux 系统有过一定了解和经验,或是曾经用服务器搭建过网站并持续使用等,那么你的实验流程会十分舒适。不过没有基础也不必担心,集群使用 Slurm 和 Lmod 进行管理,配置环境和运行任务都非常方便。我们也会在课程中讲解如何使用这些工具,以及如何在集群上提交任务。如果出现问题,你可以随时询问运维人员,他们会很乐意帮助你解决问题。

  • 🤖 附加技术:科学计算、AI 相关


    在第 2 个 Lab,你会接触科学计算中关键的工具:NumPy。在最后一个 Lab,你将会揭开大模型的面纱,自己编写一个 Transformer,并进行训练和推理。课程会花约 2 天时间讲授 AI 基础。这次实验,或许是你第一次真正理解那些神秘的 AI 究竟是怎么用实际的代码构建起来的。

修读建议

comment

阅读完上面的介绍,相信你已经初步了解了自己将要学习哪些内容。再回顾一下计算机系的培养方案,你会看见这些内容贯穿了整个计算机专业的学习。因此,有同学在 98 上评论“没有 ICS(计算机系统概论)的话,这门课就是最有用的”,这句话是相当正确的。HPC101 是一门非常有挑战性的课程,知识量大且难,注重实践操作,但也是一门非常有趣的课程。如果你对计算机体系结构、并行编程、AI 等方面有浓厚的兴趣,那么这门课程将会是你的一次深度学习之旅。

或许在进入计算机专业以来,你已经多次听到「CS 人的基本素养就是自学能力」这样的言论。这句话在 HPC101 中将会得到最好的体现。HPC 领域的知识广阔,我们难以在 14 * 2 个课时里向你讲授所有内容。事实上,这些课时只够上导论,能够让你对相关知识有一个基本的了解就已经达到了目的。因此,你注定要在课后花费一定时间和精力去深入学习,在 Lab 中尝试应用并真正理解。我们会提供一些资源和参考资料,帮助你更好地学习。希望你能够在课程中坚持自发地学习,收获满满的知识和技能。我们也非常鼓励你在学习过程中多多提问,多多交流,这样你会学得更快更好。

资源推荐

  • thu-cs-lab/HPC-Lab-Docs 清华大学高性能计算导论实验文档:作为国内超算课程建设的标杆,清华大学的 HPC 课程已经开设多年,积累了丰富的经验和资料。
  • Linux 101 - USTC:中科大拥有国内高校最大的 Linux User Group,其开设的 Linux 入门课程内容丰富,适合初学者。
  • 《并行程序设计导论》(An Introduction to Parallel Programming)
    • 很薄,介绍了 OpenMPI 和 OpenMP(Pthreads 我们不学,也基本不会接触到)。讲解的内容浅显易懂,适合快速入门。
  • Python 编程三剑客:从上至下,书籍难度逐渐递增。如果你对自己的编程能力不太自信,选择第一本书。如果你编程能力好,但没接触过 Python,可以选择第二本。如果你对 Python 有一定了解,非常推荐你直接从第三本开始做一些简单的项目。
  • 《Programming Massively Parallel Processors: A Hands-on Approach, 4th Edition》
    • CUDA 编程目前仍在活跃发展中,因此没有合适的中文书籍。要想学习到最新的 CUDA 技术,只能看英文书籍,而且要看最新版,超过 5 年的书籍均可能过时。

FAQ

感觉自己编程基础比较弱,适合选这门课吗?

大一期间,同学们一般都已经修过 C 语言课程(如《C 程序设计》和《数据结构基础》),具备一定的 C 语言基础。在超算短学期中,我们将接触的几种并行编程框架(如 CUDA、MPI 和 OpenMP)都是基于 C/C++ 语言的。只要你在这些课程的学习情况不是太差,就已经具备了修读本课程的基础编程能力

有什么预修要求/我需要做什么准备吗?

如上所述,只需要有 C 语言基础即可。我们理解大家临近期末课业繁重,Lab 1 的报告仅作为报名时的可选项。这个 Lab 的目的是让大家提前熟悉 Linux 系统和集群环境,了解高性能计算中软件的编译和运行模式,这些内容在短学期课程中都会详细讲解。如果在 Lab 中遇到困难,请善用 Google、Stack Overflow 等搜索引擎,学会阅读官方文档(Read The Manual),这些技能会极大提升你的计算机学习能力。如果有余力,推荐阅读 Peter Pacheco 的《并行程序设计导论》,其中介绍的 MPI/OpenMP 是我们将要学习的重要内容。此外,Python 编程能力对修读本课程及其他短学期课程(如 AAA)也非常有帮助,建议加入学习计划。

担心自己和“大神”差距很大怎么办?

不必担心。内容和形式对于大家来说都是全新的,几乎没有同学在大一及之前就接触过并行编程。大家基本都处于同一起跑线,主要差异在于编程语言的熟练程度,这会影响学习速度,但不会影响最终的学习成果。以往的经验来看,无论是否有 OI 基础,大家都能跟上进度。短学期的时间安排较为宽松(但请不要因此放松),大约两周高密度学习,之后有两个月时间逐步消化并完成各个 Lab,最后组队完成 Project。这样的安排也与超算竞赛的形式类似:与 CTF、ACM 等短时竞赛不同,HPC 竞赛通常持续数月甚至半年,有充足时间自主安排、深入研究、团队合作。我们也鼓励大家在学习过程中多交流、互相帮助

课程有名额限制吗?

硕博可以选吗?

笔者不清楚硕博的选课流程,但往年确实有硕博通过选课系统选上了我们的课。

其他专业可以选吗?

可以,一般是算作个性化学分。如果需要替换本专业培养方案的课程,请联系教学科确认。

可以旁听吗?

如果你因为时间冲突等原因无法选课,但仍然希望旁听课程内容,可以:

  • 在智云课堂上旁听该课程。
  • 通过课程仓库获取课程资料,我们会将实验文档、部分课件和代码等资料同步到本仓库。
  • 欢迎加入课程交流群,我们会在群内同步课程消息。

如需申请集群账户以便进行实验和练习,请发送邮件至 [email protected],邮件内容需包含以下信息:

  • 姓名、学号、学院/专业
  • 个人联系方式(邮箱、电话、QQ、微信等)
  • 旁听理由(简要说明希望旁听课程及申请集群账户的原因)

由于集群计算资源有限,账户申请将根据实际情况进行审核,不保证所有申请都能通过。请理解资源分配的限制,感谢支持!

如果在做 Lab 过程中遇到问题或有其他疑问,欢迎在交流群内提问或私聊助教,我们会尽力解答。

贡献

课程的历史版本保存于仓库的不同分支中,当前版本为 main 分支。为了加快速度,你可以在克隆时指定单个分支:

git clone -b main --single-branch [email protected]:ZJUSCT/HPC101.git

在本地构建并预览文档:

pip install -r requirements.txt
mkdocs serve

课程实验文件夹布局如下:

Lab0-Example
├── index.md:实验文档
├── image:实验相关图片
└── code:实验基础代码等

图片请使用 .webp 格式,它能够显著减小图片体积。你可以使用下面的命令批量转换图片格式:

find . -type f \( -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.png" \) -exec sh -c 'cwebp "$1" -o "${1%.*}.webp" && rm "$1"' _ {} \;

课程图标使用了两种英文字体,可以在 FontSpace 上找到:

  • Sekath Italic
  • Supercharge