Bootstrap

深度学习:CPU和GPU算力

一、算力

“算力”(Computing Power)通常是指计算机或计算系统执行计算任务的能力。它是衡量系统处理数据、运行算法以及执行计算任务效率的重要指标。根据上下文,算力可以在以下几种场景中具体化:

1. 单机算力

  • CPU算力:中央处理器的计算能力,通常用核心数量(cores)、时钟频率(GHz)、以及每秒浮点运算次数(FLOPS)等指标衡量。
  • GPU算力:图形处理单元用于并行处理的能力,尤其是在深度学习和高性能计算领域中,用CUDA核心数量、显存大小及带宽等来衡量。
  • ASIC/FPGA:为特定任务优化的硬件,比如AI芯片和比特币挖矿设备。

2. 集群算力

  • 数据中心或高性能计算(HPC)集群的整体计算能力。其算力可以通过每秒浮点运算次数(如Teraflops、Petaflops)来描述。
  • 包括分布式计算资源的集成,例如云计算平台(如AWS、Azure、Google Cloud)。

3. 深度学习算力

  • AI和机器学习训练中常用算力指标。大模型训练任务通常用GPU集群(如NVIDIA A100)的规模来描述。
  • 算力需求可能包括参数量(parameters)数据集规模训练时间

4. 边缘算力

  • 边缘设备(如嵌入式系统、智能传感器)的计算能力,通常能效比(算力/功耗)是关键指标。

5. 单位和指标

  • FLOPS(每秒浮点运算次数):通常用于衡量CPU/GPU的性能。
  • TOPS(每秒万亿次运算):在AI硬件中较常用。
  • 能耗比(Perf/Watt):表示计算能力与功耗的关系。

在你的工作领域(如LiDAR、雷达、计算机视觉等),算力需求可能用于:

  • 处理实时数据流(如点云、视频流)。
  • 实现复杂的AI推理任务(如目标检测、轨道识别)。
  • 优化高精度地图的构建和更新流程。

二、CPU算力

CPU算力通常用浮点运算能力(FLOPS, Floating Point Operations Per Second)来衡量,尤其在科学计算、高性能计算(HPC)和人工智能领域。

计算公式

CPU算力(理论峰值性能)可以通过以下公式计算:

FLOPS = CPU 核心数 × 每个核心的时钟频率(Hz) × 每个周期执行的浮点运算数 \text{FLOPS} = \text{CPU 核心数} \times \text{每个核心的时钟频率(Hz)} \times \text{每个周期执行的浮点运算数} FLOPS=CPU 核心数×每个核心的时钟频率(Hz×每个周期执行的浮点运算数

1. 核心数(Number of Cores)
  • CPU内的物理核心数量。
  • 如果支持超线程(Hyper-Threading),则逻辑核心数可以是物理核心数的两倍,但计算算力时通常只考虑物理核心。
2. 时钟频率(Clock Frequency)
  • 以 GHz 表示(1 GHz = 1 0 9 10^9 109 Hz)。
  • 表示每秒钟一个核心的主频振荡次数。
3. 每周期浮点运算数(Operations per Cycle)
  • CPU的指令集架构(如 x86, ARM)决定了每周期可执行的浮点运算数。
  • 常见架构:
    • 标量运算:1 FLOP/周期。
    • SIMD 指令集(如 AVX, AVX-512):多个浮点数并行处理。
      • AVX2:256位寄存器,最多处理 8 个单精度或 4 个双精度浮点数。
      • AVX-512:512位寄存器,最多处理 16 个单精度或 8 个双精度浮点数。

示例:Intel i7-1255U 计算理论峰值算力

  1. 核心数:10(2 性能核心 + 8 效率核心)。
    • 性能核心支持更高频率和更复杂的指令集。
    • 效率核心主要执行简单任务。
  2. 时钟频率
    • 性能核心:最高 4.7 GHz。
    • 效率核心:最高 3.5 GHz。
  3. 浮点运算数(AVX2指令集)
    • 性能核心:8 单精度 FLOP/周期。
    • 效率核心:4 单精度 FLOP/周期。

单个核心算力(性能核心)
FLOPS = 4.7   GHz × 8   FLOP/周期 = 37.6   GFLOPS \text{FLOPS} = 4.7 \, \text{GHz} \times 8 \, \text{FLOP/周期} = 37.6 \, \text{GFLOPS} FLOPS=4.7GHz×8FLOP/周期=37.6GFLOPS

所有核心总算力
FLOPS(理论峰值) = ( 2 × 37.6 + 8 × ( 3.5   GHz × 4 ) )   GFLOPS = 75.2 + 112 = 187.2   GFLOPS \text{FLOPS(理论峰值)} = (2 \times 37.6 + 8 \times (3.5 \, \text{GHz} \times 4)) \, \text{GFLOPS} = 75.2 + 112 = 187.2 \, \text{GFLOPS} FLOPS(理论峰值)=(2×37.6+8×(3.5GHz×4))GFLOPS=75.2+112=187.2GFLOPS


实际算力

理论算力往往高于实际算力,受限于:

  • 内存带宽:数据加载速度不足以满足CPU吞吐需求。
  • 分支预测失败流水线阻塞
  • 非浮点运算占比,例如整数运算、条件判断。
  • 散热与功耗限制:特别是移动设备(如笔记本)。

可以通过性能测试工具(如 LINPACK 或 Cinebench)测量实际算力。

三、GPU算力
GPU算力是衡量图形处理器在并行计算中执行浮点运算能力的重要指标,通常以**每秒浮点运算次数(FLOPS, Floating Point Operations Per Second)**表示。

GPU算力计算公式

FLOPS = CUDA 核心数 × 每个核心的时钟频率(Hz) × 每周期执行的浮点运算数 × 流水线数(Pipeline Count) \text{FLOPS} = \text{CUDA 核心数} \times \text{每个核心的时钟频率(Hz)} \times \text{每周期执行的浮点运算数} \times \text{流水线数(Pipeline Count)} FLOPS=CUDA 核心数×每个核心的时钟频率(Hz×每周期执行的浮点运算数×流水线数(Pipeline Count


计算步骤

1. CUDA 核心数
  • 表示 GPU 中的并行计算单元数量。
  • CUDA 核心数通常是 SM(Streaming Multiprocessor)中单元数的总和。例如,NVIDIA 的 GPU 具有多个 SM,每个 SM 包含多个 CUDA 核心。
2. 时钟频率
  • GPU 的核心时钟频率,通常以 GHz 表示(1 GHz = 1 0 9 10^9 109 Hz)。
  • GPU 的 Boost Clock 表示其在性能负载下的最高频率。
3. 每周期浮点运算数
  • 具体取决于 GPU 的架构和支持的精度。
  • 常见精度:
    • FP32(单精度):主流深度学习任务使用。
    • FP64(双精度):高精度科学计算。
    • FP16(半精度)或 INT8:用于深度学习加速。
  • 例如,在 NVIDIA Ampere 架构中,FP32 每周期支持 2 个浮点操作。
4. 流水线数
  • 高性能 GPU 使用多条指令流水线以提高并行处理能力。例如,NVIDIA Ampere 架构中每个 CUDA 核心有两条执行流水线。

示例:NVIDIA A100 计算理论峰值算力

参数:
  • CUDA 核心数:6,912。
  • 时钟频率:1.41 GHz。
  • 每周期浮点运算数(FP32):2。
  • FP32 理论算力

FLOPS = 6 , 912 × 1.41   GHz × 2 = 19 , 468.32   GFLOPS = 19.47   TFLOPS \text{FLOPS} = 6,912 \times 1.41 \, \text{GHz} \times 2 = 19,468.32 \, \text{GFLOPS} = 19.47 \, \text{TFLOPS} FLOPS=6,912×1.41GHz×2=19,468.32GFLOPS=19.47TFLOPS

FP64 和 FP16 算力:
  • FP64(双精度):FP32 算力的 1/2。
    FP64 FLOPS = 19.47   TFLOPS ÷ 2 = 9.735   TFLOPS \text{FP64 FLOPS} = 19.47 \, \text{TFLOPS} \div 2 = 9.735 \, \text{TFLOPS} FP64 FLOPS=19.47TFLOPS÷2=9.735TFLOPS
  • FP16(半精度):FP32 算力的 2 倍。
    FP16 FLOPS = 19.47   TFLOPS × 2 = 38.94   TFLOPS \text{FP16 FLOPS} = 19.47 \, \text{TFLOPS} \times 2 = 38.94 \, \text{TFLOPS} FP16 FLOPS=19.47TFLOPS×2=38.94TFLOPS

实际算力

理论算力是 GPU 的上限,实际性能通常受以下因素影响:

  1. 内存带宽:数据吞吐能力不足可能限制算力。
  2. 指令调度:不均衡任务可能导致部分核心闲置。
  3. 散热与功耗:性能可能受限于温控策略。
  4. 编程优化:代码是否充分利用并行计算能力。

测试工具如 CUDA SDK, TensorRT,或基准测试工具(如 Geekbench 和 SPECviewperf)可用于测量实际 GPU 算力。

;