多线程数值代码中可调参数的暴露与性能优化
在多核处理器广泛应用的今天,优化并行数值代码的性能成为了一个重要的研究方向。本文将探讨如何通过暴露可调参数、优化代码转换以及搜索合适的参数组合来提升多核架构上数值代码的性能。
1. 研究背景与关键洞察
多核技术在处理器行业占据主导地位,促使了大量关于代码改进技术的研究。本文的关键在于识别可用于控制并行粒度和并发线程内存访问模式的代码转换和转换参数。通过建立一套标准来描述影响数据局部性和并行性的转换参数之间的关系,同时考虑多核系统中共享缓存带来的内核内和内核间局部性,以及共运行线程中的伪共享问题。将这些参数整合到一个统一的多维搜索空间中,并使用转换脚本语言实现每个优化,将参数暴露给搜索引擎。
2. 相关工作
- 并行性和数据局部性的利用 :在多核处理器上,软件方法被用于创建新的并行抽象、提取更多并行性、利用共享内存层次结构中的数据局部性、改进线程调度和控制同步延迟。例如,Thies等人描述了在C程序中利用粗粒度流水线并行性的方法,并开发了一组并行编程原语来支持流水线并行性;Papadopoulos等人指出,对于数据库应用程序,增加更多执行线程并不有益,且实现起来可能非常困难。
- 局部性转换 :循环阻塞或分块是利用数值内核时间局部性的主要转换方法,展开并合并以提高寄存器重用在商业和研究编译器中也很常见。循环融合和数组收缩结合使用可改善缓存行为并减少存储需求,循环对齐可作为循环融合和标量化的启用转换,循环倾斜和时间倾斜则用于条带挖掘和并行化带有依赖关系的循环。然而,将这些转换集成的尝试相对较少,且大多数方法针对单核
超级会员免费看
订阅专栏 解锁全文

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



