1. 问题:如何做多核系统的设计/优化

一名资深程序员日常会面临的诸多问题

下一代多核架构选择∶众多小核vs少量大核
面对已知负载,买机器是选择强算力还是高访存带宽
面对已有硬件,优化程序性能的方向和路径怎么定?

image-20231117095946283

2. 基本思想:对应用和硬件进行建模分析,化繁为简

  1. 系统内众多组件都会对应用性能、执行时间产生影响

  2. 不要对架构细节进行建模,需要好的抽象

  3. 做一些必要且理想的假设

    CPU核可以在本地数据实现峰值算力(peakGFLOP/s)
    CPU核执行的是负载均衡的SPMD(数据并行)代码
    片上网络的带宽充足
    片上的cache容量和带宽充足

3.问题建模:抽象后的系统模型

  1. 抽象后的系统,应用的运行时间可以明确划分为两大块
  • 数据移动时间

  • 计算时间

  1. 应用程序到底是

    • Compute-Bound
    • Memory-Bound

4. 数学建模:Roofline Model 屋顶模型

image-20231117100331306

AI(Arithmetic Intensity)OI(Operational Intensity)算术密度 / 操作密度

  • 内存与cache间每传输1Byte数据所包含的操作数 ,也就是操作密度
  • example: 操作数/数据量bytes = AI

GFLOP/s=min(Peak GFLOP/s,AIPeakGB/s)GFLOP/s = min ( Peak\space GFLOP/s , AI * Peak GB/s)

  1. 理论峰值;机器峰值(机器的带宽,硬件参数,主频、核数等等
  2. AI * 带宽: 内存带宽

5. 可视化分析I:Roofline Model屋顶模型

  • 横坐标为操作密度
  • 纵坐标为可实现的计算能力
  • Log-Log坐标轴
  • Roofline模型将坐标系切分成5个区域

image-20231113211853047

如何应用

  • 我们可以用Roofline做什么
    1.分析程序性能瓶颈,启发优化方向
    2.决定程序优化什么时候该停止
    3.理解不同架构、编程模型、实现等等之间的性能差异点
    4.预测未来架构设计方向
  • 进一步思考
    1. 在具体实践过程中,该如何采集相关参数
    2. 描述能力很强,还可以泛化到哪些领域

1、利用Roofline Model做硬件对比

TPU、GPU和CPU的Roofline对比

image-20231117100650575

  • TPU的峰值算力最强,
    MLP和 LSTM 是 memory-bound ,
    CNN是compute-bound

  • 6个应用离GPU和CPU的顶都比较远

2、Roofline Model 的HPC负载应用:

概述

image-20231117101019961

3、使用Roofline Model评估典型大数据负载

负载特征

image-20231113213406336

评估结果

image-20231117101158121

Roofline Model 对于大数据负载失效 !! 原因是什么?如何改进?

改进模型:DC-Roofline

(1801.092121 BOPS.Not FLOPS1 A New Metric and Roofline Performance Model For Datacenter Computing (arxiy org)

image-20231113213746137

DC-Roofline可以反映大数据负载的性能 Roofline无法反映大数据负载的性能

image-20231113213555827

DC-Roofline优化大数据负载

image-20231113213929931

DC-Roofline优化效果总结

image-20231113213918141

总结Roofline Model 应用思路

  1. 构建计算公式:确定性能目标(根据负载特征)
  2. 获取变量数值:利用处理器的性能计数器(PMU〉使用Linux Perf工具获取
  3. 绘制可视化视图:确定优化路径