并行程序动态调度的静态分析及其优化应用
1. 引言
随着多核系统的普及,并行编程变得越来越主流。然而,编译器对运行时任务调度的了解仍然非常有限,这使得编译器错失了许多重要的优化和验证机会。目前,开发并行程序优化的研究人员需要额外开发自己的模型和分析方法,这增加了开发新优化的难度,并使得将不同优化集成到单个优化编译器中变得复杂。
为了解决这些问题,本文提出了一种将动态运行时调度的静态分析与后续优化分离的方法。通过这种独立的调度分析,现有的优化核心算法可以用简单规则实现,有助于更好地理解优化过程,并支持将它们集成到单个优化编译器中。本文的主要贡献包括:
- 描述了一种基于轻量级任务和显式调度的细粒度并行模型,该模型能表达多种并行构造。
- 开发了一种调度分析方法,可从包含显式调度指令的程序中计算抽象调度。
- 提出了三种基于调度分析结果的并行程序优化方法,这些方法可以处理混合使用不同同步原语的程序。
2. 显式调度的程序模型
本部分描述了一种基于轻量级任务和显式调度的细粒度并行模型,该模型能够表达多种并发模式,避免了词法作用域并行性的限制。
2.1 任务与调度
任务是执行模型的基本构建块,类似于方法,但任务不是立即执行,而是被调度到后续执行。例如:
task t() {
Activation aCompute = schedule(this.compute());
Activation aPrint = schedule(this.print());
aCompute→aPrint;
}
调度