Skip to main content
QUICK REVIEW

[论文解读] QuickSched: Task-based parallelism with dependencies and conflicts

Pedro Gonnet, Aidan B. G. Chalk|arXiv (Cornell University)|Jan 20, 2016
Parallel Computing and Optimization Techniques参考文献 3被引用 5
一句话总结

QuickSched 是一个轻量级、开源的 C 语言库,用于基于任务的共享内存并行计算。它在传统仅依赖关系的任务调度基础上,引入了显式任务冲突机制——通过分层可锁定资源建模——以实现高效、顺序无关的共享资源访问任务序列化。通过结合关键路径任务优先级调度与高效的基于锁的冲突解决机制,并最小化运行时抽象,该库在 64 核系统上实现了高性能和强可扩展性,调度器开销低于总执行时间的 1%。

ABSTRACT

This paper describes QuickSched, a compact and efficient Open-Source C-language library for task-based shared-memory parallel programming. QuickSched extends the standard dependency-only scheme of task-based programming with the concept of task conflicts, i.e.~sets of tasks that can be executed in any order, yet not concurrently. These conflicts are modelled using exclusively lockable hierarchical resources. The scheduler itself prioritizes tasks along the critical path of execution and is shown to perform and scale well on a 64-core parallel shared-memory machine for two example problems: A tiled QR decomposition and a task-based Barnes-Hut tree code.

研究动机与目标

  • 解决现有基于任务的系统依赖关系强制非重叠任务顺序执行所导致的并行性降低问题。
  • 在不施加人为顺序约束的前提下,实现对访问共享资源(如归约或独占写入)的任务的高效、顺序无关的序列化。
  • 设计一个最小化、可移植且高性能的任务调度器,使用标准 C 语言实现,避免使用编译器扩展或预处理器。
  • 通过结合关键路径任务优先级调度与高效的资源锁定机制,在共享内存环境中实现低开销和高可扩展性。
  • 提供简单、可扩展的 API,允许在编译时显式指定任务依赖关系和冲突,以支持更优的调度决策。

提出的方法

  • 将任务依赖关系建模为有向无环图(DAG),其中任务为节点,数据流约束为边。
  • 将任务冲突定义为一组不能并发执行但可任意排序的任务集合,通过在分层资源上使用互斥锁进行建模。
  • 使用关键路径长度启发式方法为任务加权,并优先调度最长的数据依赖路径上的任务,以最大化并行性。
  • 使用 OpenMP 或 pthreads 实现工作窃取任务队列系统,每个线程维护本地队列,并在空闲时探测其他线程的队列。
  • 通过细粒度、分层的资源锁强制执行依赖关系和冲突约束,这些锁在任务执行期间被获取和释放。
  • 通过保持调度器逻辑轻量化并避免复杂的运行时分析或预处理,最小化运行时开销,依赖静态任务图定义。

实验结果

研究问题

  • RQ1在具有共享资源访问的基于任务的系统中,显式建模任务冲突(超越依赖关系)是否能提升并行性?
  • RQ2在共享内存架构上,基于锁的冲突模型与基于依赖关系的序列化机制在性能和可扩展性方面有何对比?
  • RQ3一个最小化、基于 C 语言的任务调度器在不使用编译器扩展或复杂运行时系统的情况下,能在多大程度上实现低开销和强可扩展性?
  • RQ4关键路径任务优先级调度策略是否能改善具有混合数据依赖与资源依赖的不规则任务图中的负载均衡与执行效率?
  • RQ5内存层次结构与缓存一致性对大规模共享内存系统中任务调度开销与性能有何影响?

主要发现

  • QuickSched 在所有核心数量下均实现低于 1% 的调度器开销(qsched_gettask),即使在 64 核系统上也表明其运行时成本极低。
  • 在从 16 核扩展到 64 核时,成对交互任务的开销最高增加 30%,这归因于 L2 缓存共享;而粒子-单元交互任务的开销仅增加 10%,反映出更好的内存局部性。
  • 该库在 64 核共享内存系统上表现出良好的可扩展性,对分块 QR 分解和 Barnes-Hut 树算法工作负载均展现出优异性能。
  • 通过分层锁显式建模冲突,可正确序列化非可交换任务(如归约操作),而无需强制执行任意顺序。
  • 基于关键路径的任务加权策略通过优先调度最长数据依赖路径上的任务,显著提升了并行效率。
  • QuickSched 的设计基于标准 C 语言与 OpenMP/pthreads,确保了可移植性与简洁性,代码量少于 3,000 行,且抽象层极简。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。