提升多线程应用性能:数组重组与数据实例优化
在多线程应用和数据处理领域,如何提升程序性能一直是研究的重点。本文将介绍两种提升性能的技术,分别是基于共享缓存感知的数组重组技术和基于数据实例的特定优化技术。
共享缓存感知的数组重组技术
引用亲和性分析
引用亲和性分析需要了解线程之间的时间匹配情况。对于具有各种同步机制的复杂程序,获得准确的匹配可能很困难。在实验中,使用应用程序中的OpenMP编译指示和pthread函数作为匹配的启发式方法。
引用亲和性分析的最终输出是两级亲和性组。每个亲和性组包含多个数组,这些数组的引用亲和性大于预定义的阈值(实验中为0.95)。第一级组对应绑定到一个核心的线程的执行,第二级组对应绑定到单个处理器上所有核心的线程的执行。
数组重组
使用亲和性组进行数组重组的直接方法是将属于单个亲和性组的数组组合在一起。但这种简单方法存在一些问题:
- 亲和性组冲突 :冲突可能存在于两个维度。一是同一级别的亲和性组之间,例如两个数组在处理器1的线程中属于同一亲和性组,但在处理器2的线程中不属于;二是跨级别冲突,两个数组在超线程级别属于同一亲和性组,但在处理器级别不属于。解决冲突的方法取决于可应用于程序的转换类型,复杂的转换可能会创建不同版本的相关代码段以适应不同的亲和性组。在手动数组重组中,在应用重组之前,会从整个程序和整个系统的角度验证亲和性组,只有在所有核心上都显示出亲和性的组才会进行重组。
- 避免虚假共享 :对于引用亲和性组P = {a1, a2, …, an},如果数组ai在核心cp上被写入,并且
超级会员免费看
订阅专栏 解锁全文
173万+

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



