设计决策
关键架构决策及其理由。
决策 1: RAII 内存管理
状态: 已采纳
背景: GPU 内存必须显式分配和释放。
决策: 使用 DeviceBuffer 类的 RAII 模式。
影响:
- ✅ 无内存泄漏
- ✅ 异常安全
- ✅ 清晰的所有权语义
决策 2: 三层架构
状态: 已采纳
背景: 需要在简单性和灵活性之间平衡。
决策: 分离为应用层、算子层和基础设施层。
影响:
- ✅ 清晰的关注点分离
- ✅ 易于添加新算子
- ✅ 可测试的组件
决策 3: 卷积使用共享内存分块
状态: 已采纳
背景: 卷积受内存带宽限制。
决策: 使用共享内存分块缓存图像数据。
影响:
- ✅ 比朴素实现快 10 倍
- ⚠️ 内核大小限制在 ~15×15
决策 4: 缩放使用纹理内存
状态: 已采纳
背景: 图像缩放需要插值。
决策: 使用带硬件插值的 CUDA 纹理内存。
影响:
- ✅ 免费的硬件双线性插值
- ✅ 缓存的纹理读取
- ⚠️ 仅限于 2D 图像
决策 5: 直方图使用原子操作
状态: 已采纳
背景: 直方图需要跨线程计数。
决策: 使用原子操作配合共享内存归约。
影响:
- ✅ 正确的并行直方图
- ⚠️ 一定的原子竞争