首页 > 解决方案 > FPGA 的并行度如何?

问题描述

我为 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 足够大。

标签: parallel-processingfpga

解决方案


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 处理实例,只会导致一次开销,从而提高效率。

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


推荐阅读