一种多数据处理方法和装置与流程

文档序号:11407660阅读:202来源:国知局
一种多数据处理方法和装置与流程
本发明涉及数据处理领域,特别涉及一种多数据处理方法和装置。

背景技术:
为了提高数据运算效率,目前提出了一种SIMD(SingleInstructionMultipleData,单指令多数据)的数据处理方法。该数据处理方法将x组m个n位宽的数据打包到x个宽位变量中,每个宽位变量中装载m个n位宽的数据,各个宽位变量中相同位置的数据执行算术运算,并且宽位变量中不同位置的数据同时执行该算术运算,最后同时产生m个结果。但是,m个结果会出现溢出的问题。为了解决结果溢出的问题,在执行算术运算前需要对数据进行特殊的编码处理,主要通过位域对齐和符号扩展的方法,将两个以上的数据编码为合成值,然后对合成值进行算术运算,从而避免结果溢出。在实现本发明的过程中,发明人发现现有技术至少存在以下问题:特殊的编码处理也需要时间,在溢出概率比较低的多数据处理场合,对所有数据进行特殊的编码处理使得运算效率比较低。

技术实现要素:
为了在溢出概率较低的多数据处理场合提高运算效率,本发明实施例提供了一种多数据处理方法和装置。所述技术方案如下:一种多数据处理方法,所述方法包括:将x组数据集分别装载到x个宽位变量中,每组数据集包括m个n位宽的数据;对x个宽位变量执行单指令多数据SIMD运算,得到第一运算结果;判断第一运算结果是否溢出;当第一运算结果没有溢出时,采用SIMD运算的第一运算结果;当第一运算结果溢出时,丢弃SIMD运算的第一运算结果,对所述x组数据集执行标准指令运算,得到m个第二运算结果,采用标准指令运算的m个第二运算结果。其中,所述对x个宽位变量执行单指令多数据SIMD运算,具体包括:对各个宽位变量中相同位置的数据执行算术运算,并且宽位变量中不同位置的数据同时执行该算术运算,同时产生m个第一运算子结果,m个第一运算子结果组成第一运算结果。其中,所述判断第一运算结果是否溢出,具体包括:如果各个第一运算子结果的最高位都为0,确定该第一运算结果没有溢出;如果各个第一运算子结果的最高位有至少一个为1,确定该第一运算结果溢出。其中,所述判断第一运算结果是否溢出,具体包括:设置一个用于收集溢出信息的溢出标志变量,并设置一个用于检测各个第一子运算结果的最高位是否为1的掩码变量;初始化所述溢出标志变量为0,并初始化所述掩码变量中与各个第一运算子结果的最高位对应的位为1;将每一组第一运算结果和所述溢出标志变量做逻辑或运算,并在每一次逻辑或运算后将每一次的逻辑或运算结果重新赋值给所述溢出标志变量,得到第一溢出标志变量;将所述第一溢出标志变量和所述掩码变量做逻辑与运算,若逻辑与运算结果不为0,则溢出,若逻辑与运算结果为0,则没有溢出。其中,所述对所述x组数据集执行标准指令运算,具体包括:将各组数据集中相同位置的数据分别装载到x个第二宽位变量中,对x个第二宽位变量执行算术运算,得到m个第二运算结果。一种多数据处理装置,所述装置包括:装载模块,用于将x组数据集分别装载到x个宽位变量中,每组数据集包括m个n位宽的数据;运算模块,用于对x个宽位变量执行单指令多数据SIMD运算,得到第一运算结果;判断模块,用于判断第一运算结果是否溢出;第一处理模块,用于当第一运算结果没有溢出时,采用SIMD运算的第一运算结果;第二处理模块,用于当第一运算结果溢出时,丢弃SIMD运算的第一运算结果,对所述x组数据集执行标准指令运算,得到m个第二运算结果,采用标准指令运算的m个第二运算结果。其中,所述运算模块,具体用于对各个宽位变量中相同位置的数据执行算术运算,并且宽位变量中不同位置的数据同时执行该算术运算,同时产生m个第一运算子结果,m个第一运算子结果组成第一运算结果。其中,所述判断模块,具体用于如果各个第一运算子结果的最高位都为0,确定该第一运算结果没有溢出;如果各个第一运算子结果的最高位有至少一个为1,确定该第一运算结果溢出。其中,所述判断模块,具体用于设置一个用于收集溢出信息的溢出标志变量,并设置一个用于检测各个第一运算子结果的最高位是否为1的掩码变量;初始化所述溢出标志变量为0,并初始化所述掩码变量中与各个第一运算子结果的最高位对应的位为1;将每一组第一运算结果和所述溢出标志变量做逻辑或运算,并在每一次逻辑或运算后将每一次的逻辑或运算结果重新赋值给所述溢出标志变量,得到第一溢出标志变量;将所述第一溢出标志变量和所述掩码变量做逻辑与运算,若逻辑与运算结果不为0,则溢出,若逻辑与运算结果为0,则没有溢出。其中,所述第二处理模块包括运算单元,用于将各组数据集中相同位置的数据分别装载到x个第二宽位变量中,对x个第二宽位变量执行算术运算,得到m个第二运算结果。本发明实施例提供的技术方案的有益效果是:通过运算前不对数据做免溢出的处理而是直接执行SIMD运算,在SIMD运算后检测运算结果有无溢出,如果有溢出,则重新执行一遍标准指令的运算过程,之前有溢出的SIMD运算结果作废,在溢出概率较低的多数据处理场合,可以避免很多不必要的特殊编码处理,从而提高运算效率。附图说明为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1是本发明的实施例1提供的多数据处理方法流程图;图2是本发明的实施例2提供的多数据处理方法流程图;图3是本发明的实施例2提供的宽位变量示意图;图4是本发明的实施例2提供的SIMD运算示意图;图5是本发明的实施例2提供的另一宽位变量示意图;图6是本发明的实施例2提供的标准指令运算示意图;图7是本发明的实施例2提供的多数据处理装置结构示意图。具体实施方式为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。实施例1参见图1,本实施例提供了一种多数据处理方法,该方法包括:101:将x组数据集分别装载到x个宽位变量中,每组数据集包括m个n位宽的数据;102:对x个宽位变量执行单指令多数据SIMD运算,得到第一运算结果;103:判断第一运算结果是否溢出;104:当第一运算结果没有溢出时,采用SIMD运算的第一运算结果;105:当第一运算结果溢出时,丢弃SIMD运算的第一运算结果,对x组数据集执行标准指令运算,得到m个第二运算结果,采用标准指令运算的m个第二运算结果。本实施例通过运算前不对数据做免溢出的处理而是直接执行SIMD运算,在SIMD运算后检测运算结果有无溢出,如果有溢出,则重新执行一遍标准指令的运算过程,之前有溢出的SIMD运算结果作废,在溢出概率较低的多数据处理场合,可以避免很多不必要的特殊编码处理,从而提高运算效率。实施例2参见图2,201:将x组数据集分别装载到x个宽位变量中,每组数据集包括m个n位宽的数据,也即每个宽位变量中装载m个n位宽的数据;例如,将2组2个12位宽的数据打包到2个32位宽位变量中,每个32位宽位变量中装载2个12位宽的数据,参见图3,a0、b0、a1、b1是12位宽的数据,A、B是32位宽位变量,a0和a1是一组数据集,打包到宽位变量A,b0和b1是一组数据集,打包到宽位变量B。202:对x个宽位变量执行SIMD运算,得到一组第一运算结果,其中,第一运算结果包括m个第一运算子结果;其中,对x个宽位变量执行SIMD运算,具体包括:对各个宽位变量中相同位置的数据执行算术运算,并且宽位变量中不同位置的数据同时执行该算术运算,最后同时产生m个第一运算子结果,m个第一运算子结果组成第一运算结果。以图3为例,执行C=(A@B)运算,也即同时执行a...
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1