Concurrent Scheduling of High-Level Parallel Programs on Multi-GPU Systems
本文介绍了 Celerity 运行时中的指令图调度,旨在将复杂的内存和通信分析从多 GPU 系统上 SYCL 程序的关键路径中移出,从而实现并发执行和优化的内存分配,并在高达 128 个 GPU 的规模下实现强扩展性。
原始论文采用 CC BY 4.0 许可(https://creativecommons.org/licenses/by/4.0/)。 这是对下方论文的AI生成解释。它不是由作者撰写或认可的。如需技术准确性,请参阅原始论文。 阅读完整免责声明
现代超级计算机不再仅仅是几十年前机器的快速版本;它们是成千上万个专业处理器协同工作的庞大集合。为了充分利用这些庞大的系统,科学家们依赖于能够自动决定将哪部分计算分配给哪个处理器,以及数据如何在它们之间移动的软件。这是一项艰巨的任务,因为软件必须在不减慢实际工作速度的情况下管理内存和通信。如果系统花费太多时间来思考将数据放在哪里或如何保持其一致性,那么强大的处理器就会处于闲置状态,从而浪费能源和时间。挑战在于要让这些决策过程足够迅速,使计算机永远不会停下来思考,从而保持像河流流水一样顺畅的工作流。
因斯布鲁克大学的研究人员开发了一种新的方法,来处理配备了大量图形处理器(GPU)的系统的调度问题。这些芯片旨在处理海量的并行工作,但协调数百个这样的芯片需要一个精密的管理者。该团队引入了一种称为“指令图调度”(instruction-graph scheduling)的方法,它充当了一个详细的、底层的每一项计算机需要执行的操作的地图。该系统并不是在需要每一步时才临时做出决策,而是构建一个完整的计划,其中包含了内存分配、数据传输和实际的计算。这个计划是在计算机正在执行之前任务时生成的,这实际上允许调度器在不中断当前流程的情况下,预见并准备好后续步骤。
这种方法的核心在于软件看待工作的方式发生了转变。此前,系统会生成一份高层级的任务列表,然后在执行时才去确定具体的细节,例如内存复制。这往往会导致延迟,因为系统在计算过程中必须停下来分析依赖关系。新方法将每项任务分解为最小的组件,例如分配一个特定的内存块或向相邻处理器发送一小块数据。通过将这些微小的步骤排列成一个单一的、互连的图,系统可以精确地看到哪些步骤可以同时发生。这使得计算机能够实现通信与计算的重叠,这意味着在芯片忙于进行数值运算时,数据可以在处理器之间移动,而不是等待一个完成之后再开始另一个。
为了测试这个想法,研究人员将其系统集成到了一个名为 Celerity 的软件框架中,该框架旨在 GPU 集群上运行复杂的模拟。他们运行了三种不同的科学应用来观察新调度器相对于标准版本的表现如何。其中一个应用模拟了数十亿个粒子之间的引力;另一个模拟了声音在房间内的反射;第三个则追踪了波在介质中的传播。在每种情况下,他们都测量了随着增加更多 GPU 时程序运行速度的变化,这一指标被称为“强扩展性”(strong scaling)。结果显示,新方法始终优于基准系统,尤其是在处理器数量增加时。在一个拥有 128 个 GPU 的系统上,新调度器使房间模拟应用的运行速度比旧方法快了一倍多,同时粒子模拟也看到了显著的速度提升。
这项工作的一个关键创新是名为“调度器前瞻”(scheduler lookahead)的技术,它解决了一个与内存使用相关的问题。在许多模拟中,程序需要存储的数据量可能会从一步变为下一步。如果没有预测这些变化的方法,软件可能会分配一个较小的内存块,结果发现太小,随后被迫分配一个更大的内存并把所有数据复制过去。这个调整大小的过程很慢,并且会浪费宝贵的时间。新系统会前瞻即将到来的任务,以观察内存需求是否正在增长。如果它检测到数据规模将增加的模式,它会等到明确了最终所需大小后再进行内存分配,从而完全避免了昂贵的调整大小步骤。这对于数据稳步增长的应用特别有效,因为它允许系统一次性分配正确的内存量。
研究人员还构建了一个将规划工作与执行工作分离的系统架构。他们创建了一个专门的线程,或者说一条独立的执行线,专门负责构建这些详细的指令图。与此同时,其他线程处理在 GPU 上执行指令的实际工作。这种分离确保了规划下一步的过程绝不会干扰当前步骤的执行。这两个过程并行运行,通过一个流线型的队列进行通信,将指令从规划器传递给执行器。这种设计最大限度地减少了系统等待的时间,确保 GPU 始终忙于有用的工作,而不是在软件思考下一步该做什么时处于闲置状态。
实验是在意大利的 Leonardo 超级计算机上进行的,这是一台拥有数千个处理器和高速连接的机器。团队使用了真实的科学代码,以确保他们的发现能在实际场景中站得住脚。他们发现,虽然新方法并没有改变存储数据或处理问题规模的根本限制,但它显著提高了工作分布的效率。在数据访问模式复杂或变化的应用程序中,改进最为明显,因为系统可以更好地隐藏在通信和内存管理上花费的时间。对于计算步骤非常短的应用,新调度器降低了开销,从而使系统即使在大量处理器的情况下也能保持高效扩展。
这项工作证明了超级计算机内部物流的管理方式与硬件本身的原始动力同样重要。通过将繁重的调度工作从关键路径中移出并转入并行过程,研究人员展示了保持这些大型机器处于巅峰效率运行的可能性。指令图方法提供了一种可视化和管理现代并行程序中存在的复杂依赖网络的方法,将曾经的瓶颈转变为流畅的流水线。随着超级计算机在规模和复杂性上的不断增长,这类技术对于确保科学家能从其投资中获得最大收益将至关重要,从而使他们能够解决那些此前由于规模太大或速度太慢而无法解决的问题。
您所在领域的论文太多了?
获取与您研究关键词匹配的最新论文每日摘要——附技术摘要,使用您的语言。