一种片上多核数据传输方法和装置
技术领域
本发明涉及多核处理器设计领域,特别是涉及一种多核处理器的片上数据传输方法和装置。
背景技术
在多核处理器设计中,对存储资源的访问是制约性能提高的主要因素。单纯通过提高时钟频率和改进缓存策略已经不能满足运行大规模并行程序时对访存带宽的要求。
传统多核处理器中,存储层次分为一级缓存,二级缓存,甚至多级缓存和片外存储。一级缓存一般设计在处理器核的内部,与处理器核的访存模块直接相连。二级缓存及多级缓存一般设计为多个或全部处理器核共享。上述缓存均为片上缓存,没有独立的地址空间,对程序员来说是不可见的。这种设计在传统的单核处理器中十分常见,利用硬件缓存可以快速访问到其映射的数据。这说明传统单核处理器的缓存没有自己的地址空间,而本设计的SPM(Scratch-pad Memory,简称SPM)是有自己地址空间的缓存。
目前,一级缓存可以通过软件接口部分配置成程序员可见的地址空间。但在传统多核处理器设计中,对二级缓存和片外存储的访问请求则必须由访存部件发出,程序员不能直接发出访存请求,而是由访存部件从各级缓存中取回数据,但这种方法传输的数据最长长度一般为二级缓存的行宽度。然而目前常见的并行应用程序常常需要大规模的数据传输,例如FFT(快速傅立叶变换),矩阵乘法运算等。因此传统片上缓存的数据传输方法已经成为限制提升计算速度的瓶颈。现有的片上缓存不能根据所运行的算法调整数据在缓存中的地址分配,对于具有本地缓存的多核处理器,传统缓存的空间局部性较差;而本设计可以让程序员根据自己的需求实现本地和远程地之间可控的数据传输,从而提高了缓存的利用率和空间局部性。
发明内容
为解决上述问题,本发明设计了一种片上多核数据传输方法和装置。
本发明的目的在于提供一种片上数据传输方法和装置,其能够大大降低片上网络的压力,并对数据规模和位置实现编程控制。
为实现本发明的目的而提供的一种片上多核数据传输方法,其特征在于,包括下列步骤:
步骤100,配置数据传输装置,通过软件接口生成控制数据传输装置的指令流,由处理器核将所述指令流发送给位于处理器核内部的数据传输装置,通过软件接口对数据传输装置进行如下配置判断数据传输类型;
步骤200,所述数据传输装置接收上述指令流,对发往同一片SPM或二级缓存的操作进行组合,由所述数据传输装置封装成可以在片上网络上传输的数据包;
步骤300,所述数据传输装置的发送模块查询片上网络,并对数据地址进行解析,给出目的SPM或二级缓存的坐标,当路由器指示可以传输时发送模块将数据包依次发送完毕;
步骤400,所述数据传输装置接收由目的SPM或二级缓存返回的数据或接收同步信号返回给控制模块,直至返回数据或同步信号数目与发送的请求相等,本装置控制模块向处理器核返回本次操作完成信号。
所述的片上多核数据传输方法,其特征在于,所述步骤100,还包括下列步骤:
步骤110.设置数据块宽度,设置源数据地址,设置源数据一维步长,设置源数据二维步长,设置目的数据地址,设置目的数据一维步长,设置目的数据二维步长,设置一维数据个数,设置二维数据个数;
步骤120.根据指令流配置数据传输装置的控制寄存器和数据寄存器。
所述的片上多核数据传输方法,其特征在于,所述步骤200,还包括下列步骤:
步骤210.由所述控制寄存器判断数据传输类型,对发往同一片远程SPM或二级缓存的操作进行组合;
步骤220.由所述发送模块封装成可以在片上网络传输的数据包。
所述的片上多核数据传输方法,其特征在于,所述步骤300,还包括下列步骤:
步骤310.所述发送模块把目的坐标为本地处理器核的数据包直接发给本地SPM,无需通过片上网络传输;
步骤320.所述数据传输装置的控制模块记录发送的数据包数目。
所述的片上多核数据传输方法,其特征在于,所述步骤400,还包括下列步骤:
步骤410.所述接收模块接收由目的SPM或二级缓存根据数据包中的指令返回的数据并写入本地SPM;
步骤420.所述接收模块接收由目的SPM或二级缓存返回的同步信号,并返回该数据传输装置的控制模块;
步骤430.判断所述返回数据或同步信号数目与发送的请求是否相等,若是,执行步骤440;否则,返回步骤410;
步骤440.所述控制模块向处理器核返回本次操作完成信号。
所述的片上多核数据传输方法,其特征在于,所述步骤200中的数据包携带数据块宽度,源数据地址,源数据一维步长,源数据二维步长,目的数据地址,目的数据一维步长,目的数据二维步长,一维数据个数,二维数据个数,所属寄存器模块,路由坐标信息。
所述的片上多核数据传输方法,其特征在于,所述步骤310中,如果目的坐标是本地处理器核,说明数据包是本地SPM传到本地SPM的,直接指示SPM操作,不需要发送到网络上;
如果目的坐标是远程处理器核或二级缓存,目的坐标将记录在数据包内,数据包通过路由器发送至网络上并最终送至目的处理器核或二级缓存。
本发明公开一种片上多核数据传输装置,其特征在于,包括:
生成指令流模块,用于配置数据传输装置,通过软件接口生成控制数据传输装置的指令流,由处理器核将所述指令流发送给位于处理器核内部的数据传输装置,通过软件接口对数据传输装置进行如下配置用于判断数据传输类型;
接收指令流模块,用于所述数据传输装置接收上述指令流,对发往同一片SPM或二级缓存的操作进行组合,由所述数据传输装置封装成可以在片上网络上传输的数据包;
发送模块,用于所述数据传输装置查询片上网络,并对数据地址进行解析,给出目的SPM或二级缓存的坐标,当路由器指示可以传输时发送模块将数据包依次发送完毕;
接收模块,用于所述数据传输装置接收由目的SPM或二级缓存返回的数据,直至返回数据或同步信号数目与发送的请求相等,本装置控制模块向处理器核返回本次操作完成信号;
控制模块,用于接收同步信号,直至返回数据或同步信号数目与发送的请求相等,本装置控制模块向处理器核返回本次操作完成信号。
所述的片上多核数据传输装置,其特征在于,所述生成指令流模块,还包括:
设置数据模块,用于设置数据块宽度,设置源数据地址,设置源数据一维步长,设置源数据二维步长,设置目的数据地址,设置目的数据一维步长,设置目的数据二维步长,设置一维数据个数,设置二维数据个数;
寄存器模块,用于根据指令流配置数据传输装置的控制寄存器和数据寄存器。
所述的片上多核数据传输装置,其特征在于,所述接收指令流模块,还包括:
操作模块,用于由所述控制寄存器判断数据传输类型,对发往同一片SPM或二级缓存的操作进行组合;
封装数据包模块,用于由所述发送模块封装成可以在片上网络传输的数据包。
所述的片上多核数据传输装置,其特征在于,所述发送模块,还包括:
发送数据包模块,用于所述发送模块把目的坐标为本地处理器核的数据包直接发给本地SPM,无需通过片上网络传输;
记录数据包模块,用于所述数据传输装置的控制模块记录发送的数据包数目。
所述的片上多核数据传输方法,其特征在于,所述接收模块,还包括:
数据写入模块,用于所述接收模块接收由目的SPM或二级缓存根据数据包中的指令返回的数据并写入本地SPM;
信号返回模块,用于所述接收模块接收由目的SPM或二级缓存返回的同步信号,并返回给数据传输装置的控制模块;
判断模块,用于判断所述返回数据或同步信号数目与发送的请求是否相等;所述控制模块向处理器核返回本次操作完成信号。
所述的片上多核数据传输装置,其特征在于,所述接收指令流模块中的数据包携带数据块宽度,源数据地址,源数据一维步长,源数据二维步长,目的数据地址,目的数据一维步长,目的数据二维步长,一维数据个数,二维数据个数,所属寄存器模块,路由坐标信息。
所述的片上多核数据传输装置,其特征在于,所述发送数据包模块中,如果目的坐标是本地处理器核,说明数据包是本地SPM传到本地SPM的,直接指示SPM操作,不需要发送到网络上;
如果目的坐标是远程处理器核或二级缓存,目的坐标将记录在数据包内,数据包通过路由器发送至网络上并最终送至目的处理器核或二级缓存。
本发明的有益效果是:采用本发明的多核处理器使用计算与通信重叠的编程方式,可以使由片上通信延迟隐藏在计算过程中,本发明还缓解了因为爆发式大规模数据请求造成的网络延迟增加的负面影响。
附图说明
图1为本发明数据传输方法流程图;
图2为本发明数据传输装置状态转换图;
图3为本发明数据传输装置基本结构图;
图4为本发明具体实施方式工作流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明的一种片上数据传输方法和装置进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
为了提高访存带宽,大规模数据传输的并行应用程序所需数据应具有较强的连续性和规律性,有利于程序员不用在存储层次上调度数据,因此,本发明给程序员提供一个可编程的片上数据传输方法,使发生在一级缓存和二级缓存之间的数据可以实现并行和大规模传输,并可以在一级缓存之间传输数据。
本发明需要一级缓存提供程序员可见的地址空间,允许数据被指定存放在这块空间内,通常这种缓存被称为笔记本(Scratch-pad Memory,简称SPM)。本发明通过将发往同一个二级缓存的读写请求整理成一次或少数几次请求,大大降低片上网络的压力,并对数据规模和位置实现编程控制。通过编程接口控制数据块宽度和数量的新型数据传输技术可以同时按照两种步长来传输数据,也可称为二维数据传输技术。
下面结合上述目标详细介绍本发明的片上数据传输方法,所述方法,包括下列步骤:
步骤100.配置数据传输装置:通过软件接口生成控制数据传输装置的指令流,由处理器核将所述指令流发送给位于处理器核内部的数据传输装置,所述数据传输装置接收上述指令流,通过软件接口对数据传输装置进行如下配置;
步骤110.设置数据块宽度,设置源数据地址,设置源数据一维步长,设置源数据二维步长,设置目的数据地址,设置目的数据一维步长,设置目的数据二维步长,设置一维数据个数,设置二维数据个数;
步骤120.根据指令流配置数据传输装置的控制寄存器和数据寄存器。
上述控制寄存器包括标识操作类型寄存器,读完成寄存器,写完成寄存器,操作完成寄存器,返回值寄存器,空闲状态寄存器。其中读完成寄存器指示本次读本地SPM或读远程SPM及二级缓存的操作是否全部发送完成,写完成寄存器指示本次写本地SPM或写远程SPM及二级缓存的操作是否全部发送完成,操作完成寄存器指示本次读写操作是否全部发送完成,返回值寄存器指示所有操作是否全部完成(包括发送和返回),空闲状态寄存器指示数据传输装置当前为可用状态。
上述数据寄存器包括:数据块宽度寄存器,源数据地址寄存器,源数据一维步长寄存器,源数据二维步长寄存器,目的数据地址寄存器,目的数据一维步长寄存器,目的数据二维步长寄存器,一维数据个数寄存器,二维数据个数寄存器。其中数据块宽度寄存器保存数据占用通信链路的位宽,源数据地址寄存器保存数据传输发生前所在地址的首地址,源数据一维步长寄存器保存所要传输数据矩阵的列间隔地址,源数据二维步长寄存器保存所要传输数据矩阵的行间隔地址,目的数据地址寄存器保存数据传输发生后所在地址的首地址,目的数据一维步长寄存器保存传输后数据矩阵的列间隔地址,目的数据二维步长寄存器保存传输后数据矩阵的行间隔地址,一维数据个数寄存器保存数据矩阵的列数,二维数据个数寄存器保存数据矩阵的行数。
上述数据寄存器有相同3组(不仅限于3组,其实可以为更多组),能够同时处理3组数据传输请求。每一组寄存器模块可以存放一次数据传输任务的信息,直到该数据传输任务完成。
图2中为所述数据传输装置在接收指令流后的状态转换关系。
空闲状态为存在可用的数据和控制寄存器模块。
配置寄存器状态为正在接收指令流。
配置完成状态为工作态,此时所述数据传输装置开始工作,执行上述指令流配置的任务。
繁忙状态为目前没有空闲寄存器模块,处理器核指令流需要等待。
步骤200.判断数据传输类型,对发往同一片SPM或二级缓存的操作进行组合,由所述数据传输装置封装成可以在片上网络上传输的数据包;
所述步骤200,包括下列步骤:
步骤210.由所述控制寄存器判断数据传输类型,对发往同一片SPM或二级缓存的操作进行组合;
步骤220.由所述发送模块封装成可以在片上网络传输的数据包。
所述数据包携带数据块宽度,源数据地址,源数据一维步长,源数据二维步长,目的数据地址,目的数据一维步长,目的数据二维步长,一维数据个数,二维数据个数,所属寄存器模块,路由坐标信息。
步骤300.所述数据传输装置的发送模块查询片上网络,并对数据地址进行解析,给出目的SPM或二级缓存的坐标,当路由器指示可以传输时发送模块将数据包依次发送完毕。
所述步骤300,包括下列步骤:
步骤310.所述发送模块把目的坐标为本地处理器核的数据包直接发给本地SPM,无需通过片上网络传输;
该步骤中,如果目的坐标是本地处理器核,说明数据包是本地SPM传到本地SPM的,直接指示SPM操作,不需要发送到网络上。如果目的坐标是远程处理器核或二级缓存,目的坐标将记录在数据包内,数据包通过路由器发送至网络上并最终送至目的处理器核或二级缓存。
步骤320.所述数据传输装置的控制模块记录发送的数据包数目。
步骤400.所述数据传输装置接收由目的SPM或二级缓存返回的数据或同步信号,直至返回数据或同步信号数目与发送的请求相等,本装置控制模块向处理器核返回本次操作完成信号。程序员通过软件查询方式可得知本次操作已经完成。
所述步骤400,包括下列步骤:
步骤410.所述接收模块接收由目的SPM或二级缓存根据数据包中的指令返回的数据并写入本地SPM;
步骤420.所述接收模块接收由目的SPM或二级缓存返回的同步信号,并返回给数据传输装置的控制模块。
所述接收模块具有以下特征:对于远程读数据请求,所述数据传输装置的接收模块接收远程SPM或二级缓存返回的数据包,并解析写入本地SPM。(本地SPM是与本装置直接连接的SPM,远程SPM是与其他核相连的SPM,目的SPM是读操作中所读数据所在SPM和写操作中将要写入的SPM,既可以是远程也可以是本地的SPM)对于远程写数据请求,所述数据传输装置的接收模块接收远程SPM或二级缓存返回的同步信号。
步骤430.判断所述返回数据或同步信号数目与发送的请求是否相等,若是,执行步骤440;否则,返回步骤410;
步骤440.所述控制模块向处理器核返回本次操作完成信号。
本发明与处理器核的访存部件,本装置和访存部件共用片上网络端口和片上网络端口连接。在接收来自处理器核的指令时,可以包括以下几种操作:
(1)本装置将本地SPM中的数据写入远程SPM;
(2)本装置将本地SPM中的数据写入本地SPM的另一位置;
(3)本装置将本地SPM中的数据写入二级缓存;
(4)本装置从远程SPM中的数据读入本地SPM;
(5)本装置将本地SPM中的数据读入到本地SPM的另一位置;
(6)本装置将二级缓存中的数据读入本地SPM;
本发明的具体实施方法如下,当程序员将参数输入编程接口后,通过编译器生成汇编指令。当程序执行到此处时,指令通过处理器访存部件将参数传递给本装置。
步骤1:如图4所示,若本装置存在空闲寄存器模块,本装置将指令流携带的参数保存在图3所示的数据传输装置寄存器模块中。若所有寄存器模块都被占用,则指示处理器核停止发送指令,处于等待状态。
步骤2:本装置对数据传输装置寄存器模块中的参数进行解析,将每一份数据的地址和宽度都发送至图3所示的数据传输装置控制模块中。
步骤3:控制模块判断该操作为本地操作还是远程操作。本地操作包括上述(2)(5)操作类型;远程操作包括上述(1)(3)(4)(6)操作类型。
步骤4:若操作为本地操作类型,经判断为(2)(5)两种操作类型。这两种操作类型为本地数据搬运,直接发送给本地SPM处理。本地SPM处理完成后清空本装置相应的寄存器模块,可以处理下一个数据传输请求。
步骤5:若操作为远程操作类型,经判断为(1)(3)(4)(6)两种类型。控制模块对操作参数进行分析,因为同一次操作所需要的数据往往位于多个SPM(本装置可以只对本地SPM进行读写操作,也可以对远程SPM进行读写操作)上或二级缓存上,所以控制模块将寄存器模块分发的操作进行判断,将去往同一个SPM(发往本地SPM的数据包不走网络)或二级缓存的操作合并在同一个网络数据包。
步骤6:控制模块为每个数据包填充目的SPM或二级缓存的网络坐标。当网络数据包已满无法接收更多的请求时,控制模块将该网络数据包转移至图3所示的数据传输装置发送模块。
步骤7:本装置的数据传输装置发送模块检测网络状态,若没有优先级高于本装置的部件向网络上发送数据包,数据传输装置发送模块立即将准备好的网络数据包发送至片上网络。
步骤8:远程SPM或二级缓存接收到本装置发出的数据包后,判断数据包的类型,若为读操作则返回数据给本装置;若为写操作则将数据包中的数据写入SPM或二级缓存,然后返回同步信号给本装置,本装置清空寄存器模块,可以处理下一个数据传输请求。
有益效果:采用本发明的多核处理器使用计算与通信重叠的编程方式,可以使由片上通信延迟隐藏在计算过程中,本发明还缓解了因为爆发式大规模数据请求造成的网络延迟增加的负面影响。
通过结合附图对本发明具体实施例的描述,本发明的其它方面及特征对本领域的技术人员而言是显而易见的。
以上对本发明的具体实施例进行了描述和说明,这些实施例应被认为其只是示例性的,并不用于对本发明进行限制,本发明应根据所附的权利要求进行解释。