FPGA位置和路线软件运行太快了,没人说过。事实上,FPGA供应商已经花费了相当大的努力,使他们的设计软件在多核处理器上运行得更快。最近在ACM FPGA 2022会议上发表的一篇题为“RapidStream: FPGA HLS设计的并行物理实现”的论文描述了一种非常有趣的方法,可以更快地通过运行在多核处理器上的FPGA设计软件推动HLS设计。这篇论文由加州大学洛杉矶分校、AMD-Xilinx、根特大学和康奈尔大学的一大研究团队撰写,描述了RapidStream,这是一种自动分区算法,它将数据流设计分割成多个“岛”,在分割的岛之间插入注册的“锚区”,然后通过将来自每个岛的信号路由到锚区寄存器来缝合整个设计。
所有这些分区和拼接背后的目的是将HLS设计切割成小块,可以传递给现代服务器中的许多核心。这是工程师们使用了几个世纪的古老的分治策略,现在被用于加速FPGA的开发。
这个过程有三个hls级别的主要约束:
- 非重叠分区——为了并行化不同岛的物理实现,每个岛必须包含一个唯一的、不重叠的设计分区。
- 管道化的岛间连接——每个岛间连接都是管道化的,以满足定时并实现定时关闭。
- 直接相邻连接-每个岛屿只能与紧邻的岛屿有直接连接。这个约束在并行设计布局和路由时非常关键。
(注意:这些约束与用于控制逻辑合成的各种约束完全不同。他们的水平更高。)
RapidStream的创建者将数据流设计定义为一组并行处理元素(pe)和一组fifo,这些fifo根据设计的数据流需求将pe彼此连接起来。每个PE在内部可以任意复杂,但它只能通过FIFO接口与其他PE通信数据。如上所述,RapidStream将FPGA结构划分为两种类型的区域:大小相同的岛和位于相邻岛之间的薄列和行中的锚定区域。有趣的是,RapidStream似乎是专门为AMD-Xilinx Virtex UltraScale+ FPGA建造的,这是用FPGA芯片(超级逻辑区域或AMD-Xilinx的“SLRs”)制成的2.5D设备,连接到硅衬底上。Xilinx开创了FPGA的这种构造技术,并已经在几代FPGA中使用了大约十年。这一事实之所以重要,是因为在AMD-Xilinx单反相机之间有一个自然的分区,而RapidStream似乎是专门编写的,其算法是专门考虑这种单反相机物理分区的,如下图所示,摘自FPGA 22论文。
RapidStream将HLS设计划分为包含处理元素(PEs)的岛和在通信岛之间提供FIFO通信寄存器的锚定区域。
当你将HLS中描述的数据流设计提供给RapidStream时,它使用三相过程对设计进行划分:
阶段1:将HLS数据流设计切割成大致相等的分区(或pe),以适应预定义的岛。RapidStream利用数据流设计的弹性,确保每个岛间(或pe间)连接都通过锚寄存器进行管道连接,这确保分区设计的时序将提供并行放置和路由所需的隔离。
阶段2:放置和布线不相交的岛和插入锚寄存器。Rapidstream在这个阶段使用了一个简单的距离驱动的放置算法,与标准FPGA放置器相比,它实现了类似的时间质量,但它运行得更快。此外,每个PE岛可以由不同的处理器核心放置和路由,因为它们在分区期间是相互独立的。一个时钟管理方案确保时钟倾斜在岛屿之间是一致的,当他们被路由和后来缝合在一起。这一步避免了拼接后违反hold规则。
阶段3:通过预先放置的锚寄存器将放置和路由的岛缝合在一起。由于上述约束1,岛间连接被锚定,因此缝合器只需要将每个岛路由到其周围的锚点,然后再路由到相邻的岛。这个方案极大地简化了拼接任务,除了设计的全球时钟,这是一个扇形的全球网络,覆盖所有岛屿。
当然,我已经浏览了很多细节。你可以从报纸上得到这些。真正的问题是,“这个想法的效果如何?”答案是:很好。
这篇论文包含了几个图表,描述了RapidStream的工作情况。第一个图表显示了六种不同的数据流设计在分区后实现的时钟速率,并与相同设计的管道和非管道版本在没有分区的情况下进行了比较。
与流水线但没有分区的设计相比,RapidStream分区提高了6个RTL设计中的5个的时钟速度。
RapidStream结果是蓝色条,它显示了比这些设计的所有非分区、非管道版本更快的时钟速率。这是你所期望的结果。流水线是FPGA设计中提高时钟速度的核心。然而,在这六种情况中,有五种情况下,RapidStream的结果要优于相同设计的流水线RTL版本。这个结果应该引起你的注意。
接下来,这里是本文的地点和路线计时结果:
与管道或非管道、非分区设计相比,RapidStream提高了六种RTL设计中的六种的位置和路线运行时间。
RapidStream的位置和路由运行时结果比未分区设计的结果要好得多。同样,这是因为RapidStream可以将每个分区交给不同的处理器核心进行放置和路由。虽然FPGA供应商试图让他们的位置和路由算法在多核处理器上更快地工作,但RapidStream的开发人员根据经验发现,如果FPGA设计没有被划分,那么在运行AMD-Xilinx Vivado设计套件工具时,超过两个处理器核(更准确地说是2.1个处理器核)并没有太大的好处。
到目前为止,如果您正在使用fpga(特别是AMD-Xilinx fpga)开发HLS设计,您应该会对RapidStream产生兴趣。您可以在其上找到关于RapidStream项目的更多信息GitHub页面.
使用Flowpro并行计算机,所有对象和任务都已经在设计的源级被请求。看起来像Flowpro这样的真正的并行衬底机可以很容易地利用多核合成。