推广 热搜: 可以  搜索引擎  page  企业  百度  个数  使用  选择  音视频  行业 

论文精读-CHARM Composing Heterogeneous AcceleRators for MatrixMultiply on Versal ACAP Architecture

   日期:2025-01-02     移动:http://ww.kub2b.com/mobile/quote/11765.html

优点

1、使用较小尺寸的acc来减少小型mm(矩阵乘法)机的浪费,使用较大尺寸的acc来最大限度地提高大型mm机的数据重用。(填充是在大型加速器上实现小型MM操作的一种常见而简单的方法,但填充既会浪费计算量,也会浪费带宽。)小acc意味着更少的数据重用。

2、通过协同优化工作负载和资源分区,仔细重叠这些acc的执行时间

3、设计空间探索(DSE),自动CHARM DSE(CDSE),基于排序的两步搜索算法CDAC,以多项式时间复杂度而不是指数时间复杂度找到优化的CHARM设计。(为了在多个访问上映射不同大小的MM内核时实现整体最优吞吐量。

4、使用自动代码(PL,AIE,CPU)生成

5、在主机CPU中启动CHARM运行时系统(CRTS),该系统将不同的内核调度到访问(因为多acc计算,需要内核调度,以优化任务延迟和总体系统吞吐量。

密集矩阵乘法(Dense matrix multiply, MM)是深度学习应用中使用最多的核函数之一。为了应对这些应用的高计算需求,具有FPGA和专用ASIC加速器的异构架构已经成为有前途的平台。例如,AMD/赛灵思通用ACAP架构结合了通用CPU内核和可编程逻辑,以及针对AI/ML优化的AI Engine处理器。由400个AI Engine处理器组成的阵列以1ghz的频率运行,可为32位浮点(fp32)数据提供高达6.4 TFLOPs的性能。然而,机器学习模型通常同时包含大型和小型MM操作。 大型MM操作可以跨多个核心高效并行化,但小型MM操作通常不能。 我们观察到,在通用ACAP中的大型单片MM加速器上执行来自BERT自然语言处理模型的一些小MM层,获得的性能不到理论峰值的5%。因此,一个关键问题出现了:我们如何设计加速器,以充分利用有限通信带宽下的丰富计算资源,用于具有多个不同大小MM层的端到端应用?

我们确定了由于单个单片加速器的大量计算资源与应用中各种小尺寸MM层的不匹配而导致的最大系统吞吐量瓶颈。为了解决这个问题,我们提出了CHARM框架来组合多个不同的MM加速器体系结构,在一个应用程序中并发地针对不同的层工作。CHARM包括指导设计空间探索的分析模型,以确定加速器分区和层调度。为了方便系统设计,CHARM自动生成代码,从而实现彻底的板载设计验证。我们在四种不同的深度学习上部署了CHARM框架应用程序,包括BERT, ViT, NCF, MLP,在AMD/赛灵思通用ACAPVCK190评估板。实验表明,我们在BERT、ViT、NCF、MLP上分别实现了1.46 TFLOPs、1.61 TFLOPs、1.74 TFLOPs和2.94 TFLOPs的推理吞吐量,与单片加速器相比,分别获得了5.29倍、32.51倍、1.00倍和1.00倍的吞吐量增益。

密集矩阵乘法(MM)是许多深度学习工作负载中最常用的内核之一,包括用于自然语言处理的BERT[1],用于推荐的NCF[2],用于视觉分类的ViT[3],以及用于多层感知器分类或回归的MLP[4]。根据谷歌[5]的分析结果,2017年谷歌数据中心密集矩阵乘任务占据了90%的神经网络(NN)推理工作量。这些应用的日益复杂导致了对计算和数据移动的极端需求。

片外带宽一直是系统性能和能效的瓶颈,当前平台上的一个共同趋势是片外带宽的扩展速度不如计算资源的扩展速度
快。因此第一个研究问题出现了:如何在扩展较慢的片外带宽下维持更快的扩展计算?

常见的解决方案是通过在加速器(acc)内分配更多的片上存储来增加数据重用。如[9]中的渐近分析所示,MM中的总片外通信体积尺度为O(√1),其中M为片上瓦片大小。如果我们增加M贴片大小,我们可以减少总通信量,从而减少片外带宽的压力。

在这项工作中,我们的目标是AMD/赛灵思通用ACAP架构[10],它将通用CPU内核和可编程逻辑(PL)与针对AI/ML计算优化的AI引擎处理器(AIE)相结合。例如,我们在AMD/赛灵思VCK190板上使用384个ae和超过80%的片上URAM和BRAM资源实现了MM加速器。图1中的红线说明了该加速器的性能。该设计在原生平铺大小为1536×128×1024的情况下运行,在携带大型方形MM(点a)的平铺执行时实现2.8TFLOPs吞吐量。然而,当简单地将不同大小的MM映射到这样的设计时,随着方形MM大小降至512以下,性能显著下降,因为每个贴片都被填充到加速器的原生贴片大小。例如,在B点,这样的单片设计的性能达到0.41 GFLOPs,比a点低6880倍。虽然填充是在大型加速器上实现小型MM操作的一种常见而简单的方法,但填充既会浪费计算量,也会浪费带宽

填充的另一种替代方法是实现具有较小原生贴图大小的多个加速器,可以在每个加速器上并行执行不同的任务[11]。我们使用8个独立的加速器来应用这种方法,它们的原生贴图大小为256×128×256,如图1中的蓝色虚线所示。对于大小为64的小正方形MM操作,该方法在C点实现7.2 GFLOPS,与B点相比大约加快了17倍。然而,较小的加速器尺寸也意味着更少的数据重用用于大型MM,当可以参考表5时,操作规模大于256。当MM尺寸为3072 (D点)时,在一个单片设计中,8个重复accs的总吞吐量比A点小4.08倍。

这些实验暴露了两个相互冲突的设计目标。
1、我们希望实现具有足够数据重用的大型MM操作,以在设备上实现尽可能高的性能。
2、我们希望实现小型MM操作,同时最小化计算和通信开销。
这两种简单的设计似乎都无法同时实现这些设计目标。

因此第二个研究问题就出现了:对于大小尺寸的MM层共存的现实世界端到端应用,如何在这两个设计目标之间进行权衡?

为了说明这些相互冲突的设计目标如何影响实际机器学习模型的性能,我们将BERT[1]视为包含大小MM层的代表性工作负载。在BERT的一个变压器层中,共有8种MM核,其中核0-5为大mm机,核6和7为批点,即小mm机。详细的形状如图2所示。

总吞吐量几乎饱和。以内核5和内核6为例,内核5是一个形状为3072×1024×4096的MM,内核6是一个形状为96×512×512×64的批处理点,这意味着有96个大小为512×512×64的小型独立mm机。

如图2所示,当使用一个单片MM加速器时,内核0-5消耗了总BERT MM计算操作的92%和总MM计算时间的12%。相比之下,内核6-7只消耗了总操作的8%,却占用了总调度时间的88%。对于内核0-5,它们位于区域A(一个执行类似于图1中的点A的区域),其中acc的吞吐量大于2082 GFLOPS。对于内核6-7,它们位于区域B,其中acc的吞吐量仅为23.6 GFLOPS。考虑到在时间轴中有很大一部分acc执行未被充分利用,总体MMacc吞吐量仅为276 GFLOPS。我们能否实现位于a区域的BERT设计,即适合大型mm机,并且也优于C点的区域,即适合小型mm机,具有较少或没有浪费的计算/带宽?

前人工作

总结了我们的工作与之前工作的差异。我们的工作能够从一个单片、多个副本和多个不同的加速器中选择设计,并且每个加速器都是考虑到我们的DSE所涵盖的不同工作负载分配、数据流和数据并行策略的专门设计。

ACAP架构

AIE内存模型

每个AIE处理器包含32kb的数据,并且能够在四个方向上(AIE↔邻居AIE)与相邻的AIE共享数据。除了与相邻块共享本地内存外,每个AIE块还连接到一个轴流(AXIS)交换网络,这使得AIE处理器之间的非本地通信(AIE↔非本地)和通过39个接口块中的plio与PL通信(PL↔AIEs)成为可能。VCK190单板在PL和AIEs之间提供1.2 TB/s(PL↔AIEs) / 0.9 TB/s (AIEs)↔PL的带宽,是DDR4和PL之间带宽的46倍。AXIS交换机支持端口之间的电路交换和包交换连接。电路交换连接提供专用的、确定的通信,并支持广播,其中来自单个输入通道的数据同时传输到多个输出通道。分组交换连接允许来自输入通道的数据根据每个数据包开始时的目的地报头动态路由到不同的目的地。这使得数据流可以在单个路由路径上进行时间复用。当AIE的计算-通信(CTC,计算到通信)比率大于1时,我们可以使用分组交换连接。在计算AIE 0的过程中,分配给这个AIE的端口是空闲的,因此可以通过分配一个与AIE 1的目的ID匹配的不同的报头来将数据传输到另一个AIE,比如AIE1。
(分组交换可以看为是另一种的pingpong)

加速器设计

矩阵分块
多层次数据重用

二、 在PL↔AIE层面,当向数十或数百个AIE馈送数据时,由于连接AIE阵列和PL的PLIO的数量远小于AIE核的总数,我们通过探索数据广播和分组交换(在第3.2节中描述)机制来减少所需PLIO的数量。图4显示了我们如何通过结合广播和分组交换来重用单个PLIO端口。假设我们有一个4×4 AIE数组,它计算大小为1×4×4 (1 MAC/AIE)的MM,并且一个AIE需要一个周期才能获得左侧(LHS)和右侧(RHS)操作数,并且需要四个周期才能完成一次乘法,使CTC比率等于4。通过利用MM中的数据重用机会(例如,LHS行可以由RHS的不同列重用),我们可以利用一个PLIO端口在Time 0将第一个数据从LHS 广播 到AIE阵列的第一行,如实线所示。在时间1,通过指定不同的目标报头,我们可以通过重用相同的PLIO端口将LHS的第二个数据传输到AIE阵列的第二行。在时间2和时间3时,将LHS的第3和第4个数据分别发送到AIEs的第3和第4行。在时间4时,第一行AIEs完成计算,PLIO完成向第四行AIEs的数据传输。因此,在这种情况下,我们可以使用一个PLIO端口将LHS数据发送到16个AIEs,而不会降低性能。



三、 在PL↔DDR中,我们进一步为每个acc分配三组片上缓冲区来存储LHS、RHS和输出矩阵,以便大小为(X×A×TI) ×(Y×B×TK)的LHS块可以在片上重复使用(Z×TJ)次。缓冲区的大小和重用率对于RHS和输出矩阵可以用同样的方法计算。此外,将 双缓冲技术(pingpong) 应用于三个缓冲区,使片外数据移动与计算重叠。通过极大地探索多层次的数据重用机会,我们的系统可以在有限的片外带宽下保持较高的计算效率,即VCK190上的DIMM-DDR4为25.6 GB/s。

简单来说
1、AIE(利用局部性原理,使用本地寄存器和内存资源暂存数据,实现数据重用,在流水线中更常用,因为下一个阶段通常会使用上一个阶段的数据
2、AIE<->PL(广播+分组交换实现矩阵数据重用并节省PLIO
3、PL<->DDR (pingpong双缓冲,计算与片外数据搬运同时进行

CHARM架构

图5演示了CHARM体系结构,在系统中使用一个或多个不同的MM访问,在端到端深度学习应用程序中使用非MM内核的其他内核访问。我们将AIE数组划分为多个MM访问(本例中为两个)。对于每个MM控制器,我们设计了一个专用的DMA模块,该模块包含数据传输控制逻辑和片上缓冲器。不同的AIE分区通过PLIO接口和NOC与相应的DMA模块通信。即AIE阵列及其对应的PLIO+DMA模块作为一个MM模块进行设计。对于每个非MM内核,例如BERT、ViT模型中的转置、softmax和层归一化,我们为PL上的每种类型的内核设计一个acc O侧。每个非MM acc包含DMA、计算逻辑和本地缓冲区。对于这些通信绑定的内核,设计目标是实现接近峰值的片外带宽。在运行这些内核时,由于它们消耗所有的片外带宽,我们选择在MM acc之前或之后依次启动这些非MM和通信绑定的内核。
简单来说,一般的MM计算使用MM模块(DMA+PLIO+AIE)进行计算,而非MM计算(如softmax,LN,Trans)则在PL内部实现相应的逻辑,他有相应的acc IO与DMA通信 (DMA+ACC IO + PL

CHARM框架概述

CHARM框架中有几个模块:

(1)在CDSE之上,CDAC找到具有最高吞吐量的最佳设计,并输出每个acc的可配置设计参数。它还生成一个运行时配置文件,该文件指定针对某个内核应该调用哪个acc。设计空间搜索

(2) CACG以CDAC生成的可配置参数为输入,实现设计,并生成AIEs、PL和主机cpu所需的所有源代码文件。CHARM调用相应的后端工具来生成硬件位流和主机二进制文件。自动代码生成

(3) CRTS以来自CDAC和内核依赖图的运行时配置文件作为输入,调度任务池中的内核到可用的访问上。自动资源配置

CDSE&CDAC

DSE可配置参数:A, B, C, X, Y, z。为了获得每个不同加速器的优化吞吐量,我们设计了CDSE,它将矩阵大小(M, K和N),可选的用户指定硬件约束和硬件平台片外特征数据库作为输入,并执行基于模型的分析搜索。在CDSE期间,我们将单个AIE工作负载设置为32×32×32,即TI=TK=TJ=32。在这个设计点上,我们为MM实现了高达95%的内核效率,利用了75%的AIE本地内存,并获得了4的CTC比率。CDSE的输出是可配置参数,包括满足所有硬件约束的A、B、C、X、Y、Z。参数A、B、C决定了AIE阵列中使用的AIE个数和PLIO个数。X,Y, Z, A, B, C与预先设定的参数TX, TY, TZ一起决定了所利用的片上缓冲区的数量。这个优化问题可以公式化为整数规划(IP)优化问题,如下图所示。AIEnum、PLIOin、PLIOout和On_chipRAM代表用户指定的硬件约束:

AIE-Array平铺选择。 由于{A, B, C}是完全展开并映射到AIE
数组的,因此展开因子A, B, C的乘法应小于或等于公式2中
AIE的总数。分组交换端口的数量由{A, B, C}和第4.2节中描
述的I/O重用机制决定。它们应满足输入和输出PLIO资源约束。输入输出PLIO数可通过:

PL平铺选择。。片上PL缓冲区的分配是为了通过增加数据重用率来分摊片外PL和PL到AIE-Array之间46倍的带宽差距。公式6显示了LHS、RHS、输出缓冲区的大小以及它们的片外到片内通信时间。BPD指的是每个数据的字节数,BW_L、R、O是通过带宽剖析测量的片外带宽。

数据加载时间

总buff*2是因为双缓冲pingpong

性能建模。 为了计算总体执行时间,需要考虑片外到片内的
数据通信调度和AIE阵列计算。所有片上时间循环(即清单1中
的第6行)的计算时间可以由式7定义,其中MAC表示一个AIE
引擎在一个周期内可以完成的实际MAC操作,Eff表示计算内
核实现的实际效率。我们在这里考虑单个AIE和AIE阵列管道的效率(PL↔AIE),并将总效率分配为80%。对于片外到片内调度,如清单1所示,最外层循环的循环顺序TY→TZ→TX,因此LHS和RHS的内存访问时间总共发生TX×TX×TZ次。总的执行时间可以通过公式8来计算。这是一个用于说明目的的方程,我们省略了存储输出所花费时间的公式以及流水线中的序言和尾声时间的细节。

时间复杂度评估

CDAC算法

为了在多个访问上映射不同大小的MM内核时实现整体最优吞吐量,我们提出了一种基于排序的CDAC两步算法。在CDAC的第一步中,我们将输入模型中不同工作负载的MM内核划分为多个组。组的个数等于不同访问的个数,这是CDAC中的一个超参数。在工作负载分区之后,在第二步中,我们生成一个资源分区候选,指定每个加速器的资源预算与分配的MM内核的操作总数成比例。在分配的工作负载和分配的资源下,我们为每个加速器搜索可配置参数(A,B,C,X,Y,Z)的所有有效候选项。然后,我们对内存资源分区进行微调,以生成更多的资源分区候选。在内存微调之后,我们生成一个新的工作负载分区,并重新进行资源分区和可配置参数搜索,进一步优化了所有acc的系统吞吐量。

第一步:工作量分配。 为了提高不同acc架构的整体吞吐量,我们需要将MM内核正确地分配给acc,并使它们在相似的执行时间内并发工作。然而,将具有n个内核的应用程序映射到num个accs会受到指数时间复杂度的影响,因为总映射搜索空间缩放为O(NUM^N))。为了更好地扩展包含更多核的更大模型,即更大的n,我们提出了一种基于排序的算法,将时间复杂度降低的工作负载划分为

(简单来说,就是先将资源平均分配给所有加速器ACC,启动后,通过内存微调来查找消耗时间最多(执行操作最多的)的acc索引,并在下一轮启动时分配给他更多的资源,其他acc同比例减少。直到最优配置。此外还有一个重要提示:资源与分配给acc的操作总数成比例)

CACG

在从CDAC中找到优化设计的硬件设计参数后,我们实现了CACG,包括AIEGen、PLGen和HostGen,生成AIEs、PL和主机CPU的相应源代码。AIEGen以单个AIE (TI,TK,TJ)和AIE阵列(a,B,C)的平铺因子作为输入,实例化相应的AIE核数。它利用基于c++的ADF (Adaptive Data Flow) Graph API[44],通过AXI网络构建AIE内核之间的连接,通过plio构建AIE阵列与PL之间的连接。PLGen使用PL级(X,Y,Z)设计参数生成HLS C/ c++代码,该代码在PL端分配片上缓冲区,并实现数据传输模块,用于向AIE阵列发送/接收数据。HostGen发出基于Xilinx运行时库(XRT) api的主机代码。

代码生成之后,CHARM启动供应商工具,包括AIE编译器和v++编译器,以生成输出对象文件libadf。A和kernel。Xo,它们链接到一个xclbin中,即设计的硬件位流。GCC编译器将基于xrt - api的主机代码编译为在ARM CPU上运行的宿主程序,用于内核调度和系统控制。

CRTS

为了实现高吞吐量,同时在每个任务的依赖约束下保持相对较低的延迟,我们提出了在运行时在ARM CPU上运行的CRTS。算法2列出了调度器算法。它以CDAC生成的依赖图、加速器数量、层赋值配置文件作为输入。

在CRTS中有两个并行进程。

第一个进程继续跟踪,检查是否有任何空闲的访问,我们可以分配任务(第2-3行)。CRTS按照先进先出原则遍历分配给该acc的层(第5-6行)。如果层还在任务池中,就意味着它还没有被发出。假设当前层的所有前一层(s)都已经执行完毕,即解决了依赖关系。在这种情况下,CRTS将这个有效层分配给相应的acc(行7-8),并继续跟踪其他acc(第9行)。

第二个进程跟踪每个acc的状态,看看它是否已经完成了工作负载(行12-13),并根据依赖关系图更新任务池。以及将acc的状态(第14行)更改为空闲状态。

Q:密集矩阵乘法?与稀疏矩阵的区别,在哪些地方用到

A: 密集矩阵乘法

  • 定义:涉及两个密集矩阵(大多数元素是非零的)的逐元素相乘和累加。
  • 计算量:对于两个 的矩阵,传统方法需要 次运算。
  • 应用:用于需要计算整个矩阵元素的场景,如图形变换、物理模拟等。
  • 优化:可以通过分块、缓存优化、并行计算(类似循环展开)等技术提高性能[4]。
  • 算法:Strassen算法和Winograd算法等提供了比传统方法更少的乘法步骤[2][4]。

稀疏矩阵乘法

  • 定义:涉及至少一个矩阵,其中大部分元素是零,这些零元素在计算过程中不需要处理。
  • 计算量:计算量通常远小于密集矩阵乘法,因为许多零元素可以忽略。
  • 存储:稀疏矩阵通常以特殊格式存储,如CSR(Compressed Sparse Row)或CSC(Compressed Sparse Column,以减少存储空间[1][8][9]。
  • 应用:广泛应用于科学计算(如有限元分析)、社交网络分析、Google PageRank算法、电路仿真等领域[8][3][7]。
  • 优化:优化技术包括稀疏性利用、特殊存储格式和算法(如稀疏矩阵向量乘法spmv)[1][8][9]。

性能考虑

  • 密集矩阵乘法通常需要更多的计算资源和内存带宽,但可以通过高度优化的库(如BLAS库)来实现高效计算。
  • 稀疏矩阵乘法在存储和计算上更为高效,但需要特殊的算法来处理稀疏性,以避免访问大量零元素。

实际应用

  • 在深度学习中,密集矩阵乘法是卷积层和全连接层的核心操作,而稀疏矩阵乘法在处理稀疏数据或模型剪枝后的应用中非常有用[5][6][7]。
  • 在GPU优化中,针对稀疏矩阵的存储格式和计算特性,可以设计特定的核函数来提高性能[1]。

Q:Versal系统,Versal异构平台

ersal系统是AMD(原赛灵思公司)推出的一款创新的自适应计算加速平台(ACAP,代表了一种新型的异构计算平台。Versal平台的设计旨在通过其独特的硬件和软件组件,为各种应用提供强大的加速功能。以下是Versal系统的一些关键特点

  • 异构计算引擎:Versal系统结合了标量引擎(Scalar Engines)、自适应引擎(Adaptable Engines)和智能引擎(Intelligent Engines,以实现不同计算任务的优化[10][14]。
  • Versal系列:Versal产品线包括Versal Prime、Versal Premium和Versal AI Core系列,每个系列都针对特定的应用和性能需求进行了优化[11][12][24]。
  • 硬件集成:Versal平台高度集成,采用了TSMC 7纳米FinFET工艺技术,提供了包括多核异构计算平台、片上网络(NoC)、DDR4/LPDDR4存储器控制器等在内的多种硬件资源[8][25]。
  • 软件可编程性:Versal ACAP支持完全的软件可编程性,使得开发者能够通过高级语言如C、C++和Python来开发和优化应用[4][6][5]。
  • 系统设计流程:Versal ACAP的设计流程包括传统设计流程和基于平台的设计流程,后者允许更高效的系统分区和集成[2][4][6]。
  • NoC架构:Versal ACAP采用了片上网络(NoC)来实现不同计算单元和存储器之间的高速连接,这是Versal区别于以往FPGA产品的重要特性[2]。
  • PMC架构:Versal还包括平台管理控制器(PMC,它负责启动、配置和运行时的平台管理[2]。
  • AI引擎:在某些Versal系列中,如Versal AI Edge,包含了专门用于AI处理的AI引擎,这些引擎可以提供高效的机器学习推断能力[9][1]。
  • 应用领域:Versal系统适用于多种应用,包括无线系统、机器学习推断、视频处理算法的信号处理等[1][14][6]。

Versal异构平台的设计理念是将不同的计算资源和存储技术集成在一个统一的系统中,以提供一个灵活、高效且可扩展的计算解决方案,满足日益增长的计算需求,特别是在AI、机器学习、数据中心和5G网络等领域。

Q:ACAP架构

A:A: ACAP(Adaptive Compute Acceleration Platform,自适应计算加速平台
PS+PL

ACAP是赛灵思(Xilinx)在2018年推出的新一代计算平台,旨在提供比传统FPGA更高的性能和灵活性。ACAP的设计理念是将硬件可编程逻辑单元、软件可编程处理器和软件可编程加速引擎整合在一起,形成一个统一的计算平台产品[4][5][1]。

ACAP架构的关键特点包括

  • 异构引擎:整合了标量引擎(Scalar Engines)、自适应引擎(Adaptable Engines)和智能引擎(Intelligent Engines)以适应不同的计算需求[3][7]。
  • AI引擎:特有的AI引擎专门设计用于加速机器学习和无线网络等应用中的数学计算[3][4]。
  • 片上网络(NoC:采用高带宽的片上网络技术,支持高带宽、高吞吐量的应用场景[1][4]。
  • 固化IP:将许多常用的IP固化在芯片上,如PCIe、DDR控制器、以太网MAC等,提高性能和稳定性,并减少对可编程逻辑资源的使用[4]。
  • 可编程逻辑阵列:采用非常规整的可编程逻辑阵列和时钟域分布,提高布局布线后设计的效率[4]。
  • CLB微结构革新:Versal ACAP对其可编程逻辑块(CLB)的微结构进行了重大革新,包括扩大CLB容量和增加查找表结构(LUT)的输出[4]。
  • 软件可编程性:原生支持软件编程,简化了基于C和基于框架的设计流程,简化了开发过程[2]。
  • 动态自适应重配置:能够动态地重配置硬件,实现毫秒间加速新的负载,提供了更高的灵活性[2]。
  • 集成Shell:包括具有集成型DMA、NOC和集成型存储器控制器的高速缓存一致性主机接口,避免了开展RTL工作的要求[2]。
  • Versal系列:Versal是ACAP架构的首款产品,基于台积电的7纳米工艺制造,代表了ACAP架构的实现[14]。

ACAP的设计目标是提供一个灵活、高效且可扩展的计算平台,以满足数据中心、网络、无线通信、边缘计算和端点等不同市场的需求[6][7][8]。通过其创新的架构,ACAP旨在突破5G基础设施性能瓶颈,为开发者提供一个强大的工具,以开发任何应用[6][9]。

Q:一刀切的单片设计

A: “一刀切”的单片设计(Monolithic Design

优点

  • 集成度高:所有功能模块,包括处理器核心、内存、输入/输出(I/O)接口等,都集成在同一个芯片上。
  • 性能优化:由于所有组件都在同一个芯片上,可以实现更低的通信延迟和更高的数据传输速率。
  • 功耗效率:单片设计可以减少不同模块间通信所需的能量,从而提高整体能效。
  • 成本效益:尽管单片设计的初始研发成本可能较高,但大规模生产时,单片解决方案的成本通常低于多芯片解决方案。
  • 尺寸紧凑:单片设计有助于减小最终产品的整体尺寸,这对于便携式设备和空间受限的应用非常重要。
  • 简化设计:单片设计简化了系统的整体架构,有助于减少设计复杂性。(单片避免了片间通信等问题

挑战

  • 设计复杂性:单片设计需要在单个芯片上集成多种不同功能的模块,这增加了设计的复杂性。(多模块集成的复杂性
  • 制造风险:随着芯片尺寸的增加,制造过程中的缺陷率可能会上升,导致良率下降。
  • 调试难度:当所有功能都集成在单个芯片上时,调试和故障排除可能会更加困难。
  • 灵活性限制:单片设计可能缺乏模块化设计所提供的灵活性,后者允许开发者根据需要更换或升级系统中的特定组件。
  • 技术挑战:随着技术节点的不断缩小,单片设计面临着更多的技术挑战,如信号干扰、热管理问题和电源分布问题。
  • 成本风险:如果设计中出现错误,单片设计可能导致整个芯片的报废,而模块化设计可以更容易地替换或修复有问题的模块。

在实际应用中,是否采用单片设计取决于具体的应用需求、成本预算、技术能力和市场策略。例如,对于需要高性能和低功耗的高端应用,单片设计可能是一个合适的选择。而对于成本敏感或技术风险较高的项目,模块化设计可能更为合适。

Q:axi stream支持电路交换和包交换连接?电路交换,包交换,分组交换

A: AXI Stream的关键特点包括

  • 基于数据包:AXI Stream使用数据包(或称为数据流)进行通信,每个数据包包含多个数据字(beat)。
  • 单向通道:AXI Stream协议定义了单向通道,包括发送通道(从发送器到接收器)和接收通道(从接收器到发送器)。
  • 握手信号:使用握手信号(如VALID和READY)来控制数据流,确保数据在发送和接收设备之间同步传输。

关于电路交换、包交换和分组交换

  • 电路交换:这是一种网络通信方式,其中在通信开始之前,两个设备之间建立一个专用的通信路径(电路)。传统的电话网络就是一个例子。电路交换不直接适用于AXI Stream,因为AXI Stream是硬件层面的点对点通信协议,而不是网络层面的通信方式。
  • 包交换:在包交换网络中,数据被分成小的包或数据包,并且每个包独立路由到目的地。互联网就是基于包交换的原理。AXI Stream协议在某种程度上类似于包交换,因为它也是基于数据包的,但仅限于硬件内部通信。
  • 分组交换:分组交换是包交换的另一种术语,特别是在数据网络中。在分组交换中,数据包可以按照不同的路径到达目的地,然后在目的地重新组装。

AXI Stream与这些交换方式的关系

  • AXI Stream本身不直接支持电路交换,因为它不是为建立和维护持续的电路连接而设计的。
  • AXI Stream协议的运作方式更接近于包交换或分组交换,因为它通过硬件内部的点对点连接发送封装的数据包,这些数据包在接收端被重新组装。
  • 在AXI Stream协议中,数据包的传输依赖于发送方和接收方之间的紧密协作,通过握手信号确保数据包正确、可靠地传输。这种机制使得AXI Stream非常适合于需要高带宽和低延迟的硬件加速应用,如视频处理、信号处理和网络处理等。

Q:分组交换类似于pingpong操作

A: 分组交换(Packet Switching

分组交换是一种数据传输方式,主要用于数据通信网络,如互联网。在分组交换中,数据被分割成小的、独立的包或数据包,每个数据包可以独立选择最佳路径从源传输到目的地。这种方式具有以下特点

  • 动态路由:每个数据包可以独立选择路径,根据当前网络状况动态地选择最佳路由。
  • 统计复用:网络资源(如带宽)可以由多个数据流共享,提高了网络资源的利用率。
  • 灵活性:可以适应不同大小的数据传输需求,对网络拥塞有较好的适应性。

分组交换是现代计算机网络的基础,它允许网络在数据传输中具有较高的效率和灵活性。

乒乓操作(Ping-Pong Operation

乒乓操作通常是指在计算机系统中,特别是在硬件或内存操作中,使用两个缓冲区(或内存区域)交替进行数据传输或处理的一种技术。这种操作模式可以提高数据传输的效率,因为它允许一个操作在等待另一个操作完成的同时继续执行。

乒乓操作的典型应用包括

  • 内存访问:在读取或写入大量数据时,可以使用一个缓冲区进行操作,而另一个缓冲区准备下一次操作,从而减少等待时间。
  • 硬件接口:在硬件设备(如网络接口卡、图形处理器等)中,乒乓操作可以用于提高数据吞吐量,通过在一个缓冲区处理数据时,另一个缓冲区准备接收或发送新的数据。

分组交换与乒乓操作的相似之处

尽管分组交换和乒乓操作属于不同的概念,但它们在某些方面具有相似性

  • 独立性:分组交换中的数据包和乒乓操作中的缓冲区都可以独立于其他部分进行操作。
  • 效率:两者都旨在提高系统的整体效率,分组交换通过动态路由和统计复用来优化网络资源的使用,而乒乓操作通过减少等待时间和提高数据吞吐量来优化计算机系统的性能。

Q:HNOC? DMA与PLIO

A: HNOC (Hierarchical Network on Chip)

HNOC(分层网络芯片)是一种片上网络(Network on Chip,NoC)的设计方法,用于多核处理器或其他需要在芯片上进行大量数据传输的系统。HNOC通过将NoC分为多个层次来提高数据传输的效率和可扩展性。每个层次可以独立管理一部分通信任务,从而减少单个通信通道的负载并提高整体性能。

HNOC特点

  • 在复杂的SoC(System on Chip)设计中,HNOC负责在芯片内部的不同处理器核心、内存模块和其他硬件单元之间高效地路由数据。

DMA (Direct Memory Access):

  • DMA是一种在SoC内部以及与外部设备通信时常用的数据传输技术,它可以减轻CPU的负担,提高数据传输的效率。

PLIO (Processor Local I/O):

  • PLIO更侧重于处理器与本地I/O设备之间的连接,可能是HNOC架构中的一部分,也可能是专为特定处理器设计的接口。

FPGA设计中的应用

  • 在FPGA设计中,DMA和PLIO经常一起使用,以实现高效的数据处理和传输。
  • 例如,FPGA中的一个DMA控制器可以与PLIO接口协同工作,将外部设备的数据直接传输到FPGA内部的内存或处理器,无需CPU干预,从而提高整体系统的性能。

VNOC (Virtual Network on Chip)

  1. 定义:VNOC(虚拟网络芯片)是一种在FPGA或其他可编程逻辑设备上实现的网络架构,它允许创建多个虚拟网络层,每个层都可以独立地进行数据传输和通信。
  2. 用途:VNOC可以提高FPGA的网络通信效率,允许在单个物理网络之上实现多个虚拟网络,从而增加了灵活性并优化了资源使用。
  3. 优势:通过虚拟化,VNOC可以为不同的应用或任务分配专用的网络资源,减少不同任务之间的干扰,提高整体系统的性能。

HNOC (Hierarchical Network on Chip)

  1. 定义:HNOC(分层网络芯片)是一种用于SoC(System on Chip)设计中的网络架构,它通过将网络分为多个层次或级别来提高数据传输的效率和可扩展性。
  2. 用途:HNOC适用于多核处理器或其他需要在芯片上进行大量数据传输的系统,通过分层减少了单个通信通道的负载,提高了整体性能。
  3. 优势:HNOC通过减少数据传输的延迟和提高带宽利用率,优化了芯片内部的通信。

Q:内核依赖图的运行时配置文件?调度任务池中的内核到可用的访问上

A: 内核依赖图

定义:内核依赖图是一个有向图,其中的节点代表计算任务(或内核,边表示任务之间的数据依赖关系。

用途:它用于表示任务的执行顺序,确保数据依赖性得到满足,即在任何任务执行之前,其所有输入数据都已准备好。

构建:依赖图通常在编译时或运行时构建,可以基于程序的语法结构或实际的数据流。

运行时配置文件

  • 定义:运行时配置文件是一种数据结构或文件,它包含了在程序执行期间用于指导任务调度和资源分配的信息。
  • 内容:它可能包括任务的优先级、资源需求、执行时间估计、调度策略参数等。
  • 作用:配置文件允许系统根据当前的运行状况和资源可用性动态调整任务调度。

调度任务池中的内核到可用的处理器

  • 任务池:任务池是待调度执行的任务集合,其中的每个任务都可能对应依赖图中的一个节点。
  • 调度策略:调度器(Scheduler)根据配置文件中的策略和依赖图结构,决定将任务分配给哪个处理器或核心。
  • 可用处理器:调度器考虑系统中可用的处理器资源,包括CPU核心、GPU单元、FPGA或其他可并行执行任务的硬件。
  • 动态调度:在运行时,调度器可能根据实时反馈(如任务执行进度、资源使用情况等)动态调整调度决策。
  • 优化目标:调度器的目标通常是最大化资源利用率、减少任务完成时间、保证任务公平性或满足特定服务质量要求。

实现运行时配置和调度的示例技术

  • DAG Schedulers:如Apache Spark中的DAG调度器,它处理任务依赖图并进行高效调度。
  • Runtime Systems:如CUDA和OpenCL,它们提供了运行时API来管理GPU上的内核调度。
  • Container Orchestration:如Kubernetes,它用于在分布式系统中调度容器化任务。
  • FPGA Scheduling:在FPGA上,使用高级综合工具(HLS)生成的内核可以根据数据流和控制流进行调度。

Q:全流水MAC操作

A: 全流水(Fully Pipelined)乘累加(Multiply-Accumulate,MAC)操作

全流水MAC操作是一种优化技术,用于提高乘累加操作的执行效率。MAC操作是数字信号处理中的核心操作,广泛应用于各种算法和应用中,如滤波、卷积运算、矩阵乘法等。

全流水MAC操作的关键特点

  • 流水线结构:将乘累加过程分解为多个阶段,每个阶段执行操作的一部分,形成流水线,允许连续的数据流通过。
  • 并行处理:多个乘累加操作可以并行进行,每个操作在流水线的不同阶段。
  • 提高吞吐量:流水线和并行处理使得全流水MAC能连续输出结果,显著提高操作的吞吐量。
  • 延迟隐藏:流水线技术可以隐藏乘法和累加的延迟,允许在一个操作等待时,其他操作继续执行。
  • 资源复用:硬件资源(如乘法器和加法器)在多个操作中复用,提高硬件的利用率。

全流水MAC操作的实现

  • 乘法阶段:输入的乘数和被乘数首先进行乘法操作。
  • 累加阶段:乘法结果随后与累加器的当前值进行累加。
  • 流水线寄存器:在乘法和累加之间以及流水线的每个阶段之间使用寄存器,保持数据的流水线流动。
  • 循环缓冲:有时使用循环缓冲或FIFO(先进先出)存储中间结果,直到它们准备好被处理。

全流水MAC操作的应用

  • 数字信号处理器:在DSP中,全流水MAC用于执行快速卷积和滤波操作。
  • 通信系统:在无线通信系统中,全流水MAC用于执行复杂的信号处理算法。
  • 图像和视频处理:在图像和视频压缩算法中,全流水MAC用于执行大量的乘累加操作。
  • 神经网络加速器:在深度学习硬件中,全流水MAC用于加速神经网络的前向和后向传播。
  • FPGA和ASIC设计:在定制硬件设计中,全流水MAC操作可以用于优化性能和资源利用。

Q:CTC?

A:当AIE的计算-通信(CTC)比率大于1时,我们可以使用分组交换连接。在计算AIE 0的过程中,分配给这个AIE的端口是空闲的,因此可以通过分配一个与AIE 1的目的ID匹配的不同的报头来将数据传输到另一个AIE,比如AIE 1。
Q:数据重用
A:
数据重用在计算机体系结构中体现在多个方面,尤其是在流水线操作和存储层次结构中。以下是数据重用的几个关键应用

  1. 寄存器重用:在CPU的寄存器中,最近执行的操作数或中间结果可以被存储起来,以便在后续操作中快速访问,而不必重新从内存中加载。

  2. 缓存数据:缓存内存(如L1、L2、L3缓存)的设计目的就是为了重用频繁访问的数据。当CPU需要某个数据时,它首先检查缓存中是否存在该数据,如果存在(缓存命中,则无需访问更慢的主内存。

  3. 流水线寄存器:在流水线处理器中,每个流水线阶段都有自己的寄存器来存储中间结果。这些寄存器允许数据在流水线的不同阶段之间快速传递,从而实现连续的操作。

  4. 多级缓存:现代计算机系统通常具有多级缓存结构,每一级缓存都可能存储最近访问的数据。这种层次结构允许在不同层次上重用数据,减少对最慢存储层的访问。

  5. 数据局部性:程序往往表现出数据局部性,即最近访问过的数据很可能在不久的将来再次被访问。通过利用这一特性,系统可以有效地重用数据。

  6. 循环展开:在编译器优化中,循环展开是一种技术,它将循环的多次迭代合并为一个迭代,从而增加数据重用的潜力。

  7. 数组数据结构:在高级编程中,数组和矩阵等数据结构的设计允许对同一内存区域的重复访问,这有助于数据重用。

  8. 流式处理:在流式数据处理中,如视频或音频处理,数据分块流入系统,并且每个块可以在多个处理阶段中重用。

  9. 数据库系统:在数据库中,查询结果可以被缓存起来,以便在相似的查询中重用,减少对原始数据的重复访问。

  10. 硬件加速:使用GPU或专用硬件加速器时,可以并行处理大量数据,并且可以在单个处理单元内实现数据的高重用率。

  11. 预测执行:现代CPU使用预测执行技术,根据程序的执行历史来预测接下来可能需要的数据,并将这些数据预先加载到缓存中。

本文地址:http://ww.kub2b.com/quote/11765.html     企库往 http://ww.kub2b.com/ ,  查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号