Skip to content

Latest commit

 

History

History
58 lines (34 loc) · 1.5 KB

general-matrix-multiplicatio-perf-estimate.md

File metadata and controls

58 lines (34 loc) · 1.5 KB
tags
hpc
gemm

矩阵乘法性能推演

Created: 2022-05-02 11:14

计算量分析

以矩阵乘法为例,假设 float32 类型的矩阵 1000x1000 的矩阵和 1000x1000 的矩阵相乘.

理论上的 float32 计算次数:

  • 乘法:1000 * 1000 * 1000 = 1000000000
  • 加法:1000 * 1000 * 1000 = 1000000000

即一共有 10^9 次 FMA 指令(乘加)

理论上需要访问内存的次数:

  • 读内存:100010002 × 4Byte =  8000000 Byte
  • 写内存:100010004Byte = 4000000 Byte

CPU 时间

假设

  • 系统 CPU 有 10 个物理 core
  • 每个物理 core 有 2 个逻辑 core,运行在 2GHz
  • 每个物理 core 在每个 cycle 可以执行 2 条 256bit FMA 指令(乘加)

则理论上系统每秒可以计算 FMA :

10 × 2G * 2 * (256/8bits/4bytes) = 320 G

注:1个字节是 8bits,1 个 float 是 4bytes,所以 256bit 的 FMA 指令实际上是 8个 float 的 FMA 指令)

FMA 预期消耗时间: t_cpu = 1000000000 / 320G = 31.25ms

访存时间

假设内存读写带宽为:20GB/s

读内存预期消耗的时间为: t_mem = 8000000Byte /  20Gb/s = 4.0ms

最终时间

理论上最少需要时间: t = max(t_cpu, t_mem) = 31.25ms

如果发现上述过程实际耗时 200ms,则找到了需要优化的点。

练习题

  1. 为什么理论上需要的时间是 t = max(t_cpu, t_mem),而不是  t = t_cpu + t_mem?
  2. 计算矩阵乘法时,矩阵的每个元素会被多次访问,为什么计算访问内存量的时候没有被计算在内?