ppt文档 C++高性能并行编程与优化 - 课件 - 07 深入浅出访存优化

18.88 MB 147 页 0 评论
语言 格式 评分
中文(简体)
.pptx
3
摘要
文档深入探讨了C++高性能并行编程中的访存优化策略,重点分析了内存访问规律、缓存行预取以及内存分配对性能的影响。通过矩阵乘法的实战案例,揭示了不连续内存访问导致的性能损失,并提出了通过合理分块和顺序访问来优化缓存性能的方法。同时,文档也探讨了并行编程中的计算瓶颈和内存瓶颈,指出并行只能加速计算部分,对内存访问的优化效果有限。最后,通过实测数据,展示了优化后的加速比达到24倍的成果。
AI总结
### 总结 1. **访存优化分析** - i-2 和 i+2 跨步的访存模式表现不理想,可能还有优化空间,但因时间限制未深入。 - **矩阵乘法实战案例**: - **访存规律**: - a(i, j) 的访问地址固定,不利于优化。 - b(i, t) 访问模式跳跃,导致缓存性能差。 - c(t, j) 的连续访问模式较好。 - **问题根源**:b(i, t) 和 a(i, j) 的不连续访问导致矢量化失败,CPU无法启动指令级并行(ILP)。 - **优化措施**: - 结合两种方法,使用 stream_ps 防止写回污染缓存。 - **最终加速比**:达到了24倍。 2. **内存分配与分页** - **测试结果**: - `vector` 写入两次时间一致(正常现象)。 - `malloc` 写入两次,第一次比第二次慢。 - `new int[n]` 与 `malloc` 性能一致,第一次写入较慢。 3. **硬件缓存预取与分块优化** - 硬件自动识别线性访存规律(如顺序、逆序、连续、跨步),难以处理随机访存,导致 CPU 空转。 - **解决方案**:增大分块大小(如4KB,即64个缓存行),使得一次随机访问后伴随多次顺序访问,便于 CPU 预取缓存行,减少等待时间。 4. **内存带宽与计算瓶颈** - **cpu-bound 与 memory-bound**: - **计算瓶颈(cpu-bound)**:并行加速效果显著(如包含大量计算的循环体)。 - **内存瓶颈(memory-bound)**:并行无法加速,优化重点。 - **fill Stops**:纯访存操作和计算操作速度差异显著,可能因写回策略不同导致赋值1比赋值0慢一倍。 5. **其他资源** - 课件和代码GitHub地址:[https://github.com/parallel101/course](https://github.com/parallel101/course) - 相关视频:[https://www.bilibili.com/video/BV1fa411r7zp](https://www.bilibili.com/video/BV1fa411r7zp)
P1
P2
P3
P4
P5
P6
P7
下载文档到本地,方便使用
- 可预览页数已用完,剩余 140 页请下载阅读 -
文档评分
请文明评论,理性发言.