利用虚拟化的大规模并行可编程硬件来搜索正则表达式的制作方法

文档序号:6349760阅读:157来源:国知局
专利名称:利用虚拟化的大规模并行可编程硬件来搜索正则表达式的制作方法
利用虚拟化的大规模并行可编程硬件来搜索正则表达式
背景技术
正则表达式搜索是从电子邮件垃圾消息过滤和网络入侵检测到遗传研究的范畴中的各种广泛应用的常见的操作。正则表达式(“reg ex”或“RE”)提供了简洁而灵活的用于标识诸如特定字符、字或字符的模式之类的字符串的手段。例如,当解析文本文件时正则表达式 “*car*” 可以标识 “car”、“cartoon”、“vicar” 等等。传统上,reg ex是使用基于软件或硬件的搜索解决方案来执行的。令人遗憾的是,当执行大量的复杂搜索时,这些解决方案会遇到问题。
量的基本问题。尽管由于它们的执行任何数量的基本上任意复杂的搜索的灵活性而流行,但是,这些基于处理器的系统的速度随着搜索的数量和复杂性的提高而缩放得差并且不一致。换言之,对大量的数据正文(“语料库”)的reg ex搜索变得不切实际。另一方面,现有的基于硬件的搜索解决方案具有适应性的基本问题。虽然这些系统可以对于可以被映射到它们的搜索具有快速并且一致的性能,但是,现有设备对于被支持的搜索的数量和复杂性而言在没有详细的专业知识和人工干预的情况下具有严格的限制。换言之,硬件搜索是快速的,但是,是有限制的。如此,强烈地需要向对诸如正则表达式搜索之类的算法的基于硬件的处理提供类似于软件的灵活性。

发明内容
提供本发明内容以便以简化的形式介绍将在以下具体实施方式
中进一步描述的一些概念。本概述并不旨在标识所要求保护主题的关键特征或必要特征,也不旨在用于限制所要求保护主题的范围。计算任务包括,但不仅限于,可以将正则表达式转换为相对应的逻辑和状态方程。可以估计物理资源要求,如执行逻辑和状态方程需要多少可编程硬件设备,而无需通过计算机辅助设计(CAD)工具的迭代试错法。一旦被估计,就可以将计算任务分配到组,以便每一个组都匹配单独可用物理资源。例如,一组计算任务可以适合在诸如现场可编程门阵列(FPGA)之类的可编程硬件设备中。可以将控制和通信逻辑添加到每一个组,并为每一个组生成硬件定义语言(HDL)文件。还可生成详述如何跨多个HDL文件拆分计算任务,HDL文件的执行序列等等的配置规范。可以从每一 HDL文件生成配置二进制。然后,可编程硬件设备可以执行配置二进制。用户界面不让用户看到任务管理、创建配置二进制,计算任务跨配置二进制的分布等等的复杂性。与可编程硬件的速度和再配置性相结合的简单用户界面使得正则表达式搜索的实际实现和执行对用户不可见。代替费力的对可编程硬件的手动配置,自动化系统为用户生成配置二进制,执行它们,并管理结果的合并。对于容错的支持以提高可靠性包括重新分配、备用等等。通过分段减轻和优先级排序,可以实现性能改善。


参考附图阐述具体实施方式
。在附图中,附图标记中最左边的数字标识该附图标记首次出现的附图。在不同附图中使用相同的附图标记指示相似或相同的项。图I是示出了适于维护正则表达式处理系统的体系结构的选定组件的框图。
图2是示出了来自图I的编译模块的选定组件以及可以由编译模块生成的配置信息的框图。图3是示出了由图I的体系结构所产生的配置二进制的选定组件的框图。图4是示出了由图I的体系结构所产生的配置规范的选定组件的框图。图5是示出了来自图I的体系结构的可编程硬件系统控制器(PHSC)的选定组件的框图。图6是示出了由PHSC对配置二进制的执行的流程图。图7是示出了由PHSC对配置二进制的执行的流程图,包括对来自配置二进制的状态信息的存储。图8是示出了用户与正则表达式处理系统的交互的流程图。图9是示出了基于正则表达式生成配置信息的流程图。图10是示出了对一组正则表达式的物理资源要求的估计的流程图。图11是示出了在可编程的硬件上所生成的配置的执行的流程图。图12是示出了对正则表达式的动态修改的流程图。图13-15是示出了通过将配置二进制重新分配到其余功能可编程硬件设备来支持容错的流程图。图16-18是示出了通过使用备用功能可编程硬件设备来支持容错的流程图。图19是示出了跨配置二进制对正则表达式的分段减轻的示意图。图20是示出了通过对正则表达式的一部分以及相对应的配置二进制的选择性的重新编译(诸如当编译资源有限时)而进行的分段减轻的示意图。图21是示出了对正则表达式的优先级感知的硬件分配,以及将这些正则表达式打包和调度到配置二进制的示意图。图22是示出了通过重新分配配置二进制的执行来回收空闲的可编程硬件资源的流程图。图23-24是示出了配置二进制以及其内部的正则表达式的优先级排序的流程图。图25是示出了在编译和执行时由多个用户/应用程序对正则表达式的合并的流程图。图26是示出了配置二进制的延迟的配置分页的流程图。图27是示出了配置二进制子元素(它们可以被组合以创建完整的配置二进制)的编译的流程图。图28是示出了正则表达式的计算组合的示意图。图29是示出了具有重复的或类似的部分的正则表达式的超集的示意图。
具体实施方式
正则表达式(“reg ex”或“RE”)提供了简洁而灵活的用于标识诸如特定字符、字或字符的模式之类的字符串的手段。例如,当解析文本文件时正则表达式“*car*”可以标识单词 “car”、“cartoon”、“vicar” 等等。正则表达式被广泛用于许多不同的领域,其范畴涵盖从主动提供的商业电子邮件(“垃圾消息”)过滤到遗传研究。例如,电子邮件服务器可以搜索“mortgage”或“creditcard”或“enhancement”的全部发生,以确定给定电子邮件是否是垃圾消息。在另一示例中,医生可以搜索病人的DNA以发现指示癌症的诱因的序列“GGCCCAGCATAGATTACA”。如此,regexs是许多应用中的有用的工具。令人 遗憾的是,如上文所描述的,以前的实现reg exs的方法在软件中存在低速度或对在硬件中处理的变化的reg exs的有限适应性的严重缺点。在本公开中,正则表达式被自动转换为相对应的逻辑和状态方程,以便在可编程硬件设备上执行。作为此自动转换过程的一部分,可以估计执行每一个正则表达式所需的可编程硬件的程度,而无需麻烦的试错法。在一些实现中,可以使用处于自动化控制下的试错法,诸如使用从编译报告导出的反馈以及使用实际资源利用率来修改配置。一旦被估计,就可以将正则表达式分配到组,以便每一个组都匹配单个可编程硬件设备的物理资源约束。例如,500个正则表达式的一个组可以适合特定FPGA。可以将通信和控制(CC)逻辑添加到每一组,这允许可编程硬件能够与控制器进行通信并管理可编程硬件上的执行。可编程硬件可以通过诸如以太网之类的数据网络、诸如外围组件互连(PCI)之类的输入/输出总线接口,或诸如如HyperTransport联盟所描述的HyperTransport 之类的基于中央处理单元总线的接口来与控制器进行通信。编译器为每一组生成硬件定义语言(HDL),包括正则表达式和CC逻辑。编译器还可生成详述正则表达式跨多个HDL文件的分布、执行序列等等的配置规范。CAD工具可以从每一 HDL文件生成配置二进制。然后,可编程硬件设备可以执行配置二进制。在执行期间,每一可编程硬件设备内的正则表达式并行地执行,导致显著的速度增加。例如,适合特定FPGA的上文所提及的500个正则表达式的组在FPGA内并行地执行。不同的组(以配置二进制的形式)可以被加载并在可编程硬件设备上串行地执行。这允许通常将超过可编程硬件的可用的容量的正则表达式搜索得以进行。例如,上文所描述的第一组具有500个正则表达式,而第二组具有300个。这800个正则表达式对于单个可编程硬件设备来说太大。然而,当拆分成两个配置二进制并串行地执行时,单个可编程硬件设备可以执行全部800个正则表达式。用户界面不让用户看到任务管理、创建配置二进制,跨配置二进制分布等等的复杂性。这种简单的用户界面允许利用可编程硬件的速度和再配置性来产生诸如将正则表达式对照数据语料库进行比较之类的计算任务的执行速度的显著提高。使用可编程硬件来执行reg exs提供两个优点。首先,由于由可编程硬件所提供的并行操作,系统的容量是可编程硬件设备本身的容量的函数。如此,基于可编程硬件的解决方案有可能具有恒定的吞吐量,直到需要将另一个配置二进制添加到执行序列中。例如,可以适合FPGA的带有300个表达式的集合将与上面的适合该同一个FPGA的500个表达式同时执行。这与软件解决方案不同,在软件解决方案中,性能相对于所希望的搜索的数量而线性地降低(或更差),以致于500个表达式要比300个表达式要花更多时间来评估。
基于可编程硬件的正则表达式搜索所提供的第二优点是,在可编程硬件上配置的电路提供确定性的性能。如上文所提及的,一组被配置成适合可编程硬件设备的正则表达式将在已知时间内执行。相比之下,在处理器上运行的软件的吞吐量可以取决于所希望的搜索的性质(更复杂或稍容易)和(具有高命中率的输入流与带有低命中率的输入流)的输入数据的性质。另外,诸如高速缓存丢失之类的其他不可预测的事件可能会改变性能。重新分配,备用,等等允许容错。通过利用选择性的或完整的重新编译来避免正则表达式的分段被取消或改变来维护性能。还可通过打包、调度,以及执行序列化,给正则表达式分配不同的优先级。说明性体系结构 图I是示出了适于实现正则表达式处理系统102的体系结构的选定组件的框图100。作为讨论,而不作为限制,假设一家公司希望从他们的电子邮件服务器中过滤掉通常被称为“垃圾消息”的主动提供的商业电子邮件。维护一组结合了已经与垃圾消息相关联的字符串的正则表达式。例如,短语“抵押速率”和“信用卡”已经被确定为表示垃圾电子邮件。系统管理员或垃圾消息实用程序生成这些短语的正则表达式。公司服务器上的电子邮件集合构成使用用于删除潜在垃圾消息的此正则表达式(reg exs)的列表所过滤的数据的语料库。在实践中,这样的regexs的列表可以扩展到数千甚至数百万。在给定当前仅限软件的正则表达式搜索所需计算要求的情况下,这会导致显著的服务器负载,诸如为任务分配的服务器、功率、冷却等等之类的资源要求也会相对应地增大。在正则表达式处理系统102内可以有被配置成执行存储在存储器106中的模块的处理器104。在一些实现中,处理器104可以是多核处理器,或多个处理器的集合。正则表达式处理系统内还有存储器106。存储器106可以存储正则表达式108(1),108(2),….,IOS(R)。如在本申请的图1-29中所使用的,括号内的字母,如“(R) ”或“P”表示大于零的任何整数。这些正则表达式可以是不同的大小和/或复杂性,如由表示它们的框的不同大小所指示的。在存储器106内还有被配置成接受正则表达式并传输它们以供也在存储器106中的编译模块112进行处理的用户界面110。编译模块112被配置成生成适于加载到可编程硬件上并执行的配置信息,参考下面的图2更详细地对其进行描述。编译模块112与可以存储在存储器106中的可编程硬件系统控制器(PHSC) 114进行通信。PHSC 114被配置成管理可编程硬件的操作,下面参考图5更详细地对其进行描述。PHSC 114可以作为软件模块(如所描绘的)、作为硬件设备,或作为组合来执行。 PHSC 114还被配置成接受存储器106内的语料库数据116或其他外部数据以供处理。在一些实现中,此语料库数据可包括对照其执行正则表达式的信息。例如,要被搜索的电子邮件消息的集合以查找被表示为正则表达式的垃圾消息短语。PHSC 114与可编程硬件118(1),118(2),…,118 (P)进行通信。可编程硬件118可以是现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD),或其他可重新配置的硬件设备。可编程硬件118可以是类似的(如来自同一个制造商的相同型号的FPGA)或不同的(如来自不同的制造商的FPGA)。在每一可编程硬件118内可以有一个或多个计算逻辑块120(1),120 (2),....,120 (L),它们是正则表达式108 (I)-(R)的可编程硬件设备118的物理表示以及任何所需的通信和控制(CC)逻辑。PHSC 114将配置加载到可编程硬件118,而可编程硬件118创建计算逻辑120。在计算逻辑120运行之后,可编程硬件118中的CC逻辑可以将结果传输到PHSC 114,然后,PHSC 114可以将结果122输出到存储器106或某个其他外部数据目的地。没有被包括在配置中供在可编程硬件设备118上执行的正则表达式108可以在辅助正则表达式处理模块124中执行。例如,新添加的垃圾消息短语“roofing repair”可以被添加到正则表达式的列表中,但不被编译到供硬件执行的配置二进制中。直到编译,可以使用辅助正则表达式处理模块124来处理此新添加的垃圾消息短语的正则表达式。辅助正则表达式处理模块124可以被存储在存储器106中,并与编译模块112和PHSC 114进行通信。在给定被配置成并行地执行正则表 达式的可编程硬件118的性能优点的情况下,可编程硬件118可以超过对它施加的需求。结果,可编程硬件118可能未被充分使用。通过动态地重新配置可编程硬件118,可以利用该多余性能来交换虚拟容量。结果,可以使用较小的可编程硬件设备。或者,当需求增大到可编程硬件的单个片段不再能包含reg exsIOS(I)-(R)中的全部的程度时,可以拆分reg exs以创建可以串行地加载和运行的多个计算逻辑120 (I) - (L)。尽管计算逻辑的串行执行在某种程度上较慢,但是,它远远地超过了当加载超过可编程硬件118的容量的计算逻辑时可能会发生的完全失效。正则表达式处理系统102还可结合网络接口 126,该网络接口 126可以被配置成与诸如服务器、工作站、网络附接的FPGA设备等等之类的其他设备进行通信。图2是示出了来自图I的编译模块112的选定的组件的框图200。诸如通过用户界面110向编译模块112提供正则表达式108 (I)-(R)。编译模块112被配置成将正则表达式编译为可由可编程硬件118执行的形式。正则表达式到硬件定义语言(HDL)编译器202生成正则表达式108的HDL表示。硬件定义语言(也称为硬件描述语言)表示被配置成执行计算的数字逻辑和电子电路的描述。在计算机代码表示算法的情况下,HDL声明表示实际电路元件。一个HDL是由电气与电子工程师学会(IEEE)标准IEEE 1076所描述的超高速集成电路硬件描述语言(VHDL)。另一个HDL是如IEEE标准1364-2001所描述的Verilog。还有其他HDL可用,也可以使用它们。一旦正则表达式到HDL编译器202编译了 reg exs 108以产生HDL文件,可以基于由编译所产生的信息来生成配置规范204(1),204 (2),…,204 (S)。配置规范包括诸如跨配置二进制分布了多少reg exs 108等等之类的细节,并在下文中参考图4更详细地描述。编译器202将HDL文件206提供到可编程硬件208的计算机辅助设计(CAD)工具。此CAD工具208接受HDL文件206,并生成适于由可编程硬件设备118执行的配置二进制210(1),210 (2),…,210 (B)。为便于引用,配置规范204和配置二进制210可以被视为配置信息212。在一种实现中,可以生成与多个配置二进制210(1)-(B)相关联的单个配置规范204。在另一种实现中,可以生成对应于多个配置二进制210(1)-(B)的多个配置规范204 (I)-(S) o在一些实现中,可以有配置信息212(1),212(2),…,212(F)。图3是示出了由图I的体系结构所产生的说明性配置二进制的选定组件的框图300。在此图中,虚线302描绘了可编程硬件118的容量。在配置二进制210内并在此容量302内,reg exs可以被表示为二进制配置指令304,诸如由编译模块112生成的那些二进制配置指令。配置二进制210内还可以包括被配置成允许PHSC 114和可编程硬件设备118之间的耦合的通信和控制(CC)逻辑306。在一些实现中,还可在配置二进制210内提供本地状态存储308。在此图中,配置二进制210 (I)包括 reg exs 108 (I),(2),(6)和 CC 306 (I)。配置二进制 210 (2)包括 reg exs 108(3),⑷和 CC 306(2)。配置二进制 210 (3)包括 reg ex108 (5)、本地状态存储308 (I)和CC 306 (3)。请注意,描绘的regexs在宽度上有变化,指示其内的正则表达式的大小/复杂性的变化。如此,reg ex 108(5)是配置二进制210(3)内的唯一的reg ex,因为它要求大部分的可用的计算逻辑容量。每一配置二进制210都可以被配置,以便其内的reg exs被设计成并行执行310。例如,在配置二进制210(1)在可编程硬件118中执行时,reg exsl08(l), (2),以及(6)并行地执行。这种在硬件中并行地执行多个reg exs的能力导致 相对于串行地在单个处理器上执行的软件而言速度显著增加。返回到图I的示例,与在软件中执行的串行处理不同,由可编程硬件118对配置二进制210(1)的执行一次执行对三个reg exs的搜索。图4是示出了由图I的体系结构所产生的配置规范204的选定组件的框图400。配置规范204可包括多个信息片段。可以存储所生成的配置二进制的计数402 (I)。例如,编译的正则表达式产生三个配置二进制。还可存储配置二进制之间的正则表达式的分布的描述402⑵。例如,这可以指示reg exs 108(1),(2)和(6)在配置二进制210(1)内。可以包括配置二进制的执行的序列402 (3)。例如,考虑特定正则表达式的优先次序,首先执行配置二进制210 (I)、接下来是210 (3),然后,210 (2)。下面的图21更详细地讨论了优先次序。配置规范204 (I)还可包括哪些被许可的或“合法”的可编程硬件设备118在正则表达式处理系统102内。例如,在系统内当前可用的可编程硬件设备包括来自制造商X的FPGA类型A和B和来自制造商Y的FPGA类型C。配置规范204 (I)中还可包括其他信息402 (Y),如编译日期/时间,应用程序标识和/或用户标识等等。图5是示出了来自图I的体系结构的可编程硬件系统控制器(PHSC)的选定组件的框图500。在此例图中,PHSC 114接受配置规范204(1)和相对应的配置二进制210(1)-(3),以及语料库数据116。例如,配置规范可包括对应于供进行垃圾消息搜索的正则表达式IOS(I)-(R)的表达式,而语料库可包括要检查其中的垃圾消息的电子邮件存储。PHSC 114可包括被配置成协调PHSC 114的动作(包括接收输入和提供结果122)的控制模块502,WHSC 114中还可包括被配置成与可编程硬件设备118进行通信并管理诸如配置二进制的加载和卸载,结果122的传输等等之类的任务的可编程硬件接口模块504。还可存在配置二进制序列化模块506。配置二进制序列化模块506可以确定用于处理可编程硬件118内的配置二进制210的执行序列508 (在此例图中利用虚线指示)。例如,执行序列508可以是配置二进制210 (I)、配置二进制210 (2),接下来是配置二进制210 (3)。执行序列508可以基于来自配置规范204的配置二进制的执行的序列402(3)。在一些实现中,由于优先级的变化,硬件的不可用性,处理负载,及对PHSC 114可用的其他因素,执行序列508可以不同于执行序列402(3)。说明性执行图6是示出了由PHSC 114在可编程硬件118上对配置二进制的执行的流程图600。对于此示例,假设有单个可编程硬件设备118(1),随着页面向下,时间增加,如由箭头602所指示的。Reg exs 108 (I) -(R)被编译,以形成配置二进制210 (I) -(B),这些配置二进制210 (I) - (B)在加载到可编程硬件设备118并配置可编程硬件设备118之后,变为计算逻辑120。一旦被加载到可编程硬件118(1),计算逻辑120就并行地运行编码在604内的正则表达式搜索。可以串行地606加载和处理配置二进制的序列,一个配置二进制跟在另一个配置二进制之后。例如,在608,PHSC 114中的可编程硬件接口模块(PHM) 504将配置二进制210 (I)加载到可编程硬件118(1)中。一旦被加载,可编程硬件118(1)内的电路的所产生的物理布局是计算逻辑120(1)。计算逻辑120(1)运行,并将结果传递回PHIM 504。在610,PHIM 504将配置二进制210(2 )(是PHSC 114的执行序列508中的下一个)加载到构成计算逻辑120(2)的可编程硬件118(1)。计算逻辑120(2)运行,并将结果返回至Ij PHIM 504。在612,PHM 504将配置二进制210(3)(是PHSC 114的执行序列508中的下一个)加载到构成计算逻辑120(3)的可编程硬件118(1)。计算逻辑120(3)运行,并将结果返回到PHM 504。这种连续的对配置二进制的加载和运行所产生的计算逻辑允许可编程硬件的虚拟化,创建虚拟化的计算结构。例如,代替要求可编程硬件118的单个片段足够大以运行要处理的所有正则表达式,reg exs可以被拆分以跨一个或多个可编程硬件设备118执行。当可用的可编程硬件设备不足以允许同时操作时(例如,当reg exs的需求超过可编程硬件设备的可用容量时),reg exs可以跨多个配置二进制分布,而配置二进制又可以跨有限数量的可编程硬件118分布,和/或在同一个可编程硬件118上串行地执行。返回到较早的用于垃圾消息搜索的800个正则表达式的示例,全部800个可能不匹配单个FPGA,但是500个将匹配。如此,利用500个正则表达式创建第一配置二进制,而利用其余的300个正则表达式创建第二配置二进制。在一个可编程硬件118设备可用的情况下,加载并运行第一配置二进制,然后,加载并运行第二配置二进制。为提高性能和/或基于前面的步骤的结果而允许一系列配置二进制反复执行(即,流水线化),可以存储状态信息。图7是示出了由PHSC 114对配置二进制的执行的流程图700,带有对来自配置二进制的状态信息的存储。如上文参考图6所描述的,随着页面向下,时间增加,如由箭头702所指示的。也如上所述,在此示例中,由配置二进制所产生的计算逻辑中表示的正则表达式并行地运行704,而在可编程硬件118(1)的单个片段上串行地加载和执行706多个配置二进制。在708,被附接到计算逻辑,或在另一种实现中在计算逻辑内包含的本地存储器存储状态信息。例如,在附接到计算逻辑的本地存储器的一种实现中,存储器可以是在可编程硬件设备的外部,如附接的闪存。对可以被可编程硬件118(1)直接访问的存储器708的使用提高了速度,并消除了通过PHSC 114传输和存储状态的必要性。在710,PHIM 504加载配置二进制210(1),导致计算逻辑120(1),该计算逻辑120(1)运行并可以将本地状态信息308(1)存储在本地存储器708中。在712,PHIM 504加载配置二进制210 (2),导致计算逻辑120 (2),该计算逻辑120 (2)可以访问本地状态信息308 (I),并从存储器708读信息和/或向存储器708写信息。在714,PHM 504加载配置二进制210 (3),导致计算逻辑120 (3),该计算逻辑120 (3)还可访问本地状态信息308 (I),并从存储器708读信息和/或向存储器708写信息。如此,信息可以在配置二进制的执行之间持久保存。例如,假设配置二进制210(1)中的reg ex 108(1)是字符串“car”的regex,而配置二进制210 (2)中的reg ex 108(3)是字符串“car loan”的reg ex,配置二进制210 (3)中的eg ex 108(5)是字符串“car loan refinancing”的reg ex。在这些配置二进制的执行期间,状态信息308(1)可以被保存在存储器708中,以便配置二进制210(3)使用来自配置二进制210(2)的结果,而配置二进制210(2)依次又使用来自210(1)的结果。如此,通过访问存储在可被可编程硬件118直接访问的存储器中的状态信息,提高了处理速度。此夕卜,存储还可以促进拆分太大而超过单个可编程硬件设备的容量的reg ex。
对过程的说明图8示出了流程图800,示出了用户与正则表达式处理系统102的交互,正则表达式处理系统102可以,但是不必使用图1-7所示出的体系结构来实现。流程800(以及图9-12中的那些)被示为逻辑流程图中一组框的集合,这表示可用硬件、软件或其组合实现的一系列操作。在软件的上下文中,各个框表示在由一个或多个处理器执行时执行既定操作的计算机可执行指令。一般而言,计算机可执行指令包括执行特定功能或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。描述操作的次序并不旨在被解释为限制,并且任意数量的所描述的框可以按任何次序和/或并行地组合以实现该过程。出于讨论的目的,将在图1-7的体系结构的上下文中描述过程。框802接收正则表达式列表。例如,垃圾消息搜索条件的列表被表示为正则表达式。框804基于正则表达式来生成配置信息。下面参考图9对此进行了讨论。取决于在806框选择了显式的或隐式的用户界面,用户可以看到不同的界面。当在框806中选择隐式的用户界面之后,框808在可编程硬件上执行所生成的配置信息。框810提供来自可编程硬件的结果。当在806选择显式的用户界面之后,框812向用户呈现配置信息,包括配置规范204和配置二进制210 (I) - (R),供检查和/或修改。例如,希望手动调整自动生成的配置二进制的用户可以选择显式的界面。一旦此呈现完成,则流程可以在框808继续,并如上文所描述的,在可编程硬件上执行所生成的配置。不管所选择的界面如何,此用户界面提供与可编程硬件的简单的交互,而不管regex复杂性如何。这免除了用户知道,或者甚至关心可编程硬件细节的必要性。此外,这还跨可编程硬件118的不同的片段提供搜索可移植性。例如,可以编译reg exs IOS(I)-(R)以跨不同的可编程硬件IlS(I)-(P)执行,并随着它们变得可用于处理,跨它们分布。对这种界面的使用向用户隐藏了这种复杂性。图9是示出了基于如上文参考图8所提及的正则表达式804生成配置信息的流程图。框902解析正则表达式列表,并将它们转换为相对应的逻辑和状态方程。如上文所描述的,这种转换可以在编译模块112内发生。框904估计每一正则表达式的物理资源要求。例如,可以估计reg ex 108(1)以要求可编程硬件118 (I)上的2,000个计算元件,同时可以估计reg ex 108(5)以要求7,000个计算元件。框906将正则表达式分配到组,以便每一个组都匹配可编程硬件118中的可用物理资源。这种估计还可包括通信和控制(CC)逻辑以及本地存储要求。例如,在上面的图3中,可用的物理资源是可编程硬件的计算逻辑容量302,而其中一个组包括reg ex 108(1)、108(2)、108 (6)和 CC 306(1)。框908将自定义的通信和控制逻辑添加到每一组中,而框910为每一组生成HDL文件。框912生成配置规范,如配置规范204 (I)。框914从每一 HDL文件生成配置二进制。例如,HDL文件可以导致配置二进制210(1)。图10是示出了对如上文参考图9所提及的正则表达式904的物理资源要求的估计的流程图。框1002将正则表达式与特定计算逻辑布局相关联。例如,字符串“home”的正则表达式可以涉及200个电路元件的特定布局。这种关联可以通过框1002(1)生成正则表达式,框1002(2)确定硬件CAD工具如何将reg ex中的术语转换为逻辑方程,以及框1002(3)确定reg ex的电路要求来作出。例如,样本正 则表达式可以被CAD工具转换为逻辑方程,所产生的要求被监视。如此,可以构建模型,允许基于正则表达式输入来对电路要求进行预测。一旦作出了关联,框1004就标识冗余逻辑,并合并以删除这些冗余,并构成合并的逻辑。例如,多个正则表达式可以涉及公共根字符串,或具有其他共同性,当在电路中表达这些共同性时可能导致冗余电路。可以移除这些冗余,提高效率。下面将参考图29在超集的上下文中讨论这种情况的一种实现。框1006估计本地存储要求,如是否要求本地状态存储308,如果是,要求哪些存储器资源。框1008将CAD工具专用的校正因数应用到合并的逻辑和本地存储要求。例如,特定CAD工具可以以不寻常的方式将由特定reg ex所要求的逻辑方程转换为计算块,如此,可以输入校正因数,以使得对物理资源的估计更准确。框1010生成估计的物理资源要求。例如,搜索“credit card”的reg ex可能要求来自制造商X的FPGA类型A上的估计的一千个电路元件。与用于确定reg exs是否适合可编程硬件118的物理资源的蛮力试错法相比,这种估计快得多,更少资源密集,并且要求的人的交互较少或没有。此外,这种过程还可以轻松地应用于带有变化的容量的多种类型的可编程硬件118,允许快速地将reg exs重新部署到新的硬件上。图11是示出了所生成的配置信息在如上文参考图8所提及的可编程的硬件808上的执行的流程图。在一种实现中,可以由PHSC 114执行下面的框。框1102接收配置信息212和语料库数据116。例如,配置文件可包括配置二进制210,这些配置二进制210包括用于垃圾消息搜索的正则表达式108,而语料库数据116可以是要被搜索其中的垃圾消息的原始电子邮件。框1104将来自执行序列508的未执行的配置二进制加载到可编程硬件118中。框1106将语料库116的全部或一部分加载到可编程硬件118中供进行处理。框1108对照加载的语料库数据116在可编程硬件118上执行计算逻辑120。框1110接收来自可编程硬件对计算逻辑的执行的结果。当语料库的附加的部分还有剩余时,框1112将流程返回到框1106,并将语料库的另一部分加载到可编程硬件118中供进行处理。否则,当在框1112没有语料库的附加的部分剩余时,框1114确定在执行序列508中是否存在附加的配置二进制。当在执行序列508中还有附加的配置二进制剩余时,框1116将执行序列递增到下一个配置二进制,并将流程返回到1104。当在执行序列508中没有附加的配置二进制剩余时,框1118合并来自对一个或多个配置二进制的执行的结果。
图12是示出了对正则表达式的动态修改的流程图1200。Reg exs可以随着时间而变化。例如,长尾小鹦鹉的销售中的新风尚可能导致“长尾小鹦鹉”被添加到垃圾消息搜索列表中。或者新的信用卡业务行的添加可能导致“信用卡”从垃圾消息搜索列表中被移除。为便于讨论,而不作为限制,对正则表达式列表的修改一般可以被视为属于两个类别新正则表达式的添加或现有正则表达式的移除。当框1202确定将要添加新正则表达式时,框1204为新正则表达式生成配置二进制。然后,框1206将此配置二进制添加到执行序列508中ο当框1202确定修改是现有正则表达式的移除时, 框1208将正则表达式添加到丢弃列表中。在计算逻辑120在可编程硬件118上执行之后,框1210丢弃来自reg exs的结果。在一些实现中,这种丢弃可以通过活动删除来进行,而在其他实现中,可以由PHSC 114不报告来自丢弃的reg ex的结果来进行。尽管继续处理丢弃列表上的reg ex可能显得浪费,但是,在给定对每一配置二进制内的reg exs的并行处理的情况下,实际上却十分有效。如上文参考图6所讨论的,并行地执行配置二进制内的reg exSo如此,并行地执行许多reg exs并丢弃那些结果中的一个比重新编译整个配置二进制更便宜,直到配置二进制变得严重地分段。此外,用户还可以通过简单地从丢弃列表中移除先前丢弃的reg ex并重新启用它来轻松地恢复先前丢弃的reg ex,在这样的情况下,可以避免重新编译。下面将参考图19-20更详细地讨论确定如何以及何时重新编译以解决由未使用的/取消的reg exs所产生的分段。框1212用未包括在当前配置内的附加的正则表达式结果来修补可编程硬件118的结果。当某些reg exs在辅助正则表达式处理模块124中执行时,如那些最近被添加到系统中但是还没有被编译入配置二进制210以在可编程硬件118上执行的reg exs来说,这可能是有用的。框1214可以将诸如在辅助正则表达式处理模块124中执行的正则表达式之类的未包括在当前配置内的正则表达式添加到当前配置中。这些可以被编译模块112编译,以便并入作为执行序列508的一部分的配置二进制210中。框1216在生成新的配置二进制期间移除在丢弃列表上存在的正则表达式,如此,清除被丢弃的东西。通过重新分配的容错包括可编程硬件设备118的设备可能会发生故障。图13-15是示出了通过将配置二进制重新分配到其余功能可编程硬件设备来支持容错的流程图1300。在这些图中,随着页面向下,时间增加,如由箭头1302所指示的。从图13开始,PHIM 504被示为耦合到两个可编程硬件设备118(1)和118(2)。对于此示例,假设可编程硬件118(1)和118(2)是二进制兼容的1304,S卩,可以在任一可编程硬件中执行同一个配置二进制210,而无需重新编译。还假设执行序列508是用于配置二进制210(1)、⑵、(3)、(4)、⑴、⑵、(3)、(4)等等。图13示出了正常操作1306。在正常操作1306期间,在1308,PHM504将配置二进制210 (I)和(2)分别加载到可编程硬件118(1)和118(2)中。所产生的计算逻辑120(1)和120(2)运行,结果被返回到PHM 504。同样,在1310,加载并执行配置二进制210(3)和210(4)。在1312,序列重复,加载配置二进制210(1)和(2)供进行处理。这演示了虚拟化可编程硬件的通用性只在两段可编程硬件118(1)-(2)上执行四个配置二进制210(1)-(4)。图14继续此流程图,以演示故障发生和迁移1402。在1314,配置二进制210 (3)已经被成功地加载到可编程硬件118(1)中,而尝试将配置二进制210(4)加载到可编程硬件118(2)中,但是,由于不可用而失败。在基于配置二进制210 (3)将结果从计算逻辑120 (3)返回到PHM 504之后,在1316,PHM 504将配置二进制210 (4)加载到可编程硬件118 (I)供进行处理。继续流程图到图15,示出了防故障操作1502。可编程硬件118(2)保持不可用,而可编程硬件118(1)处理执行序列508中列出的配置二进制的执行。在1318,可编程硬件118(1)加载并执行配置二进制210(1),S卩,执行序列508中的下一个。在1320,可编程硬件118 (I)加载并执行配置二进制210 (2),而在1322,加载并执行配置二进制210 (3),而在1324,加载并执行配置二进制210(4)。如此,执行序列508中存在的列表已经被完全执行,并可以应执行序列508的要求而继续。尽管由于可编程硬件118 (2)的丢失,执行性能降低,但是,对reg exs 108 (I)-(R)的处理仍能继续。由于 配置是虚拟的,因此,这种动态重新分配变得可能。返回到垃圾消息过滤示例,可编程硬件118(2)的故障只是降低了垃圾消息过滤的性能,而不会导致系统完全失效。在具有多个可编程硬件118的片段的一些实现中,配置二进制可能分配不足,而造成故障。例如,每一可编程硬件设备中的执行序列可包括可以在故障期间被消耗的空闲占位符。通过备用的容错图16-18包括示出了通过使用备用功能可编程硬件设备来支持容错的流程图1600。如上所述,在这些图中,随着页面向下,时间增加,如由箭头1602所指示的。从图16开始,PHM 504被示为耦合到两个可编程硬件设备118(1)和118(2)。如上所述,对于此示例,假设可编程硬件118(1)和118(2)是二进制兼容的1604,S卩,可以在任一可编程硬件中执行同一个配置二进制210,而无需重新编译。还假设执行序列508是用于配置二进制210⑴、⑵、(3)、⑷、⑴、⑵、(3)、⑷等等。图16示出了正常操作1606。在正常操作1606期间,在1608,PHM 504将配置二进制210(1)和(2)分别加载到可编程硬件118(1)和(2)中。所产生的计算逻辑120(1)和
(2)运行,结果被返回到PHIM 504。同样,在1610,加载并执行配置二进制210(3)和(4)。在1612,序列重复,加载配置二进制210(1)和(2)供进行处理。图17继续流程1600,并在1702描绘了故障发生和备用。在此例图中,在1614,可编程硬件118(1)成功地加载配置二进制210(3),而可编程硬件118(2)变得不可用于加载配置二进制210 (4)。在确定可编程硬件118(2)发生故障之后,PHIM 504可以将配置二进制210(4)重定向到已经保留的备用可编程硬件设备118(3)。图18示出了通过将配置二进制重定向到备用可编程硬件来恢复正常操作1802。在1616,可编程硬件118(1)加载了配置二进制210(1),而备用可编程硬件118(3)加载了配置二进制210 (4)。在1618,PHM 504如执行序列508中指定的那样继续加载和执行配置二进制。如此,配置二进制210 (2)和210 (3)被分别加载到可编程硬件118(1)和118(3)中。在1620,配置二进制210 (4)和210 (I)被分别加载到可编程硬件118(1)和118(3),再次开始执行序列 508。在可编程硬件118的上下文中的备用提供了多个优点。由于配置二进制封装了完整的配置,因此,它们可以被快速地加载到可编程硬件中和从其中卸载。这与调出服务器实例所需的可操作复杂性和时间形成对比。如此,可以访问备用可编程硬件,并非常快地将其投入使用。分段减轻如上文所提及的,随着时间的推移,要被处理的正则表达式的列表也会改变。在垃圾消息过滤示例中,添加新reg exs,而移除其他reg exs。图19是示出了跨配置二进制对正则表达式的分段减轻的示意图1900。在一种实现中,可以在PHSC 114内执行分段减轻。这种随着时间的推移的添加和减少导致对已 经被丢弃的那些正则表达式中的“活的”或仍需要的reg exs的分段。在1902,示出了分段减轻之前的多个分段的配置二进制。在此图中,交叉阴影线指示未使用的/取消的regex 1904。在此示例中,reg exs108(1),(3),(5),(7),和(9)已经被取消。例如,这些可能涉及对于“信用卡”以及变体的垃圾消息过滤器,由于公司的新的信用卡业务,它们现在被从垃圾消息列表中移除。Regexs 108(2),(4),(6)和(8)仍在使用中。这使得包含这些reg exs的四个配置二进制210(20)-(23)保持分段,几个所希望的reg exs与多个未使用的reg exs交替。对这些分段的配置二进制的执行会浪费可用的可编程硬件资源。如此,需要减轻此分段。在1906,新添加的reg ex 108(10)在辅助reg ex处理模块124中执行。在对配置二进制的下一轮编译期间,当在配置二进制内有空间可用时,regex 108(10)可以从在处理模块124中执行转移到配置二进制210中,以在可编程硬件118上运行。在1908,示出了分段减轻之后的配置二进制。已经丢弃了未使用的regexs,而在1910,仍在使用中的那些reg exs以及reg ex 108 (10)已经被编译到两个新配置二进制中。在四个配置二进制正在被执行而一个reg ex在软件中执行的情况下,现在的两个配置二进制执行。图19描绘了对所有活动reg exs 108的完整的重新编译。然而,就时间和系统资源角度而言,编译是昂贵的。在一些实现中,可能需要有选择地重新编译以最小化系统成本,而不太频繁地执行完整的重新编译。图20是示出了通过选择性的重新编译进行的分段减轻的示意图2000。就是否要有选择地或完全地重新编译的确定涉及对照编译时间衡量硬件和软件的潜在执行效率。在2002,示出了分段减轻之前的配置二进制210 (30) - (33)。如上所述,用交叉阴影线2004表示未使用的或取消的reg exs。在此示例中,reg exsl08 (I), (3), (5), (7),和(9)已经被取消。Reg exs 108(2),108(4),108(6)和108(8)仍在使用中。在2006,新添加的reg ex 108(10)在辅助reg ex处理模块124中执行,同时等待对配置二进制的下一次编译。在此例图中,假设对照编译时间衡量硬件和软件的潜在执行效率导致用于一种重新编译的资源可用。检索在初始编译期间所生成的资源估计信息,从最多未使用的空间到最少未使用的空间,排序配置二进制。配置二进制210(30)具有100%的未使用的空间,配置二进制210 (31)具有大约66%的未使用的空间,配置二进制210(32)具有大约55%的未使用的空间,而配置二进制210(33)具有大约33%的未使用的空间。在一种实现中,选择性的重新编译可能涉及将正在由辅助reg ex处理模块124执行的reg ex 108 (I)移动到硬件中,然后,将reg exs移动到具有最多的未使用的空间的配置二进制中。在此例图中,选择配置二进制210(30)和(31)用于选择性的重新编译,如由虚线2008所指示的。组合活动reg exs,直到N个配置(在此情况下,N = I,因为有一个编译可用)已经被填充。在此例图中,配置二进制210 (30)被丢弃,因为它是空的,而在2010,配置二进制210(31)中的reg ex 108⑵与reg exs 108(2)和(10)组合,以产生配置二进制210 (34)。在2012,描绘了选择性的分段迁移之后的结果,示出了新编译的配置二进制210 (34),和未变的配置二进制210 (32)和(33)。这将基于软件的reg ex的数量降低到0,将总的硬件配置的数目从4降到3。如此,已经使用了最少的编译资源,而降低了总的分段。对任务的优先级排序,以及资源回收
在一些实现中,对任务进行优先级排序可能是有益的。例如,目前的垃圾消息可能主要以“信用卡”广告为特征,如此,可以给予被设计成能查找此短语的reg exs较高的优先级,以便快速地移除这些流行的发生。图21是示出了对正则表达式的优先级感知的硬件分配,以及将那些正则表达式打包和调度为配置二进制的示意图2100。在此例图中,利用白色表示正常优先级reg exs,利用对角线表示中间优先级reg exs,而最高优先级reg exs是阴影。在2102,示出了用于执行的正则表达式。在这些正则表达式中,reg exs 108(1),(6),和(8)是最高优先级。Reg ex 108(5)被设计为中优先级,而其余的108(2),(3),(4),(7),(9),和(10)是正常优先级。在2104,示出了被打包、编译,以及序列化供执行的reg exs。那些具有较高优先级的reg exs被打包在一起,在一些实现中,可以被设计为在更快的可编程硬件设备118上执行,接收执行序列508中的优先级,或被置于执行序列508中的多个点,供比较频繁的执行。如图所示,配置二进制210(41)具有足够的用于全部高优先级reg exs的容量。配置二进制210 (42)包括中优先级reg ex 108 (5),还包括正常优先级108 (4),因为有额外的容量剩余供使用。在给定它们的较高优先级内容的情况下,配置二进制210(41)和(42) —起可以被指定为在更快的可编程硬件上执行,如2106所示。包括正常优先级reg exs的配置二进制210(43)和(44)可以被指定2108用于在较慢的可编程硬件设备上执行。可以进行配置二进制的打包和/或对于配置二进制的执行序列的优先级分配,以便首先执行某些任务,以使得它们的结果影响稍后的处理或彻底清除稍后的处理。例如,可以给予查找“zero down home mortgage financing bonanza,,的 reg ex 在 “homemortgage”的reg ex之上的优先级,将术语的组合放置在第一位可以更轻松地标识垃圾消肩、O图22是示出了通过重新分配配置二进制的执行来回收空闲的可编程硬件资源的流程图2200。如上所述,在此例图中,随着页面向下,时间增加,如由箭头2202所指示的。对于此示例,假设可编程硬件118(1)和118(2)是二进制兼容的2204,S卩,可以在任一可编程硬件中执行同一个配置二进制210,而无需重新编译。还假设初始执行序列508是用于配置二进制210⑴、⑵、(3)、⑷、⑴、⑵、(3)、⑷等等。在2206,描绘了正常操作。在2208,PHM 504将配置二进制210 (I)和(2)分别加载到可编程硬件118(1)和(2)中。结果被返回,在2210,PHIM 504将配置二进制210 (3)和(4)加载到可编程硬件118(1)和(2)中。此过程可以继续,继续执行初始执行序列508。
然而,假设分别基于配置二进制210(2)和(4)的计算逻辑120(2)和(4)是空闲的。或许它们在计算逻辑120(1)和(3)之前被暂停或完成。假设初始执行序列不中断地继续,可编程硬件资源将被废弃,等待这些空闲配置二进制或执行暂停的配置二进制。如此,在此示例中,修改初始执行序列以回收资源。在2212,示出了通过仍在活动中的那些配置二进制的重新分配的此空闲时间的回收。如此,在2214,PHIM 504将配置二进制210(1)和(3)分别加载到可编程硬件118 (I)和(2)中。在2216,可编程硬件118(1)和⑵再次运行基于配置二进制210 (I)和(3)的计算逻辑120 (I)和(3)。由于计算逻辑120(2)和120(4)是空闲的,因此,它们没有被加载和运行。如此,诸如120(1)和(3)之类的仍被指定供运行的计算逻辑可以继续执行,不会被空闲的或暂停的计算逻辑妨碍。 如上文所提及的,当特定reg exs比其他的更重要时,可以给予它们更多资源。图23-24是示出了配置二进制以及其内部的正则表达式的优先级排序的流程图2300。在此例图中,随着页面向下,时间增加,如由箭头2302所指示的。假设可编程硬件118(1)和(2)是二进制兼容的2304。在图23开始,在2306,描绘了相等优先级操作。在任何计算逻辑内没有任务被给予优先级。执行序列508是用于配置二进制210(1)、⑵、(3)、(4)、⑴、⑵、(3)、(4)等等。在2308,配置二进制210 (I)和(2)被分别加载到可编程硬件118 (I)和(2)中供运行。在2310,配置二进制210 (3)和210 (4)被分别加载到可编程硬件118 (I)和(2)上,供运行。继续流程到图24,在2402,配置二进制210(1)内的reg ex已经被给予了高优先级,其供执行的时间片的比率已经被提高。如此,执行序列508被改变为执行配置二进制210(1),(I), (I), (I), (I), (2),(I), (3),(I), (4)。如此,在 2312,配置二进制 210 (I)被加载到可编程硬件118(1)和(2)两者中。在2314,没有配置二进制被加载,因为两个可编程硬件设备上的计算逻辑120(1)已经存在,计算逻辑再次运行。在2316,计算逻辑120(1)再次在118(1)上运行,而配置二进制210(2)被加载到可编程硬件118(2)上,并运行。在2318,计算逻辑120 (I)再次运行,而配置二进制210 (3)被加载到可编程硬件118(2)上,并在其上运行。在2320,计算逻辑120(1)再次运行,而配置二进制210(4)被PHM 504加载到可编程硬件118(2)上。如此,在此示例中,配置二进制210(1)内包含的高优先级reg ex执行了 70%的时间。任务的合并在正则表达式处理系统102的操作期间,可以接收来自多个用户和/或应用程序的reg exs.例如,垃圾消息过滤系统可以接收指示垃圾消息的多个字符串流,如由用户或分析软件所标记的那些。图25是示出了在编译和/或执行时由多个用户/应用程序对正则表达式的合并的流程图2500。这样的合并通过最小化对可编程硬件的重新配置(就时间和系统资源而言该动作相对来说是昂贵的),提高了速度。在编译合并期间,在2502,从用户A接收reg ex 108 (I),而从用户B接收reg ex108(2)。在2504,编译模块112处理这些reg exs,确定它们两者都可以在同一个配置二进制中运行,而在2506,产生包括reg exs 108(1)和(2)的配置二进制210 (51)。在2508,在PHSC 114接收来自用户A和B的输入。在2510,PHM 504加载配置二进制210 (51)供执行,而在2512,可编程硬件执行配置二进制,并将结果提供回PHIM 504。PHSC 114又将结果提供回各个用户。合并消除了上下文切换的必要性,还有其他优点。例如,若没有合并,需要在用户A和用户B之间切换上下文。如此,用户A的reg ex 108(1)将执行,而reg ex108(2)等待。在reg ex 108(1)结束之后,reg ex 108(2)将执行。利用合并,两者都可以同时执行。在合并期间,维护了此过程中的安全性,因为只有底层编译模块112和PHSC 114才感知这两个不同的reg exs同时执行。用户A和用户B不会察觉到合并,它们的相应的结果保持分尚。延迟的配置分页
除合并之外,多个应用程序或用户可以在正则表达式处理系统102的操作期间共享资源。图26是示出了配置二进制的延迟的配置分页以促进此共享的流程图2600。延迟的分页允许任务的延迟,以允许合并这些任务,并最小化对可编程硬件的重新配置。在此例图中,随着页面向下,时间增加,如由箭头2602所指示的。在2604,PHSC114接收带有输入A的reg ex 108 (80),如语料库的第一部分。PHSC 114将reg ex传递到PHIM 504供在可编程硬件118(2)上执行,并将结果返回到用户。^ 2606,PHSC 114接收reg ex 108 (81)供进行处理。然而,预期对regex 108(80)的另外的处理将发生。结果,对reg ex 108(81)的处理被延迟。在2608,再次请求reg ex 108 (80),此时,通过输入B,如语料库的第二部分。由于可编程硬件118(2)已经加载了结合了 reg ex 108(80)的配置210 (80),因此,对于重新配置没有延迟,并且处理可以开始。然后,将这些结果返回到用户。在2610,reg ex 108(80)已经完成,现在可以由可编程硬件118 (2)加载和执行被延迟的reg ex 108(81)。然后,可以将这些结果返回到用户。如此,在一些实现中,可以为当前没有加载的配置二进制210存储工作,并相对于接收它的顺序,无次序地执行工作。这可以通过最小化配置二进制210加载到可编程硬件118的数量和频率来提高效率。子二进制编译可以在低于被设计成能使用可编程硬件118的整个配置二进制的粒度层次的粒度层次上发生编译。某些可重新配置的硬件设备允许部分动态重新配置,即,以小于整个设备的粒度的重新配置。图27是示出了配置二进制子元素(它们可以被组合以创建完整的配置二进制)的编译的流程图2700。用于可编程硬件208的CAD工具所需的执行时间随着计算逻辑120的大小超线性地增大。因此,可以通过将较大的配置二进制或HDL文件拆分为较小的片断,或子元素,并分开地编译那些较小的片段,来实现性能优势。然后,可以将所产生的子元素组合以构成完整的计算逻辑。除更快的CAD工具208编译时间之外,由于操纵这些预先配置的子元素的能力,而并非必须重新编译整个配置二进制(这是相当消耗资源和时间的),二进制将更加容易被整理碎片和重新配置。对这些子元素的打包可以动态地进行(而不是对于整个配置静态地一次打包)。在此例图中,由被配置成进行子元素编译的编译模块112接收正则表达式108(1)和108(2)和通信和控制逻辑(CC) 306。HDL编译器202为每一个创建HDL文件。如此,编译 RE 108(1)的 HDL 文件 2702 (I)、RE 108(2)的 HDL 文件 2702 (2),RE 108(3)的 HDL 文件2702(3)。CAD工具208接受这些HDL文件2702 (I)-(3),用于创建子元素。Reg ex 108(1)导致配置二进制子元素2704(1),reg ex 108 (2)导致配置二进制子元素2704 (2),而CC306导致配置二进制子元素2704(3)。可以选择供执行的二进制子元素,而二进制合并模块2706可以将这些子元素缝合在一起,以产生组合的配置二进制2708。然后,可以由可编程硬件118加载和执行此组合的配置二进制2708。组合计算和超集可以通过将计算和超集组合来实 现附加的性能优点。图28是示出了正则表达式的计算组合的示意图2800。可以组合类似的或重复的诸如reg exs之类的计算。例如,假设多个垃圾消息过滤应用程序,并且用户提交reg exs的组供进行处理。在这些组内,可以存在可以被找出和打包供共同执行的副本。在2802,示出了用于执行的正则表达式。这些包括2804处的任务A,包括reg exs108(1)-(6)。在用于执行的reg exs中还包括2806处的任务B,包括reg exs 108(1),⑷,(6), (7), (8)和(9) ο重复的reg exs利用阴影示出。Regexs 108(1), (4)和(6)在两个任务之间是共同的。在没有计算组合的情况下,将需要四个配置二进制来包含全部十二个reg exso然而,通过计算组合,此数字可以缩小为三个配置二进制。在2808,示出了被组合和编译的reg exs。配置二进制210(61)包括reg exs 108(1)、(4)和(6),而配置二进制210(62)和210(63)结合其余的正则表达式,而没有重复。一个额外的好处是,当在任务A2804和任务B 2806之间切换时,一个重新配置是必需的,而并非四个。图29是示出了具有重复的或类似的部分的正则表达式的超集的示意图2900。如上所述,利用阴影示出了 reg ex的重复或类似的部分。在2902,示出了用于执行的正则表达式。Reg exs 108(1), (2)和(3)正在等待执行。如这里所示,reg ex 108(2)的一部分类似于reg ex 108(1)。例如,假设reg exl08 (I)是针对字符串“home mortgage”的,而reg ex 108(2)是针对字符串 “refinancing and equity from your home mortgage” 的。如此,108(2)包含类似于108(1)的部分,即用阴影表示的字符串“home mortgage”的部分。在由编译模块112进行编译期间,可以组合类似的或相同的部分。在2904,示出了已经被打包和编译的正则表达式的超集。在配置二进制210(71)内,示出了 reg ex108 (2),以及对108 (I)、108 (3)和CC 306(1)公共的部分。Reg ex 108(1)没有被包括在配置二进制210(71)中,因为相同的工作将由regex 108(2)中的公共部分执行。在执行之后,PHSC 114可以分出结果,并将它们提供回来,好像108(1)被分开地在可编程硬件中执行。超集允许执行所需的计算资源的减少。超集还通过允许更多等效的正则表达式利用较少的配置二进制来执行,降低重新配置的必要性。处理异构FPGAS系统102中的可编程硬件118不必是相同的,或者甚至是比特流兼容的。系统102可包括不同大小、速度、分级、制造商、板载存储器容量等等的设备。在存在异构硬件的情况下,取决于现有的reg ex分布和设备工作荷载(某些设备可以比其他设备较少地使用),以及reg ex优先级,来将可编程硬件设备118作为目标以供使用。
对目标可编程硬件118的选择将影响多个因素。这些因素包括基于不同的硬件对资源要求的估计的变化。例如,一个制造商可以使用与另一个制造商不同的基本逻辑元件,导致在可编程硬件118中如何实现reg exs的变化。受对目标可编程硬件118的选择的影响的另一个因素是打包能力。打包能力反映可编程硬件118的容量。例如,较大的设备可以比较小的设备保留更多reg exSo这影响reg ex跨哪里的多个配置以及如何跨多个配置来拆分。在确定目标可编程硬件期间还可影响用于映射部分reg ex的可行性。例如,在中间数据的大小与输入语料库数据处于相同大小级别的某些情况下,板载存储器可以有益于性能。在这些情况下,对目标可编程硬件的确定可以考虑硬件处理它的可行性。
在给定可以利用不同的命令来控制不同的设备的情况下,系统控制器的操作也受到目标可编程硬件影响。最后,由于目标硬件中的差异,影响虚拟化的“可移植性”。例如,就快速地调整容错而言,诸如在备用或重新分配期间,可以将最初分配给发生故障的设备的reg ex迁移到其他比特流兼容的可编程硬件设备118,无需重新编译。配置预取/分页当多个应用程序或用户共享同一个物理平台时,可以预期对特定配置二进制210或子元素的调用。如此,可以以类似于存储器预先获取和推理性执行的方式预先加载配置二进制。与FPGA直接通信如上所述,在一些实现中,PHSC 114可以处理调度和往返于用户的数据流。然后,可编程硬件118可以包括处理输入数据重播、输出数据重新排序、重新配置序列化等等的能力。本实现中的可编程硬件118可以要求附加的外部存储器来存储状态信息。在另一种实现中,可编程硬件118本身可以处理最初接收输入数据。在此实现中,可编程硬件118将接收输入数据,并开始利用当前加载的计算逻辑120来执行搜索。可编程硬件118将把输入数据中继回在软件中运行的PHSC 114的一部分。PHSC 114的此基于软件的部分将负责重播数据、重新排序输出数据,以及重新配置可编程硬件118。结论虽然参考此处所呈现的图形及其他流程图描述了说明性方法的具体细节,但是,应该理解,取决于情况,图形所示出的某些动作不必按照所描述的顺序来执行,可被修改,和/或可被完全省略。如本申请所描述,模块和引擎可以使用软件、硬件、固件或其组合来实现。此外,所描述的动作和方法可以通过计算机、处理器或其他计算设备,基于存储在存储器上的指令来实现,存储器包括一个或多个计算机可读存储介质(CRSM)。CRSM可以是可由计算设备访问以实现存储在其上的指令的任何可用的物理介质。CRSM可以包括,但不仅限于,随机存取存储器(RAM)、只读存储器(ROM)、电可擦可编程只读存储器(EEPROM)、闪存或其他固态存储器技术,光盘只读存储器(⑶-ROM)、数字多功能盘(DVD)或其他光学存储,磁带盒、磁带、磁盘存储或其他磁存储设备,或可以用来存储所希望的信息并可以被计算设备访问的任何其他介质。
权利要求
1.一种或多种存储了指令的计算机可读存储介质,所述指令在由处理器执行时使所述处理器执行包括下列各项的动作 解析正则表达式的列表并将所述正则表达式的列表转换为相对应的逻辑和状态方程(902); 估计在可编程硬件设备上实现所述逻辑和状态方程的物理资源要求(904); 将所述逻辑和状态方程分布到组,所述分布基于所述估计的物理资源要求,其中,每一组的大小被定为当与控制和通信逻辑结合时适合所述可编程硬件设备(906);将所述控制和通信逻辑添加到每一组中(908); 为每一组生成硬件定义语言(HDL)文件;以及 从每一 HDL文件来生成配置二进制,其中,每一配置二进制都被配置成在所述可编程硬件设备上执行。
2.如权利要求I所述的计算机可读存储介质,其特征在于,还包括为一个或多个所述组来生成配置规范(912)。
3.根据权利要求I或2中的任何一个所述的计算机可读存储介质,其特征在于,还包括 将所述配置二进制加载到所述可编程硬件设备中以生成计算逻辑(1104); 将语料库的至少一部分加载到所述可编程硬件设备(1106)中;以及 在所述可编程硬件设备上针对所述已加载的语料库执行所述计算逻辑(1108)。
4.根据权利要求1-3中的任何一个所述的计算机可读存储介质,其特征在于,所述估计物理资源要求包括 将特定正则表达式与所述可编程硬件设备上的计算逻辑相关联(1002); 标识所述计算逻辑内的冗余逻辑并将其删除(1004)以形成合并的逻辑; 估计所述可编程硬件设备上的所述合并的逻辑的本地存储要求(1006);以及 将计算机辅助设计工具专用的校正因数应用到所述合并的逻辑和本地存储要求;以及 基于所述估计的合并的逻辑和本地存储要求,生成估计的物理资源要求。
5.根据权利要求1-4中的任何一个所述的计算机可读存储介质,其特征在于,还包括 将所述列表中的正则表达式添加到丢弃列表中(1210);以及 丢弃与所述丢弃列表上的所述正则表达式相关联的执行结果(1212)。
6.如权利要求3所述的计算机可读存储介质,其特征在于,还包括利用相对应的逻辑和状态方程所示的所述正则表达式列表中未包括的附加的正则表达式修补执行结果(1214)。
7.如权利要求3所述的计算机可读存储介质,其特征在于,还包括动态地将配置二进制的所述加载从不可用的可编程硬件设备重定向到可用的可编程硬件设备(1402)。
8.根据权利要求1-7中的任何一个所述的计算机可读存储介质,其特征在于,还包括 从所述组中移除与已丢弃的正则表达式相关联的计算逻辑;以及 将其余的计算逻辑和控制和通信逻辑重新分布到一个或多个新的组(1908)。
9.根据权利要求1-8中的任何一个所述的计算机可读存储介质,其特征在于,所述配置二进制包括多个配置二进制子元素(2700)。
10.一种方法,包括在处理器上生成适于在可编程硬件设备上执行的逻辑和状态信息,其中,所述执行导致处理多个任务; 估计所述可编程硬件设备处理所述逻辑和状态信息所要求的硬件容量;以及基于所述已估计的硬件容量要求,将所述逻辑和状态信息分布到组中,以便每一组的所述逻辑和状态信息匹配所述可编程硬件设备的硬件容量。
11.如权利要求10所述的方法,其特征在于,进一步包括 为每一个组生成被配置成在所述可编程硬件设备上执行的配置二进制;以及 基于所述配置二进制,生成配置规范。
12.根据权利要求10-11中的任何一个所述的方法,其特征在于,还包括 确定所述可编程硬件设备上的所述组的执行优先级,其中所述执行优先级包括高优先级任务和低优先级任务;以及 序列化包含高优先级任务的组在可编程硬件上的执行比执行较低优先级任务的可编程硬件更快。
13.根据权利要求10-12中的任何一个所述的方法,其特征在于,还包括 通过优先级来序列化用于在所述可编程硬件设备上执行的任务;以及 在各组之间分布所述任务,以便高优先级任务被分发到首先执行或比低优先级组更频繁地执行的组中。
14.一种系统,包括 处理器; 耦合到所述处理器的存储器; 存储在所述存储器中并被配置成在所述处理器上执行的用户界面; 通过所述用户界面获取的并存储在所述存储器中的多个任务; 存储在存储器中的并被配置成执行下列操作的编译模块 将所述多个任务的至少一部分转换为相对应的逻辑和状态方程; 估计在可编程硬件设备上实现所述逻辑和状态方程的物理资源要求; 基于所述估计的物理资源要求将所述逻辑和状态方程分布到组,其中,每一组的大小被定为当与控制和通信逻辑结合时适合所述可编程硬件设备;以及对于每一个组生成配置二进制;以及 可编程硬件系统控制器,所述可编程硬件系统控制器被配置成在所述处理器上执行,以管理所述配置以及用于所述可编程硬件设备的输入/输出数据编组。
15.如权利要求14所述的系统,其特征在于,由所述用户界面获取的并存储在存储器中的所述多个任务是被配置成针对数据的语料库执行的正则表达式。
全文摘要
可以从诸如针对语料库来评估正则表达式之类的任务生成适于在可编程硬件设备上执行的逻辑和状态信息。可以估计可编程硬件设备上的逻辑和状态信息的硬件容量要求。一旦被估计,就可以将从多个任务生成的多个逻辑和状态信息分配到组,以便每一个组的逻辑和状态信息匹配可编程硬件设备的硬件容量。每一组内的任务可以被配置成在可编程硬件设备上并行地执行。然后,可以串行地执行组,准许资源的虚拟化。
文档编号G06F9/45GK102804170SQ201080028837
公开日2012年11月28日 申请日期2010年6月18日 优先权日2009年6月19日
发明者K·H·叶古罗, A·福林 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1