RISC-V LinuxBetaOPEN SILICON. SHARED KNOWLEDGE.

通过即时数据转换实现可编程数据布局

Conceptual illustration of open software layers above a circuit board
AI-generated editorial illustration.

技术分析

摘要

本文介绍了一个软硬件协同设计框架,包括数据转换语言 (DTL) 和数据转换单元 (DTU),旨在解决由逻辑数据访问模式与物理内存布局不匹配引起的性能瓶颈。DTL 允许程序员表达复杂的数据布局重组,编译器将其转换为硬件配置。DTU 是一个位于末级缓存 (LLC) 和主内存之间的硬件引擎,它即时透明地评估这些配置,将分散的数据元素收集到密集、逻辑上连续的缓存行中。这种方法通过将布局转换转换为虚拟视图,消除了软件中显式数据具体化的需要。在 FireSim 中使用四核 RISC-V SoC 进行评估,DTU 在执行速度和内存效率方面取得了显著提升。

核心要点

  • 引入了一种形式化抽象,将逻辑数据访问与物理内存布局解耦,从而实现可编程的转换地址映射。
  • 设计并实现了数据转换单元 (DTU),这是一个即时构建可编程缓存行的硬件引擎。
  • 开发了数据转换语言 (DTL) 及其编译器基础设施,以表达和实现转换映射。
  • 在 FireSim 中的 RISC-V SoC 上提供了完整的系统实现和评估,展示了其在各种工作负载下的实用性和有效性。
  • 通过消除显式数据具体化和提高缓存局部性,在执行速度和内存效率方面取得了显著提升。

技术细节

  • DTU 是一个用 Chisel HDL 编写的硬件模块,逻辑上位于 LLC 和主内存之间,在可配置的“影子范围”内拦截内存请求。
  • 它将单个缓存行请求转换为对单个数据项的多次主内存访问,然后将它们重新组装成一个缓存行。
  • DTU 中的地址生成单元 (AGU) 由一个展开单元(使用魔术除法算法实现 L^-1 以进行逻辑坐标恢复)和一个 AGU 数据路径(实现 F 和 N 以进行位置地址生成和坐标推进)组成。
  • DTL 是一种具有 C 语言风格语法的领域特定语言,用于定义布局转换内核,隐式指定 L、L^-1、N 和 F 函数。
  • DTL 编译器将内核转换为硬件配置,包括用于展开单元的魔术常数和用于 AGU 数据路径的路由配置,支持 +、-、* 和 nop 等运算符。
  • 该系统包括一个操作系统 DTU 驱动程序和一个用户空间应用程序库,为内存管理和访问转换后的逻辑对象提供转换句柄。
  • 通过影子物理地址 (SPA) 重映射来维护一致性,为更新后的基对象分配新的 SPA 区域,以避免陈旧缓存行而无需显式失效。

影响与意义

  • 该框架有效地将数据布局与计算解耦,允许应用程序以最佳逻辑布局访问数据,而无需修改现有计算内核。
  • 消除了软件中显式数据具体化的开销,减少了数据移动、内存占用和执行时间。
  • 通过向应用程序提供具有理想数据局部性的密集打包缓存行,提高了缓存效率和整体性能。
  • 通过提供灵活的数据视图,支持开发硬件辅助系统,例如混合事务/分析处理 (HTAP) 引擎。
  • DTU 的可编程性允许广义的缓存行构建,克服了先前即时转换引擎的领域特定性限制。

局限性

  • DTU 流水线本身的结构延迟范围为 13 到 27 个周期,具体取决于活动的 DTL 内核,这增加了内存访问延迟的开销(尽管相对于 DRAM 访问来说很小)。
  • “img_aug”基准测试显示 DRAM 流量增加,表明 DTU 可能会为单个缓存行大小传输单元内已有的元素生成多个 DRAM 请求,这可以通过更积极的请求合并来缓解。
  • 用于一致性的 SPA 重映射会产生更新页表条目、使 TLB 条目失效、重新获取数据和 MMIO 写入的非平凡成本,尽管这些成本在基于阶段的访问模式中可以摊销。
  • 影子 PA 空间是有限的,虽然在实践中不太可能发生,但由于回绕导致的地址范围重用将需要缓存刷新,从而产生开销。
  • 当前的 DTL 实现和目标基准测试在 F 函数中支持有限的运算符集合({+、-、*、nop}),这限制了在硬件中高效实现的功能类别。

Read next

Explore all articles →