FPGA 的并行度如何?

Posted

技术标签:

【中文标题】FPGA 的并行度如何?【英文标题】:How parallel are FPGAs? 【发布时间】:2021-08-26 02:49:35 【问题描述】:

我为 GPU 世界而来。当我向 GPU 提交要处理的 1024x1024 像素的图像时,我知道 GPU 上没有并行运行的 1048576 个线程。如果 GPU 的 wavesize 是 64,那么 64 个线程是真正并行运行的。然后许多这些wavesizes 也并行运行。我想说的是,GPU 可以真正并行运行其所有线程的流处理器同时运行。这范围从几百到 10K。对于 1024x1024 的图像,具有 10K 线程的 GPU 必须以串行方式运行 100 个并行工作负载块,每个块包含 10K 线程。 (为了示例而简化它。实际上 GPU 对工作负载执行非常复杂的管理。但我简化了很多,可以举一个例子来说明我的意思。)

我可以在 FPGA 上运行多少个真正的并行线程。我是说真的。让我们来看看英特尔 AVX 技术的 SIMD。我可以在 FPGA 中编程的最大 SIMD 寄存器是多少?

我将设备时钟的支持/附加滴答留在这个问题之外。假设我准备 100 万个线程并行运行。但我还没有并行运行它们,我只是在准备数据。例如,我什至会过时一些线程的执行流程,直到它们还没有准备好。所有 100 万个线程。然后我需要执行 AND 操作。而且我希望在时钟的一个滴答声中并行发生尽可能多的 AND 操作。在程序的某个时刻,我希望一个刻度线尽可能多地并行运行 AND 操作。我可以在 FPGA 上并行运行 100 万个 AND 吗?为了这个例子,我们假设 FPGA 足够大。

【问题讨论】:

欢迎来到 Stack Overflow。请通读Help Center > Asking 部分,并确保您的问题遵循指南,因为这将使您在本论坛中获得最大的成功。 我投票结束这个问题,因为这个问题是关于一般技术的,而不是特定于编程的。 您可以通过查看网上众多 FPGA 教程中的一些来深入了解 FPGA 技术。简而言之,FPGA 仅由具有可编程连接和操作的触发器和门组成,因此您可以根据需要将 FPGA 编程为并行。所以这个问题就像问“晶体管有多平行”? @MortenZilmer 感谢您的最后回答!我没有时间研究互联网上的每一项技术。我只需要知道这一点来决定它是否值得进一步阅读。因为我的算法是高度并行的。在我自己看来,我认为在开始阅读英特尔数千页长的手册之前询问是否可以用 ASM 编程语言编写自修改代码是合适的。在这种情况下,能够编写自修改代码是我主要关心的问题。在我自己看来,我所做的事情是恰当的。 @MortenZilmer,如果我不小心违反了詹特法的某些规则,我非常抱歉。 【参考方案1】:

FPGA 实际上是门、触发器、内存和接口的集合,我将它们统称为资源。根据供应商的不同,有各种架构和设备尺寸提供不同数量的资源,从而改变价格点。我们谈论的设备可能小至数百个门或触发器,而没有内存的设备具有数十万个触发器和兆位内存。

资源规模将决定您的最终并行化规模。您需要确定单个处理实例在内存、触发器、门等方面需要多少资源。单个实例资源计数可以用作与特定设备的总资源计数的比率的分母。在实践中,FPGA 变得越难合成,它们越完整,所以这将是一个需要考虑的调整。到目前为止,计算如下所示:

                            (total resources - reserved resources)
total_parallel_instances =  ______________________________________
                                single_instance_resource

您还会观察到与并行化相关的其他限制,这些限制会影响关于可以实际实现的并行化级别的最终答案。

您询问可以运行的 AND 数量。如果一个 FPGA 有 100 个逻辑块,并且每个块有 2 个可配置的门,可以实现为 AND,那么你可以有 200 个 AND 门。如果这对于特定应用来说还不够,可以选择具有更多逻辑块的更大设备。这里真正的限制因素是您可以在设备上花费多少以及您可以负担多少电路板房地产。如果成本和空间不是一个因素,如果需要,您可以拥有数百万个 AND。

在谈到您作为 FPGA 架构师的问题时,我会指出 FPGA 设备必须与您的整个系统连接。如果这是 x86 系统的一部分,最传统的机制将是 PCIe 接口。您的设计可能会有所不同,但这是一个重要的限制因素。您的数据输入和输出速率受您的接口限制,因此根据您的设计,您的并行度不需要大于接口可以支持的值。此外,您必须考虑处理需要多长时间。

假设处理机制的单个实例需要 100 个时钟的处理时间才能获得结果。将数据移入处理器所需的时间是 50 个时钟。因此,可以在处理一个数据包所需的时间内传输 2 个数据包。放弃任何其他低效率,只需要 2 个处理实例来跟上接口。在这种情况下添加第三种处理机制会导致闲置的处理实例在大约 33% 的时间里挂起。

处理分组数据的并行机制可以/可能使用基于 DMA 的技术将信息移入和移出 FPGA 设计。存在与该 DMA 引擎和软件相关的开销。相对于数据大小,该开销也会影响接口数据速率,并且每次 DMA 传输开始时都会观察到。将一堆数据捆绑在一起,可以在一次传输中提供多个并行 FPGA 处理实例,只会导致一次开销,从而提高效率。

话虽如此,你会发现如果你移动的数据非常小,开销足够高,处理时间足够短,你会发现在软件中完成这项工作实际上更快。但是,如果处理时间相对于传输开销来说较长,那么并行规模将更有优势。

【讨论】:

感谢您的回答!

以上是关于FPGA 的并行度如何?的主要内容,如果未能解决你的问题,请参考以下文章

如何查询oracle 数据库并行度

Flink 实战系列如何给 Flink 任务设置合理的并行度?

Flink并行度可以有如下几种指定方式

2021年大数据Flink(四十三):扩展阅读 关于并行度

Flink并行度

Flink并行度