---
title: "Parallel Scan (Parallel Associative Scan)"
created: 2026-06-18
updated: 2026-06-18
type: concept
tags: ["gpu-optimization", "parallel-algorithm", "prefix-sum"]
sources: ["https://arxiv.org/abs/2312.00752"]
---

# Parallel Scan

## 定义

Parallel Scan（并行扫描，也称 Parallel Associative Scan / Blelloch Scan）是一种在 GPU 上并行计算前缀和（prefix sum）的算法。在 Mamba 中，它被用于将 [[selective-state-space|S6]] 的顺序循环更新展开为可并行的关联操作，是 [[hardware-aware-algorithm]] 的核心计算原语。

## 为什么需要

S6（选择性 SSM）的序列依赖：

```
h_t = A_bar_t * h_{t-1} + B_bar_t * x_t
```

朴素实现是 O(n) 顺序的，无法并行训练。但该操作满足结合律（associativity），可以重新排列为 parallel scan。

## 算法直觉

将序列分为两半，递归计算：
- 第一半的完整结果
- 第二半需要第一半的"最终状态"作为初始条件

Blelloch 的两阶段方法：
1. **Up-sweep（reduce）**：构建局部聚合
2. **Down-sweep**：将聚合结果分发到各元素

复杂度：O(n) work, O(log n) depth → GPU 友好。

## 在 Mamba 中的实现

Mamba 的硬件感知算法将 scan 与离散化融合在单个 GPU kernel 中，直接在 SRAM 上操作，避免中间结果写入 HBM。

## 相关概念

- [[hardware-aware-algorithm]] — Mamba 中 scan 的完整实现
- [[selective-state-space]] — 需要 scan 的原因（时间变化 SSM 不能卷积）
- [[gu-mamba|Mamba 论文]]

## 参考

- Blelloch (1990) — 经典并行 scan 算法
- [[gu-mamba|Mamba]] (Gu & Dao, 2024)
