用加速器的调用来动态替换软件库中的调用

文档序号:1146101 发布日期:2020-09-11 浏览:6次 >En<

阅读说明:本技术 用加速器的调用来动态替换软件库中的调用 (Dynamically replacing calls in a software library with accelerator calls ) 是由 L.G.汤姆森 P.沙尔特 J·C-T·陈 J.卡雷 于 2018-12-19 设计创作,主要内容包括:计算机程序包括对软件库的调用。建立虚拟功能表,其中包括对所述计算机程序中所述软件库的所述调用。一种可编程设备,包括一个或多个当前实现的加速器。确定当前实现的可用加速器。确定与当前实现的加速器相对应的所述软件库中的所述调用。对所述虚拟功能表中所述软件库的一个或多个调用将被替换为对相应的当前实现的加速器的一个或多个相应的调用。当可以在新加速器中实现软件库中的调用时,将动态生成所述新加速器的加速器映像。然后部署所述加速器映像以创建所述新加速器。所述虚拟功能表中对所述软件库的一个或多个调用被替换为对所述新加速器的一个或多个相应调用。(The computer program includes a call to a software library. Creating a virtual function table including the call to the software library in the computer program. A programmable device includes one or more currently implemented accelerators. Available accelerators for the current implementation are determined. Determining the call in the software library corresponding to the currently implemented accelerator. One or more calls to the software library in the virtual function table are replaced with one or more corresponding calls to the corresponding currently implemented accelerator. When a call in the software library can be implemented in a new accelerator, an accelerator image of the new accelerator will be dynamically generated. The accelerator image is then deployed to create the new accelerator. One or more calls to the software library in the virtual function table are replaced with one or more corresponding calls to the new accelerator.)

用加速器的调用来动态替换软件库中的调用

技术领域

本公开总体上涉及计算机系统,并且更具体地涉及计算机系统中的硬件加速器。

背景技术

开放式相干加速器处理器接口(OpenCAPI)是由行业领导者联盟开发的规范。OpenCAPI规范定义了一个接口,该接口允许任何处理器连接到一致的用户级加速器和I/O设备。OpenCAPI提供了高带宽、低延迟的开放接口设计规范,旨在降低高性能加速器设计的复杂性。OpenCAPI能够以每通道每秒25吉比特(Gbits)的速率进行传输,其性能优于当前的***组件互连Express(PCIe)规范,该规范提供了每通道每秒16Gbits的最大数据传输速率。OpenCAPI提供了一种以数据为中心的方法,使计算能力更接近数据,并消除了传统系统体系结构中的低效率,以帮助消除系统性能瓶颈并改善系统性能。OpenCAPI的显着优点是,处理器的虚拟地址可以以与处理器相同的方式在OpenCAPI设备(例如加速器)中共享和使用。随着OpenCAPI的发展,现在可以开发包含OpenCAPI架构接口的硬件加速器。

发明内容

本发明的各方面提供了一种计算机程序,其包括对软件库的调用。建立虚拟功能表,所述包括对计算机程序中软件库的调用。一种可编程设备,包括一个或多个当前实现的加速器。确定当前实现的可用加速器。确定所述软件库中与当前实现的加速器相对应的调用。对所述虚拟功能表中所述软件库的一个或多个调用将替换为对相应的当前实现的加速器的一个或多个相应的调用。当可以在新加速器中实现软件库中的调用时,将动态生成所述新加速器的加速器映像。然后部署所述加速器映像以创建所述新加速器。所述虚拟功能表中对所述软件库的一个或多个调用将被替换为对所述新加速器的一个或多个相应调用。

从第一方面来看,本发明提供一种设备,包括:至少一个处理器;以及耦接至所述至少一处理器的存储器;耦接至所述至少一处理器的可编程装置包括当前实现的加速器;一种驻留在所述存储器中并由所述至少一个处理器执行的计算机程序;驻留在所述存储器中的软件库,所述软件库包括由所述计算机程序调用的多个功能;驻留在所述存储器中并耦合到所述至少一个处理器的加速器部署工具,所述加速器部署工具确定对所述计算机程序中的所述软件库的多个调用,建立包括多个对所述软件的调用的虚拟功能表计算机程序中的库,确定所述可编程设备中所述当前实现的加速器可用,确定所述软件库中的多个调用中的第一个对应于所述当前实现的加速器,并将对所述虚拟函数表中所述软件库的第一次调用替换为对所述当前实现的加速器的调用。

优选地,本发明提供一种装置,其中所述可编程设备包括耦合到所述至少一个处理器的开放相干加速器处理器接口(OpenCAPI)。

优选地,本发明提供一种装置,其中,所述加速器部署工具确定可以在新加速器中实现所述软件库中的第二调用,为所述新加速器动态生成加速器映像,将所述加速器映像部署到所述可编程设备创建所述新加速器,并将对所述虚拟函数表中所述软件库的所述第二调用替换为对所述新加速器的调用。

优选地,本发明提供一种设备,其中所述新加速器不是所述可编程设备中所述当前实现的加速器。

优选地,本发明提供一种装置,其中所述加速器部署工具通过将所述计算机程序中的代码部分转换为硬件描述语言表示来动态地生成所述加速器映像,然后处理所述硬件描述语言表示以从中生成所述加速器映像。

优选地,本发明提供一种设备,其中,所述可编程设备包括现场可编程门阵列(FPGA)。

从第二方面来看,本发明提供一种装置,包括:至少一个处理器;以及耦接至所述至少一个处理器的存储器;耦合到所述至少一个处理器的现场可编程门阵列(FPGA),包括耦合到所述至少一个处理器的开放相干加速器处理器接口(OpenCAPI),其中所述FPGA包括当前实现的加速器;驻留在所述存储器中并由所述至少一个处理器执行的计算机程序;驻留在所述存储器中的软件库,所述软件库包括由所述计算机程序调用的多个功能;驻留在所述存储器中并耦合到所述至少一个处理器的加速器部署工具,所述加速器部署工具确定对所述计算机程序中所述软件库的多个调用,建立包括对所述计算机程序中的所述软件库的所述多个调用的虚拟功能表,确定所述可编程设备中所述当前实现的加速器可用,确定对应于当前实现的加速器的所述软件库中的所述多个调用中的第一个,通过调用所述当前实现的加速器来替换所述虚拟函数表中对所述软件库的所述第一个调的,确定所述软件库中的第二个调用可以在不是所述当前实现的加速器的新加速器中实现,通过转换在所述计算机程序中的代码部分为硬件描述语言表示来为所述新加速器动态生成加速器映像,然后处理所述硬件描述语言表示以生成这里所述加速器映像,将所述加速器映像部署到所述可编程设备以创建所述新加速器,并用对所述新加速器的调用替换对所述虚拟功能表中所述软件库的第二次调用。

从第三方面来看,本发明提供了一种用于改善计算机程序的运行时性能的方法,所述方法包括:在可编程设备中提供当前实现的加速器;提供软件库,其包括由所述计算机程序调用的多个功能;确定对所述计算机程序中的所述软件库的多个调用;建立虚拟功能表,其中包括对所述计算机程序中软件库的多次调用;确定所述可编程设备中所述当前实现的加速器可用;确定对应于当前实现的加速器的所述软件库中的多个调用中的第一个;将对所述虚拟功能表中所述软件库的第一次调用替换为对所述当前实现的加速器的调用。

优选地,本发明提供一种方法,其中所述可编程设备包括耦合到所述至少一个处理器的开放相干加速器处理器接口(OpenCAPI)。

优选地,本发明提供一种方法,所述方法还包括:确定可以在新加速器中实现所述软件库中的第二调用;为所述新加速器动态生成加速器映像;将所述加速器映像部署到所述可编程设备以创建所述新加速器;将对所述虚拟功能表中所述软件库的第二个调用替换为对所述新加速器的调用。

优选地,本发明提供一种方法,其中所述新加速器不是所述可编程设备中所述当前实现的加速器。

优选地,本发明提供一种方法,其中动态地为所述新加速器生成所述加速器映像,包括:将所述计算机程序中的代码部分转换为硬件描述语言表示;处理所述硬件描述语言表示以从中生成所述加速器映像。

优选地,本发明提供一种方法,其中所述可编程设备包括现场可编程门阵列(FPGA)。

如附图所示,根据以下更具体的描述,前述及其他特征和优点将变得明显。

附图说明

将结合附图描述本公开,其中相同的标号表示相同的元件,并且:

图1是示例系统的框图,示出了如何使用开放相干加速器处理器接口(OpenCAPI);

图2是具有OpenCAPI接口的可编程设备的流程图,该接口可以包括一个或多个硬件加速器;

图3是计算机系统的框图,该计算机系统包括用于为计算机程序中的代码部分动态生成和部署加速器的工具;

图4是示出图3中的加速器映像生成器如何从代码部分生成加速器映像的具体实现的流程图;

图5是图3中的代码分析器的

具体实施方式

的框图,所述分析器分析计算机程序并选择代码部分;

图6是一种方法的流程图,所述方法用于识别计算机程序中的代码部分,动态生成并部署与该代码部分相对应的加速器,然后修改计算机程序以用对部署的加速器的调用来替换该代码部分;

图7是示出具有不同代码部分的第一示例计算机程序的框图;

图8是示出如何将代码部分转换为HDL,然后转换为加速器映像的框图,所述图像可以被部署到可编程设备以提供加速器;

图9是表示在用对代码B部分的加速器的调用代替代码部分B之后的图7中的计算机程序的框图;

图10是示出样本加速器目录的框图;

图11是当维护先前生成的加速器的目录时用于为代码部分部署加速器的方法的流程图;

图12是示出具有不同代码部分的第二示例计算机程序的框图;

图13是表示图12中计算机程序中将受益于加速器的两个代码部分的框图;

图14是示出包括与代码Q部分相对应的加速器的样本加速器目录的框图。

图15是示出将图14中的目录中标识的代码Q部分的加速器映像部署到可编程设备的框图;

图16是示出在代码Q部分已被对代码Q部分的加速器的调用替换之后的图12中的计算机程序的框图;

图17是示出在图12和图16所示的计算机程序中从代码R部分生成加速器映像的框图。

图18是示出将代码R部分的新生成的加速器映像部署到可编程设备的框图。

图19是表示在用对所述代码R部分的加速器的调用代替了代码R部分之后的图16中的所述计算机程序的框图。

图20是在创建代表代码R部分的所述加速器的条目之后图14所示的所述加速器目录1400的框图;

图21是示例计算机程序的框图。

图22是具有OpenCAPI接口的可编程设备的框图,所述可编程设备包括图21中用于所述循环部分的加速器,图21中用于分支树部分的加速器和图21中用于长串行部分的加速器。

图23是在用对相应加速器的调用代替代码部分之后图21中的所述计算机程序的框图。

图24是调用软件库中的函数的现有技术计算机程序的框图。

图25是用对一个或多个当前实现的加速器的相应调用替换对所述软件库的调用的方法的流程图;

图26示出了一个虚拟功能表,它为从所述计算机程序到软件库的调用创建了一个间接级别。

图27是图24中计算机程序的框图,其中,对所述软件库的调用已被对所述虚拟功能表的调用所取代。

图28是加速器相关性表的方框图,示出了与所述软件库中的功能相对应的当前实现的加速器。

图29是可编程设备的框图,示出了图28的表中列出的所述三个当前实现的加速器;

图30示出了在对所述软件库的调用已被对相应的加速器的调用替换之后的图26中的所述虚拟功能表;

图31是一种用于生成新加速器并将对软件库的一个或多个调用替换为对所述新加速器的一个或多个对应调用的方法的流程图;

图32是可编程装置的框图,示出了图31中产生的所述三个先前产生的加速器和所述一个新产生的加速器,和

图33示出了在将对软件库的调用替换为对新加速器的相应调用之后的图26和30中的所述虚拟功能表。

具体实施方式

如以上背景技术部分中所讨论的,所述开放式相干加速器处理器接口(OpenCAPI)是定义了一种接口的规范,所述接口允许任何处理器连接至相干的用户级加速器和I/O设备。参照图1,示出了示例计算机系统100以说明与OpenCAPI接口150有关的一些概念。如本领域所公知的,处理器110耦合至标准存储器140或存储器层次结构。处理器通过PCIe接口120耦合到一个或多个PCIe设备130。所述处理器110还通过OpenCAPI接口150耦合到一个或多个相关设备,例如加速器160、相关网络控制器170、高级存储器180以及控制存储在存储装置195中的数据的相关存储控制器190。同时,所述OpenCAPI接口150为了说明的目的,图1中的CAPI被示为单独的实体,而不是图1中所示的是单独的接口,所述OpenCAPI接口150可以在每个相干设备内实现。因此,加速器160可以具有其自己的OpenCAPI接口,其他相干设备170、180和190也可以。OpenCAPI的显著优势之一是所述处理器110的虚拟地址可以与耦合到OpenCAPI接口或包含OpenCAPI接口的相关设备共享,从而允许它们以与所述处理器110相同的方式使用虚拟地址。

将加速器部署到可编程设备是本领域中众所周知的。参照图2,可编程设备200代表任何合适的可编程设备。例如,所述可编程设备200可以是FPGA或ASIC。可以在可编程设备内实现OpenCAPI接口210。另外,可以在可编程设备200中实现一个或多个加速器。图1通过示例的方式示出了加速器1 220A、加速器2 220B,...,加速器N 220N。在现有技术中,人工设计人员将基于需要通过在硬件中实现来加速的功能来确定需要哪种类型的加速器。加速器功能可以例如以硬件描述语言(HDL)来表示。然后,使用已知工具,设计人员可以生成与HDL对应的加速器映像。加速器映像一旦加载到诸如图2中的200之类的可编程设备中,就会在可编程设备中创建一个加速器、一个或多个计算机程序可以根据需要调用所述所述加速器以提供一个或多个硬件加速器。

计算机程序包括对软件库的调用。建立虚拟功能表,其中包括对所述计算机程序中所述软件库的调用。一种可编程设备,包括一个或多个当前实现的加速器。确定当前实现的所述可用加速器。确定所述软件库中与所述当前实现的加速器相对应的所述调用。对所述虚拟功能表中所述软件库的一个或多个调用将替换为对相应的所述当前实现的加速器的一个或多个相应的调用。当可以在所述新加速器中实现所述软件库中的调用时,将动态生成所述新加速器的加速器映像。然后部署所述加速器映像以创建所述新加速器。所述虚拟功能表中对所述软件库的一个或多个调用将替换为对所述新加速器的一个或多个相应调用。

参照图3,计算机系统300是计算机系统的一种合适的实现,其包括加速器部署工具,如下面更详细描述的,所述加速器部署工具将对软件库的调用动态地替换为对一个或多个加速器的调用。服务器计算机系统300是IBMPOWER9计算机系统。然而,本领域技术人员将理解,本文中的公开内容同样适用于任何计算机系统,而不管所述计算机系统是否是复杂的多用户计算装置、单用户工作站、膝上型计算机系统、平板计算机、手机或嵌入式控制系统。如图3所示,计算机系统300包括一个或多个处理器310、可编程设备312、主存储器320、大容量存储接口330、显示接口340和网络接口350。这些系统组件通过使用系统总线360互连。大容量存储接口330用于将大容量存储设备(例如本地大容量存储设备355)连接到计算机系统300。一种特定类型的本地大容量存储设备355是可读和可写的CD-RW驱动器,其可以将数据存储到CD-RW 395或从CD-RW 395读取数据。另一种合适的本地大容量存储设备355是读卡器,它接收可移动存储卡(例如SD卡)并对所述可移动存储器进行读写操作。本地海量存储设备355的另一合适类型是通用串行总线(USB),其读取诸如拇指驱动器的存储设备。

主存储器320优选地包含数据321、操作系统322、计算机程序323、加速器部署工具324和加速器目录329。数据321表示用作计算机系统300中任何程序的输入或输出的任何数据。操作系统322是一个多任务操作系统,诸如AIX或LINUX。计算机程序323代表任何合适的计算机程序,包括但不限于应用程序、操作系统、固件、设备驱动器等。所述加速器部署工具324优选地包括代码分析器325、加速器映像生成器327和加速器实现器328。所述代码分析器325在所述计算机程序324运行时对其进行分析以确定其运行时性能。所述代码分析器325分析所述计算机程序的一种合适方式是使用已知的技术来监视计算机程序的运行时性能。例如,本领域中存在工具,其允许使用计算机程序外部的监视器来实时监视计算机程序的运行时性能,所述监视器检测例如在所述计算机程序323的执行期间所述处理器310正在执行哪些地址。被称为探查器(profilers)的其他工具允许将检测代码***计算机程序,该代码是在执行计算机程序的不同分支时递增不同计数器的代码。可以分析所述计数器的值以确定执行所述计算机程序的每个部分的频率。所述代码分析器325在分析所述计算机程序的运行时性能之后,识别出代码部分326,所述代码部分326是计算机程序323中的一部分代码,将被部署到硬件加速器进行改进以增强所述计算机程序323的运行性能方面

所述加速器映像生成器327动态地生成与由所述代码分析器325识别的所述计算机程序323中的所述代码部分326相对应的加速器映像。所述加速器映像生成器327可以使用任何合适的方法从代码部分326生成加速器映像。例如,所述加速器映像生成器327可以生成所述代码部分326的等效硬件描述语言(HDL)表示,然后将HDL表示合成为用于所述可编程设备312的合适的加速器映像。所述加速器实现器328优选地拍摄由所述加速器映像生成器327生成的加速器映像,并使用该加速器映像来对所述可编程设备312进行编程,从而在所述可编程设备312中生成与代码部分326相对应的硬件加速器314。

在第一实现中,所述加速器部署工具324动态生成与所述计算机程序323的所述代码部分326相对应的加速器映像,然后用该加速器映像对所述可编程设备进行编程,因此所述可编程设备包括与所述编码部分326相对应的硬件加速器。在第二实现中,加速器329的目录被设置和维护。所述加速器目录329优选地包括先前生成的加速器的列表。在第二种实现方式中,所述加速器部署工具324首先检查加速器目录329,以查看先前生成的加速器是否可用于所述代码部分326。如果是这样,则所述加速器部署工具324部署在所述加速器目录中标识的先前生成的加速器映像。如果不是,则所述加速器部署工具324如上所述动态地生成加速器映像,然后将所述图像加载到所述可编程设备312中以提供与所述代码部分326相对应的所述加速器314。

计算机系统300利用众所周知的虚拟寻址机制,该机制使计算机系统300的程序的行为就好像它们只能访问一个大的、连续的地址空间,而不是访问多个、较小的存储实体例如主存储器320和本地大容量存储设备355。因此,虽然数据321、操作系统322、计算机程序323、加速器部署工具324和加速器目录329显示为驻留在主存储器320中,但本领域技术人员将认识到这些项不是必须同时全部全部包含在主存储器320中。还应该注意,术语“存储器”在本文中一般地用于指代计算机系统300的整个虚拟存储器,并且可以包括耦合到计算机系统300的其他计算机系统的虚拟存储器。

处理器310可以由一个或多个微处理器和/或集成电路构成。处理器310可以是例如一个或多个POWER9微处理器。处理器310执行存储在主存储器320中的程序指令。主存储器320存储处理器310可以访问的程序和数据。当计算机系统300启动时,处理器310首先执行组成操作系统322的程序指令。处理器310还执行所述计算机程序323和所述加速器部署工具324。

可编程设备312可以是可由处理器310动态编程的任何合适的可编程逻辑设备。已知的合适的可编程逻辑设备的示例包括现场可编程门阵列(FPGA)。但是,可编程设备312广泛地包括允许处理器310对可编程设备312进行动态编程的任何可编程逻辑设备,包括已知技术以及将来开发的技术。

尽管计算机系统300被示为仅包含单个处理器和单个系统总线,但是本领域技术人员将理解,可以使用具有多个处理器和/或多个系统总线的计算机系统来实践本文所述的加速器部署工具。另外,优选地使用的每个接口均包括单独的、完全编程的微处理器,用于从处理器310卸载计算密集型处理。但是,本领域技术人员将意识到,可以使用I/O适配器执行这些功能。

显示界面340用于将一个或多个显示器365直接连接到计算机系统300。这些显示器365可以是非智能(即哑终端(dumb))或完全可编程的工作站,其用于向系统管理员和用户提供信息并具有与计算机系统300通信的能力。然而,请注意,尽管提供了显示接口340以支持与一个或多个显示器365的通信,但是计算机系统300不一定需要显示器365,因为与用户和其他进程的所有必需交互可能会通过网络接口350发生。

网络接口350用于通过网络370将计算机系统300连接到其他计算机系统或工作站375。计算机系统375表示通过网络接口350连接到计算机系统300的计算机系统。网络接口350广泛地表示任何互连电子设备的合适方式,不论网络370是否包括当今的模拟和/或数字技术,还是通过未来的某些联网机制。网络接口350优选地包括允许在所述网络370上通信的硬件和软件的组合。所述网络接口350中的软件优选地包括通信管理器,该通信管理器使用合适的网络协议经由网络370管理与其他计算机系统375的通信。可以使用许多不同的网络协议来实现网络。这些协议是允许计算机通过网络进行通信的专用计算机程序。TCP/IP(传输控制协议/Internet协议)是所述网络接口350内的通信管理器可以使用的合适网络协议的示例。在一个合适的实现中,所述网络接口350是物理以太网适配器。

本发明可以是处于任何可能的技术细节集成水平的系统、方法和/或计算机程序产品。该计算机程序产品可以包括其上具有用于使处理器执行本发明的方面的计算机可读程序指令的计算机可读存储介质。

计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是――但不限于――电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD-ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。

这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。

用于执行本发明操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、集成电路配置数据或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本发明的各个方面。

这里参照根据本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本发明的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。

这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。

也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。

附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

图4示出了图3所示的加速器映像生成器327的一种合适的实现方式的细节。加速器映像生成器327将图3和图4所示的代码部分326作为输入。到HDL生成器410的代码优选地以硬件描述语言(HDL)将所述代码部分326转换为代码部分的对应表示,在图4中被示为用于代码部分420的HDL。已知的合适的硬件描述语言包括:VHDL或Verilog,但可以使用任何合适的硬件描述语言。存在用于生成计算机代码的HDL表示的已知软件工具。例如,Xilinx的Vivaldo高级合成是一种软件工具,可以将用C编程语言编写的代码转换为HDL。这种类型的工具在本领域中通常被称为“CtoHDL”工具或“CtoRTL”工具,其中RTL指的是在硬件中实现代码部分所需的代码部分的寄存器传输级别表示。图4中的HDL生成器410的代码可以是已知的软件工具,也可以是专门为加速器映像生成器327设计的软件工具。

用于所述代码部分420的所述HDL被馈入一个或多个过程,该过程可以包括合成和仿真。在图4的中间部分的步骤432、434、436、438和440中示出了所述合成过程430。在图4的下部的步骤452、454和460中示出了模拟过程450。用于代码的HDL部分420可以被馈送到所述同步模块432,所述同步模块432确定需要哪些硬件元件。所述放置和布线模块434确定将可编程硬件放置在可编程设备上的何处,以及如何布线这些硬件之间的互连。时序分析436在框434中放置硬件元件并路由互连之后分析加速器的性能。测试模块438对所得的加速器映像进行测试以确定是否满足时序和性能参数。当加速器的设计仍然需要改进时,测试模块438反馈到调试模块440。此过程可能会重复几次。

所述仿真过程450接受所述代码部分420的所述HDL,并执行计算机仿真以确定其功能。模拟测试模块454确定模拟设计是否根据需要起作用。当加速器的设计仍需要改进时,所述模拟测试模块454反馈到调试模块460。

所述加速器映像生成器327可以包括所述合成模块430、所述模拟模块450或两者。在最优选的实施方式中,所述加速器映像生成器327包括所述合成模块430和所述仿真模块450。合成过程可能非常耗时。在测试HDL设计时,仿真模块通常比合成模块快得多。当合成430和仿真450都存在时,所述加速器映像生成器可以以任何合适的方式或组合使用这两者。例如,所述仿真模块450可以最初用于在设计上迭代几次,并且当设计大部分完成时,可以将大部分完成的设计馈入合成模块430。在另一种实现方式中,合成和仿真这些模块可以并行运行并协作,直到完成加速器映像的生成为止。不管所使用的具体过程如何,所述加速器映像生成器327为所述代码部分326生成与所述代码部分326相对应的加速器映像480。一旦生成了所述加速器映像480,图3中的所述加速器实现器328就可以加载所述加速器图像480进入所述可编程设备312,以产生对应于所述代码部分326的加速器314。然后可以由计算机程序代替所述代码部分326来调用所述可编程设备312中的所述加速器314。

图5中示出了图3中的所述代码分析器325的一种可能的实现方式的一些细节。所述代码分析器325可以包括用于对计算机程序进行分析的代码评估器510。由所述代码评估器510完成剖析,所述代码评估器510优选地将仪器代码***所述计算机程序中以在所述计算机程序运行时生成性能数据520。所述性能数据520指示的计算机程序的许多可能的功能,包括执行不同的部分、数量或循环迭代、异常产生、数据要求、带宽、在一个关键部分花费的时间等。软件分析器在本领域中是公知的,因此这里不再详细讨论。出于本文的目的,可以说所述代码评估器510生成表示要被分析的所述计算机程序的运行时性能的性能数据520。

所述代码分析器325还包括代码选择工具530,该代码选择工具530标识将在硬件加速器中实现而得到改进的代码部分326。可以根据任何合适的准则、算法或启发式来识别任何合适的代码部分。例如,可以识别执行浮点计算的部分代码,以便可以生成相应的浮点加速器以执行代码中的浮点计算。可以识别执行数据库搜索的一部分代码,以便可以生成相应的数据库搜索加速器来替换数据库搜索。还可以识别执行特定功能(如数据压缩、XML解析、数据包监听、财务风险计算等)的一部分代码。当然,在本文的公开内容和权利要求的范围内可以识别其他代码部分。所述代码选择工具530可以使用任何合适的准则、算法或试探法,无论是当前已知的还是将来开发的,以识别代码部分326。一旦已经识别了计算机程序中的所述代码部分326,就可以动态生成相应的加速器。。

参照图6,本文中根据本公开和权利要求的方法600通过运行计算机程序开始(步骤610)。分析计算机程序的运行时性能(步骤620)。例如,这可以通过上面已经讨论的图3和5中所示的所述代码分析器325来完成。识别所述计算机程序中的代码部分以在加速器中实现(步骤630)。生成用于所述代码部分的加速器映像(步骤640)。所述加速器映像被部署到可编程设备(步骤650)。然后修改所述计算机程序以用对所述部署的加速器的调用来替换所述代码部分(步骤660)。此时,所述部署的加速器将在硬件中执行以前由代码部分执行的功能,从而提高所述计算机程序的运行时性能。注意,方法600循环回到步骤610并继续,这意味着方法600可以迭代以连续地监视所述计算机程序并根据需要部署加速器以改善所述计算机程序的性能。

现在提供一些示例来说明上述概念。图7示出了示例计算机程序700,其包括多个代码部分,在图7中被示为代码部分A 710、代码部分B 720、代码部分C 730,...,代码部分N790。我们假设代码部分B 720被标识为将从硬件加速器中实现的代码部分改进。然后将代码部分B 720转换为相应的HDL表示810,如图8所示。然后将所述代码部分B 810的HDL用于生成代码部分B 820的加速器映像。例如,可以使用可以使用图4中所示的方法,也可以使用任何其他合适的方法。一旦生成了代码部分B820的所述加速器映像,就将所述加速器映像加载到可编程设备830中,以生成代码部分B 850的所述加速器。可编程设备830是图3所示所述可编程设备312的一种合适的实现方式,并且优选地包括OpenCAPI接口840。

一旦所述加速器被部署在所述可编程装置830,在所述计算机程序中所述代码部分B被删除,并被在图9中示出的用于代码部分B 910的加速器调用所替换。在最优选的实施方式中,所述代码部分B的加速器包含对所述代码的返回,一旦完成加速器中代码部分B的处理所述代码就将其返回。以这种方式,所述计算机程序900在需要执行之前的代码部分B时,将调用代码部分B的所述加速器,所述加速器将在硬件中执行所需的功能,然后返回到所述计算机程序。以这种方式,可以为识别出的代码部分自动生成合适的加速器,以提高计算机程序的运行时性能。

在第一实施方式中,可以动态生成加速器以改善计算机程序的性能,如图4-9所示和上面已经描述的。在第二种实现中,一旦动态生成了加速器,就可以将其存储在目录中,以便在需要时可以重复使用。图10示出了样本加速器目录1000,其是图3所示的所述加速器目录329的一种合适的实现。加速器目录可以包括加速器或相应的代码部分可能需要的任何合适的数据或信息。对于图10所示的特定示例,加速器目录包括以下每个字段:名称、位置、最近最少使用(LRU)、最近最多使用(MRU)、依赖性、功能、延迟和其他特征。所述名称字段优选地包括加速器的名称。所述名称字段还可包括对应于所述加速器的代码部分的名称。所述位置字段优选地指定标识加速器映像的位置的路径。尽管所述加速器映像可以存储在所述目录1000中,但在最优选的实现中,所述目录1000而是包括一条路径,其用于存储所述加速器映像的所述加速器目录1000外部的存储。最近最少使用(LRU)字段可以包括第一次使用加速器的时间。或者,所述LRU字段可以包含一个标志,所述标志在所述加速器是目录中所有加速器中最不常用的加速器时设置。所述最近最多使用(MRU)字段可以包括最后一次使用加速器的时间。或者,所述MRU字段可以包含一个标志,所述标志在所述加速器是目录中所有加速器中最近最多使用的加速器时设置。所述错误率字段为所述加速器提供合适的错误率,并且可以以任何合适的方式表示。对于图10中的示例,所述错误率表示为所述加速器每运行100次的错误数X。所述错误率字段可以包括任何合适的错误信息,例如,可以动态监控这些错误信息,因此所述错误率的增加可能导致采取纠正措施的通知。所述依赖性字段可以指示所述加速器可能具有的任何依赖性。例如,所述依赖性字段可以指定所述加速器设计用于的特定可编程设备。所述依赖项字段还可以指定对其他加速器的任何依赖项。因此,图10中的加速器Acc 1依赖于Acc 2,这意味着Acc 1还需要实现Acc 2。所述功能字段可以提供所述加速器的所述功能的任何适当指示。在图10所示的两个条目中,功能显示Acc 1的为FP单元和Acc N的为图形。但是请注意,可以以任何合适的方式指示功能。例如,功能可以包括针对其实施加速器的代码部分的规范。可以维持将每个代码部分与其对应的加速器相关联的单独索引,以及描述该代码部分的属性的描述符或其他数据。所述功能字段可以包括任何适当的信息,例如指向索引的指针,因此可以轻松识别与所述加速器相对应的代码部分。

所述等待时间字段优选地指定所述加速器的平均等待时间。对于图10所示的示例,Acc1的延迟为1.0微秒,而加速器Acc N的延迟为500纳秒。延迟可以表示例如加速器执行其预期功能所需的时间。其他特征字段可以包括描述或以其他方式标识加速器,其特征和属性以及与加速器相对应的代码部分的任何其他合适的信息或数据。对于图10中的两个示例条目,其他特性字段指示Acc1包括网络连接,并且Acc N与Acc 5有亲缘关系,这意味着,如果可能,应将Acc N放置在与Acc 5紧邻的位置。通过示例的方式示出了图10中的各个字段,并且在本文的公开和权利要求的范围内提供具有任何合适的信息或数据的加速器目录。

参照图11,根据第二实施方式的方法1100通过运行所述计算机程序开始(步骤1110)。分析所述计算机程序的运行时性能(步骤1120)。识别将通过使用硬件加速器来改进的计算机程序中的一个或多个代码部分(步骤1130)。选择所述所识别的代码部分之一(步骤1140)。当在所述加速器目录中针对所选代码部分存在先前生成的加速器时(步骤1150=是),所述先前生成的加速器映像被部署到所述可编程设备(步骤1160)以提供所述加速器。然后修改所述计算机程序,以用对所述加速器的调用来替换所述所选择的代码部分(步骤1162)。当目录中没有针对所述所选代码部分的先前生成的加速器时(步骤1150=否),动态生成所述所选代码部分的加速器映像(步骤1170),将所述加速器映像部署到可编程设备中(步骤1172),所述计算机程序被修改以用对所述新部署的加速器的调用来替换所述代码部分(步骤1174),并且所述加速器被存储到加速器目录中(步骤1176)。当加速器映像被存储在目录条目内时,步骤1176将加速器映像写入目录。当加速器映像被存储在目录外部的存储器中时,步骤1176将加速器映像存储到外部存储器,并且将包括加速器映像的路径的条目写入到加速器目录中。

当存在更多识别出的代码部分时(步骤1180=是),方法1100循环回到步骤1140并继续。当不再有识别出的代码部分时(步骤1180=否),方法1100循环回到步骤1120并继续。这意味着方法1100最优选地连续监视计算机程序并根据需要动态地生成和/或部署加速器以改善计算机程序的运行时性能。

现在提供示例来说明图11中与第二优选实施方式有关的概念。图12示出了示例计算机程序1200,其包括许多代码部分,在图12中表示为代码部分P1210、代码部分Q1220、代码部分R1230,...,代码部分Z1290。我们假设执行图11中的步骤1110、1120和1130。在步骤1130中,我们假设代码部分Q1220和代码部分R1230被识别为将通过在加速器中实现这些代码部分而得到改进的代码部分,如图13中的表1300所示。我们进一步假定我们具有加速器目录1400是图3所示的所述加速器目录329的一种合适实现。加速器目录1400具有Acc Q的单个条目,我们假定它是先前生成的代码部分Q1220的加速器。由于代码部分Q的所述加速器是先前生成的,因此可以使用相应的加速器映像,而不必重新生成加速器映像。我们假设在步骤1140中选择了代码部分Q1220。在目录中,对于代码部分Q有一个先前生成的加速器(步骤1150=是),因此,与代码部分Q1510对应的先前生成的加速器映像被部署到了可编程设备(步骤1160),如图15所示。将目录中标识的代码部分Q1510的加速器映像部署到可编程设备1520导致在可编程设备1520中实现代码部分Q1540的加速器。然后,计算机程序可以将代码部分Q1540的加速器调用为在硬件中执行先前代码部分Q的功能,从而提高计算机程序的运行时性能。所述可编程设备1520是图3所示的所述可编程设备312的一个合适的示例,并且优选地包括OpenCAPI接口1530。

然后,对所述计算机程序进行修改以用对代码部分Q的加速器的调用来替换所述所选代码部分Q1220(步骤1162)。图16显示了图12中的计算机程序1200,已将代码部分Q替换为对代码部分Q的加速器的调用,如图16中的1610所示。因此,计算机程序1600代替了执行代码部分Q,而是调用可编程设备1520中代码部分Q1540的加速器,以提高计算机程序的运行时性能。

仍然存在标识的代码部分(步骤1180=是),即图13中所示的代码部分R,因此图11中的方法11循环回到步骤1140,在其中选择了代码部分R1230(步骤1140)。在图14中所示的所述目录1400中,对于代码部分R没有先前生成的加速器(步骤1150=否),因此为代码部分R动态生成加速器映像(步骤1170)。这在图17中表示,其中所述代码部分R1230用于生成代码部分R1710的HDL,所述HDL用于生成代码部分R1720的所述加速器映像。所述代码部分R1720的加速器映像是新的动态生成的,然后所述加速器映像被部署到所述可编程设备(步骤1172)。这在图18中示出,其中已经包括用于代码部分Q1540的加速器的所述可编程设备1520装载了用于代码部分R1720的所述加速器映像,以生成用于代码部分R1810的加速器。然后修改所述计算机程序用与对所述代码部分R的加速器的调用替换代码部分R(步骤1174)。所述代码部分R的加速器也存储在所述加速器目录中(步骤1176),导致所述加速器目录1400包含对应于两个加速器的条目Acc Q和Acc R,如图20所示。

在图21和22中示出了更具体的示例。对于该示例,我们假设名为示例12100的计算机程序包括感兴趣的三个不同代码部分,即循环部分2110、分支树部分2120和长串行部分2130。循环部分2110代表代码部分,该代码部分是可以展开的循环,因为每次迭代在很大程度上都独立于其他迭代。由于每个所述迭代的独立性,可以展开所述循环,并且可以将所述循环功能部署到加速器,因此每个迭代将在硬件中并行运行。金融风险计算有时包括代码部分,例如循环部分2110。在硬件加速器中并行运行所述循环的不同迭代可提高示例1计算机程序的运行时性能。

计算机程序示例1 2100还包括分支树部分2120。我们假设所述示例性分支树部分2120在一个或多个相对较深的分支树上运行。在这种情况下,可以将所述分支树部分2120部署到加速器,因此所述分支树的每个分支将在硬件中并行运行,将计算所述分支选择标准,并且在所述逻辑的最后阶段将从所述所选分支中选择得出结果。在硬件加速器中并行运行所述分支树的不同分支可以提高所述示例1计算机程序的运行时性能。

计算机程序示例1 2100还包括长串行部分2130。对于本示例,我们假设可以通过利用加速器中的独特硬件功能来缩短所述长串行部分2130。例如,某些数学函数可能会在加速器中实现长串行部分。在硬件中运行长串行部分可提高所述示例1计算机程序的运行时性能。

我们假设图21中的所述代码部分是根据图5中的所述代码评估器510生成的性能数据520标识的。所述代码选择工具530用于选择所述代码部分2110、2120和2130的准则是图3和5中的、可以是任何合适的标准的代码部分326的示例。如上所述,图21中的三个示例代码部分2110、2120和2130指示可由所述代码选择工具530用来选择要在一个或多个加速器中实现的代码部分2110、2120和2130的合适标准。当然,本文的权利要求书和公开内容明确地扩展到所述代码选择工具530以选择将在一个或多个加速器中实现的一个或多个代码部分326的任何适当标准。

图22示出了具有OpenCAPI接口2230的可编程设备2220,该可编程设备2220包括用于循环部分2240的加速器,用于分支树部分2250的加速器和用于长串行部分2260的加速器。在图22中的相同可编程设备2220中实现这些功能时,本领域技术人员将认识到,这些功能也可以在单独的可编程设备中实现。

图23显示了在用图22中所示的硬件加速器的调用替换了图21中所示的代码部分之后的所述计算机程序示例1 2100,因此,图21中的循环部分2110已由对所述加速器的调用代替环形部分2310;图21中的所述分支树部分2320已经由对所述分支树部分2320的所述加速器的调用所代替;而且,图21中的所述长序列部分2130已由对所述长序列部分2330的所述加速器的调用所代替。由于图23中的所述示例1计算机程序2100现在包括对硬件加速器的调用,因此所述计算机程序2100的运行时性能增加。

图24示出了包括对软件库2410中的函数的调用的现有技术计算机程序2400。软件库在本领域中是众所周知的,并且提供程序员可以使用的通用功能,而不必对这些通用功能进行编码。例如,执行压缩、图形操作和XML解析的功能可以包含在软件库中。计算机程序2400包括代码部分D 2420、代码部分E 2422、代码部分F 2424,可能还有未示出的其他代码部分(通过代码部分L 2428)。软件库2410包括函数L1 2430、L2 2432、L3 2434、L4 2436,通过LN 2450获得其他功能。计算机程序2400中的代码部分D 2420包括对软件库2410中的函数L1 2430的调用。代码部分F 2424包括对软件库2410中的函数L4 2436的调用。代码部分L2428包括对软件库2410中的函数L2 2432的调用。

参考图25,方法2500优选地由图3中的所述加速器部署工具324执行。确定对所述软件库的在所述计算机程序中的调用(步骤2510)。建立虚拟功能表,其包括对所述软件库的调用(步骤2520)。确定当前在一个或多个可编程设备中实现的所述可用加速器(步骤2530)。确定所述软件库中与当前实现的加速器相应的调用(步骤2540)。然后用对相应的当前实现的加速器的一个或多个相应的调用来替换对所述虚拟功能表中的所述软件库的一个或多个功能的调用(步骤2550)。注意,方法2500然后循环回到步骤2510,指示该方法可以在部署或移除加速器时连续执行其功能。

虚拟功能表的一种特定实现在图26中的2600处示出。所述虚拟功能表2600列出了来自所述计算机程序的先前直接向所述软件库直接进行的调用,并创建了一个间接级别,以便这些调用可以尽可能使用加速器。如图24中的计算机程序2700所示,图24中的所述计算机程序2400中的所述调用已被对所述虚拟功能表2600中的所述函数的调用所代替。因此,对L1的所述调用被对F1的调用所替代;对L4的所述调用将替换为对F4的调用;而对L2的所述调用将替换为对F2的调用。所述虚拟功能表2600指示对于来自所述计算机程序的每个调用要调用哪些功能。最初构建所述虚拟功能表时,来自所述计算机程序的每个调用都映射到对所述软件库的相应调用。修改后的计算机程序2700和虚拟功能表2600因此提供了如图24所示的类似功能,但是具有一定程度的间接性。因此,代码部分D 2720调用所述虚拟功能表2600中的功能F1,其生成对所述软件库中的L1的调用。代码部分F 2724调用所述虚拟功能表2600中的函数F4,其在所述软件库中生成对L4的调用。代码部分L 2728调用所述虚拟函数表中的函数F2,所述函数F2生成对L2的调用是软件库。我们从这个简单的示例中看到,在最初构建所述虚拟功能表时,它提供了如图24所示的类似功能,即,对所述虚拟功能表的每次调用都会导致对所述软件库的相应调用。

图28示出了加速器相关性表2800。对于该示例,我们假设已经部署了三个加速器,即Acc1,Acc2和Acc3。我们假设这些加速器对应于所述软件库中的三个功能。因此,Acc1对应于库功能L4;Acc2对应于库功能L1;以及Acc3对应于库功能L2,如图28所示。所述加速器和库功能之间的相关性可以通过任何合适的方式确定,包括用户手动生成所述加速器相关性表的条目,或者所述加速器部署工具自动确定加速器和库功能之间的相关性。对于由用户手动生成的加速器,所述用户可以使用相同的库名和功能名,从而使代码链接器能够自动检测所述加速器并创建对所述加速器而不是所述软件库的调用。类似地,自动生成的加速器可以使用相同的库名称和函数名称,从而使所述代码链接器以类似的方式起作用,以自动检测所述加速器并创建对所述加速器而不是对所述软件库的调用。在不同的实现中,所述加速器可以包括表征其功能的数据,从而允许查询所述加速器以确定其支持的所述功能,该信息可用对所述加速器的调用代替对所述软件库的调用。

图29示出了可编程设备2900,所述可编程设备2900包括OpenCAPI接口2230和图28中引用的所述三个加速器Acc1、Acc2和Acc3。这三个加速器2910、2920和2930是当前实现的加速器,因为它们已经存在于可编程设备2900中。图29还显示,尚未使用的可编程设备2900可用的资源2950。

现在,我们参考图26-29中的特定示例考虑图25中的方法2500。步骤2510和2520构建图26中的所述虚拟功能表2600。步骤2530确定Acc1 2910,Acc2 2920和Acc3 2930当前在可编程设备2900中实现并且可供使用。步骤2540读取所述加速器相关表2800,以判定Acc1对应于库功能L4。Acc2对应于库功能L1;Acc3对应于库功能L2。如上所述,这些库功能可以是执行压缩、图形操作、XML解析或任何其他合适的库功能的函数。然后,步骤2550用对所述当前实现的加速器的调用替换对所述虚拟功能表中所述软件库的调用,如图30中的虚拟功能表2600所示。因此,所述虚拟功能表提供了一个间接级别,该级别允许动态替换驱动程序。在没有所述计算机程序知道所述软件库功能已在加速器中实现的情况下,通过调用加速器来调用软件库。结果以对计算机程序透明的方式改善了计算机程序的运行时性能。

在替代实施例中,不仅可以将当前实现的加速器用于替换对软件库功能的调用,而且还可以动态生成新加速器来替换对软件库功能的调用。参考图31,当不能在新加速器中实现对软件库的调用时(步骤3110=否),方法3100循环回到步骤3110,并继续直到可以在新加速器中实现对所述软件库的调用(步骤3110=是)。决定是否可以在新加速器中实现对所述软件库的调用的一个因素是一个或多个可编程设备上的所述可用资源。例如,如果图29中的所述可用资源2950提供了足够的资源来实现对可以部署到所述可用资源2950中的新加速器中的所述软件库的调用,则步骤3110可以为是。动态生成用于所述新加速器的所述加速器映像(步骤3120)。动态生成新加速器映像的一种合适方式是使用上面详细讨论的图4中的所述过程。当然,动态生成加速器映像的其他方式也在本公开和权利要求的范围内。然后将在步骤3120中动态生成的加速器映像部署到可编程设备以创建新加速器(步骤3130)。对所述虚拟功能表中的所述软件库的一个或多个调用被与所述新加速器的对应的一个或多个调用替换(步骤3140)。方法3100然后循环回到步骤3110,并继续,指示方法3100可以根据需要连续地监视和起作用以创建新加速器。

我们在讨论图31中的方法3100时将继续参考图26-30中的相同示例。我们假定步骤3110确定对所述软件库中L3的调用可以在新加速器中实现(步骤3110=是)。我们假设在步骤3120中生成了称为Acc4的所述新加速器的加速器映像,然后在步骤3130中将其部署到可编程设备。我们假定Acc4的映像已部署到图29中所示的同一可编程设备2900,从而产生了包括Acc1 2910、Acc2 2920、Acc3 2930和Acc4 3240的设备2900,如图32所示。请注意,所述可用资源3250小于图29中的资源,因为Acc4已经使用了其中一些资源。然后,图31中的步骤3140将对所述虚拟功能表中对L4的调用替换为对Acc4的调用,如图33所示。此时,当所述计算机程序调用所述虚拟功能表2600中的功能F4时,将调用Acc4执行此功能,而不是通过调用所述软件库执行所述功能。

图8、15和22中所示的加速器可包含一个OpenCAPI接口。但是请注意,如本文所公开和要求的那样,OpenCAPI接口并非严格必需以动态生成和部署加速器。将加速器部署到包含OpenCAPI接口的可编程设备非常有用,因为OpenCAPI规范是开放的,允许任何人开发该规范并在云环境中进行互操作。另外,所述OpenCAPI接口提供了较低的延迟,从而减少了所述加速器与其可能消耗或产生的数据之间的“距离”。此外,OpenCAPI提供了更高的带宽,从而增加了所述加速器在给定时间内可以消耗或产生的数据量。OpenCAPI的这些优点相结合,为在加速器中实现计算机程序的代码部分提供了良好的环境,并降低了在加速器中比在所述计算机程序中更好的代码部分的阈值。但是,本文的公开内容和权利要求同样适用于不包括或不能访问OpenCAPI接口的加速器。

计算机程序包括对软件库的调用。建立虚拟功能表,其中包括对所述计算机程序中所述软件库的所述调用。一种可编程设备,包括一个或多个当前实现的加速器。确定当前实现的可用加速器。确定所述软件库中与当前实现的加速器相对应的所述调用。对所述虚拟功能表中所述软件库的一个或多个调用将替换为对所述相应的当前实现的加速器的一个或多个相应的调用。当可以在新加速器中实现软件库中的调用时,将动态生成所述新加速器的加速器映像。然后部署所述加速器映像以创建所述新加速器。所述虚拟功能表中对所述软件库的一个或多个调用将替换为对所述新加速器的一个或多个相应调用。

本领域的技术人员将理解,在权利要求的范围内许多变化是可能的。因此,尽管以上具体示出和描述了本公开,但是本领域技术人员将理解,在不脱离权利要求的范围的情况下,可以在形式和细节上进行这些和其他改变。

40页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:针对联动存储器设备调度存储器请求

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!