前言

高性能计算(High Performance Computing, HPC)要回答的其实是一个很朴素的问题:

同一段计算,怎么让它在真实的机器上跑得更快?

答案散落在很多层面 —— 向量指令、多核、缓存与局部性、GPU 与张量加速器、任务调度,以及一件经常被忽略、却最关键的事:怎么知道瓶颈到底在哪。

关于本教程

在个人电脑时代 ,开发人员通常直接在操作系统之上进行编程,可能之间会有一些库。随着世界进入云时代,软件 堆栈变得更加深奥和复杂。开发人员大多数时间都在工作的顶层堆栈已经远离了硬件。这些额外的层次抽象出实际 的硬件,从而允许使用新型加速器来处理新兴工作负载。然而,这种演进的负面影响是,现代应用程序的开发人员 对其软件运行的实际硬件的了解较少。

多亏了摩尔定律,软件程序员几十年来一直 “轻松愉快”。过去,一些软件供应商更倾向于等待新一代硬件以加速其 应用程序,而不是花费人力资源改进其代码。从下图可以看出,单线程性能增长正在放缓。单线程性能是指在隔离 环境中测量时 CPU 核心内的单个硬件线程的性能。

microprocessor-trend-data

当不再每个硬件世代都能提供显著的性能提升时,我们必须开始更加关注代码运行的速度。在寻求提高性能的方法时,开发人员不应依赖硬件。相反,他们应该开始优化其应用程序的代码。

需要什么基础

具备 C/C++ 编程语言的最低背景,熟悉计算机体系结构和操作系统的基本概念,如中央处理器、内存、进程、线程、虚拟和 物理内存、上下文切换等。如果上述术语中有任何新的术语,建议先学习这些材料。

  • C / C++:能看懂指针和模板就够了
  • 体系结构:了解 cache、SIMD、线程的概念会更好读,没有也能跟上
  • GPU:不需要提前会写,CUDA 部分是从零开始的

许可

各主题的材料版权归原作者所有(例如 Stanford CS149 的 handout 归 Stanford 所有),其余实验报告与实现代码为本仓库作者所写。

results matching ""

    No results matching ""