对操作系统中多个进程对现场可编程门阵列的使用的管理的制作方法
【专利摘要】本发明描述了对操作系统中多个进程对现场可编程门阵列的使用的管理。现场可编程门阵列能在通用计算系统中用作共享可编程协作处理器资源。FPGA能被编程来执行功能,这些功能进而能与一个或多个进程相关联。通过多个进程,FPGA能被共享,并且进程能在访问FPGA的时间间隙期间被分配到FPGA的至少一个部分。用硬件描述语言所写的用于编程FPGA的程序被用作硬件库。操作系统对以下进行管理:将FPGA资源分配到进程、根据要由进程使用FPGA来执行的功能来编程FPGA、以及对这些进程对FPGA的使用进行调度。
【专利说明】对操作系统中多个进程对现场可编程门阵列的使用的管理
【技术领域】
[0001 ] 本申请涉及对操作系统中多个进程对现场可编程门阵列的使用的管理。
【背景技术】
[0002]在大多数通用计算机内,操作系统是管理对计算机内资源的访问的主要软件。主要资源是执行被设计成在计算机上运行的应用程序的中央处理单元(CPU)、主存储器和存储。在一些计算机体系结构中,可出现附加的处理单元(诸如处理器中的多个核)和/或附加的处理器(称为协作处理器)。这样的协作处理器的示例包括图形处理单元(GPU)和数字信号处理器(DSP)。操作系统也管理多个进程对这些资源的访问。
[0003]现场可编程门阵列(FPGA)是一种通常被用在专用计算设备中的逻辑器件。FPGA通常被用于执行此门阵列尤其适用于的特定的、专用的功能。FPGA通常位于外围设备或其它专用硬件(诸如连接到诸如PCI总线的系统总线并通过该系统总线被访问的印刷电路板)中。一般而言,这样的器件被编程一次并被使用多次。因为这些器件是可编程的,相比于其它专用逻辑器件,它们具有能被在现场更新的优势。
【发明内容】
[0004]提供本
【发明内容】
以便以简化形式介绍将在以下【具体实施方式】中进一步描述的一些概念。本
【发明内容】
并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。
[0005]一个或多个现场可编程门阵列(FPGA)能在通用计算系统中用作共享可编程协作处理器资源。FPGA能被编程来执行功能,这些功能进而能与一个或多个进程相关联。在多个进程的情况下,FPGA能被共享,并且进程能在访问FPGA的时间间隙期间被分配到FPGA的至少一个部分。用硬件描述语言所写的用于编程FPGA的程序被用作硬件库。操作系统对以下进行管理:将FPGA资源分配到进程、根据要由进程使用FPGA来执行的功能来编程该FPGA、以及对这些进程对FPGA的使用进行调度。
[0006]在以下描述中,对附图进行了参考,附图构成了实施方式的一部分且在其中作为示例示出了本发明技术的具体示例实现。可以理解,可以使用其它实施例并且可以做出结构上的改变而不背离本发明的范围。
[0007]附图描述
[0008]图1是对其操作系统能被实现的具有FPGA资源的示例计算系统的框图。
[0009]图2是FPGA功能单元的说明性示例的示意图。
[0010]图3是使用具有FPGA资源的计算机系统上的硬件和软件库的应用的示例体系结构的示意图。
[0011]图4是示出随着时间的对FPGA使用的图。
[0012]图5是用于存储将FPGA功能单元与进程相关联的数据的数据结构的图。
[0013]图6是将FPGA功能单元与进程相关联的示例实现的流程图。[0014]图7是分析代码以标识能由FPGA库加速的代码块的示例实现的流程图。
【具体实施方式】
[0015]以下部分提供了对示例计算环境的简要的、一般的描述,在该示例计算环境中能实现用于管理对FPGA资源的使用的操作系统。该系统可以用众多通用或专用计算设备来实现。适合的公知计算设备的示例包括但不限于:个人计算机、服务器计算机、手持式或膝上型设备(例如,媒体播放器、笔记本计算机、蜂窝电话、个人数据助理、语音记录器)、多处理器系统、基于微处理器的系统、机顶盒、可编程消费电子产品、网络PC、小型机、大型计算机、包括以上系统或设备的任一个的分布式计算环境等等。
[0016]图1仅仅示出示例计算环境,并不旨在对适合的计算环境的使用范围或功能提出任何限制。
[0017]参考图1,示例计算环境包括计算设备100。在一个基本配置中,计算设备100包括至少一个处理单元102 (诸如通用计算机的典型中央处理单元(CPU))和存储器104。
[0018]计算设备可包括多个处理单元和/或附加的协作处理单元,诸如图形处理单元(GPU)。计算设备还包括一个或多个现场可编程门阵列(FPGA),其被表示为可用作共享(在运行在计算机上的进程间共享)的协作处理资源的FPGA单元120。FPGA可位于其自己的CPU插孔中或位于分开的被插入到扩展槽(诸如快速外围部件互连(PC1-E)槽)中的卡上。通过提供这样的FPGA单元,能在得到硬件加速的益处的情况下实现各种非常适合于门阵列来实现的功能。
[0019]取决于处理单元和FPGA单元的配置,该单元或单元内的每个功能单元具有相关联的输入/输出通道来用于与主操作系统进程进行通信。例如,能提供专用于该功能单元并在其与使用该功能单元的进程之间共享的存储器区域。一种请求队列和响应队列还能被用于使得能够实现在FPGA单元内实现的操作的异步调用。此外,FPGA单元中的功能单元针对进程的状态能被保存到用于该功能单元和该进程的存储器区域并从该存储器区域中还原。替换地,其它技术能被用于确保功能单元在被其进程使用前处于已知状态。
[0020]取决于计算设备的配置和类型,存储器104可以是易失性的(诸如RAM)、非易失性的(诸如ROM、闪存等)或是两者的某种组合。处理单元、协作处理器和存储器的该配置在图1中用虚线106示出。
[0021]计算设备100还可具有附加的资源和设备。例如,计算设备100还可包含附加存储(可移动和/或不可移动),包括但不限于磁盘、光盘或磁带。在图1中通过可移动存储108和不可移动存储110示出这样的附加存储。计算机存储介质包括以用于存储诸如计算机程序指令、数据文件、数据结构、程序模块或其他数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。存储器104、可移动存储108和不可移动存储110全部都是计算机存储介质的示例。计算机存储介质包括但不限于,RAM、ROM、EEPR0M、闪存或其它存储器技术、CD-ROM、数字多功能盘(DVD)或其它光存储、磁带盒、磁带、磁盘存储或其它磁存储设备,或者可用于存储所需信息并且可由计算设备100访问的任何其它介质。任何这样的计算机存储介质都可以是计算设备100的一部分。
[0022]计算设备100还可包括通信连接112,其允许设备通过通信介质与其它设备进行通信。通信连接112的实现是取决于正由计算设备访问的通信介质的种类的,这是因为其提供了对这样的介质的接口以允许通过该通信介质的数据的传输和/接收。通信介质通常承载诸如载波或其他传输机制等已调制数据信号中的计算机程序指令、数据文件、数据结构、程序模块或其他数据,并包括任何信息传递介质。术语“已调制数据信号”指其一个或多个特征以这样的方式设置或改变以便在信号中对信息进行编码的信号。作为示例而非限制,通信介质包括诸如有线网络或直接线连接之类的有线介质,以及诸如声学、RF、红外及其他无线介质之类的无线介质。
[0023]计算设备100可具有各种输入设备114,如键盘、鼠标、笔、相机、触摸输入设备等。还可包括诸如显示器、扬声器、打印机等输出设备116。所有这些设备在本领域中是公知的并且不必在此详细讨论。
[0024]使用由计算设备处理的诸如程序模块等计算机可执行指令和/或计算机解释的指令来实现在计算设备上执行的应用。一般而言,程序模块包括在由处理单元处理时指示处理单元执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。在分布式计算环境中,这样的任务能由通过通信网络链接的远程处理设备来执行。在分布式计算环境中,程序模块可以位于包括存储器存储设备在内的本地和远程计算机存储介质中。
[0025]在计算设备上执行的操作系统管理进程对计算设备的各种资源的访问。通常,在计算机系统上运行应用导致一个或多个进程被创建,其中每个进程随着时间被分配到不同的资源。如果资源在进程间共享,并且如果进程不能并发地共享资源,那么操作系统随着时间调度对资源的访问。这样的资源之一是图1的FPGA单元120,其可包括一个或多个分立的 FPGA。
[0026]参考图2,FPGA单元内的资源之一是一组或多组可编程门,在此称为功能单元。每个功能单元通过一组门和/或门阵列中的其它资源来定义。一般而言,功能单元是不重叠的,即,不共享门阵列中的可编程元件。例如,如图2中示意地示出的,功能单元200、202、204和206是不重叠的。大多数FPGA只有一个功能单元。然而,图1中的FPGA单元120可具有一个或多个FPGA。在多个FPGA的情况下,每个FPGA可被视为功能单元。参考图3,每个功能单元是以下资源:其能被分配给一个或多个进程、被操作系统使用实现一操作的硬件库来编程并接着被分配给其的进程用于执行该操作。参考图3,作为一个示例,应用300可使用传统的软件库302以及FPGA硬件库304来执行各种操作。如果应用依赖硬件库304,则操作系统306使用该硬件库来编程FPGA资源310以允许应用300使用库。FPGA可在应用开始执行之前被编程。如果FPGA可被足够快地重新编程,那么库可在操作系统的调度量子(quantum)内被加载到FPGA中。操作系统306还执行来自应用300和CPU308上的软件库302的软件命令。当应用作出对由软件库执行的功能的调用时,操作系统执行来自CPU308上的软件库的功能。当应用作出对由FPGA执行的功能的调用时,操作系统确保FPGA是使用硬件库来编程的并使用FPGA来执行功能。
[0027]为了示出不同的功能单元能随着时间如何被使用,现在参考图4。在图4中,在时间Tl处,使用功能单元400和402。在时间T2,使用功能单元400和404。在时间T2,再次使用功能单元400和402。在时间Tl,功能单元400能被分配给进程Pl,而功能单元402能被分配给进程P2。在时间T2,进程P2可能是不活动的,而进程Pl能使用功能单元400并且进程P3能使用功能单元404。在时间T3,另一进程(诸如进程P4)能开始使用功能单元400 ;并且进程P2能再次活动来使用功能单元402。通过当前的FPGA实现,在同一时间由不同的进程对多个功能单元的使用暗示多个FPGA的使用。就FPGA能支持由不同的进程在同一时间使用的多个功能单元而言,这些功能单元能在同一 FPGA上。实际上,操作系统在时间和空间方面在统计学上复用FPGA。
[0028]为了允许这种随着时间由不同的进程对FPGA资源的使用,操作系统具有调度器,该调度器确定在每个调度量子(即,时间段)哪个进程能访问FPGA资源以及何时FPGA功能单元将用硬件库来编程使得功能单元可用于由该进程使用。由此,用于FPGA单元的调度器的实现部分地取决于FPGA单元的性质以及其包括的一个或多个FPGA。要考虑的与FPGA有关的因素包括但不限于以下。例如,在一些情况下,如果一个功能单元不能独立于其它功能单元而被编程,那么整个FPGA要被刷新来编程功能单元。另一考虑是功能单元能被编程的速度以及功能单元的编程是否阻止其它功能模块在编程阶段期间被使用。要考虑的另一因素是进程是否能通过共享功能单元来共享硬件库。调度器还考虑诸如以下的因素:并发进程的数量、应用性能保证、应用的优先级、进程上下文切换花费、对存储器和总线的访问以及在没有功能单元在FPGA单元中可用的情况下软件库的可用性。
[0029]可以存在其它情况,其中FPGA单元向应用或操作系统提供通用设施,其因此被调度为应用实例化的长度。例如,自定义网络协议或卸载可作为FPGA单元上的加速服务来提供。相反,一般在通用CPU中执行的系统调用或标准库调用能使用FPGA来被加速。此外,操作系统能基于进程优先级的偏好来复用CPU。在另一情况中,操作系统能使用应用的简档(统计地或动态地生成)来预测最适合于在FPGA单元上运行的功能并接着预先加载该功能,使得其可用于调度。通过将简档用作向导,操作系统能确保空间和时间均在FPGA单元上可用来加速应用。最终,操作系统能使用来自应用的简单提示来知道何时在FPGA单元上调度时间。例如,某些到操作系统内的调用(系统调用)可指示长的延迟(对盘或网络的调用),其提供了 FPGA单元能空闲某一时间量来供其它线程或进程使用的提示。因此,操作系统使用各种提示和偏好来创建对复用对FPGA单元的访问的调度。由于操作系统控制调度器,因此其具有关于正在执行和即将到来的工作、可用的硬件库以及在编程FPGA所花费的时间的详细知识。因此,它能使用该知识来确定在执行期间哪些进程利用FPGA。
[0030]现在已经描述了这样的计算机体系结构的一般概览,现在将描述示例实现。
[0031]参考图5,为了维护FPGA单元的功能单元和进程之间的关系,操作系统存储将每个功能单元关联到进程或使用该功能单元的进程的数据结构500。多个进程能共享同一功能单元,但在不同的调度量子期间使用该功能单元。这个数据结构可采取各种形式,并可包括关于功能单元502和进程504的信息以帮助将功能单元与进程相关联。应用能在编译时间、安装时间和/或运行时间与一个或多个功能单元相关联。可在安装时间或运行时间处作出功能单元和运行应用的进程之间的关联。关联可以是静态的或动态的。
[0032]现在将结合图6来描述在运行时间处将功能单元与进程相关联的示例。当应用被执行时,操作系统确定(600)该应用是否具有对特定的FPGA库的依赖性。如果不是,则它的代码能在以下被分析(602并参见图7)来确定FPGA库是否可用于使用。如果存在特定的依赖性,则FPGA库被加载并分析604以定义FPGA单元的被使用的功能单元。该功能单元被关联到606执行该应用的进程。然后确定608该功能单元是否与其它进程共享。如果不是,则FPGA库能被调度来加载610到该功能单元中,之后应用能执行612。如果存在与共享该功能单元的其它进程的冲突,则FPGA库能被排队614来加载到FPGA中。操作系统内的调度器接着被调用616来确定FPGA库何时能被加载来编程功能单元以及随后应用何时能被执行612。
[0033]如以上提到的,在用于执行应用的进程与功能单元关联后,操作系统调度器调度使用硬件库对功能单元的编程。
[0034]当编程FPGA时,调度器可考虑其它进程是否正在使用FPGA以及编程FPGA是否涉及暂停那些其它进程(在它们对FPGA的使用完成后)。作为一个示例,调度器可等待直到进程变得休眠或没有使用FPGA以启动对FPGA的编程。如果FPGA在被编程期间另一进程变得活动,那么该另一进程能被暂停直到FPGA编程完成。
[0035]调度器还可考虑要花费多长时间来编程FPGA以及编程FPGA是否将导致功能模块随着时间针对不同的进程被不同地编程。作为一个示例,调度器可检测到两个进程在利用不同的硬件库来使用同一功能单元。在这种情况下,调度器可响应于哪个进程之一使用软件库而非硬件库来发信号通知异常。调度器还可考虑FPGA是否可在调度量子内被足够快地重新编程以及FPGA被每个进程多频繁地访问,来确定是否发信号通知异常。这种检测还可在进程的加载期间而非在调度器内发生。
[0036]在一些情况下,如以上结合图6的602提到的,应用不具有对FPGA库的显式依赖性。例如,应用可包括对API 的调用来实现各种功能。然而,该API可在计算机系统上实现为软件库或FPGA库或其它库(例如,用于图形处理单元(GPU)的代码)等。应用的代码可被扫描来标识对具有对FPGA库的引用的API的引用。
[0037]针对如图7中提到的示例实现,代码被分析700来标识能使用FPGA库来实现的代码块。如果没有代码块被标识702,则应用以传统方式在不使用FPGA库的情况下被执行704。如果代码块被标识,则确定(706)功能单元是否可用于支持所标识的FPGA库。如果没有足够的FPGA资源可用,则应用可以以传统方式在不使用FPGA库的情况下被执行708。否贝U,用所标识的FPGA库来执行710应用,所标识的FPGA库根据图6的过程被加载和分析。
[0038]在用于执行应用的进程与功能单元关联并且该功能单元用硬件库被编程后,操作系统调度器调度不同的进程对FPGA单元的访问。
[0039]作为一个示例,如果两个或更多个应用共享同一硬件库,则对实现该库的FPGA功能单元的访问可在两个进程之间随着时间被复用。可用与在操作系统中共享其它资源的进程类似的方式来实现对FPGA资源的共享。
[0040]作为一个示例,低优先级的进程可被允许停止而高优先级的进程最大化对FPGA的使用。尽管由不同的进程来使用不同的功能单元,但是如果在一个时间只有一个进程能访问FPGA,那么对FPGA的访问可以与由多个进程对其它资源访问类似的方式来被调度。如果计算机具有太多的并发进程,那么某些进程能使用软件实现而非FPGA单元提供的功能。现在已经描述了这样的系统的示例实现,应该明显得出,各种数据结构能被用于在操作系统中将FPGA功能单元与进程相关联。此外,取决于FPGA的各种实现,用于加载和重新编程FPGA的操作系统实现将根据使用的FPGA来变化。调度器实现也取决于与在使用冲突的FPGA资源的进程之间进行切换相关联的开销,其是依赖于FPGA的。
[0041]在所附权利要求的主题中的术语“制品”、“过程”、“机器”和“物质组成”旨在将权利要求限制到被认为落入35U.S.C.§ 101中的这些术语的使用所定义的可被专利保护的主题的范围内。
[0042]上文中提到的此处描述的替换实施方式中的任一个或全部可以按形成附加混合实施方式所需的任何组合使用。应该理解,在所附权利要求中定义的主题没有必要限于上述的特定实现。上述特定实现仅作为例子被揭示。
【权利要求】
1.一种计算机器,包括: 中央处理单元(102)以及连接到总线的存储器(104); 连接到所述总线的现场可编程门阵列(120); 其中所述中央处理单元执行应用程序(300)以及操作系统(306),所述操作系统管理应用程序对所述中央处理单元、所述存储器和所述现场可编程门阵列的使用。
2.如权利要求1所述的计算机器,其特征在于,所述现场可编程门阵列包括多个功能单元(200、202、204、206)。
3.如权利要求2所述的计算机器,其特征在于,其中每个功能单元是可单独编程的。
4.如权利要求2所述的计算机器,其特征在于,所述操作系统将应用程序与所述现场可编程门阵列的功能单元相关联一段时间。
5.如权利要求4所述的计算机器,其特征在于,所述操作系统在执行应用程序之前,标识对用于编程所述现场可编程门阵列的硬件库的依赖性,并将所述硬件库加载到所述现场可编程门阵列中以供所述应用程序访问。
6.如权利要求4所述的计算机器,其特征在于,其中所述操作系统在执行应用程序之前,标识所述应用程序使用的库,并且如果所述库之一具有硬件实现,则将硬件库加载到所述现场可编程门阵列中以供所述应用程序访问。
7.如权利要求4所述的计算机器,其特征在于,所述操作系统随着时间复用所述应用程序对所述现场可编程门阵列的访问。
8.如权利要求7所述的计算机器,其特征在于,所述操作系统暂停使用所述现场可编程门阵列的进程以允许对所述现场可编程门阵列的编程。
9.如权利要求7所述的计算机器,其特征在于,如果另一具有较高优先级的进程正在使用所述现场可编程门阵列,那么具有低优先级的进程在访问所述现场可编程门阵列时被暂停。
10.如权利要求3所述的计算机器,其特征在于,所述操作系统为进程创建时间和空间调度来使用所述现场可编程门阵列的功能单元。
【文档编号】G06F9/50GK103455376SQ201310245064
【公开日】2013年12月18日 申请日期:2013年6月19日 优先权日:2012年6月20日
【发明者】E·B·南丁格尔 申请人:微软公司