一种数据流指令映射方法与流程

文档序号:14950477发布日期:2018-07-17 22:26阅读:306来源:国知局

本发明涉及数据流体系结构处理器优化领域,特别涉及一种利用处理器内部片上网络特点的数据流指令映射方法。



背景技术:

随着计算机体系结构的发展,领域专用的计算机体系结构成为主要发展趋势.在面向特定应用时,专用型结构利用应用特征对结构进行相应的优化,从而更好地发挥出硬件的计算性能。在高性能计算领域,数据流计算是领域专用计算结构的一个重要分支,数据流计算表现出了较好的性能和适用性。

在数据流计算模式中,程序是以数据流图来表示的。数据流计算中一个关键的问题是如何将数据流图映射到多个执行单元上。数据流指令映射需要兼顾通信延迟和并发性。在发掘程序的并行性的同时,尽量缩短指令之间的通信延迟,从而提高数据流程序的执行效率。例如在trips中,程序块被分配到4×4的执行单元阵列上,每个执行单元上最多可以放置8条指令,单个程序块最大为128条指令。执行单元、缓存和寄存器堆之间通过二维网格(mesh)进行通信。当一个程序块完成计算后,调度单元将下一个程序块映射到执行单元阵列上。

在最新的数据流众核结构中,大量运算的操作数需要通过片上网络传递,造成片上网络上传输消息量巨大,严重影响了数据流众核片上处理器核接收消息的延迟,并且数据流众核处理器核的性能很依赖接收操作数带宽。基于以上情况出现了将传统的单地址单数据包格式改成多地址共享数据包格式,新的路由包相比于传统的数据包可以大量减少片上网络上传输消息量,从而减少片上网络传输延迟,提高数据流众核处理器核的运算吞吐量。

对于现有的数据流众核结构指令映射方法,主要考虑通信延迟,互相依赖的指令应该尽量映射到较近的执行单元或同一个执行单元上;考虑并发性,互相独立的指令应该尽量映射到不同的执行单元。但是这种指令映射方法与片上网络采用的多地址共享数据路由包结构产冲突,因为多地址共享数据路由包结构在长距离传输才起到很好的作用,而以上指令映射方法采用就近原则,造成路由包过早拆分多个路由包,造成片上网络路由包数量快速增加,使片上网络产生拥堵。



技术实现要素:

对于数据流程序而言,节点产生的数据会被多个其他节点使用,因此,当前的数据流结构处理器片上网络路由包大多采用多地址共享数据路由包。多地址共享数据路由包在片上网络传输时存在拆分操作,如果拆分时机不合适,将导致片上网络中产生大量路由包,造成片上网络产生拥堵,从而影响数据流程序执行效率。本发明针对上述现状提供一种数据流指令映射方法,用以提高数据流程序的执行效率和降低片上网络拥堵状况。

为达到上述目的,本发明提供了一种数据流指令映射方法,其包括数据流图遍历子步骤和指令映射子步骤,数据流图遍历子步骤用于对数据流图中的每一节点进行遍历,指令映射子步骤用于将多个数据流指令分别映射至位于一片上网络的计算单元阵列上,其中:

数据流图遍历子步骤:

s1:采用自顶向下、由外向内的原则对数据流图中的所有节点进行编号,同时设置一队列区和一缓冲区,其中,队列区用于记录需要遍历的节点,缓冲区用于记录节点的遍历状态;

s2:从数据流图中的顶点0开始,基于图宽度优先遍历的原则将顶点0的下游节点1~n的编号插入所述队列区并将其状态标记为“就绪”,当队列区的节点遍历过之后则将对应的节点编号从队列区中删除;

s3:将所述队列区中的节点编号依次读入所述缓冲区并全部标记为“未遍历”状态;

s4:依次对缓冲区中的节点进行遍历,将遍历过的节点标记为“已遍历”,其中,如果欲遍历的节点的上游节点存在未遍历的情况,则将该欲遍历的节点标记为“等待”状态,接着对该欲遍历的节点的后续节点进行遍历,直至遍历到一“全遍历节点”,“全遍历节点”指的是其所有上游节点均处于“已遍历”状态的节点,则暂停遍历,执行步骤s5;

s5:将步骤s4中标记为“等待”状态的节点依序遍历一遍,如果处于“等待”状态的节点的所有上游节点都遍历过,则其状态修改为“就绪”;

s6:遍历完所有“等待”状态的节点之后,将“全遍历节点”从所述缓冲区删除,如果此时队列区不为空则返回步骤s4,否则结束遍历过程;。

指令映射子步骤:

s1′:按照数据流图遍历节点的顺序依序对数据流图中节点存储的指令进行映射;

s2′:对于位于同一个数据流指令的下游的至少两个下游指令,在对该至少两个下游指令进行映射之前,统计计算单元阵列的当前映射状态、该至少一两个下游指令的上游指令的映射位置以及该至少两个下游指令的总数目并据此将该至少一个下游指令均衡的映射至最近的计算单元上;

s3′:对于位于同一个数据流指令的下游的至少两个下游指令,优先将该至少两个下游指令映射在位于同一条直线上的计算单元上;

s4′:对于位于至少两个上流指令的下游的数据流指令,优先将该数据流指令映射至距离该至少两个上流指令映射位置最近的计算单元上。

在本发明的一实施例中,对于位于同一个数据流指令的下游的至少两个下游指令,在对该至少两个下游指令进行映射之前,记录该至少两个下游指令中每一指令的遍历状态,当该至少两个下游指令中每一指令均为“已遍历”状态时,则将该至少两个下游指令同时进行映射。

在本发明的一实施例中,计算单元阵列构成一mesh网格。

本发明提供的数据流指令映射方法优化了现有的数据流指令映射方法,能够根据片上网络的拓扑结构情况和路由算法的特点,尽量使运行时的多地址共享数据路由包里的多个地址对应的pe(处理单元)位置在一条直线上,以降低因路由包的拆分造成片上网络拥堵情况,提高了数据流程序执行效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为数据流图遍历过程(当前遍历到指令1);

图2为数据流图遍历过程(当前遍历到指令2);

图3为数据流图遍历过程(当前遍历到指令3);

图4为数据流图遍历过程(当前遍历到指令4);

图5为数据流图遍历过程(当前遍历到指令7);

图6为数据流图遍历过程(当前遍历到指令9);

图7为数据流图遍历过程(当前首次遍历到指令17);

图8为数据流图遍历过程(当前遍历到指令10);

图9为数据流图遍历过程(当前遍历到指令11);

图10为数据流图遍历过程(当前遍历到指令12);

图11为数据流图遍历过程(当前遍历到指令16);

图12为数据流图遍历过程(当前第二次遍历到指令17);

图13为数据流图遍历过程(遍历结束);

图14为数据流图中的指令映射至计算单元阵列的初始状态示意图;

图15为数据流图中节点的指令与计算单元中的映射位置对应图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有付出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明中的数据流图整体遍历采用了类似图广度优先遍历算法的思想,特殊的是,遍历一个节点的前提是必须该节点的源操作数产生节点必须遍历过,否则该节点遍历暂停,此时接着遍历其他节点,直到暂停遍历的节点的遍历条件满足,则解除该节点的暂停状态并对其进行遍历。本发明在遍历一节点的同时还考虑该节点的所有子节点的状态,并综合考虑子节点的状态而进行遍历。

对于一条数据流指令存在多个下游指令的情况,由于这些下游指令具有共享上游指令执行结果的特性,本发明将多个下游指令同时进行映射,也就是一次性映射多条指令,这些同时映射的指令具有共同的上游指令。

本发明于映射时重点考虑了“均衡”这一指标,具体指的是映射时根据片上网络拓扑结构和路由算法,将数据流图中的所有指令均衡的映射到计算单元阵列上,避免某些计算单元上指令过多和某些计算单元上指令过少的情况。

除了均衡之外,本发明中的映射重点还在于使运行时的多地址共享数据路由包里的多个地址对应的pe(处理单元)位置在一条直线上。由于片上网络采用多地址共享数据路由包,因此一条数据流指令执行完会产生一个多地址共享数据路由包,产生的路由包里多个地址其实就是该数据流指令的所有下游指令映射到pe阵列的位置,该路由包发送给这些存储这些下游指令的计算单元上,为了优化该路由包拆分时机,防止因为路由包拆分使片上网络路由包数量激增而造成片上网络拥堵,则多地址共享数据路由包最好的拆分时机是在该路由包抵到与路由包地址相匹配的位置,也就是此路由包传输到与其中一个地址目的地处才拆分,类比工厂流水线卸货,一个包裹有多个物品,每个物品有对应目的地,最好的是该包裹一直在一条流水线上运输,且包裹有物品到达了目的地则把对应物品卸货,而不是把包裹里多个物品转到多个流水线上,然后这些物品各自到目的地卸货,这样会需要许多流水线通道,这些流水线通道也就是类似片上网络通道,一个多地址共享路由包拆分占用多个片上网络网络通道,肯定会增加片上网络压力,从而容易造成片上网络拥堵,间接影响数据流程序执行效率。

本发明提供的数据流指令映射方法包括数据流图遍历子步骤和指令映射子步骤,数据流图遍历子步骤用于对数据流图中的每一节点进行遍历,指令映射子步骤用于将多个数据流指令分别映射至位于一片上网络的计算单元阵列上,其中:

数据流图遍历子步骤:

s1:采用自顶向下、由外向内的原则对数据流图中的所有节点进行编号,同时设置一队列区和一缓冲区,其中,队列区用于记录需要遍历的节点,缓冲区用于记录节点的遍历状态;

s2:从数据流图中的顶点0开始,基于图宽度优先遍历的原则将顶点0的下游节点1~n的编号插入所述队列区并将其状态标记为“就绪”,当队列区的节点遍历过之后则将对应的节点编号从队列区中删除;

s3:将所述队列区中的节点编号依次读入所述缓冲区并全部标记为“未遍历”状态;

s4:依次对缓冲区中的节点进行遍历,将遍历过的节点标记为“已遍历”,其中,如果欲遍历的节点的上游节点存在未遍历的情况,则将该欲遍历的节点标记为“等待”状态,接着对该欲遍历的节点的后续节点进行遍历,直至遍历到一“全遍历节点”,“全遍历节点”指的是其所有上游节点均处于“已遍历”状态的节点,则暂停遍历,执行步骤s5;

s5:将步骤s4中标记为“等待”状态的节点依序遍历一遍,如果处于“等待”状态的节点的所有上游节点都遍历过,则其状态修改为“就绪”;

s6:遍历完所有“等待”状态的节点之后,将“全遍历节点”从所述缓冲区删除,如果此时队列区不为空则返回步骤s4,否则结束遍历过程;。

指令映射子步骤:

s1′:按照数据流图遍历节点的顺序依序对数据流图中节点存储的指令进行映射;

s2′:对于位于同一个数据流指令的下游的至少两个下游指令,在对该至少两个下游指令进行映射之前,统计计算单元阵列的当前映射状态、该至少一两个下游指令的上游指令的映射位置以及该至少两个下游指令的总数目并据此将该至少一个下游指令均衡的映射至最近的计算单元上;

s3′:对于位于同一个数据流指令的下游的至少两个下游指令,优先将该至少两个下游指令映射在位于同一条直线上的计算单元上;

s4′:对于位于至少两个上流指令的下游的数据流指令,优先将该数据流指令映射至距离该至少两个上流指令映射位置最近的计算单元上。

在本发明的一实施例中,对于位于同一个数据流指令的下游的至少两个下游指令,在对该至少两个下游指令进行映射之前,记录该至少两个下游指令中每一指令的遍历状态,当该至少两个下游指令中每一指令均为“已遍历”状态时,则将该至少两个下游指令同时进行映射。

以下介绍本发明的一具体实施例:

本实例中的计算单元阵列构成一mesh网格,片上网络路由算法为x-y路由,也就是先x轴路由,再y轴路由,同时片上网络传输路由包为多地址共享数据路由包结构。

数据流图遍历子步骤:

步骤101:数据流图遍历起始状态如图1所示,该遍历过程有两个区域,一个为队列区,这个类似图广度优先遍历优先队列,用于记录接下需要遍历的节点,另一个为缓存区,该缓存是用于记录捆绑指令是否可以映射,“捆绑指令”指的是“位于同一个数据流指令的下游的至少两个下游指令”。该图中,起始遍历为数据流图节点1,因此队列区只存有节点1信息,且该状态为就绪状态,同时缓存区增加并初始化节点1遍历状态,该状态用于决定节点1何时可以映射;

步骤102:遍历完数据流图节点1后状态如图2所示,队列区删除节点1,同时将节点1的下游节点2和3添加到队列区,并将状态初始化就绪状态,由于节点2和3的上游节点相同,则在缓存区增加并初始化节点2和3的遍历状态,同时将这两个节点组合,只有节点2和3都遍历过,才可以将节点2和3的指令同时进行映射,并且此时节点1的指令准备映射到计算单元阵列上;

步骤103:遍历完数据流图节点2后状态如图3所示,队列区删除节点2,同时将节点2的下游节点4添加到队列区,并将状态初始化就绪状态,接着在缓存区增加和初始化节点4的遍历状态,此时没有指令可映射;

步骤104:遍历完数据流图节点3后状态如图4所示,队列区删除节点3,同时将节点3的下游节点5添加到队列区,并将状态初始化就绪状态,接着在缓存区增加和初始化节点5的遍历状态,此时节点2和3都已遍历,则节点2和3的指令可以同时映射到计算单元阵列上;

步骤105:跳过遍历节点4、5过程,遍历完数据流图节点6后状态如图5所示,队列区删除节点6,同时将节点6的下游节点7、8和9添加到队列区,并将状态初始化就绪状态,接着在缓存区增加和初始化节点7、8和9的遍历状态,跟步骤102类似,组合这三个节点,当这三个节点都遍历过,则将这些节点指令同时映射到计算单元阵列,此时节点6的指令可以准备映射;

步骤106:跳过遍历节点7过程,遍历完数据流图节点8后状态如图6所示,遍历完数据流图节点9后状态如图7所示,描述与以上步骤类似。首次遍历过数据流图节点17后状态如图8所示,这个状态相比以上状态存在特殊情况,当遍历节点17时,发现节点17的上游节点16未遍历,则将队列区节点17的状态设置等待,此时缓存区节点7、8和9的指令可以映射到计算单元阵列,接下遍历则跳到节点10;

步骤107:遍历完数据流图节点10后状态如图9所示,此时队列区节点17还处于等待状态,因为节点16还未遍历,跳过遍历节点17,其他操作与以上步骤类似。遍历完数据流图节点11后状态如图10所示,操作跟上面操作类似,节点17的所有状态保持不变,跳过遍历节点17;

步骤108:跳过遍历节点12、13和14过程,遍历完数据流图节点15后状态如图11所示,此时队列区节点17状态还是为等待,其他操作与上述步骤类似。遍历完数据流图节点16后状态如图12所示,此时将队列区中节点16删除,因为节点17的所有上游节点都遍历过,则将节点17状态从等待修改为就绪,其他操作跟上述步骤类似;

步骤109:再次遍历过节点17的状态如图13所示,队列区删除节点17,此时队列清空,数据流图遍历结束,同时缓存区节点17的指令准备映射到计算单元阵列上。

以上介绍完数据流图遍历过程,接下介绍指令是如何映射到pe阵列上,图14为数据流图中的指令映射至计算单元阵列的初始状态示意图,图15为数据流图中节点的指令与计算单元中的映射位置对应图,也即最终映射结果,请参照图14、图15来理解以下指令映射子步骤。

指令映射子步骤:

步骤201:节点1的指令先准备映射,则将节点1的指令映射到pe0上;

步骤202:节点2和3的指令映射,分别将节点2和3的指令映射到pe1和2上,这样节点1的指令执行完发送的多地址共享数据路由包的传输路径为一条直线,该路由包传输到pe1位置时,拆分路由包,一部分通过片上网络router连接pe1的专用通道送往pe1接收,另一部分路由包接着传输给pe2,此时片上网络公共传输通道始终只有一个路由包,不会因为拆分路由包,造成片上网络公共传输通道路由包数量增加;

步骤203:节点4的指令映射,由于pe1和其连接的pe0和2都分配了指令,而pe5没有分配指令,为了pe阵列均衡映射和就近原则,则将节点4的指令映射到pe5上。节点5的指令映射与节点4的指令映射类似,由于片上网络采用x-y路由,因此将节点5的指令映射到pe3,而非映射到pe6;

步骤204:节点6的指令映射,由于节点6的上游为节点4和5,所以需要把节点的指令映射到储存节点4的指令pe5和储存节点5的指令pe3之间,这样可以减少节点6的指令等待源操作数时间,因此将节点6的指令映射到pe6上;

步骤205:节点7、8和9的指令映射,因为路由包是x-y路由和采取均衡映射策略,则将节点7、8和9的指令分别映射到pe7、pe11和pe15,这些指令在pe阵列上连成一条线;

步骤206:节点10和11的指令映射类似上述步骤,因此将节点10和11的指令分别映射到pe10和pe9上,同样节点12和13的指令分别映射到pe14和pe13上;

步骤207:节点14的指令映射,由于节点14上游有节点10和11,并且这两个节点的指令映射相邻,所以把节点14的指令映射到pe8,既满足了均衡映射,并且节点14的指令等待源操作数的时间也较短。同样节点15的指令映射到pe12上,节点16的指令映射到pe4上;

步骤208:最后节点17的指令映射,节点17的上游有节点7和16,并且节点7和16的指令映射位置有一定距离,因此需要将节点17的指令映射到节点7和16的指令映射位置中间区域,此时pe5和6都已分配一条指令,不需考虑均衡因素,则将节点17的指令映射到pe6上,数据流图所有指令映射结束,如图15所示为数据流图中节点的指令与计算单元中的映射位置对应图,也即最终映射结果,其满足负载均衡,同时也使路由包拆分更高效,降低了片上网络拥堵的可能。

本发明提供的数据流指令映射方法优化了现有的数据流指令映射方法,能够根据片上网络的拓扑结构情况和路由算法的特点,尽量使运行时的多地址共享数据路由包里的多个地址对应的pe(处理单元)位置在一条直线上,以降低因路由包的拆分造成片上网络拥堵情况,提高了数据流程序执行效率。

本领域普通技术人员可以理解:附图只是一个实施例的示意图,附图中的模块或流程并不一定是实施本发明所必须的。

本领域普通技术人员可以理解:实施例中的装置中的模块可以按照实施例描述分布于实施例的装置中,也可以进行相应变化位于不同于本实施例的一个或多个装置中。上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块。

最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明实施例技术方案的精神和范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1