CN102981804A - 基于压缩变换的面向多微包并行处理结构的重传方法 - Google Patents
基于压缩变换的面向多微包并行处理结构的重传方法 Download PDFInfo
- Publication number
- CN102981804A CN102981804A CN2012104216364A CN201210421636A CN102981804A CN 102981804 A CN102981804 A CN 102981804A CN 2012104216364 A CN2012104216364 A CN 2012104216364A CN 201210421636 A CN201210421636 A CN 201210421636A CN 102981804 A CN102981804 A CN 102981804A
- Authority
- CN
- China
- Prior art keywords
- flit
- little bag
- wtptr
- rdptr
- retransmission buffer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Abstract
本发明公开了一种基于压缩变换的面向多微包并行处理结构的重传方法,目的是解决结点控制器芯片接口访问控制部件中多路并行数据出错时需要快速定位并重传的问题。技术方案是在多微包并行处理结构的发送模块和重传缓冲区之间添加一个重映射模块,改进重传缓冲区的结构,在对多微包进行重传时,重映射模块对多微包进行压缩变换,将有效单微包重映射到重传缓冲区,并在多微包传输出错时精确定位重传单微包在重传缓冲区中的起始地址,读出出错单微包,拼凑成N路并行数据后提交给发送模块。采用本发明可使得重传缓冲区存储空间减小,解决了N个单微包同时进行传输出错时的单微包快速定位问题;有效减少了重传次数,提高了重传效率。
Description
技术领域
本发明涉及结点控制器芯片中重传缓冲区的微包重传方法,特别是多微包(flit)并行处理结构下针对多路并行数据的重传方法。
背景技术
在介绍本发明的技术方案之前,先给出几个定义:
●N:一个多微包中包含的单微包数,多微包处理结构可以并行处理N个单微包,N一般为2的幂次方;
●D:重传缓冲区的深度,D一般为2的幂次方;
●W:重传缓冲区的位宽,W一般是8的整数倍;
●/和%:数学上的求商和取模运算,对于正整数p和整数a,a/p和a%p分别表示a除以p的商和余数,如17/3=5,17%3=2;
●Array[msb:lsb]:msb和lsb分别为正整数,且msb>lsb,Array为向量名,Array[msb:lsb]为向量Array中lsb位至msb位对应的地址单元,即Array[msb:lsb]为Array[msb]、…、Array[lsb]这msb-lsb+1个地址单元的简写,下文中所有的向量都采用这种表示方式;
●Variable[msb:lsb]:msb和lsb分别为正整数,且msb>lsb,Variable为变量名,Variable[msb:lsb]为变量Variable中lsb位至msb位对应的二进制数,即Variable[msb:lsb]仍为一个变量,其值的二进制表示为msb、…、lsb这msb-lsb+1个二进制数字,下文中所有的变量都采用这种表示方式。
特别强调的是,需要区分向量Array[msb:lsb]和变量Variable[msb:lsb],向量Array[msb:lsb]对应的是Array[msb]、…、Array[lsb]这msb-lsb+1个向量;而Variable[msb:lsb]只对应一个变量,变量值的二进制表示为msb、…、lsb这msb-lsb+1个二进制数字。下文中,Flit[msb:lsb]、VEC[msb:lsb]和SRAM[msb:lsb]为向量,RdPtr[msb:lsb]和WtPtr[msb:lsb]为变量。
申请号为201110262128.1公开了一种多微包并行处理结构。多微包并行处理结构由接口转换模块、接收模块、接收缓冲区、报文分发模块、第一协议层报文FIFO、第二协议层报文FIFO、链路状态机、报文拼装模块、发送缓冲区、重传缓冲区和发送模块组成。接口转换模块工作在物理层时钟域下,其它模块工作在链路层时钟域下。接口转换模块由异步接收FIFO和异步发送FIFO组成,接收模块和发送模块中的数据通路为针对多微包的多路并行数据通路,能并行处理多个单微包。该发明可实现物理层和链路层间的带宽匹配,有效提高结点控制器芯片对各处理器间通信的处理速度。
多微包并行处理结构通过增加数据通路和处理部件的方式,解决单微包处理结构下物理层和链路层的带宽不匹配,降低了结点控制器芯片对各处理器间通信处理速度的要求,降低了ASIC芯片物理实现的难度。当然,由于接口处理器接口访问控制部件SI(Socket Interface)在整体结构上采用多微包(记为N flit)并行处理模式,对链路数据的重传也必然要求按照N flit方式进行。
按照通常的重传缓冲区管理方式,即单微包处理结构下的重传缓冲区管理方式,微包数据是以单微包(记为1 flit)格式保存进入重传缓冲区的,重传缓冲区的深度为D,位宽为W,这样的重传缓冲区容量为D*W。重传缓冲区中每一行记录或每一个地址单元仅存一个单微包,单微包传输出错时只需根据重传定位从重传缓冲区中读出对应单微包进行重传。重传缓冲区通过两个指针变量来记录对重传缓冲区的读、写索引:
●写指针WtPtr:用于记录硬件下一次准备向重传缓冲区写入单微包的物理地址。WtPtr的初始值为0,发送方将单微包发送出去的同时拷贝到重传缓冲区中由WtPtr指示的地址,WtPtr=(WtPtr+1)%D。当WtPtr收到接收方发来的出错指示时不再增加,直至链路层重新恢复正常操作。
●读指针RdPtr:用于记录硬件下一次准备从重传缓冲区读取单微包的物理地址。该指针的值由重传请求LLRReq指定。RdPtr的初始值为0,发送方每从重传缓冲区中发送一个单微包时,RdPtr=(RdPtr+1)%D。
每一个单微包要么从重传缓冲区中发出,要么该单微包是一个从协议层到达的新单微包。通常来自协议层的新单微包会直接发送,同时进入重传缓冲区等待对方确认接收。在正常发送状态,发送单微包时RdPtr=WtPtr,说明该单微包是来自协议层的新单微包;而在重传状态下,会重新设置RdPtr,而且RdPtr与WtPtr不同,说明此次发送的是重传缓冲区中的单微包,进入重传缓冲区中的所有单微包均要进行重传,直至RdPtr=WtPtr。
另外,在重传缓冲区管理中,使用以下术语便于缓冲区的管理:
●重传定位ESeq(Expected Sequence):接收方使用ESeq记录将要接收的下一个单微包的序列号。正确接收一个单微包时,ESeq=(ESeq+1)%D。如果接收方检测接收的单微包出错,ESeq不再增加,直至接收到重传响应LLRAck。复位时ESeq初始化为零。
●重传请求LLRReq(Link Level Retry Request):接收方检测到单微包传输出错时,发送一个重传请求LLRReq给发送方。该消息包含重传定位ESeq。
●重传响应LLRAck(Link Level Retry Acknowledgement):发送方在接收到接收方的LLRReq时,会发出一个LLRAck给接收方进行确认,同时发送方进入到重传状态。该消息包含发送方的WtPtr值。
在单微包处理结构下,单微包出错后的重传过程如下:
1.接收方检测到单微包传输出错,向发送方发送一个重传请求LLRReq,LLRReq中包含重传定位ESeq;
2.发送方收到接收方发送过来的重传请求LLRReq后,向接收方发送一个重传响应LLRAck,LLRAck中包含发送方的WtPtr值和接收方发过来的重传定位Eseq;
3.发送方调整RdPtr为ESeq值,并将出错单微包从重传缓冲区中读出并重新发送给接收方。具体过程如下:
3.1发送方从重传缓冲区中读出RdPtr指定的单微包,重新发送给接收方;
3.2RdPtr=(RdPtr+1)%D;
3.3如果RdPtr=WtPtr(此时代表重传缓冲区中所有需要重传的单微包均已重传完毕),重传结束,否则转至3.1。
而在多微包并行处理结构中,如果按照单微包处理结构下的重传缓冲区管理方式,将所有N flit格式的数据按照1 flit格式保存进入重传缓冲区,重传缓冲区的管理和出错时的重传定位计算仍然按照标准算法进行,那么这种方式要求重传缓冲区的工作频率是SI部件中N flit格式发送逻辑的N倍,否则处理带宽不匹配,存在严重的性能瓶颈。
申请号为201110262128.1专利公开的多微包并行处理结构中,重传缓冲区的深度不变,宽度增大为N flit位宽。即重传缓冲区的深度为D,位宽为N*W。这样的重传缓冲区容量为N*D*W。重传缓冲区将所有N flit格式的数据按照N flit格式保存进入重传缓冲区,重传缓冲区中的一个地址单元存放一个多微包,即N个单微包。重传缓冲区仍然通过读指针RdPtr和写指针WtPtr来记录对重传缓冲区的读、写索引。与单微包处理结构下重传缓冲区读指针和写指针的不同之处在于:WtPtr和RdPtr指向的重传缓冲区中的记录均对应一个多微包,其中包含N个单微包。多微包传输出错重传过程的1与2均与单微包处理结构中微包传输出错重传处理相同,不同之处在3中对出错多微包的定位与重传:单微包处理结构中单微包出错时只需根据重传定位ESeq从重传缓冲区中读出对应单微包进行重传,而在多微包处理结构中,重传缓冲区中的一条记录对应一个多微包,每次重传一个多微包,即发送模块每次都将N个单微包重传。
这种重传缓冲区管理方法的优点是:重传缓冲区将所有N flt格式的数据按照N flt格式保存进入重传缓冲区,微包传输出错时也是以N flt格式从重传缓冲区中读出,重传缓冲区的工作频率与SI部件中其它主要部件的工作频率一样,有效实现带宽匹配。但其缺点是,每次接收方检测到接收到的多微包无论哪个单微包出错时,均要求发送方重新发送这N个单微包,且发送方不能对失效单微包进行精确定位。而且重传缓冲区将所有N flt格式的数据按照N flt格式保存进入重传缓冲区,最糟糕的情况下如果每组多微包的N flt均只有一个有效单微包,则这时重传缓冲区的存储空间是单微包处理结构下重传缓冲区存储空间规模的N倍,造成存储空间的巨大浪费。如何对同时进入重传缓冲区的N个单微包进行管理以及错误状态下进行快速定位和重传,是SI部件链路层设计面临的一个问题。
根据专利文献检索,以往的专利与文献中只有一些关于单微包处理结构下重传缓冲区管理方法申请了专利,尚未见到针对多微包并行处理结构下多路并行数据重传方法的相关研究。
发明内容
本发明要解决的技术问题是:针对结点控制器芯片接口访问控制部件中多路并行数据出错时需要快速定位并重传的问题,提出一种基于压缩变换的面向多微包并行处理结构的重传方法,对同时进入缓冲区的多微包首先进行压缩变换,仅有效数据才进入重传缓冲区,节省存储空间的同时保证出错情况下快速定位和重传。
本发明的技术方案为:
第一步,改进多微包并行处理结构,方法是:
1.1在多微包并行处理结构的发送模块和重传缓冲区之间添加一个重映射模块。
重映射模块是一个软件模块,与发送模块和重传缓冲区相连。重映射模块从发送模块接收多微包,对多微包进行压缩变换,将压缩变换后的有效单微包重映射到重传缓冲区,并在多微包传输出错时从重传缓冲区读出出错单微包,拼凑成N路并行数据后提交给发送模块。
1.2改进重传缓冲区的结构。
重传缓冲区与重映射模块相连。重传缓冲区从重映射模块接收压缩变换后的有效单微包,在重传时将出错单微包的备份提交给重映射模块。重传缓冲区由N个宽度为W、深度为D/N的静态随机存取存储器SRAM(Static Random Access Memory)组成,因为D与N均是2的幂次方,所以D/N仍是2的幂次方。N个SRAM逻辑上形成宽度为N*W、深度为D/N的重传缓冲区,并通过N个读使能端口和N个写使能端口实现N个单微包数据的并行读写,N个SRAM中索引相同的地址形成逻辑上的一行,行读指针Row_RdPtr控制一行数据的读,行写指针Row_WtPtr控制一行数据的写,变量Offset_RdPtr为Row_RdPtr在一行中的偏移,变量Offset_WtPtr为Row_WtPtr在一行中的偏移。同时,重传缓冲区由读指针RdPtr记录对重传缓冲区的读索引,写指针WtPtr记录对重传缓冲区的写索引。此时,读指针RdPtr的低位即为RdPtr在重传缓冲区中一行内的偏移量Offset_RdPtr,写指针WtPtr的低位即为WtPtr在重传缓冲区中一行内的偏移量Offset_WtPtr,高位地址为RdPtr在重传缓冲区中的逻辑行数Row_RdPtr,为WtPtr在重传缓冲区中的逻辑行数Row_WtPtr。这样重传缓冲区的大小为D*W。
第二步,改进后的多微包并行处理结构将从协议层报文转发模块接收的单微包发送至第二处理器,过程是:
2.1报文拼装模块从第二协议层报文FIFO中取出待传输的协议层命令和数据,根据单微包到达第二协议层报文FIFO的时间顺序将N个单微包组装成一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将组装后的多微包提交给发送缓冲区。
2.2发送缓冲区从报文拼装模块接收拼装好的多微包,对多微包进行缓存,接收到发送模块的读请求后将多微包发送给发送模块。
2.3发送模块根据从链路状态机接收的消息完成以下工作:
2.3.1如果发送模块从链路状态机收到的是远程重传响应,转2.4步。
2.3.2如果发送模块从链路状态机收到的是本地重传请求,发送模块向异步发送FIFO发送一个多微包,多微包中的一个单微包为该重传请求,其它单微包均为空报文,请求第二处理器重新发送出错单微包,转2.5步。
2.3.3如果发送模块从链路状态机收到的是信用和响应信息,则从发送缓冲区读取一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将此多微包写入异步发送FIFO,同时向重映射模块发出写使能信号,并将该多微包发送给重映射模块。重映射模块对多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}进行压缩变换,并将压缩变换后的K个有效单微包重映射到重传缓冲区中,方法是:
2.3.3.1重映射模块对多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}进行压缩变换。记向量VEC[N-1:0]为多微包中N个单微包的有效位向量,VEC[0]对应Flit[0]的有效信息(有效为1,无效为0)、…、VEC[N-1]对应VEC[N-1]的有效信息。记一个多微包中有K(1≤K≤N,K为自然数)个单微包为有效单微包。重映射模块采用冒泡排序(BubbleSort)方法对多微包中的N个单微包及其位向量进行排序:将位向量VEC[N-1:0]按照VEC[N-1]、…、VEC[0]从上至下垂直排列,Flit[i]看作是重量为VEC[i]的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描VEC,凡扫描到违反本原则的轻气泡,就使该单微包及其位向量向上“飘浮”,如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。即经过压缩变换后,多微包中的有效单微包(位向量值为1)放置在低位,无效单微包(位向量值为0)在高位,多微包的有效位向量VEC[N-1:0]为:
冒泡排序具有稳定性,即原序列中相同元素的相对顺序仍然保持到排序后的序列,因此,经过压缩变换后,原来多微包中K个有效单微包的顺序仍然得以保持。
压缩变换的过程如下:
2.3.3.1.1初始化计数器i为0,初始化计数器j为N-2,创建交换标识变量exchange。
2.3.3.1.2exchange=0。
2.3.3.1.3如果VEC[j+1]>VEC[j],转2.3.3.1.3.1步;否则,转2.3.3.1.4步。
2.3.3.1.3.1将VEC[j+1]和VEC[j]交换,同时将Flit[j+1]和Flit[j]交换。
2.3.3.1.3.2exchange=1,j=j-1。
2.3.3.1.4如果j<i,转2.3.3.1.5步;否则,转2.3.3.1.2步。
2.3.3.1.5如果exchange=0,说明此次排序没有发生交换,所有的位向量都已经按照0在高位、1在低位的顺序排好,转2.3.3.1.8步;否则转2.3.3.1.6步。
2.3.3.1.6i=i+1。
2.3.3.1.7如果i>N-1,转2.3.3.1.8步;否则,转2.3.3.1.2步。
2.3.3.1.8压缩变换结束,进入2.3.3.2步。
2.3.3.2重映射模块将压缩变换后的K个有效单微包重映射到重传缓冲区中,过程如下:
2.3.3.2.1如果K≤N-OffSet_WtPtr,将SRAM[OffSet_WtPtr+K-1:OfSet_WtPtr]的写使能信号置为1,WtPtr=(WtPtr+K)%D。这样在下一拍时钟周期到来时,重映射模块将Flit[K-1:0]并行写入重传缓冲区的SRAM[OffSet_WtPtr+K-1:OfSet_WtPtr],每个单微包成为重传缓冲区中的一条记录,这样一个包含K个有效单微包的多微包占用重传缓冲区中的K个地址单元,转2.5步;否则,转2.3.3.2.2步。
2.3.3.2.2将SRAM[OfSet_WtPtr+K-N-1:0]、SRAM[N-1:OffSet_WtPtr]的写使能信号置为1,WtPtr=(WtPtr+K)%D。这样在下一拍时钟周期到来时,重映射模块将Flit[K-1:0]并行写入重传缓冲区的SRAM[OSet_WtPtr+K-N-1:0]、SRAM[N-1:OfSet_WtPtr],每个单微包成为重传缓冲区中的一条记录,这样一个包含K个有效单微包的多微包将占用重传缓冲区中的K个地址单元。转2.5步。
2.4多微包传输出错重传过程与单微包处理结构及多微包并行处理结构中单微包传输出错重传处理的1与2均相同,不同之处在3对出错单微包的定位计算与重传过程,本发明由重映射模块将出错单微包从重传缓冲区读出提交给发送模块,过程如下:
2.4.1接收方检测到多微包传输出错,向发送方发送一个远程重传请求LLRReq,LLRReq中包含重传定位ESeq;
2.4.2发送方收到接收方发送过来的LLRReq后,向接收方发送一个重传响应LLRAck,LLRAck中包含发送方的WtPtr值和接收方发过来的ESeq信息;
2.4.4重映射模块将出错单微包从重传缓冲区中读出并重新发送给发送模块,具体过程如下:
2.4.4.1如果RdPtr=WtPtr,跳出重传模式,转2.5步,否则进入2.4.4.2步;
2.4.4.2如果Row_RdPtr不等于Row_WtPtr,说明需要重传不止一行数据,转
2.4.4.3步;如果Row_RdPtr=Row_WtPtr,说明只需要重传重传缓冲区中的Flit[Offset_WtPtr-1:Offset_RdPtr],此时只有Offset_WtPtr-Offset_RdPtr个单微包需要重传,因为多微包并行处理结构中数据通路为N路并行数据,重映射模块将其它N-(Offset_WtPtr-Offset_RdPtr)个单微包置为空微包,从-而拼凑成由N个单微包组成的N路并行数据。因为RdPtr不等于WtPtr,且Row_RdPtr=Row_WtPtr,所以Offset_WtPtr大于Offset_RdPtr,因此,Offset_WtPt不可能为0,因此,Offset_WtPtr≥1。重映射模块根据Offset_RdPtr的取值范围按以下步骤拼凑由N个单微包组成的多微包:
2.4.4.2.1若Offset_RdPtr≥1,则N个单微包数据格式为:Flit[N-1:Offset_WtPtr]为空微包,Flit[Offset_WtPtr-1:Offset_RdPtr]为重传缓冲区中读出的单微包数据,Flit[Offset_RdPtr-1:0]为空微包,重映射模块将拼凑后的多微包提交给发送模块,跳出重传模式,转2.5步;
2.4.4.2.2若Offset_RdPtr=0,则N个单微包数据格式为:
Flit[N-1:Offset_WtPtr]为空微包,Flit[Offset_WtPtr-1:0]为重传缓冲区中读出的单微包数据,重映射模块将拼凑后的N路并行数据提交给发送模块,跳出重传模式,转2.5步;
2.4.4.3重映射模块将重传缓冲区中Flit[N-1:Offset_RdPtr]读出,重映射模块将重传单微包拼凑为N路并行数据:若Ofset_RdPtr≥1,则N个单微包数据格式为:Flit[Offset_RdPtr-1:0]为空微包,与Flit[N-1:Offset_RdPtr]形成N路并行数据提交给发送模块,Row_RdPtr=(Row_RdPtr+1)%(D/N),转
2.4.4.3.1步;否则Offset_RdPtr=0,Flit[N-1:0]均为重传缓冲区单微包数据,重映射模块将此多微包提交给发送模块,
Row_RdPtr=(Row_RdPtr+1)%(D/N),转2.4.4.3.1步;
2.4.4.3.1如果Row_RdPtr不等于Row_WtPtr,执行2.4.4.3.2步;如果Row_RdPtr=Row_WtPtr,则重传缓冲区中Flit[Offset_WtPtr-1:0]需要重传,重映射模块将重传单微包拼凑为N路并行数据:若Offset_WtPtr=0,则Offset_RdPtr 也为0,因为Row_RdPtr=Row_WtPtr,Offset_WtPtr=Offset_RdPtr,所以RdPtr=WtPtr,说明此时重传缓冲区中所有需要重传的微包均已重传完毕,重传结束,转2.5步;若Offset_WtPtr≥1,则N个单微包数据格式为:Flit[N-1:Offset_WtPtr]为空微包,Flit[Offset_WtPtr-1:0]为重传缓冲区单微包数据,重映射模块将此多微包提交给发送模块,转2.5步;
2.4.4.3.2重映射模块将重传缓冲区中Flit[N-1:0]提交给发送模块,Row_RdPtr=(Row_RdPtr+1)%(D/N),转2.4.4.3.1步。
2.5每一个链路层时钟周期内发送模块向异步发送FIFO写入一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},第二处理器按照Flit[0]、Flit[1]、…、Flit[N-1]的顺序每个物理层时钟周期内从异步发送FIFO读取一个单微包,进而在N个物理层时钟周期内读取一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}。
与现有技术相比,采用本发明可达到以下技术效果:
(1)本发明通过在多微包并行处理结构中添加的重映射模块对进入重传缓冲区的多微包进行压缩变换,只有有效微包才会进入重传缓冲区,形成逻辑上无空洞的连续单微包序列,将多微包并行无空地写入N个独立的SRAM,使得重传缓冲区存储的数据全部有效;
(2)本发明通过对重传缓冲区结构进行改进,使得重传缓冲区只需要单微包处理结构下的重传缓冲区的存储空间,而重传缓冲区的工作频率只需要达到多微包并行处理结构下重传缓冲区的工作频率,即本发明中的重传缓冲区在不增大重传缓冲区空间、不提高重传缓冲区工作频率的同时实现N路并行数据的快速重传;
(4)2.4.4步对重传过程进行改进,有效减少了重传次数,提高了重传效率。假设接收方发现传输出错时需要重传E个单微包,则本发明最多需要重传E/N+2次(当需要重传的单微包不是存储在重传缓冲区中的整行、还有其它单微包占用两行重传缓冲区时)、最少需要重传E/N次(当需要重传的单微包刚好存储在重传缓冲区中的整行时),而如果按照单微包处理结构下的重传缓冲区管理方式,需要重传E次,如果按照背景技术中多微包并行处理结构下的重传缓冲区管理方式,最少需要重传E/N次(当需要重传的单微包刚好存储在重传缓冲区中的整行时),最差情况下需要重传E次(每个多微包中只有一个有效单微包,E个单微包占用重传缓冲区中的E行)。
附图说明
图1是背景技术中多微包并行处理结构逻辑结构图。
图2是背景技术中单微包处理结构下的重传缓冲区逻辑结构图。
图3是背景技术中多微包并行处理结构下的重传缓冲区逻辑结构图。
图4是本发明改进后的多微包并行处理结构逻辑结构图。
图5是本发明中基于压缩变换的重传缓冲区逻辑结构图。
图6是本发明总体流程图。
具体实施方式
图1所示是背景技术申请号为201110262128.1专利中多微包并行处理结构逻辑结构图。多微包并行处理结构由接口转换模块、接收模块、接收缓冲区、报文分发模块、第一协议层报文FIFO、第二协议层报文FIFO、链路状态机、报文拼装模块、发送缓冲区、重传缓冲区和发送模块组成。接口转换模块工作在物理层时钟域下,其它模块工作在链路层时钟域下。接口转换模块由异步接收FIFO和异步发送FIFO组成,接收模块和发送模块中的数据通路为针对多微包的多路并行数据通路,能并行处理多个单微包。在该多微包并行处理结构中,多微包发送过程是:
S101报文拼装模块从第二协议层报文FIFO中取出待传输的协议层命令和数据,并根据单微包到达第二协议层报文FIFO的时间顺序将N个单微包组装成一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将组装后的多微包提交给发送缓冲区。
S102发送缓冲区从报文拼装模块接收拼装好的多微包,对多微包进行缓存,接收到发送模块的读请求后将多微包发送给发送模块。
S103发送模块根据从链路状态机接收的消息完成以下工作:
S103.1如果发送模块收到来自链路状态机的远程重传响应,则从重传缓冲区中读取需要重传的多微包。转S104。
S103.2如果发送模块收到来自链路状态机的本地重传请求,发送模块向异步发送FIFO发送一个多微包,多微包中有一个单微包为该重传请求微包,其它单微包均为空微包,请求处理器重新发送出错单微包。转S105。
S103.3如果发送模块收到的是来自链路状态机的信用和响应信息,则从发送缓冲区读取一组多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将此多微包写入异步发送FIFO,同时向重传缓冲区发出写使能信号,将多微包备份至重传缓冲区中S105。
S104多微包重传过程如下:
S104.1接收方检测到单微包传输出错,向发送方发送一个重传请求LLRReq,LLRReq中包含重传定位ESeq;
S104.2发送方收到接收方发送过来的重传请求LLRReq后,向接收方发送一个重传响应LLRAck,LLRAck中包含发送方的WtPtr值和接收方发过来的重传定位ESeq;
S104.3发送方调整RdPtr为ESeq值,并将出错单微包从重传缓冲区中读出并重新发送给接收方。具体过程如下:
S104.3.1发送方从重传缓冲区中读出RdPtr指定的单微包,重新发送给接收方;
S104.3.2RdPtr=(RdPtr+1)%D;
S104.3.3如果RdPtr=WtPtr(此时代表重传缓冲区中所有需要重传的单微包均已重传完毕),重传结束,否则转至S104.3.1。
S105每一个链路层时钟周期内发送模块向异步发送FIFO写入一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},第二处理器按照Flit[0]、Flit[1]、…、Flit[N-1]的顺序每个物理层时钟周期内从异步发送FIFO读取一个单微包,进而在N个物理层时钟周期内读取一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}。
图2是背景技术中单微包处理结构下的重传缓冲区逻辑结构图。重传缓冲区的深度为D,位宽为W。这样的重传缓冲区容量为D*W。重传缓冲区通过两个指针变量来记录对重传缓冲区的读、写索引:
●写指针WtPtr:用于记录硬件下一次准备向重传缓冲区写入单微包的物理地址,WtPtr的初始值为0,发送方将单微包发送出去的同时拷贝到重传缓冲区中由WtPtr指示的地址,然后WtPtr=(WtPtr+1)%D。当WtPtr收到接收方发来的出错指示时不再增加,直至链路层重新恢复正常操作。
●读指针RdPtr:用于记录硬件下一次准备从重传缓冲区读取单微包的物理地址。该指针的值由重传请求LLRReq指定。RdPtr的初始值为0,发送方每从重传缓冲区中发送一个单微包时,RdPtr=(RdPtr+1)%D。
每一个单微包要么从重传缓冲区中发出,要么该单微包是一个从协议层到达的新单微包。通常来自协议层的新单微包会直接发送,同时进入重传缓冲区等待对方确认接收。在正常发送状态,发送单微包时RdPtr=WtPtr,说明该单微包是来自协议层的新单微包;而在重传状态下,会重新设置RdPtr,而且RdPtr与WtPtr不同,说明此次发送的是重传缓冲区中的单微包,进入重传缓冲区中的所有单微包均要进行重传,直至RdPtr=WtPtr。
图3所示是背景技术申请号为201110262128.1专利中多微包并行处理结构下的重传缓冲区逻辑结构图。重传缓冲区的深度为D,位宽为N*W。重传缓冲区的一条记录包含了多微包中的N个单微包信息。重传缓冲区仍然通过读指针RdPtr和写指针WtPtr来记录对重传缓冲区的读、写索引,分别记录重传序列过程中从重传缓冲区中的读地址和下一个多微包的写入地址。与单微包处理结构下重传缓冲区读指针和写指针的不同之处在于:WtPtr和RdPtr指向的重传缓冲区中的记录均对应一个多微包,其中包含N个单微包。这样的重传缓冲区容量为D*N*W。
图4是本发明中多微包并行处理结构逻辑结构图。本发明中多微包并行处理结构是在背景技术的多微包并行处理结构的发送模块和重传缓冲区之间添加一个重映射模块,并对重传缓冲区结构进行改进。其他各部件的结构及其连接关系保持不变。
重映射模块是一个软件模块,与发送模块和重传缓冲区相连。重映射模块从发送模块接收多微包,对多微包进行压缩变换,将压缩变换后的有效单微包重映射到重传缓冲区,并在多微包传输出错时从重传缓冲区读出出错单微包,拼凑成由N个单微包组成的一个多微包后提交给发送模块。
重传缓冲区与重映射模块相连。重传缓冲区从重映射模块接收发送多微包的备份,并在重传时将出错单微包提交给重映射模块。如图5所示,重传缓冲区由N个宽度为W、深度为D/N的静态随机存取存储器SRAM组成。N个SRAM逻辑上形成宽度为N*W、深度为D/N的重传缓冲区,并通过N个读使能端口和N个写使能端口实现N个单微包数据的并行读写,N个SRAM中索引相同的地址形成逻辑上的一行,行读指针Row_RdPtr控制一行数据的读,行写指针Row_WtPtr控制一行数据的写,变量Offset_RdPtr为Row_RdPtr在一行中的偏移,变量Offset_WtPtr为Row_WtPtr在一行中的偏移。同时,重传缓冲区由读指针RdPtr记录对重传缓冲区的读索引,写指针WtPtr记录对重传缓冲区的写索引。此时,读指针RdPtr的低位即为RdPtr在重传缓冲区中一行内的偏移量Offset_RdPtr,写指针WtPtr的低位即为WtPtr在重传缓冲区中一行内的偏移量Offset_WtPtr,高位地址为RdPtr在重传缓冲区中的逻辑行数Row_RdPtr,为WtPtr在重传缓冲区中的逻辑行数Row_WtPtr。这样的重传缓冲区容量只有D*W。
图6是本发明总体流程图。
第一步,改进多微包并行处理结构,方法是:
S601.1在多微包并行处理结构的发送模块和重传缓冲区之间添加一个重映射模块。
S601.2改进重传缓冲区的结构。
第二步,改进后的多微包并行处理结构将多微包由协议层发送至第二处理器,过程是:
S602.1报文拼装模块从第二协议层报文FIFO中取出待传输的协议层命令和数据,并根据单微包到达第二协议层报文FIFO的时间顺序将N个单微包组装成一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将组装后的多微包提交给发送缓冲区。
S602.2发送缓冲区从报文拼装模块接收拼装好的多微包,对多微包进行缓存,接收到发送模块的读请求后将多微包发送给发送模块。
S602.3发送模块根据从链路状态机接收的消息完成以下工作:
S602.3.1如果发送模块收到来自链路状态机的远程重传响应,转S602.4。
S602.3.2如果发送模块收到来自链路状态机的本地重传请求,发送模块向异步发送FIFO发送一个多微包,多微包中有一个单微包为该重传请求微包,其它单微包均为空微包,请求处理器重新发送出错微包。转S602.5。
S602.3.3如果发送模块收到的是来自链路状态机的信用和响应信息,则从发送缓冲区读取一组多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将此多微包写入异步发送FIFO,同时向重映射模块发出写使能信号,由重映射模块将此多微包进行压缩变换并将有效单微包重映射到重传缓冲区。
S602.3.3.1重映射模块采用冒泡排序方法对多微包中的N个单微包进行压缩变换,将N个单微包压缩成K个有效单微包。
S602.3.3.2重映射模块将压缩变换后的K个有效单微包重映射到重传缓冲区中对应的SRAM中,转S602.5。
S602.4重映射模块将出错单微包从重传缓冲区中读出提交给发送模块。
S602.5每一个链路层时钟周期内发送模块向异步发送FIFO写入一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},第二处理器按照Flit[0]、Flit[1]、…、Flit[N-1]的顺序每个物理层时钟周期内从异步发送FIFO读取一个微包,进而在N个物理层时钟周期内读取一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}。
Claims (2)
1.一种基于压缩变换的面向多微包并行处理结构的重传方法,其特征在于包括以下步骤:
第一步,改进多微包并行处理结构,方法是:
1.1在多微包并行处理结构的发送模块和重传缓冲区之间添加一个重映射模块,重映射模块是一个软件模块,与发送模块和重传缓冲区相连;重映射模块从发送模块接收多微包,对多微包进行压缩变换,将压缩变换后的有效单微包重映射到重传缓冲区,并在多微包传输出错时从重传缓冲区读出出错单微包,拼凑成N路并行数据后提交给发送模块;
1.2改进重传缓冲区的结构:重传缓冲区与重映射模块相连;重传缓冲区从重映射模块接收压缩变换后的有效单微包,在重传时将出错单微包的备份提交给重映射模块;重传缓冲区由N个宽度为W、深度为D/N的静态随机存取存储器SRAM组成,D与N均是2的幂次方,N个SRAM逻辑上形成宽度为N*W、深度为D/N的重传缓冲区,并通过N个读使能端口和N个写使能端口实现N个单微包数据的并行读写,N个SRAM中索引相同的地址形成逻辑上的一行,行读指针Row_RdPtr控制一行数据的读,行写指针Row_WtPtr控制一行数据的写,变量Offset_RdPtr为Row_RdPtr在一行中的偏移,变量Offset_WtPtr为Row_WtPtr在一行中的偏移;同时,重传缓冲区由读指针RdPtr记录对重传缓冲区的读索引,写指针WtPtr记录对重传缓冲区的写索引;读指针RdPtr的低位即为RdPtr在重传缓冲区中一行内的偏移量Offset_RdPtr,写指针WtPtr的低位即为WtPtr在重传缓冲区中一行内的偏移量Offset_WtPtr,高位地址为RdPtr在重传缓冲区中的逻辑行数Row_RdPtr,为WtPtr在重传缓冲区中的逻辑行数Row_WtPtr;重传缓冲区的大小为D*W;
第二步,改进后的多微包并行处理结构将从协议层报文转发模块接收的单微包发送至第二处理器,过程是:
2.1报文拼装模块从第二协议层报文FIFO中取出待传输的协议层命令和数据,根据单微包到达第二协议层报文FIFO的时间顺序将N个单微包组装成一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将组装后的多微包提交给发送缓冲区;
2.2发送缓冲区从报文拼装模块接收拼装好的多微包,对多微包进行缓存,接收到发送模块的读请求后将多微包发送给发送模块;
2.3发送模块根据从链路状态机接收的消息完成以下工作:
2.3.1如果发送模块从链路状态机收到的是远程重传响应,转2.4步;
2.3.2如果发送模块从链路状态机收到的是本地重传请求,发送模块向异步发送FIFO发送一个多微包,多微包中的一个单微包为该重传请求,其它单微包均为空微包,请求第二处理器重新发送出错单微包,转2.5步;
2.3.3如果发送模块从链路状态机收到的是信用和响应信息,则从发送缓冲区读取一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},将此多微包写入异步发送FIFO,同时向重映射模块发出写使能信号,并将该多微包发送给重映射模块,重映射模块对多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}进行压缩变换,并将压缩变换后的K个有效单微包重映射到重传缓冲区中,方法是:
2.3.3.1重映射模块对多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}进行压缩变换:记向量VEC[N-1:0]为多微包中N个单微包的有效位向量,位向量值为1表示有效,位向量值为0表示无效,VEC[0]对应Flit[0]的有效信息、…、VEC[N-1]对应VEC[N-1]的有效信息;记一个多微包中有K个单微包为有效单微包,1≤K≤N,K为自然数;重映射模块采用冒泡排序方法对多微包中的N个单微包及其位向量进行排序,使得多微包中的有效单微包放置在低位,无效单微包在高位,多微包的有效位向量VEC[N-1:0]为:
2.3.3.2重映射模块将压缩变换后的K个有效单微包重映射到重传缓冲区中,过程如下:
2.3.3.2.1如果K≤N-OffSet_WtPtr,将SRAM[OfSet_WtPtr+K-1:OfSet_WtPtr]的写使能信号置为1,WtPtr=(WtPtr+K)%D,转2.5步;否则,转2.3.3.2.2步;
2.3.3.2.2将SRAM[OfSet_WtPtr+K-N-1:0]、SRAM[N-1:OfSet_WtPtr]的写使能信号置为1,WtPtr=(WtPtr+K)%D,转2.5步;
2.4由重映射模块将出错单微包从重传缓冲区读出提交给发送模块,过程如下:
2.4.1接收方检测到多微包传输出错,向发送方发送一个远程重传请求LLRReq,LLRReq中包含重传定位ESeq;
2.4.2发送方收到接收方发送过来的LLRReq后,向接收方发送一个重传响应LLRAck,LLRAck中包含发送方的WtPtr值和接收方发过来的ESeq信息;
2.4.4重映射模块将出错单微包从重传缓冲区中读出并重新发送给发送模块,具体过程如下:
2.4.4.1如果RdPtr=WtPtr,跳出重传模式,转2.5步,否则进入2.4.4.2步;
2.4.4.2如果Row_RdPtr不等于Row_WtPtr,转2.4.4.3步;如果Row_RdPtr=Row_WtPtr,根据Offset_RdPtr的取值范围按以下步骤拼凑由N个单微包组成的多微包:
2.4.4.2.1若Offset_RdPtr≥1,则N个单微包数据格式为:Flit[N-1:Offset_WtPtr]为空微包,Flit[Offset_WtPtr-1:Offset_RdPtr]为重传缓冲区中读出的单微包数据,Flit[Offset_RdPtr-1:0]为空微包,重映射模块将拼凑后的多微包提交给发送模块,转2.5步;
2.4.4.2.2若Offset_RdPtr=0,则N个单微包数据格式为:Flit[N-1:Offset_WtPtr]为空微包,Flit[Offset_WtPtr-1:0]为重传缓冲区中读出的单微包数据,重映射模块将拼凑后的N路并行数据提交给发送模块,转2.5步;
2.4.4.3重映射模块将重传缓冲区中Flit[N-1:Offset RdPtr]读出,重映射模块将重传单微包拼凑为N路并行数据:若Offset_RdPtr≥1,则N个单微包数据格式为:Flit[Offset_RdPtr-1:0]为空微包,与Flit[N-1:Offset_RdPtr]形成N路并行数据提交给发送模块,Row_RdPtr=(Row_RdPtr+1)%(D/N),转2.4.4.3.1步;否则Offset_RdPtr=0,Flit[N-1:0]均为重传缓冲区单微包数据,重映射模块将此多微包提交给发送模块,Row_RdPtr=(Row_RdPtr+1)%(D/N),转2.4.4.3.1步;
2.4.4.3.1如果Row_RdPtr不等于Row_WtPtr,执行2.4.4.3.2步;如果Row_RdPtr=Row_WtPtr,则重传缓冲区中Flit[Offset_WtPtr-1:0]需要重传,重映射模块将重传单微包拼凑为N路并行数据:若Offset_WtPtr=0,转2.5步;若Offset_WtPtr≥1,则N个单微包数据格式为:Flit[N-1:Offset_WtPtr]为空微包,Flit[Offset_WtPtr-1:0]为重传缓冲区单微包数据,重映射模块将此多微包提交给发送模块,转2.5步;
2.4.4.3.2重映射模块将重传缓冲区中Flit[N-1:0]提交给发送模块,Row_RdPtr=(Row_RdPtr+1)%(D/N),转2.4.4.3.1步;
2.5每一个链路层时钟周期内发送模块向异步发送FIFO写入一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]},第二处理器按照Flit[0]、Flit[1]、…、Flit[N-1]的顺序每个物理层时钟周期内从异步发送FIFO读取一个单微包,进而在N个物理层时钟周期内读取一个多微包{Flit[N-1],Flit[N-2],…,Flit[1],Flit[0]}。
2.如权利要求1所述的基于压缩变换的面向多微包并行处理结构的重传方法,其特征在于所述采用冒泡排序方法对多微包中的N个单微包及其位向量进行排序的方法是:
2.3.3.1.1初始化计数器i为0,初始化计数器j为N-2,创建交换标识变量exchange;
2.3.3.1.2exchange=0;
2.3.3.1.3如果VEC[j+1]>VEC[j],转2.3.3.1.3.1步;否则,转2.3.3.1.4步;
2.3.3.1.3.1将VEC[j+1]和VEC[j]交换,同时将Flit[j+1]和Flit[j]交换;
2.3.3.1.3.2exchange=1,j=j-1;
2.3.3.1.4如果j<i,转2.3.3.1.5步;否则,转2.3.3.1.2步;
2.3.3.1.5如果exchange=0,转2.3.3.1.8步;否则转2.3.3.1.6步;
2.3.3.1.6i=i+1;
2.3.3.1.7如果i>N-1,转2.3.3.1.8步;否则,转2.3.3.1.2步;
2.3.3.1.8压缩变换结束。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210421636.4A CN102981804B (zh) | 2012-10-29 | 2012-10-29 | 基于压缩变换的面向多微包并行处理结构的重传方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210421636.4A CN102981804B (zh) | 2012-10-29 | 2012-10-29 | 基于压缩变换的面向多微包并行处理结构的重传方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102981804A true CN102981804A (zh) | 2013-03-20 |
CN102981804B CN102981804B (zh) | 2014-06-04 |
Family
ID=47855875
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210421636.4A Expired - Fee Related CN102981804B (zh) | 2012-10-29 | 2012-10-29 | 基于压缩变换的面向多微包并行处理结构的重传方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102981804B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022000208A1 (zh) * | 2020-06-29 | 2022-01-06 | 华为技术有限公司 | 一种数据重传方法和装置 |
CN114157401A (zh) * | 2021-12-03 | 2022-03-08 | 中国人民解放军国防科技大学 | 一种支持长短两种报文格式的重传缓冲装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102394732A (zh) * | 2011-09-06 | 2012-03-28 | 中国人民解放军国防科学技术大学 | 一种多微包并行处理结构 |
-
2012
- 2012-10-29 CN CN201210421636.4A patent/CN102981804B/zh not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102394732A (zh) * | 2011-09-06 | 2012-03-28 | 中国人民解放军国防科学技术大学 | 一种多微包并行处理结构 |
Non-Patent Citations (1)
Title |
---|
庞征斌,徐金波,董亚卓,窦勇,张峻: "面向大尺寸滑动窗口应用的并行计算模型", 《国防科技大学学报》, vol. 33, no. 2, 30 April 2011 (2011-04-30) * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022000208A1 (zh) * | 2020-06-29 | 2022-01-06 | 华为技术有限公司 | 一种数据重传方法和装置 |
CN114157401A (zh) * | 2021-12-03 | 2022-03-08 | 中国人民解放军国防科技大学 | 一种支持长短两种报文格式的重传缓冲装置 |
CN114157401B (zh) * | 2021-12-03 | 2024-01-23 | 中国人民解放军国防科技大学 | 一种支持长短两种报文格式的重传缓冲装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102981804B (zh) | 2014-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR101417543B1 (ko) | 패킷 해체/재구성 및 링크-제어 | |
CN104484295B (zh) | 并行计算机系统中基于接收方滑动窗口的数据传输方法 | |
CN101034961B (zh) | 多进程harq技术ir缓存的管理方法及装置 | |
CN1973500B (zh) | 用于传送数据的方法和系统以及用于发射数据的站 | |
US7535908B2 (en) | Method for data transfer | |
CN102868604B (zh) | 一种应用于片上网络的二维Mesh双缓冲容错路由单元 | |
CN106502932B (zh) | 基于分层结构的片间互联接口及其写操作和读操作的方法 | |
US11025564B2 (en) | RDMA transport with hardware integration and out of order placement | |
CN1703881A (zh) | 集成电路和建立事务处理的方法 | |
CN101582756B (zh) | 一种实现无线局域网立即块应答机制的方法 | |
WO2021004056A1 (zh) | 用于数据传输的方法和rdma网卡 | |
CN114244780B (zh) | 一种数据传输方法、数据传输装置和相关设备 | |
CN102394732B (zh) | 一种多微包并行处理结构 | |
CN107111562A (zh) | 工作负荷自适应数据打包算法 | |
CN101494636B (zh) | 一种基于快速io互连技术的数据排序方法及装置 | |
KR20160084232A (ko) | 메모리 장치, 메모리 시스템 및 메모리 장치의 동작 방법 | |
CN100385844C (zh) | 移动台装置和基站装置 | |
CN102981804B (zh) | 基于压缩变换的面向多微包并行处理结构的重传方法 | |
CN106487673A (zh) | 一种基于三模冗余的检错重传容错路由单元 | |
CN1246788C (zh) | 双工处理器系统 | |
CN104144044B (zh) | 一种多设备透明harq的处理方法 | |
US20070019677A1 (en) | Data processing method and system based on a serial transmission interface | |
JP2006087124A5 (zh) | ||
JPH04297942A (ja) | 待ち行列を使用してトランザクションを発生する装置及びその方法 | |
US5144621A (en) | Common bus communication system with reduced interface memories |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140604 Termination date: 20201029 |