运用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 Overlay能够说是现在运用最广泛的FPGA虚拟化办法之一。和网络技能相似,FPGA Overlay是一层坐落FPGA硬件层之上,并衔接顶层运用的虚拟可编程架构,如下图所示。
Overlay的详细完结办法有很多种,它既能够是工程中常用的软核通用处理器,也能够是一组支撑更高档编程模型的可编程逻辑处理单元,称为CGRA(Coarse-Grained Reconfigurable Array),或许是一些完结特定功用的专用处理器,如Virtual Box公司开发的针对加快向量核算的向量处理器(Vector Processor)等等。
运用Overlay的首要意图是为上层用户供给一个他们更为了解的编程架构与接口,便于他们经过比方C言语等高层言语对Overlay中的通用处理器等进行编程,而不需忧虑详细的硬件电路完结,由此完结了对FPGA底层硬件资源的笼统和虚拟化。
别的,因为Overlay层供给的逻辑处理单元或软核处理器一般与底层FPGA硬件无关,因而便利了上层规划在不同FPGA架构之间的移植。
运用Overlay的别的一个优点是能够在很大程度上缩短FPGA的编译时刻。比较一般只要几分钟的软件编译时刻,FPGA的编译需求经过逻辑归纳、映射、布局布线等多项进程,关于一个中等规划的FPGA规划而言,整个编译进程一般会长达几个小时之久。因为Overlay层的逻辑架构相对固定,因而能够由Overlay的供给者提早进行悉数或部分编译。用户在运用时,就只需编译自己编写的逻辑部分即可,这样大大缩短了全体的开发时刻,也便利对运用进行调试和修正。
Overlay技能与高层次归纳(High-Level Synthesis,简称HLS)技能的首要差异在于,前者引进的Overlay层往往并不能彻底躲藏底层的FPGA结构,由此或许带来额定的开发难度和本钱。这一般表现在两个方面:
榜首,Overlay层往往不能完结上层用户的悉数逻辑。例如,运用软核处理器时,一般用它们进行数据通路和逻辑的操控,此刻依然需求专门的硬件工程师开发数据通路的部分。
第二,Overlay还没有一个业界一致的规范化开发模型。假如在Overlay中运用专门的处理器阵列或CGRA,因为现在并没有一个相似在HLS中选用的通用规范,那么就需求软件工程师提早学习和把握所用的CGRA的编程模型,也需求有硬件工程师团队担任在FPGA中完结和优化Overlay层中的CRGA硬件电路。
部分可重构与虚拟化办理器
部分可重构(Partial ReconfiguraTIon)是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进行运用的硬件加快。