液体lb培养基的配方? 液体lb培养基配制
2023-07-16
很多朋友对三种主流的fpga虚拟化技术的实现方法详解图,三种主流的FPGA虚拟化技术的实现方法详解不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。
利用FPGA虚拟化突破时空限制在传统的FPGA开发模型中,用户通常使用硬件描述语言(HDL)对应用场景进行建模,然后通过特定的FPGA开发工具将硬件模型映射到FPGA,最后生成运行的FPGA映像。
这种开发模式的另一个主要缺点是,无论应用场景和FPGA产品类型如何,FPGA都只能由单个用户开发和使用。比如对于一个不需要太多资源,不需要持续运行的应用,FPGA的大部分硬件资源大部分时间都会处于闲置状态。很明显,FPGA在时间和空间上都很难得到充分利用,如下图所示。
为了提高FPGA的开发效率,更好地利用FPGA的逻辑资源,方便FPGA的大规模部署和应用,需要对FPGA的逻辑进行一定程度的抽象,使顶级用户不必过多关注FPGA硬件逻辑的实现方法和细节。于是,FPGA虚拟化技术应运而生。可以说FPGA虚拟化技术打破了时间和空间维度的限制,使用户可以在不同的时间充分调度和使用多个FPGA的各种资源,如上图所示。
目前,FPGA虚拟化技术仍处于发展初期,是工业界和学术界的热门话题。本文将介绍三种主流FPGA虚拟化技术的实现方法:FPGA Overlay部分重构和虚拟化管理器FPGA资源池和虚拟化框架FPGA Overlay。
Overlay意为覆盖或叠加,是网络技术中构建虚拟逻辑网络的一种方法。其实现方法通常是在物理网络架构的基础上增加一个虚拟网络平面,使上层应用与下层物理网络分离。这个虚拟网络平面本质上可以通过隧道封装技术来实现,数据中心网络常用的VxLAN就是Overlay的主流标准之一。
在Overlay中添加虚拟层的方法与本章开头给出的FPGA虚拟化方法非常相似。事实上,FPGA叠加可以说是应用最广泛的FPGA虚拟化方法之一。与网络技术类似,FPGA Overlay是一种虚拟可编程架构,位于FPGA的硬件层,与顶层应用相连,如下图所示。
Overlay的实现方式有很多种,可以是工程上常用的软核通用处理器,一组支持更高级编程模型的可编程逻辑处理单元,称为CGRA(粗粒度可重构阵列),也可以是一些实现特定功能的专用处理器,比如Virtual Box公司开发的用于加速矢量计算的矢量处理器。
使用Overlay的主要目的是为上层用户提供一个更加熟悉的编程框架和接口,使他们可以通过C语言等高级语言在Overlay中对通用处理器进行编程,而不用担心具体的硬件电路实现,从而实现FPGA底层硬件资源的抽象和虚拟化。此外,由于覆盖层提供的逻辑处理单元或软核处理器通常独立于底层FPGA硬件,便于上层设计在不同FPGA架构之间移植。
使用Overlay的另一个好处是可以大大缩短FPGA的编译时间。相对于通常只有几分钟的软件编译时间,FPGA的编译需要逻辑综合、映射、布局布线等多个步骤。对于一个中等规模的FPGA设计,整个编译过程通常需要几个小时。因为覆盖层的逻辑架构是相对固定的,所以可以由覆盖提供者提前对其进行整体或部分编译。
用户在使用时,只需编译自己的逻辑部分,大大缩短了整体开发时间,方便调试和修改应用。
覆盖技术与高级综合(HLS)技术的主要区别在于,前者引入的覆盖层不能完全隐藏底层FPGA结构,这可能会带来额外的开发难度和成本。这通常体现在两个方面:一是覆盖层往往无法实现上层用户的所有逻辑。例如,当使用软核处理器时,它们通常用于控制数据路径和逻辑。这时候还需要专门的硬件工程师来开发数据通路。
其次,Overlay在行业内没有统一的标准化开发模式。如果在Overlay中使用专用的处理器阵列或CGRA,由于目前还没有类似于HLS中使用的通用标准,因此需要软件工程师提前学习和掌握CGRA的编程模型,还需要一个硬件工程师团队在FPGA中实现和优化Overlay层的CRGA硬件电路。部分可重新配置和虚拟化管理器
部分可重构是FPGA的主要特性之一,体现了FPGA独特的灵活性。具体来说,部分可重构是指FPGA可以被划分成一个或多个区域,这些区域可以在FPGA运行过程中单独进行编程和配置,以改变区域内电路的逻辑,但不会影响FPGA其他电路的正常工作。部分重构使FPGA在时间和空间两个维度上直接通过硬件切换任务,如下图所示。
利用部分可重构技术,可以将FPGA划分成若干个子区域,作为虚拟FPGA供单个或多个用户使用,同时保留一部分逻辑资源作为不可重配置区域,用来实现必要的基础架构,如内存管理与网络通信等。
一个典型的例子是微软的Catapult项目。在他们2014年ISCA会议上发表的文章中介绍,每个FPGA都在逻辑上被划分成“Role”和“Shell”两部分,如下图所示。
其中,Role为可重构的逻辑单元,可以根据不同用户应用进行编程和配置;Shell为不可重配置区域,包含了不同应用都可能需要的基础架构,比如DRAM控制器、高速串行收发器、负责与主机通信的PCIe模块与DMA、控制重构的Flash读写模块,以及其他各种I/O接口等等。
在这篇文章中,微软在其数据中心的1632台服务器中部署了Intel的Stratix V系列FPGA,在Role部分对微软必应(Bing)搜索引擎的文件排名运算进行了硬件加速,并达到了高达95%的吞吐量提升,同时功耗的增加不超过10%,总成本增加不超过30%。
另外一个基于FPGA部分可重构技术进行FPGA虚拟化的例子,是IBM的cloudFPGA项目。在它2015年发表的文章中,FPGA被划分成三部分:管理层(Management Layer)、网络服务层(Network Service Layer)以及虚拟FPGA层(vFPGA),如下图所示。
其中,vFPGA本质上就是一个或多个可以动态重构的FPGA区域,它们可以共同属于一个用户,或分属多个用户,运行着相同或不同的应用。
在一个vFPGA进行动态重构时,其他vFPGA的运行不会受到影响。管理层是不可被用户配置的区域,主要负责对这些vFPGA进行内存的分配和管理。vFPGA和管理层类似于传统虚拟化架构中虚拟机和Hypervisor的关系。网络服务层则主要负责控制多个vFPGA与数据中心网络的通信,并在FPGA硬件上实现了L2-L4层网络协议,供所有vFPGA使用。
为了通过部分重构技术进行FPGA虚拟化,通常都需要引入额外的管理层。与Hypervisor类似,管理层对虚拟后的FPGA进行各类资源的统一管理与调度,如Catapult项目中的Shell层,以及cloudFPGA项目中的Management层。
但是,管理层的引入势必会占用原本可以用于应用逻辑的可编程资源,同时对系统的整体性能带来负面影响。
另外,对FPGA强行划分多个可重构区域,也可能会严重影响系统性能。比如,一旦划分了可重构区域,就代表着其他应用逻辑不能使用该区域内的硬件资源,这样会严重影响编译时布局布线的灵活度,导致某些时序路径必须“绕道”,以避免这些可重构区域,从而造成过长的布线延时。另一方面,如果划分了过少的可重构区域,就可能会造成FPGA资源的空置和浪费。
因此,如何优化FPGA上可重构区域的划分数目,以及针对动态重构进行布局布线工具的优化设计,是当前学术界和工业界正在探索的问题。
FPGA资源池与虚拟化框架
为了实现多用户的支持,与其在单一FPGA芯片上使用动态重构技术划分多个可重构区域,也可以使用多个FPGA级联,使每个FPGA负责单个或少量用户,并通过一个整体的虚拟化框架完成系统的集成与资源调度。同样的,这个架构也可以支持单一个用户同时需求多个FPGA的应用场景。这种多租户的FPGA虚拟化架构通常需要软硬件两个层面的支持:
硬件层面,需要实现多FPGA互联,形成FPGA“资源池”,同时也要支持其他硬件结构,比如CPU、GPU,或者其他硬件加速器等。
软件层面,需要有一个虚拟化框架,对用户任务进行有效的FPGA部署。具体来说,就是对各类硬件资源进行分配调度,管理包括FPGA在内的各个加速器之间的通信和数据传输,控制FPGA的连接方式,以及对FPGA进行动态重构和配置等等。
上文提到的微软Catapult项目和IBM cloudFPGA项目都有各自的对多租户的支持。比如,微软在2016年MICRO会议上发表的论文提到,每个FPGA内都集成了一个Elastic Router,多个用户可配置模块(Role)可以通过Elastic Router提供的虚拟通道与外界进行网络通信,如下图所示。
在更高层面,Catapult提出了一种“硬件即服务(Hardware-as-a-Service)”的使用模型,如下图所示。
这个HaaS模型通过一个中心化的资源管理器(Resource Manager,RM),对数据中心里的FPGA资源进行统一管理和调度。每个FPGA资源池中,都有一个服务管理器(Service Manager,SM)通过API与RM进行通信。SM对整个资源池的FPGA进行管理,实现诸如FPGA负载均衡、互联管理、故障处理等功能。
在cloudFPGA项目中,FPGA与CPU完全解耦,直接作为网络设备接入数据中心网络,并成为池化的硬件加速资源。同时,IBM提出了一个基于OpenStack的虚拟化框架和加速服务,使得用户可以通过在FPGA中预先设定的management IP地址对FPGA资源池进行服务注册、任务分配、FPGA配置以及使用。
在池化FPGA和虚拟化框架领域其他的代表性工作还有来自英国Maxeler公司开发的基于FPGA的数据流引擎(Dataflow Engine),及其一系列开发环境与框架。在传统的基于CPU的计算架构中(见下图),CPU通过读取内存中的指令和数据进行相应的计算,当前指令的计算结果会写入内存,并在读取下一条指令和数据,直到程序运行结束。
与之对应的,在基于数据流的架构中,只需在应用开始时从内存中读取数据,随后会在FPGA上进行数据流处理和计算,所有中间数据不会返回内存,直到计算结束。这样从根本上杜绝了访存的性能瓶颈。多个数据流引擎的计算节点可以互联,并与x86 CPU、网络单元、存储单元等共同组成完整的计算集群,如下图所示。
Maxeler还提供了一种类似于Java的编程语言,称为MaxJ,用来对数据流图进行描述和建模。然后通过对应的编译器MaxCompiler,将数据流图映射到底层的FPGA硬件平台,从而对上层用户虚拟化了底层电路逻辑的具体实现。
目前,这套数据流引擎架构已经被用在多个高性能计算的应用场景,比如蒙特卡洛仿真、金融风险计算、科学计算,以及一些新兴的应用场景,如卷积神经网络(CNN)的硬件加速等等。
在虚拟化框架协议方面的另一个主要工作是对MapReduce框架的FPGA支持。MapReduce是Google提出的针对大规模数据处理的并行计算框架,已被用于多种计算平台和架构,如多核CPU、Xeon Phi和GPU等等。通过MapReduce框架,上层用户只需要调用给定的软件库和API,而不需要知道底层的硬件结构。
MapReduce的核心即为map和reduce两个函数的实现,为了对MapReduce增加FPGA支持,可以首先设计map和reduce的FPGA硬件模块以及对应的编程接口,然后通过MapReduce框架调用,这样可以实现FPGA的分布式部署和配置。在这里,map和reduce的FPGA设计可以通过传统的硬件描述语言(HDL)完成,也可以通过高层语言,如OpenCL等,并借助高层次综合工具完成设计。
小结
与软件虚拟化类似,FPGA虚拟化技术抽象了具体的FPGA体系结构与硬件资源,使得用户能在更高的逻辑层级上利用FPGA进行应用的硬件加速。
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
2023-07-16
栏目热点
液体lb培养基的配方? 液体lb培养基配制
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面