DARTS - 极端计算的细粒度多线程执行模型


BSD
跨平台
C/C++

软件简介

小程序程序执行模型

我们定义了一个新的程序执行模型(PXM),它是强调使用细粒度事件驱动任务来进行计算的小码模型。它受数据流执行模型原理的启发,加上冯·诺依曼执行模型。

1.什么是Codelets?

小码是直到完成为止执行的机器指令序列(通常是短的):保存非常特定的事件(例如,小码执行的核被标记为有故障),小码不能被中断和迁移到其他地方(即,它是不可抢占的)。

小代码触发规则

如果所有的依赖关系都满足,那么小代码可以触发。如果满足小码的所有数据依赖性,则启用它。如果小码所依赖的所有资源和其他事件也被满足,则它准备好触发。小码当它当前正在计算核上执行时触发。

3.小码抽象机模型

Codelet模型依赖于一个抽象机,它描述了小嵌体依赖于被分配,存储和调度的机制。我们的抽象机器旨在反映未来极端系统的外观。因此,我们描绘了具有通过某种互连链接的计算节点的分层机器。每个计算节点由也通过一些互连网络(例如超传输或QPI)链接的一个或多个多核芯片组成。每个多核芯片由具有一些互连(最可能是某种类型的片上网络)的核的集群组成。每个核心集群由两种核心组成:计算单元(CU),以及至少同步(有时称为调度)单元(SU)。每个CU都可以访问准备好的小码池。每次在其CU上运行小码时,CU从其就绪池中弹出另一个准备好的小码。
SU负责管理资源(例如,存储器分配,网络带宽分布,…)和调度准备好的小码到右侧CU。

小码图

当小码释放一些资源,或产生/更新一些数据项时,它发信号通知依赖于这些事件的小码和/或系统软件准备好执行。因此,共享依赖的小码形成一个图,我们称为小码图(CDG)。
CDG是有向图,其中顶点是小码,并且弧是从一个小码流到另一个小码的依赖性。虽然CDG可以分布在整个Codelet抽象机模型上,但是它的一部分通常被分配给它的特定部分,通常是特定的集群。子程序子图通常通过线程过程来分配。

5.螺纹程序

线程过程(TP)是异步函数。它们以控制流方式调用。
TPs由两部分组成:一个帧和一个小码图。该帧包含CDG中包含的小码所需的所有数据,以便:(1)存储提供给TP的输入,并且将作为CDG中的一些小码的初始数据输入,(2)分配足够的存储器用于由小码产生并由同一CDG中的其他人使用的任何中间数据,并且最终在TP中的最后一个小码被触发时被绑定到解除分配,以及最后(3)分配输出空间以存储由CDG包含在TP中。形成包含在TP中的CDG的所有小码片被立即分配:所有依赖性对于TP是静态地知道的。因此,当应用的全局CDG通过线程过程的各种调用动态分配时,每个TP分配具有静态已知依赖性的子图。此外,一旦被调度为由SU执行,即一旦其CDG和TP帧被分配给特定集群,则TP(及其绑定的小码)不能在其他地方迁移(禁止与容错和弹性相关的一些特定例外问题)。

谁应该使用小目录?

大家!小码旨在描述并行任务如何在并行机器的低层执行。理想地,用户使用具有相对直观的表达并行性和局部性约束的方式的高级语言;编译器及其相关联的运行时系统然后生成细粒度事件驱动任务(小码)以向底层硬件提供“最佳适配”并保持其有用繁忙。

谁应该直接使用小目录?

Codelet模型及其实现意味着作为并行应用程序的某种“汇编语言”:除非有专家硬件知识的调优专家更好地将工作固定到底层系统的特定部分,我们期望生成小码通过某种高级语言而不是直接使用codelet
API指定。
在我们的经验中,使用小码写并行程序类似于编写PThread程序:通过足够的“自我控制”,可以编写高效的并行代码,从而正确地利用底层硬件。然而,如果一个不是计算机科学家或计算机工程师,这可能是一个单调乏味的任务。
有多个项目利用了Codelet模型中表达的想法,并将高级语言(例如Chapel,OpenMP等)向下转换为事件驱动的细粒度任务系统(例如OCR,SWARM,DARTS)。

DARTS

Delaware自适应运行时系统是特拉华大学自己实现的小型模型规范。它旨在忠实地实现Codelet模型本身:它将一个版本的小码抽象机映射到底层硬件;它还提供了一个两级调度系统来调用线程过程并将它们映射到给定的核心集群上,并运行它们中包含的小码;
DARTS是用C
++编写的,并且被设计为模块化的:它意味着一个研究工具,用于在各个方面评估Codelet模型本身:调度策略,故障恢复能力和恢复,能量效率等。它当前正在运行在x86(64位)架构上,并在TERAFLUX联盟的上下文中移植到Dataflow启发的模拟框架。
DARTS的设计和实施的描述可以在我们的网站的出版物部分(欧洲标准2013年)。