论文部分内容阅读
随着硬件处理器架构的不断发展,应用的结构也变得越来越复杂,这给并行编程带来了巨大的挑战,为此任务并行编程模型便应运而生并得到越来越广泛的应用。现有任务并行编程模型在任务调度上存在一些不足,它不能够帮助程序员很好地控制任务粒度,容易出现负载不均衡或产生大量任务创建开销的情况,并且不能够充分利用应用的数据局部性。 基于任务并行编程模型的自适应任务粒度控制能够在保持负载平衡的前提下尽量降低任务创建开销,并且能够充分利用应用的数据局部性。自适应任务粒度控制一方面通过自适应地选取help-first与串行化执行策略来控制并行任务数量及任务粒度;另一方面通过限制细粒度任务并行执行来降低自身所造成的开销。自适应任务粒度控制采用的是基于无锁队列的工作窃取调度方式,同时为了以充分利用应用的数据局部性,使用分组调度策略把所有线程按照共享cache结构进行分组,线程窃取任务时优先组内窃取,组内窃取失败再去组外窃取任务。 基于任务并行编程模型的自适应任务粒度控制方法分别实现在了OpenMP和Function Flow编程语言上,实验结果表明,自适应任务粒度控制方法的开销可以控制在4%以内。对于规则的任务并行程序,自适应任务粒度控制方法能够和手动控制方法达到同样效果;对于非规则的任务并行程序,自适应任务粒度控制方法比手动控制方法平均性能提升19%左右。