OpenMP性能优化全解析
1. 缓存与性能测试
在某些示例中,为了模拟代码在先前操作后变量不在缓存中的性能情况,会在特定行插入刷新循环以清空数组缓存。当数据不在缓存中时,称为冷缓存;数据在缓存中时,则称为热缓存。这两种情况在实际应用中都有可能出现,并且在没有深入分析的情况下,很难确定会出现哪种情况。
2. 循环级OpenMP性能分析
-
性能提升 :引入循环级OpenMP对源代码的改动较少,但性能提升显著。以表格中的数据为例,在Skylake Gold 6152双插槽节点和GCC 8.2编译器环境下,88个线程时的加速比可达10倍。
| 操作类型 | 串行运行时间(ms) | 简单循环级OpenMP运行时间(ms) | 添加首次触摸优化后运行时间(ms) |
| ---- | ---- | ---- | ---- |
| Vector Add | 0.253 | 0.0301 | 0.0175 |
| Stream Triad | 0.164 | 0.0203 | 0.0131 |
| Stencil | 62.56 | 3.686 | 3.311 | -
并行效率计算 :并行效率的计算方法为实际加速比除以理想加速比。例如,对于Stencil操作,串行运行时间与并行运行时间的比值为17倍,而在88个线程下的理想加速比为88,所以并行效率为17 / 88 = 19%。不过,在较少线程数(如4个线程)时,并行效率能达到85%。
- 优化策略
超级会员免费看
订阅专栏 解锁全文

1504

被折叠的 条评论
为什么被折叠?



