在oneAPI中有效地共享FPGA资源

构建蝶形交叉条开关以解决FPGA中的资源共享问题

共享的资源 问题

FPGA卡通常有许多高性能的存储器和I/O接口。

大型FPGA,如英特尔的Stratx 10和Agilex系列,具有大量的I/O接口。BittWare提供的卡通过提供QSFPs、PCIe、板载DDR4和GDDR6内存和扩展端口等功能来利用这些接口。我们也有以FPGA为特色的卡,并配有HBM2。

访问所有这些接口并不简单,特别是在需要在多个内核之间共享资源的时候。除了基本的存储器控制器,FPGA没有内置的缓存或仲裁逻辑--仲裁是用户的责任。

我们对共享资源问题的解决方案

创建一个 横杠开关在FPGA逻辑中

我们使用英特尔® oneAPI构建了一个蝶形交叉条交换机。

  • 通过使用oneAPI这个高级工具,而不是低级别的RTL,我们得到了一个 易于配置的的解决方案,并且 容易优化适应不同的用途
  • 我们的目标是 520N-MX卡;该代码可以在其他BittWare卡上使用oneAPI

在多个内核和多个接口之间共享连接的一个解决方案是一个交叉条开关。当然,这可以使用FPGA本地编程来创建。然而,如果我们使用像oneAPI这样的高级编程语言,我们可以很容易地根据所需的连接数和接口的宽度对其进行优化,使其尽可能地高效。

BittWare Butterfly Crossbar Switch是在我们的520N-MX卡上开发的,它具有HBM2内存和多个网络端口。

 

为什么使用横杆?

横梁是一组排列成矩阵的开关。它减少了一组输入/输出之间的连接要求。

开关:

多路复用器:所有的输入/输出都相互连接。

带横杆开关

交换机使用较少的连接路由信号。

在FPGA中,更少的连接=更容易布线,更高的时钟频率和更好的性能

横梁式开关有多种类型

两个例子是全横杠和蝶形:

完整的横杆:

矩阵等于输入的数量乘以输出的数量。

蝴蝶横杆

矩阵大小为N x log2(N) / 2,其中N为输入数。

我们选择Butterfly是因为它使用较少的FPGA资源。然而,在某些情况下,它的吞吐量会降低。

更多细节:

BittWare的蝶形横梁开关

  • 例如:8个输入到8个输出的横梁
  • 在端口路由0-2和2-3上发生冲突的例子
  • 仲裁使用一个简单的乒乓方案,尽管如果需要,可以很容易地实施更复杂的方案
播放视频
点击图片,对端口路由0-2和2-3的例子冲突进行动画处理。

在这个蝶形横梁的例子中,8个输入被路由到8个输出,只用了12个开关。每个开关有两个输入和两个输出。数据被直接路由或被切换到相反的路由。

如果只有一条路径被切换,那么在输出端可能会出现冲突,交换机必须对谁有权限访问该路径进行仲裁。仲裁默认使用一个简单的乒乓方案,尽管如果需要,可以很容易地实现更复杂的方案。

使用高级别设计工具(oneAPI DPC++)。

通过利用高级语言(DPC++),可以为特定的应用要求定制横梁开关--例如:

  • 并行内核的数量(输入端口)。
  • 数据路径的宽度
  • 同一设计中的多个不同横梁

这使得设计可以针对资源进行优化。通过消除对始终处于活动状态的内置通用开关的需求,将功率保持在最低水平。

使用oneAPI工具(DPC++和SYCL)。

  • 每个横梁开关都是一组独特的开关内核
  • 交换机通过SYCL管道连接,创建一个具有所需端口数量的横梁
  • 每个开关的宽度是由所需的数据类型暗示的
  • 端口的数量必须是2的幂
    • 未使用的端口在综合过程中被优化掉
  • 数据类型必须继承包含目的地信息的开关元数据结构
  • 使用SYCL管道方法访问端口,根据需要采用阻塞或非阻塞方式

在DPC++中使用Crossbar

BittWare的横梁开关的三个使用案例

网络处理|HBM2的内核共享|分布式图形处理

用例1:

网络处理

在oneAPI中与IO接口对话

oneAPI抽象化了主机和FPGA之间的接口。带有外部I/O的接口(如图中的QSFPs)也使用oneAPI I/O管道进行抽象化。这使得设计可以扩展到多个支持oneAPI的BittWare FPGA卡。

交叉条开关可以用来引导数据包进入或离开网络端口。在这里,对DCP++代码的一个小修改将仲裁改为在网络包的边界上。

用例2:

HBM2的内核共享

(以Ethereum区块链挖矿为例)

通过Crossbar Switch,我们可以优化那些需要共享访问HBM2内存通道的内核。

这方面的一个用例是开采Ethereum。

  • 以具有竞争力的性能挖掘以太坊需要多个并行内核,每个内核都可以访问一个称为DAG的大(目前为4.5GB)内存空间。
  • 以太坊挖矿的瓶颈是内存带宽,因此,封装式HBM2对尺寸和带宽要求都非常合适。

英特尔Stratix 10 MX FPGA有32个独立的HBM2存储器端口。

  • 每个端口的峰值吞吐量为12.8GBytes/秒。

  • 每个端口只能访问512MBytes的内存

  • 总共16GBytes

然而,FPGA没有内置的开关,加上高层工具不能自动串联或仲裁多个端口。

我们的横梁式交换机可以解决这些问题以提高性能。

共享8个HBM存储器的例子

没有横梁:大量路由使用多路复用方法(无仲裁)。

我们的Butterfly Crossbar交换机减少了路由并增加了仲裁,以获得更高的性能。

用例3:

分布式图形处理

  • 大图需要大量的内存资源,分布在多个FPGA上。
  • 十字架开关是一个优雅的解决方案,用于在内核本地和关闭设备之间进行通信。
  • 图谱处理有很多应用
    • 生物学、社会媒体、金融和其他许多方面

总结

  • FPGA具有独特的能力,在有效使用方面可能很复杂,也很有挑战性
  • BittWare的Butterfly Crossbar Switch IP提供了一种简单的方法来提供多个存储器或IO接口之间的共享访问,简化了其中的一些复杂问题。
  • 高级语言,如DPC++,使这种IP可以很容易地为不同的使用情况而定制。

索取源代码

你可以通过填写这个表格来申请BittWare Butterfly Crossbar Switch。我们的销售团队将与你联系,进行下一步的工作,接受许可协议,并设置登录,下载代码。

"*"表示必填项目

名称*
请检查这是一个有效的电子邮件,因为PDF将使用这个地址发送。
地址和城市*