跳转至

06 Copy Engine 与计算重叠效率定量推导

1. 异步数据搬运与计算双缓冲(Double Buffering)数学模型

设大批次任务包含 \(N\) 个数据块,单块数据通过 PCIe 传输时间为 \(T_{DMA}\),GPU SM 算力执行耗时为 \(T_{Compute}\)

graph TD
    subgraph Serial["串行执行 (No Overlap)"]
        S0["Step 0: DMA 0 -> Calc 0"] --> S1["Step 1: DMA 1 -> Calc 1"]
        S1 --> S2["Step 2: DMA 2 -> Calc 2"]
    end

    subgraph Async["异步双缓冲重叠 (100% Pipelined)"]
        DMA_Pipe["DMA 管道: DMA 0 | DMA 1 | DMA 2 | DMA 3 ..."]
        Compute_Pipe["计算管道: 空闲  | Calc 0 | Calc 1 | Calc 2 ..."]
    end

1. 耗时推导公式

  • 串行执行总耗时: $\(T_{Serial} = N \times (T_{DMA} + T_{Compute})\)$
  • 双缓冲完全重叠总耗时: $\(T_{Overlap} = T_{DMA} + (N-1) \times \max(T_{DMA}, T_{Compute}) + T_{Compute}\)$
  • 加速比(Speedup): $\(\text{Speedup} = \frac{N \times (T_{DMA} + T_{Compute})}{T_{DMA} + (N-1) \times \max(T_{DMA}, T_{Compute}) + T_{Compute}} \xrightarrow{N \to \infty} \frac{T_{DMA} + T_{Compute}}{\max(T_{DMA}, T_{Compute})}\)$

2. 实例定量计算

  • 设单块数据 \(T_{DMA} = 10\text{ ms}\)(传输 1.2GB 数据),\(T_{Compute} = 12\text{ ms}\)\(N = 1000\) 个 Iteration:
  • 串行耗时:\(1000 \times (10 + 12) = 22,000\text{ ms} = 22\text{ s}\)
  • 双缓冲耗时:\(10 + 999 \times 12 + 12 = 12,010\text{ ms} = 12.01\text{ s}\)
  • 实际加速比\(\frac{22}{12.01} = \mathbf{1.832\times}\)(整体性能提升 83.2%)。