专利名称:用于贝叶斯网络结构学习的数据分区和临界区减小的制作方法
技术领域:
本发明的实施例涉及网络结构学习,更具体地说涉及贝叶斯网络结构学习的数据分区。
背景技术:
大量信息,尤其是相关的信息可以组织成网络结构。贝叶斯网络是此类网络结构的一个常见示例。贝叶斯网络的应用在生物信息学、模式识别、统计计算等领域不断递增。贝叶斯网络结构的学习是极具计算密集性的,找出真“最优”结构的解可能是NP完全。正如贝叶斯网络结构的学习是极具计算密集性的,具有大得多的数据集的网络正在被研究,这可能增加计算密集度,并且可能在计算密集度中计入指数级的增长。启发式方法常常关注于结构学习的性能效率,例如减少执行时间。性能效率在向现代网络提供可接受的可行解中越来越重要。
曾考虑过并行学习方法,以将多个计算机器的资源和/或处理核计入执行结构学习算法中。这些方法的并行特性尝试将工作分配到多个资源之间以减少任何一个系统找到解所花费的时间。传统的并行学习以基本原始的方式分配计算任务,在并行计算资源之间分配计算任务时通常仅考虑分配给每个并行计算资源的任务的数量。
例如,在邻居计分计算中,基本或主要线程可在其他可用的线程之间分配邻居计算。在计算邻居时,线程可以检查计分高速缓存以确定家族计分对于该结构是否已知。计分高速缓存在传统上是已知且已存储的网络家族计分的数据结构,它在线程之间共享并作为散列表被访问。如果计分是已知的(导致高速缓存命中),则计算资源可以简单地加载计分,并使用它来计算邻居计分(感兴趣的有向无循环图(DAG)或结构的计分)。如果计分不是已知的(导致高速缓存未命中),则可能需要计算资源来先计算家族计分,然后才计算邻居计分。注意作为可用于多个线程的数据结构,在临界区中会需要计分高速缓存访问来减少溢出数据。因此,可能存在一段时间计算资源可能未有效率地使用它的资源和/或处于空闲,等待另一个计算资源释放计分高速缓存。因此,目前或传统上用于结构学习的多处理/超线程方法无法为增加大小和复杂度的网络提供用于结构学习的期望性能。
下文的详细描述包括附图中通过举例而非限制形式的多个不同的图示说明。下面简要描述这些附图。
图1是具有分区的计分高速缓存的计算装置的框图的实施例。
图2是具有分区的计分高速缓存的多线程计算装置的框图的实施例。
图3是将结构学习循环分割成内循环和外循环的流程图的实施例。
图4是利用分割计分高速缓存的结构学习的流程图的实施例。
具体实施例方式
非常广义上的结构学习具有以贝叶斯网络作为发现节点网络中变量之间的概率关系的方法的应用,其中每个节点表示条件/状态和/或与条件/状态的因和/或果相关的信息。结构学习可以通过基于单个节点之间的概率关系构造网络结构表示来表示网络。爬山算法是常用于学习状态和/或动态贝叶斯网络的一种算法,并且它可以包括计分高速缓存的使用,其是多维稀疏矩阵,通常以散列表形式来实现。该矩阵的每个元素存储节点家族或多个节点的家族(或本文中简称为“家族”)的计分。家族包括感兴趣的当前或目标节点(子节点)和当前节点的父节点(或本文中简称为“父”)。可以将父和目标节点与概率关系相关。可以使用计分高速缓存来在计算计分之后存储家族的计分。
对于结构学习,学习算法一般首先加载训练数据(已知的关系),并基于该训练数据和特定计分尺度,计算计分来确定结构。该算法计算起点或初始当前结构的计分,它可以是由其开始结构学习的初始用户定义的贝叶斯网络结构。可以生成该起点的邻居(按边差(edgedifference)与当前结构分离的结构),并可以计算每个邻居的计分。每个邻居的计分计算的传统方法包括查询计分高速缓存以确定对应于该邻居的家族的计分是否是已知的或已经计算的。可以假定家族计分将不会改变;因此,如果为一次运算而计算过计分,则可以存储它并在另一次运算中再次使用它。如果有家族计分,则可以直接加载计分,并可以计算邻居的计分。如果没有家族计分,则一般计算整个结构的计分,并更新计分高速缓存。该过程通常对于所有邻居重复执行,算法选择具有最大计分的邻居作为可开始学习的下一个迭代的新当前结构。最优地,重复该过程直到没有邻居能够比当前结构计分更高为止。实用的应用常常使用针对实现确定的启发式方法,因为实现最优解是不可行或不可能的。
结构学习的一个常见问题是计算密集度和相关的长执行时间。并行化可以通过在多个线程(例如,并行核、算术逻辑单元(ALU)、处理核、处理器、中央处理单元(CPU)等)之间分配邻居计分任务/运算来加速结构学习过程。在原始并行化方法中,每个线程可以接收一个或多个邻居来计算,这些邻居均等地在这些线程之间分配。计分高速缓存的内容和/或访问计分高速缓存时涉及的过程可能影响线程的性能、产生竞态状况(racing conditions)、延迟等。传统上计分高速缓存是每个线程可访问的单个数据结构,这可能导致与刚才提到的那些相似的状况。目前的并行化方法包括创建临界区以将高速缓存访问限制于一次一个线程。一个备选方式可以是存储高速缓存的多个版本,每个线程一个版本,但是这可能导致不可接受程度的开销处罚。
可以通过提供计算任务之间的改进的局部性优化和负载平衡来提高系统效率。此外,可以针对执行重构计分算法,以便能够更有效率地使用和/或访问计分高速缓存。在一个实施例中,将计分高速缓存分区成多个子部分。例如,计分高速缓存可以是可单独寻址的存储器结构的阵列,阵列的每个元素是用于节点的计分高速缓存。在复杂的有向无循环图(DAG)(例如一个包括数千个节点的有向无循环图)中,可以通过提供计分高速缓存阵列来减少散列索引功能的不规则访问模式引起的处罚。可以通过与管理计分高速缓存的较高开销关联的处罚来代替散列索引的处罚。在庞大复杂的DAG中,不规则/随意访问的处罚可能远远高于开销的处罚。
例如,在基因网络应用中,DAG可能由数千个节点构成,这意味着计分高速缓存需要存储数百万个元素。散列索引功能引入的处罚可能显著地比管理具有数千个节点的每一个节点的阵列元素的计分高速缓存阵列高。例如,对具有2400个变量(因此对应于具有2400个节点的DAG)的基因网络的随意高速缓存访问可能引起比访问利用2400个元素的可寻址阵列生成的计分高速缓存更高的处罚。在一个实施例中,每个元素表示仅存储基因网络中对应的节点的计分的小计分高速缓存。
而且,分割计分高速缓存方法提供在计分中重组当前DAG的邻居的机会。当评估添加或删除到相同节点的边的邻居时,计分算法(以及因此线程执行该算法)可以通过仅访问特定节点(本文称为分割计分高速缓存)所对应的单个计分高速缓存阵列元素来获取完成邻居运算所必需的所有信息。因此,将邻居分配到计分的管理实体可以将与一个节点相关的邻居分组以改进访问计分高速缓存的局部性。对于将边反转的邻居,意味着两个操作删除初始边,并添加反方向的边。在此情况中,每次反向将访问子节点的一个分割计分高速缓存和父节点的一个分割计分高速缓存。可以将反向邻居与执行对相同子节点添加/删除边的邻居分组在一起,这可以控制计分/计算功能的访问模式,并因此改进访问局部性。改进了局部性的结果是更佳的运行速度。注意,具有优化了访问的分割计分高速缓存同时产生时间和地理局部性性能的增强。
利用分割计分高速缓存将数据分区还可以降低数据竞态或竞争状况的概率。如果将不同结束节点分配到不同线程,则降低了线程之间数据的相依性(interdependency)的概率。临界区还可以用于计算反向边,它可以访问对应于开始节点和结束节点的两个计分高速缓存,但是另一方面可以显著地减少临界区的使用。
因此,将计分高速缓存分区可以改进数据访问局部性,精细化计分算法的管理能力,以及支持在计分算法的多线程实现中消除多个临界区。在一个实施例中,将主计分循环分割成两个循环。在第一循环中,可以允许线程仅访问计分高速缓存的某些部分,它们可以是对于另一个线程可用的不同部分/子区。而且,第一循环中的线程可以尝试为其他线程将计分高速缓存“热身”。将计分高速缓存热身可以包括利用与节点关联的一个或多个家族的家族计分加载该计分高速缓存。如果通过第一循环的过程对计分高速缓存预先加载以备在第二循环中使用,则第二循环无需临界区,因为将只会读取而不写入每个高速缓存。在第一循环上加载计分高速缓存可能使第二循环上没有高速缓存未命中,并减少或消除数据竞态的可能性,甚至不会有临界区。因此,利用此方法显著地提高了多线程可伸缩性。例如,实验显示实现这些技术可以在双处理器(DP)同步多处理器(SMP)机器/系统上提供1.95X加速。由于描述的数据分区,它还可以潜在地在SMP、CMP(芯片上多处理器)和/或具有多个处理器或CPU(中央处理单元)的非均匀存储器访问NUMA并行处理机器上获得几乎线性的加速。注意在具有小数量的节点的计分网络中可以观察到大约3-11%的性能下降,因为用于管理分割计分高速缓存需要附加的存储器开销和执行时间。
本文中多次对“实施例”的引述应理解为描述本发明的至少一个实施例中的特定功能特征、结构或特征。因此,出现诸如“在一个实施例中”或“在备选实施例中”的短语可能描述本发明的多种实施例,而可能不一定全部涉及相同的实施例。
图1是具有分区的计分高速缓存的计算装置的框图的实施例。计算装置100表示计算机、服务器、工作站或其他计算装置/设备/机器。计算装置100可以是多线程的以允许同时/并行处理不同进程。处理器110表示一个或多个处理单元和/或计算核。处理器110可以包括中央处理单元、微控制器、数字信号处理器(DSP)、ALU等。处理器120同样表示一个或多个处理单元和/或计算核,并且可以包括中央处理单元、微控制器、DSP、ALU等。处理器110和120可以并行地工作。在一个实施例中,处理器110和120表示计算装置100的并行处理核。在一个实施例中,计算装置100不包括处理器120。计算装置100可以表示同步多处理器(SMP)系统、芯片上多处理器(CMP)系统和/或其他并行处理非均匀存储器访问(NUMA)系统。
存储器112可以提供用于处理器110执行的临时变量和/或指令的存储。存储器112可以表示芯片上存储器,例如处理器110上的高速缓存层、计算装置100的系统总线上的易失性存储、系统随机存取存储器(RAM)等。存储器112可以是可被处理器110直接访问的、可通过系统总线访问的和/或二者的组合。可以关于处理器120以相似方式描述存储器122。在一个实施例中,存储器/高速缓存对于处理器110和120都是可访问的。
在一个实施例中,计算装置100包括I/O(输入/输出)接口130,它表示计算装置100可以用来从外部源接收输入和/或向外部源提供输出的一个或多个机制/装置。外部源可以包括另一个计算系统、用户等,并且可以包括显示装置、光标控件、字母数字输入装置、音频输入和/或输出装置、可视显示器(例如发光二极管(LED))等。I/O接口130还可以包括用于I/O装置的驱动程序。经由I/O接口130接收的信息/数据/指令可以存储在存储器112和/或存储器122和/或海量存储140中。海量存储140表示一个或多个不同的存储机制,包括可拆卸存储器142(例如盘驱动器、存储棒/卡/槽、通用串行总线(USB)连接的装置等)和非易失性(NV)存储144(例如,盘驱动器、存储棒/卡、存储槽、硬盘驱动器等)。海量存储140可以存储用于加载到存储器112和/或122中以用于在处理器110和/或120上执行的程序/应用程序和/或指令,和/或与程序或指令相关或关联的数据。
数据、指令和/或程序信息可以通过由机器/电子设备/硬件制造的产品来提供并由/被计算装置100来执行。制造产品可以包括具有用于提供指令、数据等的内容的机器可访问/可读媒介。该内容可以使计算装置100执行描述的多种操作、执行。机器可访问媒介包括以可被机器(例如计算装置、电子设备、电子系统/子系统等)访问的形式提供(即存储和/或传输)信息/内容的任何机制。例如,机器可访问媒介包括可记录/不可记录媒介(例如只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储媒介、光存储媒介、闪速存储器装置等),以及电、光、声或其他形式的传播信号(例如载波、红外线信号、数字信号等)等等。机器可访问媒介还可以包括计算系统,其中该计算系统上加载有计算系统处于工作时能够执行的代码。因此,交付具有此类代码的计算系统可以理解为提供具有上文描述的此类内容的制造产品。而且,将代码存储在数据库上或其他存储器位置并提供代码以用于经由传播信号通过通信媒介下载可以理解为提供具有上文描述的此类内容的制造产品。
在一个实施例中,计算装置100可以包括网络接口150,它可以包括有线接口或无线接口和/或同时包括有线和无线接口。网络接口150可以表示网卡/电路,计算装置100可以通过它来与网络上的并行计算装置实现接口。
在一个实施例中,计算装置100包括计分高速缓存160,它可以表示用于为数据网络的结构学习提供值的存储的一个或多个组件。计分高速缓存160可以包括多个分区/子区/元素161,它们可以是可单独地被可寻址的存储器位置/区。可以通过将计分高速缓存160构造为元素阵列来寻址/访问每个位置,其中该阵列的每个元素是元素161。计分高速缓存160可以表示用于管理存储硬件的硬件和/或软件组件。在一个实施例中,计分高速缓存160表示对于处理器110和120可访问的数据结构。可以在结构学习过程中控制在计分高速缓存160中存储数据和对数据的访问,以减少数据竞态、改进局部性和消除一个或多个临界区。示出计分高速缓存160是属于计算装置100的,并且可以理解为存储在海量存储器140上的数据,理解为在处理器110或120的其中之一中执行或同时在二者中执行和/或理解为驻留在存储器112或1 22的其中之一中或同时驻留在二者中。
图2是具有分区的计分高速缓存的多线程计算装置的框图的实施例。计算装置200表示执行程序/控制程序的执行的装置、系统、设备和/或计算机。计算装置200可以执行网络结构学习功能或程序的一部分或全部。计算装置200包括多个线程1至N,其中N表示整数。例如,线程1至N可以表示SMP、CMP或NUMA机器上的多个并行计算资源。在一个实施例中,计算装置200还包括分区成多个子部分sub 1(子高速缓存1)至sub M的计分高速缓存210,其中M表示可以是与N相同或不相同的值的整数。例如,计算装置200可以包括2个线程和将计分高速缓存210分区成1000个元素。在另一个示例中,计算装置可以包括16个线程并将计分高速缓存分区成20个元素。本文对这些技术的描述并不限制于这些或任何其他特定实现。该方法可伸缩到多个并行计算资源(线程),以及从小网络结构伸缩到大型且复杂的要学习的结构。
每个分区sub 1至sub M可以包括多个条目,对于每个分区可以是相同数量的条目或可以是不同数量的条目。图2的表示旨在仅作为图示说明,无意指示可与任何特定分区关联的条目的数量。在一个实施例中,每个分区与要学习的网络结构中的不同节点相关联。这些条目可以表示与每个节点关联的不同家族的值,或可以表示不同节点状态(例如与其他节点的关系)。一旦计算了值并将其存储在例如sub 1中,则可以假定该值是不变的。因此,可以对该值计分一次,并将其存储在sub 1中的条目中,并将其单独地寻址供后来访问以在计算将来邻居计分时使用。
sub 1至sub M的每一个可以被线程1至线程N的任何一个访问。在一个实施例中,将来自多个不同线程的访问控制到多个不同分区。可以通过组织要由这些线程执行的计算任务来控制访问。例如,可以对线程N赋予要用于计算sub M的每个条目的连续任务。如果在后来计算任务中,线程1要访问sub M,则计算所有的值,线程1的访问中不会有高速缓存未命中。至此,线程1和线程N都无需临界区即可访问sub M,因为条目的值将不改变。
在一个实施例中,通信网络220表示广域网(WAN),例如因特网,并且它还可以表示局域网(LAN)或其他计算机之间的本地互连。通信网络220可以表示LAN和WAN的组合,并且可以包括有线和/或无线连接/链路。本文中不应将表示计算装置的互连的通信网络220与数据网络或网络结构(例如贝叶斯网络)混淆,数据网络或网络结构可以指信息的逻辑表示和信息的内部关系。
在一个实施例中,数据库(DB)240与计算装置200耦合,该耦合可以是直接链路或通过例如通信网络220的通信接口。在本示例中,通信网络220可以表示计算装置200与数据库240之间的一个或多个中间连接。数据库240可以表示可存储信息/数据的任何数量的数据库硬件装置、服务器等。在一个实施例中,数据库240包括与要学习的网络结构相关的信息。例如,数据库240可以包括据以导出一个或多个家族或其他网络结构的证据(例如已知数据、训练数据)。因此,数据库240可以包括用于学习结构的数据、据以确定邻居的数据,确定与邻居关联的家族等。还可以考虑数据库240来存储网络结构本身。可以通过数据库240和/或计算装置200的一个或多个线程为网络结构生成句柄。可以使用数据库240的信息来计算将加载到计分高速缓存210的家族计分。
图3是将结构学习循环分割成内循环和外循环的流程图的实施例。为了开始结构学习,可以选择结构作为起点,并可以确定邻居。邻居的确定和一个或多个起始结构的选择可以由主要线程来执行。主要线程可以将邻居运算任务分配到多个并行计算线程,包括主要线程本身。无论是在主要线程还是在并行线程,由图3的元素导出的此计算和任何其他计算、操作、执行均计算初始计分,302。可以在多个线程中同时或基本同时地执行,并且可以视为并行操作。可以基于结构学习程序中给定的标准/参数来选择、随机地选择或基于其他原因选择起点。线程可以选择DAG中的节点作为结束节点,304,并且选择节点作为开始节点,306。结束节点是弧段所指向的子节点。开始节点是父节点;作为父和子的这两个节点之间的关系由弧段或边表示。还可以随机地选择、作为节点列表中的第一个来选择或基于某个其他标准来选择开始节点和结束节点。在一个实施例中,该选择不是显著的。
线程确定是否存在从开始节点到结束节点的边,310。例如,线程可以访问计分高速缓存以确定是否已计算边的值。在分割计分高速缓存的情况中,对计分高速缓存的访问可以是对计分高速缓存或与该节点关联的计分高速缓存的段或分区的访问。如果该边不存在,则线程可以确定添加边是否得到有效的邻居,320。如果将得到有效的邻居,则利用新添加的边计算该结束节点的新计分,322。线程可以基于新边来确定邻居计分,并且确定邻居计分是否好于当前最佳邻居,以及如果所计算的邻居计分更好,则更新最佳计分邻居,324。
如果该边存在,则线程可以确定反向边是否会生成有效邻居,330。如果将得到有效的邻居,则可以计算开始节点和结束节点的新计分,332。线程可以基于新边来确定邻居计分,并且确定邻居计分是否好于当前最佳邻居,以及如果所计算的邻居计分更好,则更新最佳计分邻居,324。利用更新的最佳计分邻居,如果从开始节点到结束节点的边不生成有效的邻居或如果反向边不生成有效邻居,则线程确定计分的开始节点是否是所选结束节点的最后一个开始节点,340。该确定利用分割或分区的计分高速缓存来提供更好的局部性以达到计分算法的更快速执行。例如,分割计分高速缓存可以具有用于结束节点的单个可寻址的存储器位置,并且该存储器位置处的每个条目表示与该结束节点相关于某个开始节点关联的计分。注意结束节点和开始节点的作用可以改变而具有相似的结果。
如果开始节点不是最后一个开始节点,则选择下一个开始节点,342,并且重复该过程直到已处理所有开始节点为止。如果已处理所有开始节点,则线程确定是否已处理所有结束节点,350。此结构提供第一循环和第二循环,其中第一循环处理这些节点的计分高速缓存中的值。至此,第一循环加载高速缓存以便供第二循环使用,并以此对计分高速缓存热身。如果尚未处理最后一个结束节点,则选择下一个结束节点,352,并开始对该结束节点处理。如果已处理最后一个结束节点,则线程确定学习是否完成,360。如果学习未完成,则更新当前DAG并对其计分,362,然后重复该过程直到没有邻居能够计分高于当前结构为止。如果发现最高计分邻居,则输出最终学习的DAG,364。
图4是利用分割计分高速缓存的结构学习的流程图的实施例。主要或主线程为要学习的结构计算初始计分,402。初始计分提供用于学习的起点。主线程基于分割计分高速缓存体系结构准备分派到并行线程的线程工作,404。在一个实施例中,将主要计分高速缓存体系结构分区成多个小或分割的计分高速缓存,它们可以是用于要学习的网络的每个节点的一个分割计分高速缓存。计分计算将被分配(分派)到并行线程中间来处理。计分高速缓存的分割特性能够实现针对减少系统中的顺序执行(相对于并行)的工作量而实施的工作分配中的某些优化。
主线程将计算任务分配到每个可用的线程,线程1至线程N。计算任务可以包括用于计算邻居的计分的部分或所有操作。每个线程计算有效邻居的计分,412、422。因为计分高速缓存是分割的,所以可以对线程分配不与第一循环的邻居计算冲突的计分计算。传统上,并行化由生成所有邻居,并平均地将它们分配到线程用于计算。然后线程单独地处理分配的邻居。但是,因为线程可以首先查询计分高速缓存以查看是否已对邻居运算计算了计分,传统方式仅使用全局计分高速缓存的事实意味着需要通过临界区来监视计分高速缓存访问以避免数据竞态(竞争状况)和确保线程安全性。这是因为如果查询未命中,则线程会计算计分并更新计分高速缓存。在此情况中,不同的线程可能尝试对全局计分高速缓存的相同条目写入。
但是,临界区减小了并行化的优势,因为多线程程序的一部分顺序运行,这显著地降低了可伸缩性。例如,在基因网络的执行中,由于临界区可能多达60%的执行时间是顺序执行的。根据阿姆达尔法则(Amdah′s Law),如果60%的执行时间是顺序的,则双处理器系统被限制于不大于1((1-0.60)/2+0.60)=1.25X的加速,四处理器系统被限制于不大于1/((1-0.60)/4+0.60)=1.43X的加速。这样分别对应于仅0.625或0.358的潜在线性加速。将理解,增加处理器的数量恶化线性加速与实际加速之间的不相符。
利用分割计分高速缓存,可以将每个学习迭代的主要邻居计分循环分割成两个较小的循环。第一循环处理添加/删除边的邻居,并将分割计分高速缓存热身以用于对应反向边的情况。在一个实施例中,这可以在没有临界区的情况下实现,因为所有数据/操作都完全被分区,从而防止线程在计分高速缓存数据上的冲突。因为计算的计分被写入到分割计分高速缓存,所以可以将线程的系统同步,并且对计分高速缓存的每次后续查询均可以导致计分高速缓存命中,从而消除对再次写计分高速缓存的需要。因此,第二(后一个)循环在没有临界区的情况下也可以通过读取分割计分高速缓存来处理反向边邻居,因为所需的所有计算已经在第一循环中执行。
因此,由线程对仅由特定线程处理的计分高速缓存分区(例如计分高速缓存阵列的元素)执行分割计分高速缓存的线程内访问414、424。线程可以对与计分高速缓存分区关联的节点的值计分,并加载计分高速缓存以用于以后的线程间访问416、426。如上文论述的,这可以是第二循环。线程选择具有最佳计分的邻居,418、428,最佳计分通常是爬山实现中的最高计分,虽然可设计其中最低计分或最接近特定值的计分都是最佳计分的实现。
通常由主线程将多个不同并行的线程执行的处理同步,它选择具有最佳计分的当前已处理的邻居,430。然后可以处理第二循环,以确定是否存在更佳计分邻居。再次将操作分派到多个不同的并行线程,并且线程利用线程间分割计分高速缓存访问来计算有效邻居的计分442、452。注意因为分割计分高速缓存先前已热身或已利用计算的计分加载,所以无需线程执行任何计分计算。因此,这些操作可以在没有临界区的情况下执行,即便线程可能不是在对完全分离的数据或与其他线程访问隔离的数据操作。线程再次选择具有最佳计分的邻居,444、454,并将个体线程的选择同步,然后利用最佳计分更新系统的最佳邻居,462。当前最佳邻居可以由主线程来控制,主线程确定该线程计分的邻居的其中之一是否好于当前最佳邻居。
主线程然后可以将该邻居施加到DAG,并更新计分,464。如果学习完成,470,则输出最终学习的DAG,472。如果学习未完成,则迭代学习,474,以确定具有最佳计分的邻居。学习可以基于特定实现的多个标准来完成。例如,邻居可能对于处理的阈值次数的迭代是最佳邻居,可能已达到阈值次数的迭代,可能已达到计算的时间限制等等。
除了本文描述的内容外,在不背离其范围的前提下可以对本发明的实施例进行多种修改。因此,本文中的图示说明和示例应视为说明性意义的,而不应视为限制意义的。本发明的范围应仅由所附权利要求的引述来测定。
权利要求
1.一种用于结构学习的方法,包括将结构学习计分过程的计分计算任务分配给第一线程,所述第一线程针对所述计分计算任务仅访问全局计分高速缓存的第一分区,并计算在所述计分计算任务中使用的第一值;将附加的计分计算任务分配给第二线程,所述第二线程针对所述附加的计分计算任务访问所述全局计分高速缓存的第二分区,而不是所述全局计分高速缓存的第一分区,并并行地计算在所述附加的计分计算任务中使用的第二值;以及所述第一和第二线程分别将所述第一值和所述第二值存储在所述全局计分高速缓存的所述第一分区和所述全局计分高速缓存的所述第二分区。
2.如权利要求1所述的方法,其中,将所述任务分配给所述第一线程和所述第二线程的步骤包括将任务分配给同步多处理器系统的第一和第二处理器。
3.如权利要求1所述的方法,其中,将所述任务分配给所述第一线程和所述第二线程的步骤包括将任务分配给芯片上多处理器系统的第一和第二处理核。
4.如权利要求1所述的方法,其中,所述第一线程访问所述第一分区的步骤包括所述第一线程在没有临界区的情况下访问共享的全局计分高速缓存的所述第一分区。
5.如权利要求1所述的方法,其中,所述第一和第二分区包括分区阵列的可寻址的元素。
6.如权利要求5所述的方法,其中,所述分区阵列的所述可寻址的元素包括与贝叶斯网络的节点相关联的元素,其中每个节点与所述阵列的一个元素相关联。
7.如权利要求1所述的方法,其中,所述计分计算任务包括对具有与所述附加的计分计算的结构的节点不同的节点结构的邻居执行邻居计分。
8.一种包括具有内容的机器可访问媒介的制造产品,所述内容提供使机器执行包括如下操作的指令将可直接寻址的高速缓存分区关联到贝叶斯网络的每个节点;将与所述贝叶斯网络的节点中的其中一个节点相关联的邻居运算分配到第一并行线程,所述第一并行线程用来访问与所述一个节点相关联的所述可直接寻址的高速缓存分区以获取用于所述邻居运算的信息;以及将与所述贝叶斯网络的节点中的另一个节点相关联的邻居运算分配到第二并行线程,所述第二并行线程用来访问与所述另一个节点相关联的所述可直接寻址的高速缓存分区以获取用于所述邻居运算的信息。
9.如权利要求8所述的制造产品,其中,所述内容提供使机器将可直接寻址的高速缓存分区关联到每个节点的指令包括,所述内容提供使所述机器提供对具有地址的数据结构中的存储器位置的直接且唯一的地址索引的指令。
10.如权利要求8所述的制造产品,其中,所述内容提供使机器分配所述邻居运算的指令包括,所述内容提供使所述机器将用于由非相依节点构成的分离邻居的运算分配到第一和第二并行线程的指令。
11.如权利要求8所述的制造产品,其中,所述第一和第二线程包括系统的第一和第二计算资源,所述系统具有共享对存储器数据结构的访问的多个并行的计算资源。
12.如权利要求8所述的制造产品,其中,与所述一个节点相关联的所述可直接寻址的高速缓存分区包括与所述一个节点相关联的每个家族的家族计分的条目。
13.如权利要求8所述的制造产品,还包括所述第一和所述第二并行线程,用来在与所述一个节点相关联的相应高速缓存分区和与所述另一个节点相关联的高速缓存分区中存储在所述邻居运算中为所述一个节点和所述另一个节点计算的家族的计分。
14.如权利要求13所述的制造产品,所述内容提供使机器分配所述邻居运算的指令包括,所述内容提供使机器对爬山算法的邻居计分循环的第一邻居计分子循环分派邻居运算的指令,以及还包括所述内容提供使机器对所述爬山算法的所述邻居计分循环的第二邻居计分子循环分派邻居运算的指令,所述线程用来在第一计分子循环期间访问在所述高速缓存分区中存储的所述家族计分。
15.一种设备,包括存储器,所述存储器具有用于为网络结构学习的迭代定义操作的执行的数据,所述操作包括对于所述结构学习迭代中的第一邻居计分循环,在并行线程之间分配邻居计分功能,以使第一线程访问计分高速缓存阵列的第一元素和第二线程访问所述高速缓存阵列的第二元素;以及对于所述结构学习迭代中的第二邻居计分循环,在并行线程之间分配附加的邻居计分功能,以使第一线程访问计分高速缓存阵列的所述第一元素、所述计分高速缓存阵列的所述第二元素或所述计分高速缓存阵列的另一个元素;以及耦合到所述存储器的处理器,用来执行所述存储器中定义的操作。
16.如权利要求15所述的设备,其中,所述计分高速缓存阵列中的每个元素对应于要学习的网络结构中的单个节点。
17.如权利要求16所述的设备,所述存储器还包括为所述第一和第二线程定义操作的数据,所述操作在所述第一循环中分别利用所述计分高速缓存阵列中的第一和第二元素对应的单个节点的家族的家族计分来加载所述第一和第二元素,以供后来在所述第二循环中使用。
18.一种系统,包括存储器,所述存储器具有用于为贝叶斯网络的邻居计分定义操作的执行的数据,所述操作包括利用第一循环对邻居计分包括,利用第一处理核访问计分高速缓存阵列中的第一元素,利用第二处理核访问所述计分高速缓存阵列中的第二元素;以及利用第二循环对附加的邻居计分包括,利用所述第一处理核访问所述计分高速缓存阵列中的第一元素或所述计分高速缓存阵列中的第二元素;耦合到所述存储器的所述第一和第二处理核,用来执行所述存储器中定义的操作;以及与所述存储器耦合的数据库,用来存储将据以学习所述贝叶斯网络结构的数据并将所述数据提供到所述存储器。
19.如权利要求18所述的系统,其中,所述第一和第二处理核包括多处理器机器中的第一和第二多处理器。
20.如权利要求18所述的系统,其中,所述第一和第二处理核包括多处理器集成电路芯片的第一和第二多处理核。
全文摘要
在并行系统中,多个线程以并行方式操作以执行网络结构学习。将全局计分高速缓存分区成多个分割计分高速缓存,在一个实施例中,它们可以包括将计分高速缓存与要学习的结构的节点相关联。利用分割计分高速缓存,可以在分割邻居计分循环中执行学习,其中第一循环在分离的计分高速缓存分区上操作,并为第二循环将计分高速缓存分区热身。
文档编号G06F15/18GK101095132SQ200480044805
公开日2007年12月26日 申请日期2004年12月31日 优先权日2004年12月31日
发明者C·赖, W·胡 申请人:英特尔公司