模拟的推测。 验证创新

模拟的推测。 验证创新

源节点: 2547459

这是一个有趣的想法,使用硬件支持的推测并行性来加速模拟,但需要定制硬件。 Paul Cunningham(高级副总裁/总经理,Cadence 验证)、Raúl Camposano(硅催化剂、企业家、前 Synopsys 首席技术官和现任 Silvaco 首席技术官)和我继续我们的研究理念系列。 一如既往,欢迎反馈。

模拟推测

创新

本月的选择是 Chronos:加速器的高效推测并行性. 作者在 2020 年编程语言和操作系统的架构支持会议上发表了这篇论文,他们来自麻省理工学院。

使用多核处理器利用并行性是并行性不言自明的应用程序的一种选择。 其他算法可能不会那么容易分区,但可能会受益于利用内在并行性的推测执行。 通常,推测执行取决于缓存一致性,这是一个高开销,尤其是对于模拟而言。 这种方法绕过了对一致性的需求,物理定位任务执行以通过目标读写对象计算瓦片,确保可以在本地检测到冲突检测,而不需要全局一致性管理。 任务可以推测性地并行执行; 检测到的任何冲突都可以通过其子任务从任务展开,然后重新执行而无需停止其他线程。

这里还有一点要注意。 与大多数硬件加速技术不同,此方法支持基于延迟的仿真。

保罗的观点

哇,麻省理工学院的一篇精彩的高辛烷值论文! 当被问及并行计算时,我会立即想到线程、互斥锁和内存一致性。 这当然是现代多核 CPU 的设计方式。 但这并不是支持硬件并行化的唯一方法。

本文提出了一种称为 Chronos 的并行化替代架构,它基于有序的任务队列。 在运行时,任务按时间戳顺序执行,每个任务都可以创建动态添加到队列中的新子任务。 执行从将一些初始任务放入队列开始,并在队列中没有更多任务时结束。

队列中的任务被并行地外包给多个处理元素(PE)——这意味着 Chronos 在当前任务完成之前推测性地执行未来的任务。 如果当前任务使任何推测执行的未来任务无效,那么这些未来任务的操作将被“撤消”并重新排队。 在硬件中正确实现这个概念并不容易,但对于外部用户来说它很漂亮:您只需编写算法代码,就像任务队列在单个 PE 上串行执行一样。 无需编写任何互斥锁或担心死锁。

作者在 SystemVerilog 中实现 Chronos 并将其编译到 FPGA 中。 大部分论文都致力于解释他们如何实现任务队列以及任何必要的硬件展开以实现最大效率。 Chronos 以四种算法为基准,非常适合基于任务队列的架构。 每个算法都以两种方式实现:首先使用专用算法特定的 PE,其次使用现成的开源 32 位嵌入式 RISC-V CPU 作为 PE。 然后将 Chronos 性能与在英特尔至强服务器上运行的算法的多线程软件实现进行比较,其价格标签与用于 Chronos 的 FPGA 相似。 结果令人印象深刻——Chronos 的扩展性比使用 Xeon 服务器高 3 到 15 倍。 然而,将表 3 与图 14 进行比较让我有点担心,这些收益大部分来自特定算法的 PE,而不是 Chronos 架构本身。

鉴于这是一个验证博客,我自然而然地放大了门级仿真基准。 EDA 行业已投入大量资金来尝试并行化逻辑仿真,事实证明,除了少数特定用例之外,很难看到大的收益。 这主要是由于大多数真实世界模拟的性能主要由 L3 高速缓存中丢失的加载/存储指令主导,并传出到 DRAM。 本文中只有一个基准测试用例,它是一个微型 32 位进位保存加法器。 如果您正在阅读此博客并且有兴趣做一些更彻底的基准测试,请告诉我——如果 Chronos 真的可以在现实世界的模拟中很好地扩展,它将具有巨大的商业价值!

劳尔的观点

这篇论文的主要贡献是 空间定位有序任务 (SLOT) 执行模型 这对于利用并行性和推测的硬件加速器以及在运行时动态生成任务的应用程序是有效的。 动态并行性支持对于模拟来说是不可避免的,推测同步是一个有吸引力的选择,但一致性开销太高。

SLOT 通过限制每个任务对单个对象进行操作(写入)来避免对一致性的需求,并支持有序任务以实现多对象原子性。 SLOT 应用程序是有序的、动态创建的任务,以时间戳和对象 ID 为特征。 时间戳指定顺序约束; 对象 ID 指定数据依赖性,即任务是数据依赖的,当且仅当它们具有相同的对象 ID 时。 (如果存在读取依赖性,则可以推测性地执行任务)。 通过将对象 ID 映射到核心或区块并将每个任务发送到其对象 ID 映射的位置,冲突检测成为本地(没有复杂的跟踪结构)。

柯罗诺斯 系统在 AWS FPGA 框架中实现为具有 16 个块的系统,每个块具有 4 个应用程序特定处理元素 (PE),运行频率为 125MHz。 该系统与由 20 核/40 线程 2.4 GHz Intel Xeon E5-2676v3 组成的基线进行比较,选择后者是因为它的价格与 FPGA 相当(约 2 美元/小时)。 在一个 PE 上运行单个任务,Chronos 比基线快 2.45 倍。 随着并发任务数量的增加,Chronos 实现在 44.9 个区块上扩展到 8 倍的自相关加速,对应于 CPU 实现的 15.3 倍加速。 他们还比较了基于通用 RISC-V 而不是特定应用 PE 的实现; PE 比 RISC-V 快 5 倍。

我发现这篇论文令人印象深刻,因为它涵盖了从概念到 SLOT 执行模型的定义,再到硬件的实现以及与用于 4 应用程序的传统至强 CPU 的详细比较的所有内容。 付出的努力是巨大的,Chronos 有超过 20,000 行 SystemVerilog。 结果是(5.4 个应用程序的)平均加速比软件并行版本高出 4 倍,这归因于更多的并行性和对推测执行的更多使用。 该论文也值得一读以应用于非模拟任务; 该文件包括三个例子。

通过以下方式分享此帖子:

时间戳记:

更多来自 半维基