StreamAlloc:一个用于分析和转换CUDA代码的框架,以实现异步执行

《ACM Transactions on Programming Languages and Systems》:StreamAlloc: A Framework for Analyzing and Transforming CUDA Code to Enable Asynchronous Execution

【字体: 时间:2026年03月30日 来源:ACM Transactions on Programming Languages and Systems

编辑推荐:

  CUDA异步优化技术sync2async通过分配流标识符和同步点,将默认流同步操作转换为异步调用,解决非专家程序员手动管理流带来的挑战。基于LLVM/Clang实现的框架包含跨过程读写分析、单过程异步性分析、数据流流分配算法和转换框架四部分。实验表明,在P100、A4000、A100 GPU上平均加速比达1.49x、1.63x、2.02x。

  
要查看此由 AI 生成的摘要,您必须具有高级访问权限。

摘要

摘要

在 CUDA 编程模型中,默认流上的数据传输是同步的,同样地,在默认流上启动的设备内核无法与其他内核计算和数据传输重叠。可以使用 CUDA 中的异步 API 和流来启用重叠执行。然而,使用它们需要仔细处理多个数据传输调用、主机操作和内核计算之间的数据依赖关系,以确保程序的正确性。此外,程序中的大量数据传输调用和内核调用使得为每次调用手动分配适当的流标识符变得更加困难。对于非专家程序员来说,这一挑战仍然很艰巨,因为他们缺乏正确的工具和专业知识。
为了解决这个问题,我们提出了 sync2async,这是一种新颖的优化技术,它通过分配流标识符(并在适当的位置添加流同步)将同步数据传输和内核启动转换为非默认流的异步调用,从而在保持依赖关系的同时最大化并行性。为了识别 sync2async 的机会并应用转换,我们引入了 StreamAlloc,这是一个基于数据流分析的框架,包含四个组件:(1)过程间组合读写分析,用于识别在调用点被读取和写入的变量;(2)过程内流敏感的 Can-Run-Asynchronously (CRA) 分析,用于检测可以异步运行的数据传输和内核调用;(3)数据流流分配 (DFSA) 算法,用于将这些异步调用调度到不同的非默认流;(4)一个转换框架,用于应用 sync2async 并自动优化输入程序。我们使用 LLVM/Clang 实现了 StreamAlloc。在 P100、A4000 和 A100 GPU 上,sync2async 分别相对于基线实现了 1.49 倍、1.63 倍和 2.02 倍的平均加速比。

AI 摘要

AI 生成的摘要(实验性)

此摘要是使用自动化工具生成的,并非由文章作者撰写或审核的。它旨在帮助发现、帮助读者评估相关性,并协助来自相关研究领域的读者理解这项工作。它旨在补充作者提供的摘要,后者仍然是论文的主要摘要。完整文章是权威版本。点击此处了解更多

点击 此处 对此摘要的准确性、清晰度和实用性进行评论。这样做将有助于改进和未来重新生成的版本。

要查看此由 AI 生成的通俗语言摘要,您必须具有高级访问权限。

相关新闻
生物通微信公众号
微信
新浪微博
  • 搜索
  • 国际
  • 国内
  • 人物
  • 产业
  • 热点
  • 科普

热点排行

    今日动态 | 人才市场 | 新技术专栏 | 中国科学人 | 云展台 | BioHot | 云讲堂直播 | 会展中心 | 特价专栏 | 技术快讯 | 免费试用

    版权所有 生物通

    Copyright© eBiotrade.com, All Rights Reserved

    联系信箱:

    粤ICP备09063491号