OpenMP任务调度算法评估与优化
1. 任务调度背景与动机
在高性能计算领域,多核架构的普及使得应用和运行时开发者需要关注底层硬件拓扑。OpenMP任务支持为开发者提供了更细粒度的并行编程方式,但许多OpenMP任务调度器往往忽略了底层系统的层次结构,在大型NUMA节点上可能会因远程访问开销而导致性能下降。因此,我们决定构建一个可定制的OpenMP任务调度引擎,以研究不同参数(如任务列表粒度和工作窃取策略)对任务调度性能的影响。
2. 现有任务调度方法概述
- 无锁工作窃取算法 :通过无锁的工作窃取算法实现负载均衡,每个线程窃贼遍历其他线程队列。
- ROSE编译器基础设施 :采用分层调度策略,将线程分组到牧羊人中,每个牧羊人使用一个LIFO任务队列,并通过牧羊人之间的工作窃取机制维持负载平衡。
- ForestGOMP软件 :根据内存层次结构提出工作窃取技术,适用于处理嵌套并行性,窃取对象为线程及其数据。
- StarPU :在HPC领域广为人知,基于数据流依赖关系调度任务,用户可以定义任务列表的类型(FIFO、LIFO、双端队列)和粒度(每个线程一个或单个全局列表)。
3. 任务调度控制参数
3.1 任务列表粒度
多核架构的普遍存在要求开发者考虑硬件拓扑。我们使用hwloc软件包来发现系统的拓扑结构,并构建OpenMP团队的拓扑树。以双插槽八核Intel Sandy Bridge EP为例,
超级会员免费看
订阅专栏 解锁全文
2822

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



