一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

同步资源的使用方法与流程

2022-08-13 12:42:30 来源:中国专利 TAG:


1.本发明涉及一种同步资源的使用方法且特别是有关于一种用于并行的多个线程束的同步资源的使用方法。


背景技术:

2.生产者消费者问题(producer-consumer problem)是一个在并行程序中同步的问题,所述问题描述了多个并行的线程束可通过同步资源的指令来通信。生产者指令和消费者指令是同步资源的两种不同的指令类别。对于数据依赖来讲,生产者准备好数据给消费者,即,生产者生产数据写入内存,消费者消费内存中的数据;对于内存(包含各种高速缓存)依赖来讲,生产者腾出内存给消费者,即,生产者消费内存中的数据,消费者生产数据写入内存。从内存依赖的角度看和从数据依赖的角度看,角色是相反的。如果生产者未把数据或内存准备好,消费者不能开始消费数据或内存。同步资源的分配发生在并行程序的生成阶段,而不是在并行程序的执行阶段。在生成阶段很难知道并行程序的执行顺序,导致下次分配同步资源的时候不知道已分配的同步资源有哪些已经被回收。据此,由于同步资源有限,倘若同步资源不能及时回收,将无法充分利用同步资源。并且,在并行程序中,同步资源分配容易产生冲突。因此,如何充分利用所有的同步资源,使得同步资源分配时不产生冲突,不闲置,且能及时回收则是目前待解决的一个问题。


技术实现要素:

3.本发明是针对一种同步资源的使用方法,可充分利用同步资源并解决并行程序中同步资源分配冲突的问题。
4.本发明的同步资源的使用方法,用于并行的多个线程束,包括:解析所述多个线程束,以获得每一所述线程束所包括的与同步资源相关的所有指令;根据每一所述指令的指令类别,划分每一所述线程束中所包括的所有指令而获得一或多个顶点;建立所述多个线程束中所包括的所有顶点之间的路径,以获得第一有向无环图;删除所述第一有向无环图内多个顶点之间冗余的弧,以获得第二有向无环图,其中,所述弧用以连接所述所有顶点中的两个所述顶点,每条所述路径为一条或多条所述弧的集合;对所述第二有向无环图所包括的所有顶点使用的同步资源进行分组,以获得第三有向无环图;建立所述第一有向无环图中的所述所有顶点的拓扑排序序列;以及基于所述拓扑排序序列以及所述第三有向无环图,将逻辑同步资源映射至物理同步资源。
5.在根据本发明的实施例中,每一个指令具有同步资源标识符,每一个顶点包括至少一个指令,所述指令类别包括消费者指令和生产者指令。建立所述多个线程束中所包括的所有顶点之间的路径,以获得所述第一有向无环图的步骤包括:基于指令执行顺序,在属于同一线程束的两个顶点之间建立线程束内弧;以及基于所述指令类别以及所述同步资源标识符,在属于不同线程束的两个顶点之间建立线程束间弧,其中所述弧包括所述线程束内弧以及所述线程束间弧。
6.在根据本发明的实施例中,所述线程束内弧是用以连接属于同一线程束内的相邻的两个顶点,且由执行顺序在前的顶点指向执行顺序在后的顶点;所述线程束间路径是用以连接具有相同的同步资源标识符的属于不同线程束的两个顶点,且由生产者指令指向消费者指令。
7.在根据本发明的实施例中,根据每一所述指令的指令类别,划分每一所述线程束中所包括的所有指令而获得所述顶点的步骤包括:在每一所述线程束中,将自消费者指令开始到下一个消费者指令之前的所有指令,划分至同一个顶点。倘若每一所述线程束中初始的指令属于生产者指令,将自初始的指令开始到下一个所述消费者指令之前的所有指令,划分至同一个顶点。
8.在根据本发明的实施例中,删除所述第一有向无环图内的所述多个顶点之间冗余的弧之前,还包括:在所述第一有向无环图中,判断每一条所述弧是否为所述冗余的弧。在所述弧的弧头和弧尾之间还存在由多条弧形成的其他路径的情况下,判定所述弧为冗余的弧。
9.在根据本发明的实施例中,在判定所述弧为冗余的弧之后,还包括:在所述冗余的弧上的所述生产者指令为第一生产者指令,在所述冗余的弧的弧头和弧尾之间存在的由多条所述弧形成的其他路径上的第一条弧对应的所述生产者指令为第二生产者指令,判断所述第一生产者指令的执行顺序是否在所述第二生产者指令的执行顺序之前;在判定所述第一生产者指令的指令执行顺序在所述第二生产者指令的指令执行顺序之前的情况下,在所述第一有向无环图中删除所述冗余的弧上的所述第一生产者指令以及其对应的消费者指令以及冗余的弧。
10.在根据本发明的实施例中,对所述第二有向无环图所包括的所述所有顶点使用的同步资源进行分组,以获得所述第三有向无环图的步骤包括:在所述第二有向无环图所包括的所述所有顶点中,将入度为0的顶点、出度大于或等于2的顶点所指向的顶点以及入度大于或等于2的顶点作为判断目标;以及把每一判断目标开始到下一个所述判断目标之前的所有顶点(不包含下一个所述判断目标)所使用的同步资源的集合,抽象成第三有向无环图的一个顶点。
11.在根据本发明的实施例中,基于所述拓扑排序序列以及所述第三有向无环图,将所述逻辑同步资源映射至所述物理同步资源的步骤包括:基于映射规则,依据所述拓扑排序序列,逐一将所述第一有向无环图中的所有顶点的逻辑同步资源映射至所述物理同步资源,所述映射规则包括:所述第三有向无环图中的任一顶点可以重复使用所述任一顶点的前驱顶点以及所述任一顶点回收的物理同步资源;以及所述第三有向无环图的不同条路径上的多个顶点之间所使用的物理同步资源为互斥关系;其中,所述前驱顶点为同条路径中位于所述任一顶点之前的顶点。
12.本发明的用于同步资源的电子装置,包括:存储器,包括一或多个代码段;以及处理器,耦接至所述存储器,且经配置执行所述代码段以实现上述同步资源的使用方法。
13.基于上述,本揭示利用指令执行顺序、指令类别以及同步资源标识符而针对不同线程束所包括的指令来生成连接关系,进而基于此连接关系来决定同步资源的利用。据此,可充分利用同步资源并解决并行程序中同步资源分配冲突的问题。
附图说明
14.图1是依照本发明一实施例的用于同步资源的电子装置的框图。
15.图2a是依照本发明一实施例的同步资源的使用方法的流程图。
16.图2b是依照本发明一实施例的建立弧的方法流程图。
17.图3是依照本发明第一实施例的生成两个线程束的顶点的示意图。
18.图4是依照本发明第一实施例的第一有向无环图的示意图。
19.图5是依照本发明第一实施例的第二有向无环图的示意图。
20.图6是依照本发明第一实施例的第三有向无环图的示意图。
21.图7(a)~图7(g)是依照本发明第一实施例的拓扑排序序列示意图。
22.图8是依照本发明第二实施例的生成多个线程束的顶点的示意图。
23.图9是依照本发明第二实施例的第一有向无环图的示意图。
24.图10是依照本发明第二实施例的第二有向无环图的示意图。
25.图11是依照本发明第二实施例的第三有向无环图的示意图。
具体实施方式
26.现将详细地参考本发明的示范性实施例,示范性实施例的实例说明于附图中。只要有可能,相同组件符号在图式和描述中用来表示相同或相似部分。
27.图1是依照本发明一实施例的用于同步资源的电子装置的框图。在本实施例中,电子装置采用具有运算能力的电子装置来实现。请参照图1,电子装置a至少包括处理器10以及存储器20。处理器10例如为中央处理单元(central processing unit,cpu)、物理处理单元(physics processing unit,ppu)、可程序化之微处理器(microprocessor)、嵌入式控制芯片、数字信号处理器(digital signal processor,dsp)、特殊应用集成电路(application specific integrated circuits,asic)或其他类似装置。存储器20例如是任意型式的固定式或可移动式随机存取内存(random access memory,ram)、只读存储器(read-only memory,rom)、闪存(flash memory)、硬盘或其他类似装置或这些装置的组合。存储单元中包括一或多个代码段,在所述程序代码被安装之后,通过处理器10来执行下述同步资源的使用方法的各步骤。
28.图2a是依照本发明一实施例的同步资源的使用方法的流程图。本实施例适用于并行程序,此并行程序中具有多个并行的线程束,每一个线程束包括多个并行的线程。
29.请参照图2a,在步骤s105中,解析多个线程束,以获得每一个线程束所包括的与同步资源相关的所有指令。即,通过处理器10找出指令类别为消费者指令或生产者指令的所有指令。每一个指令中具有同步资源标识符。同步资源标识符用以指示此指令所欲访问的同步资源。一个(逻辑)同步资源具有一个对应的同步资源标识符,且供一个生产者指令与一个消费者指令使用。
30.接着,在步骤s110中,根据每一个指令的指令类别,划分每一个线程束中所包括的所有指令而获得一或多个顶点。在此,每一个顶点包括至少一个指令。具体而言,在一实施例中,处理器10会根据消费者指令来进行顶点的划分。在一实施例中,在每一个线程束中,将自消费者指令开始到下一个消费者指令之前的所有指令,划分至同一个顶点。倘若初始的指令为生产者指令,则将自初始的指令开始到下一个消费者指令之前的所有指令,划分
至同一个顶点。即,每个线程束从前往后遍历,从消费者指令或第一条指令开始到下一条消费者指令前的所有指令划分为同一个顶点。倘若一个线程束中的一个消费者指令后的全部指令均为生产者指令,即没有其他消费者指令,则将该消费者指令与该消费者指令后的全部生产者指令划分为同一个顶点。
31.之后,在步骤s115中,建立所述多个线程束中所包括的所有顶点之间的路径,以获得第一有向无环图。所述弧包括同一线程束内的顶点之间的线程束内弧以及不同线程束的顶点之间的线程束间弧。弧用以连接所述多个顶点中的两个所述顶点。弧的方向为弧尾到弧头,弧尾和弧头即一条弧连接的两个顶点。而线程束内弧与线程束间弧两者是基于不同的条件来建立。底下以图2b来进一步说明步骤s115。步骤s115还可进一步包括步骤s115a以及步骤s115b。
32.图2b是依照本发明一实施例的建立弧的方法流程图。请参照图2,在步骤s115a中,基于指令执行顺序,在属于同一线程束的两个顶点之间建立线程束内弧。所述线程束内弧是用以连接属于同一线程束内的相邻的两个顶点,且由执行顺序在前的顶点指向执行顺序在后的顶点。
33.在步骤s115b中,基于指令类别以及同步资源标识符,在属于不同线程束的两个顶点之间建立线程束间弧。所述线程束间弧是用以连接具有相同的同步资源标识符的属于不同线程束的两个顶点,且由生产者指令指向消费者指令。在此并不限定步骤s115a与步骤s115b的执行顺序。
34.返回图2a,在建立所有顶点之间的路径之后,在步骤s120中,删除第一有向无环图内的多个顶点之间冗余的弧,以获得第二有向无环图。即,在第一有向无环图中,由入度为0的初始顶点开始,每次针对用以连接两个顶点的一条弧,判断每一条弧的弧头和弧尾之间是否还存在由多条弧形成的其他路径。倘若每一条弧的弧头和弧尾之间不存在由多条弧形成的其他路径,则保留此弧。倘若所述弧的弧头和弧尾之间还存在由多条弧形成的其他路径,判定这条弧为冗余的弧,删除这条弧。例如,假设某一条弧r1是自a顶点指向b顶点,倘若a顶点与b顶点还存在有包括“自a顶点指向c顶点的弧r2”以及“自c顶点指向b顶点的弧r3”两者形成的路径,便判定所述弧r1为冗余的弧,删除弧r1。
35.在删除所述顶点之间冗余的弧之后,获得第二有向无环图。接着,在步骤s125中,对所述第二有向无环图所包括的所有顶点进行分组,以获得第三有向无环图。在所述第二有向无环图所包括的顶点中,将入度为0的顶点、出度大于或等于2的顶点所指向的顶点以及入度大于或等于2的顶点作为判断目标,并针对每一判断目标开始遍历,直到遍历至下一个判断目标,则停止此判断目标的遍历。即,把每一个判断目标开始到下一个所述判断目标之前的所有顶点(不包含下一个所述判断目标)所使用的同步资源的集合,抽象成第三有向无环图的一个顶点。所述第三有向无环图的顶点之间的路径沿用所述第二有向无环图的路径,只不过在所述第三有向无环图的一个顶点包括所述第二有向无环图的多个顶点的情况下,所述第二有向无环图的多个顶点之间的路径被删除了。(详细说明可参照后续图6、图11)。
36.之后,在步骤s130中,建立第一有向无环图中的所有顶点的拓扑排序序列。举例来说,(1)从第一有向无环图中选择一个入度为0的顶点并输出至拓扑排序序列。之后,(2)从第一有向无环图中删除所述入度为0的顶点和所有以它为起点的弧。当有多个入度为0的顶
点时,可以先任意选择其中之一输出至拓扑排序序列,再分别选择其他顶点并输出至拓扑排序序列。重复(1)和(2)直到当前的第一有向无环图为空或入度为0的顶点为止。
37.最后,在步骤s135中,基于所述拓扑排序序列以及所述第三有向无环图,将所述逻辑同步资源映射至所述物理同步资源。具体而言,处理器10基于映射规则,依据所述拓扑排序序列,逐一将所述第一有向无环图中的所有顶点的逻辑同步资源映射至所述物理同步资源,所述映射规则包括:所述第三有向无环图中的任一顶点可以重复使用所述任一顶点的前驱顶点以及所述任一顶点回收的物理同步资源。以及所述第三有向无环图的不同条路径上的多个顶点之间所使用的物理同步资源为互斥关系;其中,所述前驱顶点为同条路径中位于所述任一顶点之前的顶点。所述互斥关系是指不同路径上的这些顶点不会使用同一个物理同步资源。
38.第三有向无环图包括了生产者指令与消费者指令之间的指向关系,故,可清楚得知,在不同线程束中生产者指令与其对应的消费者指令的配对关系,进而可进一步判断具有连接关系的生产者指令与消费者指令是否会产生冲突来决定是否要分配至同一个物理同步资源。在不同路径上的多个顶点之间来设定互斥关系,可避免并行的线程束同时抢用同一个物理同步资源的问题。
39.底下举一应用实施例来进一步说明同步资源的使用方法。
40.图3是依照本发明第一实施例的生成两个线程束的顶点的示意图。图4是依照本发明第一实施例的第一有向无环图的示意图。图5是依照本发明第一实施例的第二有向无环图的示意图。图6是依照本发明第一实施例的第三有向无环图的示意图。
41.图3示出的两个线程束,其编号分别为2、3(下述称为线程束2、线程束3),分别包括了多个与同步资源相关的指令。线程束2包括指令p1、p2、c3、p5、c4、p6,其同步资源标识符分别为1、2、3、5、4、6。线程束3包括指令c1、p3、c2、p4、c5、c6,其同步资源标识符分别为1、3、2、4、5、6。所述“p”表示此指令属于生产者指令,所述“c”表示此指令属于消费者指令。在每个线程束中,从前往后遍历,从消费者指令或第一条指令开始到下一条消费者指令前的所有指令划分为同一个顶点。
42.在线程束2中,首先,将初始指令p1(第一条指令)到下一个消费者指令c3之前的所有指令(即,指令p1以及指令p2),划分至顶点c2_0。接着,由指令c3(消费者指令)开始到指令c4之前的所有指令(即,指令c3以及指令p5),划分至顶点c2_1。之后,由于指令c4后续并不存在其他消费者指令,因此将指令c4与其后续剩余的指令p6划分至顶点c2_2。以此类推,将线程束3的指令划分为顶点c3_0、c3_1、c3_2、c3_3。接着,建立顶点之间的路径。
43.同时参照图3以及图4,针对属于线程束2的顶点c2_0~c2_2,基于指令执行顺序,在相邻两个顶点(顶点c2_0与顶点c2_1;顶点c2_1与顶点c2_2)之间,建立由执行顺序在前的顶点指向执行顺序在后的顶点的弧(线程束内弧)r11、r12。以此类推,针对属于线程束3的顶点c3_0~c3_3,建立弧(线程束内弧)r21、r22、r23。
44.并且,针对不同线程束间的顶点,找出具有相同的同步资源标识符且属于不同线程束的顶点中的两个指令,建立由包括生产者指令的顶点指向包括消费者指令的顶点的弧(线程束间弧)r31~r36。基此,获得第一有向无环图400。
45.之后,同时参照图4以及图5,进行冗余的弧的删除。以弧r11而言,由于顶点c2_0(头顶点)与顶点c2_1(尾顶点)之间还存在由多条弧(r31、r33)形成的路径,故,判定弧r11
为冗余的弧,而将弧r11删除。以弧r12而言,由于顶点c2_1(弧尾)与顶点c2_2(弧头)之间只存在弧r12而不存在由多条弧形成的其他路径,故,保留弧r12。以此类推,获得如图5所示的第二有向无环图500。
46.另外,在一实施例中,在第一有向无环图中,在所述冗余的弧上的所述生产者指令为第一生产者指令,在所述冗余的弧的弧头和弧尾之间存在的由多条弧形成的其他路径上的第一条弧对应的所述生产者指令为第二生产者指令,在具有第一生产者指令及第二生产者指令的情况下,判断第一生产者指令的执行顺序是否在第二生产者指令的执行顺序之前。在判定第一生产者指令的执行顺序在第二生产者指令的执行顺序之前的情况下,在第一有向无环图400中删除冗余的弧上的第一生产者指令以及其对应的消费者指令以及冗余的弧。
47.例如,将冗余的弧对应的第一生产者指令记为指令p_x,除这条弧外的其它路径的第一条路径对应的第二生产者指令记为指令p_y(指令p_x和指令p_y在同一线程束内)。如果指令p_x在指令p_y前面,则删除冗余的弧和冗余的弧对应的指令p_x和其对应的消费者指令。如果指令p_x不在指令p_y前面,则不删除冗余的弧和冗余的弧对应的指令p_x和其对应的消费者指令。
48.在删除冗余的弧之后,对第二有向无环图500所包括的所有顶点进行分组。同时参照图5以及图6,在第二有向无环图500中,将入度为0的顶点(顶点c2_0)、出度大于或等于2的顶点所指向的顶点(顶点c2_1、顶点c3_1、顶点c2_2、顶点c3_2)以及入度大于或等于2的顶点(顶点c3_3)作为判断目标。基于第二有向无环图500的连接关系,针对每一判断目标开始遍历,将所遍历的顶点抽象成所述第三有向无环图的一个顶点,直到遍历至下一个判断目标,则停止此判断目标的遍历。
49.以判断目标为顶点c2_0开始遍历至下一个判断目标(顶点c3_1)而言,保存所遍历的顶点(即,顶点c2_0、顶点c3_0)至其对应的所述第三有向无环图的顶点(顶点group_c2_0)。以判断目标为顶点c2_1而言,由于其后续顶点亦为判断目标,故,停止此判断目标的遍历,其对应的所述第三有向无环图的顶点group_c2_1仅包括此一顶点。而其他判断目标,即顶点c3_1、顶点c2_2、顶点c3_2、顶点c3_3,亦如同顶点c2_1。由此,第二有向无环图500中的各顶点已全部设定有对应的第三有向无环图的顶点。对于第三有向无环图的路径而言,其路径继续沿用第二有向无环图之间的路径,但是由于例如第三有向无环图顶点group_c2_0包括了第二有向无环图的多个顶点c2_0和c3_0,因此顶点c2_0和顶点c3_0之间由单条弧形成的路径被删除了。由此获得第三有向无环图600。第三有向无环图600包括顶点group_c2_0、group_c2_1、group_c2_2、group_c3_1、group_c3_2、group_c3_3。
50.图7(a)~图7(g)是依照本发明第一实施例的拓扑排序序列的示意图。图7(a)为依照本发明第一实施例的第一有向无环图的示意图。在所述冗余的弧上的所述生产者指令为第一生产者指令,在所述冗余的弧的弧头和弧尾之间存在的由多条弧形成的其他路径上的第一条弧对应的所述生产者指令为第二生产者指令,在具有第一生产者指令及第二生产者指令的情况下,判断第一生产者指令的执行顺序是否在第二生产者指令的执行顺序之前。在判定第一生产者指令的执行顺序在第二生产者指令的执行顺序之前的情况下,在第一有向无环图中删除冗余的弧上的第一生产者指令以及其对应的消费者指令及冗余的弧。在本实施例中,冗余的弧r11上的第一生产者指令为p2,冗余的弧的弧头c2_1和弧尾c2_0之间存
在的有多条弧形成的其他路径为r31及r33,而r31及r33上的首个生产者指令为p1,即此处第二生产者指令为p1,此时,第一生产者指令的执行顺序在第二生产者指令之后,因此不需要删除第一生产者指令及其对应的消费者指令及冗余的弧。
51.接下来根据经如上处理后的第一有向无环图建立拓扑排序序列。首先,在图7(a)中选择入度为0的顶点c2_0并输出至排序队列q{c2_0}。之后,删除顶点c2_0和所有以它为起点的弧r11、r31,如图7(b)所示。接着,在图7(b)中选择入度为0的顶点c3_0并输出至排序队列q{c2_0,c3_0}。接着,删除顶点c3_0和所有以它为起点的弧r33、r21,如图7(c)所示。在图7(c)中有两个入度为0的顶点c2_1及c3_1,此时可以任意选择其一。此处以选择c2_1为例。因此之后在图7(c)中选择入度为0的顶点c2_1并输出至排序队列q{c2_0,c3_0,c2_1}。
52.而后,删除顶点c2_1和所有以它为起点的弧r12、r34,如图7(d)所示。之后,在图7(d)中选择入度为0的顶点c3_1并输出至排序队列q{c2_0,c3_0,c2_1,c3_1}。接着,删除顶点c3_1和所有以它为起点的弧r35、r22,如图7(e)所示。之后,在图7(e)中选择入度为0的顶点c2_2并输出至排序队列q{c2_0,c3_0,c2_1,c3_1,c2_2}。
53.而后,删除顶点c2_2和以它为起点的弧r36,如图7(f)所示。之后,在图7(f)中选择入度为0的顶点c3_2并输出至排序队列q{c2_0,c3_0,c2_1,c3_1,c2_2,c3_2}。在删除顶点c3_2和以它为起点的r23后,剩下最后一个顶点c3_3,如图7(g)所示,将最终的顶点c3_3输出至排序队列q{c2_0,c3_0,c2_1,c3_1,c2_2,c3_2,c3_3}。
54.底下再举另一应用实施例来进一步说明同步资源的使用方法。
55.图8是依照本发明第二实施例的生成多个线程束的顶点的示意图。图9是依照本发明第二实施例的第一有向无环图的示意图。图10是依照本发明第二实施例的第二有向无环图的示意图。图11是依照本发明第二实施例的第三有向无环图的示意图。
56.图8示出的5个线程束,其编号分别为2、3、4、5、6(下述称为线程束2~线程束6)。首先,基于指令类别,线程束2划分出顶点2_0,线程束3划分出顶点3_0~顶点3_2,线程束4划分出顶点4_0~顶点4_2,线程束5划分出顶点5_0,线程束6划分出顶点6_0~顶点6_1。接着,基于指令执行顺序,在属于同一线程束的两个顶点之间建立线程束内弧,并基于指令类别以及同步资源标识符,在属于不同线程束的两个顶点之间建立线程束间弧,而获得如图9所示的第一有向无环图900。
57.之后,基于每一条弧的弧头和弧尾之间是否仅存在该条弧形成的路径来判定该条弧是否为冗余的(详细说明可参照上述相关描述)。而在删除冗余的弧之后,获得图10所示的第二有向无环图1000。
58.参照图10及图11,在第二有向无环图1000中,将入度为0的顶点(顶点2_0、顶点5_0)、出度大于或等于2的顶点所指向的顶点(顶点3_0、顶点4_0、顶点6_0、顶点4_1)以及入度大于或等于2的顶点(顶点6_1)作为判断目标,并分别设定对应的第三有向无环图的顶点g2_0、g5_0、g3_0、g4_0、g6_0、g4_1、g6_1。其中,顶点3_0及顶点4_0是由顶点2_0(出度为2)所指向的顶点,顶点6_0及顶点4_1是由顶点4_0(出度为2)所指向的顶点。接着,针对每一判断目标开始遍历,将所遍历的顶点抽象成所述第三有向无环图的一个顶点,直到遍历至下一个判断目标,则停止此判断目标的遍历。
59.以判断目标为顶点3_0开始,沿着顶点3_1、顶点3_2遍历至另一个判断目标即顶点6_1而言,将所遍历的顶点3_0、顶点3_1、顶点3_2设定至与顶点3_0相同的顶点g3_0。以顶点
4_1而言,沿着顶点4_1开始遍历至结束顶点4_2,将顶点4_1、顶点4_2设定至与顶点4_1相同的顶点g4_1。
60.以判断目标为顶点2_0而言,由于其后续顶点亦为判断目标,故,停止此判断目标的遍历,其对应的顶点g2_0仅包括此一顶点。而顶点4_0、顶点5_0、顶点6_0,亦如同顶点2_0。另,顶点6_1为结束顶点,故其对应的顶点g6_1仅包括此一顶点。
61.最终获得图11所示的第三有向无环图1100。
62.另外,还可基于如图7(a)~图7(g)所示的建立拓扑排序序列的方式,对图9所示的第一有向无环图900建立拓扑排序序列,即,{2_0,5_0,3_0,4_0,3_1,4_1,6_0,3_2,4_2,6_1}。
63.底下以图9所示的第一有向无环图900的拓扑排序序列,即,{2_0,5_0,3_0,4_0,3_1,4_1,6_0,3_2,4_2,6_1}以及图11所示的第三有向无环图1100来说明逻辑同步资源与物理同步资源的映射关系。
64.图11所示的第三有向无环图1100中入度为0的顶点(g2_0,g5_0)与出度为0的顶点(g6_1,g4_1)间包括四条路径。第一条路径:顶点g2_0

顶点g3_0

顶点g6_1。第二条路径:顶点g2_0

顶点g4_0

顶点g6_0

顶点g6_1。第三条路径:顶点g2_0

顶点g4_0

顶点g4_1。第四条路径:顶点g5_0

顶点g4_1。
65.将逻辑同步资源映射至物理同步资源需同时满足映射规则,包括:所述第三有向无环图中的任一顶点可以重复使用所述任一顶点的前驱顶点以及所述任一顶点回收的物理同步资源;以及所述第三有向无环图的不同条路径上的多个顶点之间所使用的物理同步资源为互斥关系;其中,所述前驱顶点为同条路径中位于所述任一顶点之前的顶点。即,在同一条路径中的物理同步资源是可以重复使用的。在前驱顶点或当前待分配物理同步资源的顶点释放此物理同步资源之后,待分配物理同步资源的顶点便能够重复使用此物理同步资源。而不同路径的顶点可能是并行执行,因此不同条路径上的多个顶点之间使用的物理同步资源必须是互斥。不同路径上的顶点不会被映射至同一个物理同步资源。
66.例如,以顶点g6_0而言,其可以重复使用位于相同路径上的顶点g2_0、g4_0和它自身回收的物理同步资源。并且,对于第二条路径上的顶点g6_0而言,由于顶点g6_0与位于不同条路径上的顶点g3_0、g4_1、g5_0可能会是并行执行,因此,顶点g6_0与位于不同条路径上的顶点g3_0、g4_1、g5_0之间所使用的物理同步资源为互斥关系。
67.而当先前顶点所使用的物理同步资源全部被后续顶点复用完毕时,则会针对后续顶点重新分配其他物理同步资源。
68.基于第一有向无环图900的拓扑排序序列{2_0,5_0,3_0,4_0,3_1,4_1,6_0,3_2,4_2,6_1},依次处理各顶点内的每条指令。举例来说,先取出排序为第一个的顶点2_0,针对顶点2_0中的生产者指令p1、p2、p3、p8,分别分配物理同步资源1、物理同步资源2、物理同步资源3、物理同步资源4。
69.接着,取出顶点5_0。第一有向无环图顶点5_0所属的第三有向无环图顶点g5_0与第一有向无环图顶点2_0所属的第三有向无环图顶点g2_0位于不同条路径上,顶点5_0无法重复使用物理同步资源1、物理同步资源2、物理同步资源3、物理同步资源4。故,针对顶点5_0中的生产者指令p9、p10,另外分别分配物理同步资源5、物理同步资源6。
70.接着,取出顶点3_0,其包括了生产者指令p1对应的消费者指令c1,故,在顶点3_0
中回收了生产者指令p1对应的物理同步资源1。
71.接着,取出顶点4_0,其包括了生产者指令p8对应的消费者指令c8及生产者指令p11。在顶点4_0中回收了生产者指令p8对应的物理同步资源4。因此,将已经回收的同步资源4分配给生产者指令p11使用。接着,取出顶点3_1,其包括了生产者指令p2对应的消费者指令c2,故,在顶点3_0中回收了生产者指令p2对应的物理同步资源2。
72.接着,取出顶点4_1,其包括了生产者指令p9对应的消费者指令c9,故,在顶点4_1中回收了生产者指令p9对应的物理同步资源5。
73.接着,取出顶点6_0,其包括了生产者指令p11对应的消费者指令c11,故,在顶点6_0中回收了生产者指令p11对应的物理同步资源4。
74.接着,取出顶点3_2,其包括了生产者指令p3对应的消费者指令c3及生产者指令p12。在顶点3_2中,回收了生产者指令p3对应的物理同步资源3。此时需要为生产者指令p12分配物理同步资源。第一有向无环图的顶点3_2抽象在第三有向无环图的顶点g3_0中。第三有向无环图的同一条路径中所包括的全部顶点得以重复使用所述全部顶点中的每一顶点的前驱顶点以及所述每一顶点的物理同步资源。可以理解,重复使用的物理同步资源应当在此条路径上已经回收。此时,在顶点g3_0中已经回收了物理同步资源1、物理同步资源2和物理同步资源3。在满足同一条路径中所包括的顶点得以重复使用其前驱顶点的物理同步资源的同时,还需满足顶点不同路径上的多个顶点之间所使用的物理同步资源为互斥关系。顶点g3_0和顶点g4_0、g6_0、g4_1、g5_0位于不同的路径上,因此分配至顶点g3_0中的物理同步资源与分配至顶点g4_0、g6_0、g4_1、g5_0中的物理同步资源为互斥关系,即顶点g3_0不可使用物理同步资源4、物理同步资源5、物理同步资源6。因此生产者指令p12可以重复使用物理同步资源1、物理同步资源2及物理同步资源3中的任意一个。
75.以此类推,满足下述映射规则依序将顶点4_2,6_1的逻辑同步资源映射至物理同步资源,所述映射规则为:所述第三有向无环图中的任一顶点可以重复使用所述任一顶点的前驱顶点以及所述任一顶点回收的物理同步资源;以及所述第三有向无环图的不同条路径上的多个顶点之间所使用的物理同步资源为互斥关系;其中,所述前驱顶点为同条路径中位于所述任一顶点之前的顶点。
76.综上所述,本揭示利用指令执行顺序、指令类别以及同步资源标识符而针对不同线程束所包括的指令来生成连接关系,进而基于此连接关系来决定同步资源的利用。据此,可及时回收同步资源,充分利用同步资源,并解决并行程序中同步资源分配冲突的问题。
77.最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献