本申请涉及数据处理
技术领域:
,特别是涉及一种数据处理方法、处理器、数据处理装置及存储介质。
背景技术:
:原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换(例如共享变量i执行累加,非原子操作情况下多个核同时累加的结果会出错)。在多核处理器系统当中,多个处理器核共享同一块片外存储单元,通常的数据传输技术可能无法保证原子性,即同一时间可能有多个处理器核访问同一地址。在实际程序当中,运算结果存储在一个存储空间内,该存储空间具有一定的地址范围,由于该存储空间可能在运算完成之前被其他处理器核访问,传统的做法是先将该存储空间的数据读到存储单元,然后将运算结果存在该存储单元,指令运算结束之后将该存储单元的结果写回到该存储空间。然而,如果运算期间有其它的处理器核访问该存储空间,就会得到一个错误的结果,破坏这次累加的原子性。技术实现要素:基于此,有必要针对上述技术问题,提供一种能够实现原子操作期间单独访问片外存储空间的数据处理方法、处理器、数据处理装置及存储介质。一种数据处理方法,所述方法包括:获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于或等于所述第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中;返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。在其中一个实施例中,将当前读取的所述第一子数据与所述第二子数据进行对位比较,判断当前读取的所述第一子数据是否大于或等于所述第二子数据;当所述第一子数据大于或等于所述第二子数据时,将所述第一子数据作为所述当前比较结果;当判断所述第一子数据小于所述第二子数据时,将所述第二子数据作为所述当前比较结果。在其中一个实施例中,若所述第二源操作数为立即数,则复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。在其中一个实施例中,根据所述运算指令,将所述源操作数a和/或所述源操作数b作为所述第二源操作数。在其中一个实施例中,每当将所述当前比较结果存储于所述第一存储装置中之后,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。在其中一个实施例中,所述当前比较结果存储于所述第一存储装置中时,所述当前比较结果的存储地址与所述当前读取的第一子数据的存储地址一致。在其中一个实施例中,控制计数器累加一次或递减一次,之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。在其中一个实施例中,根据所述运算指令,获得所述第一源操作数的数据大小;根据所述第一源操作数的数据大小以及预设的拆分粒度,得到所述目标循环次数。在其中一个实施例中,所述运算指令的指令格式,包括指令类别、指令类型、第一源操作数、第二源操作数、目标操作数及操作码;所述指令类别用于确定所述运算指令是否为原子操作运算指令;所述指令类型用于确定所述运算指令的运算类型;所述操作码用于配置源操作数的个数;所述第一源操作数和所述第二源操作数分别用于表示参与运算的数据;所述目标操作数用于表示所述当前比较结果。一种处理器,所述处理器包括运算电路、读写电路以及与所述运算电路邻近设置的第二存储装置,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;其中,所述运算电路用于获取运算指令,根据所述运算指令向所述第一存储装置发送读写请求;所述运算指令用于实现第一源操作数和第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;所述读写电路用于根据所述读写请求,按照预设的数据读取方式,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;所述运算电路用于获取所述第二子数据,并根据所述运算指令判断当前读取的所述第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作。在其中一个实施例中,所述处理器还包括数据选择器,所述运算电路包括两目最大值运算模块,所述数据选择器连接在所述运算电路和所述读写电路之间,所述数据选择器用于选通所述两目最大值运算模块与所述读写电路的连接通路;所述两目最大值运算模块用于获取所述第二子数据,并根据所述运算指令判断当前读取的所述第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中。在其中一个实施例中,所述两目最大值运算模块包括运算单元及与所述运算单元连接的结果输出单元;所述运算单元用于将当前读取的所述第一子数据与所述第二子数据进行对位比较,判断当前读取的所述第一子数据是否大于或等于第二子数据;所述结果输出单元用于当所述第一子数据大于或等于第二子数据时,将所述第一子数据作为所述当前比较结果;所述结果输出单元用于当判断所述第一子数据小于第二子数据时,将所述第二子数据作为所述当前比较结果。在其中一个实施例中,所述两目最大值运算模块还用于根据所述运算指令,确定所述第二源操作数为立即数或所述第二存储装置中存储的数据,若确定所述第二源操作数为立即数,则所述两目最大值运算模块复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;若确定所述第二源操作数为所述第二存储装置中存储的数据,则所述读写电路从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。在其中一个实施例中,所述运算电路包括主处理电路和至少一个的从处理电路,至少一个的所述从处理电路均连接至所述主处理电路;所述两目最大值运算模块置于所述主处理电路中。一种数据处理装置,所述装置包括:获取模块,用于获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;读取模块,用于根据数据读取容量及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;运算模块,用于根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于或等于所述第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中,之后,循环调用所述读取模块和所述运算模块,直至完成运算指令对应的运算操作。一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于或等于所述第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中;之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。上述数据处理方法、处理器、数据处理装置及存储介质,根据运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,然后根据运算指令获取第二子数据,并且判断当前读取的第一子数据是否大于或等于第二子数据,进而获得当前比较结果,并将当前比较结果存储于第一存储装置中,之后返回继续从第一存储装置中读取第一子数据,直至完成该运算指令对应的运算操作。处理器通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。对处理器的算术运算功能进一步扩展,通过对该第一存储装置实现独占访问,提高了原子操作期间的运算效率。附图说明图1为一个实施例中处理器的结构示意图;图2为一个实施例中运算模块的结构示意图;图3为另一个实施例中处理器的结构示意图;图4为另一个实施例中处理器的结构示意图;图5为另一个实施例中处理器的结构示意图;图6为一个实施例中数据处理方法的流程示意图;图7为另一个实施例中数据处理方法的流程示意图;图8为一个实施例中atomicmax_vec方法的流程示意图;图9为一个实施例中步骤s106的流程示意图;图10为另一个实施例中指令拆解方法的流程示意图;图11为一个实施例中数据处理装置的结构框图。具体实施方式为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。片外是指处理器外部,即片外存储装置是指设置在处理器外部的存储装置;片上是指处理器内部,即片上存储装置是指设置在处理器内部的存储装置。本申请提供的数据处理方法,可以应用于如图1所示的处理器1000。该处理器1000包括运算电路12、读写电路203以及第二存储装置201。该第二存储装置201可以是设置在处理器1000内部的缓存器和/或寄存器。该第二存储装置201可通过读写电路203连接至处理器1000外部设置的第一存储装置13。该第一存储装置13及第二存储装置201可以是非易失性存储器或易失性存储器,此处不做具体限定。该读写电路203可以是i/o电路。其中,该运算电路12以及读写电路203可分别与第二存储装置201连接,且读写电路203可连接第一存储装置13。第二存储装置201能够通过读写电路203与处理器1000外部的第一存储装置13连接。第二存储装置201可以通过读写电路203从第一存储装置13读取第一源操作数,并将第一源操作数传送至运算电路12进行运算。运算电路12可以将其获得的运算结果及中间运算结果存储于第二存储装置201中,第二存储装置201还可以通过读写电路203将运算结果写回第一存储装置13中。本申请实施例中,通过不断地将中间运算结果从第二存储装置201写回处理器1000外部的第一存储装置13,可以实现运算电路12对第一存储装置13的独占使用,从而可以保证运算的原子性及运算结果的准确性。其中,运算电路12用于接收运算指令,对该运算指令进行解析,并根据该运算指令实现相应的运算操作。可选地,该运算指令可以具有特定的指令格式,该运算电路可以对根据该运算指令的指令格式进行解析,获得该运算指令的指令类型、源操作数及操作码等指令信息,从而根据该运算指令实现相应的运算操作。可选地,本申请实施例中的运算指令可以是原子操作运算指令,如下表1所示,该运算指令的指令格式可以包括有指令类别name、指令类型op、第一源操作数、第二源操作数、目标操作数dst及操作码srcop等等。其中,指令类别name用于确定指令的类别(指令的类别包括原子操作运算指令和其他普通运算指令),即指令类别用于确定运算指令是否为原子操作运算指令。指令类型op用于确定运算指令的运算类型,运算类型用于表明该运算指令实现何种运算,以区分该运算的具体功能,例如,运算类型可以是累加运算、递减运算、最大值运算、最小值运算、逻辑与运算、逻辑或运算、逻辑异或运算、替换运算、交换运算等。操作码srcop用于配置该运算指令涉及的源操作数的个数。目标操作数dstaddr用于表示至少一个源操作数运算后获得的当前运算结果,具体地,该目标操作数dstaddr可以是指该当前比较结果的存储地址,该运算指令对应的运算结果可以存储在dstaddr对应的存储地址表示的存储空间内。第一源操作数和第二源操作数可以表示参与运算的数据,第一源操作数可以是存储在片外的第一存储装置13上的数据,即第一源操作数可以表示地址src0addr中存储的数据。第二源操作数可以表示立即数或者指令中的地址中存储的数据。进一步地,运算指令的指令格式还可以包括用于标识源操作数a是立即数还是地址的标识位src1vec以及用于标识源操作数b是立即数还是地址的标识位src2vec。具体地,src1vec为0时,表示源操作数a为立即数,src1vec为1时,表示源操作数a为地址中存储的数据;src2vec为0时,表示源操作数b为立即数,src2vec为1时,表示源操作数b为地址中存储的数据。更进一步地,该运算指令的指令格式还包括用于表示标识第一源操作数的数据大小datasize以及用于请求拆分,标识计算所述目标循环次数的数据流ioconfig。该运算指令的指令格式可以如下格式,如表1所示:其中,src0addr表示第一源操作数的地址,dstaddr表示目标操作数的存储地址。在其中一个实施例中,根据运算指令,将源操作数a或源操作数b作为第二源操作数。可选地,第二源操作数包括源操作数a(src1)、源操作数b(src2)、源操作a选定标识位、源操作数b选定标识位。具体地,当源操作数a选定标识位有效时,将源操作数a作为第二源操作数;当源操作数b选定标识位有效时,将源操作数b作为第二源操作数。当源操作数a选定标识位有效,且源操作数b选定标识位有效时,则源操作数a和源操作数b可以同时作为第二源操作数,此时,第二源操作数的数量为两个。进一步地,该操作码scrop的位宽可以包括3比特,其中2比特用于区分参加运算的源操作数的个数,1比特用于选择源操作数a(src1)和/或源操作数b(src2)作为第二源操作数参加运算。可参考表2:源操作数srcopsrc0000src0、src1010src0、src2011src0、src1、src2100当操作码scrop为“000”时,则表示运算指令的源操作数为1个,为第一源操作数src0。当操作码scrop为“010”时,则表示运算指令的源操作数为2个,包括第一源操作数src0和第二源操作数,且此时源操作数a选定标识位有效,第二源操作数为源操作数a(src1)。当操作码scrop为“011”时,则表示运算指令的源操作数为2个,包括第一源操作数src0和第二源操作数,且此时源操作数b选定标识位有效,第二源操作数为源操作数b(src2)。当操作码scrop为“100”时,则表示运算指令的源操作数为3个,包括第一源操作数src0、源操作数a(src1)以及源操作数b(src2)。本申请实施例中,可以默认第一源操作数src0始终有效。可选地,datatype表示数据类型,该指令支持但不限于以下几种数据类型:数据类型datatypeint16000uint16001int32010uint32011可选地,该运算指令可以包括算术运算指令,也可以包括逻辑运算指令:其中,算术运算指令可以包括:单目最大值运算指令atomicmax_scalar、单目最小值运算指令atomicmin_scalar、两目最大值运算指令atomicmax_vec、两目最小值运算指令atomicmin_vec、替换运算指令atomiccas、交换运算指令atomicexch、加法运算指令atomicadd、累加运算指令atomicinc及减法运算指令atomicdec。逻辑运算指令可以包括:逻辑与运算指令atomicand、逻辑或运算指令atomicor、逻辑异或运算指令atomicxor及逻辑非运算指令atomicnot。其中,单目最大值运算指令atomicmax_scalar,用于求取第一源操作数中多个第一子数据的最大值。单目最小值运算指令atomicmin_scalar,用于求取第一源操作数中多个第一子数据的最小值。两目最大值运算指令atomicmax_vec,用于求取第一源操作数以及第二源操作数的最大值。两目最小值运算指令atomicmin_vec,用于求取第一源操作数以及第二源操作数的最小值。加法运算指令atomicadd,用于将第一源操作数与第二源操作数相加。累加运算指令atomicinc,用于在第一源操作数与第二源操作数之间进行累加运算。减法运算指令atomicdec,用于在第一源操作数与第二源操作数之间进行减法运算。逻辑与运算指令atomicand,用于在第一源操作数以及第二源操作数之间进行与逻辑运算。逻辑或运算指令atomicor,用于在第一源操作数以及第二源操作数之间进行逻辑或运算。逻辑异或运算指令atomicxor,用于在第一源操作数以及第二源操作数之间进行逻辑异或运算。逻辑非运算指令atomicnot,用于在第一源操作数以及第二源操作数之间进行非运算。替换运算指令atomiccas,用于在第一源操作数、第二源操作数以及第三源操作数之间进行替换。交换运算指令atomicexch,用于在第一源操作数以及第二源操作数之间进行交换的运算指令。本申请实施例中,为保证运算的原子性,可以将该运算指令能够将同一运算操作划分为多次子运算操作实现,通过不断地向第一存储装置写回中间计算结果,实现第一存储装置的独占。具体地,第一源操作数包括至少一个第一子数据,运算电路12接收运算指令,根据运算指令向第一存储装置13发送读写请求,读写电路203按照数据读取方式,根据读写请求从第一存储装置13读取第一子数据,并存储至第二存储装置201中,运算电路12根据运算指令获取第二源操作数,执行运算操作,获得当前运算结果,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203将第二存储装置201的当前运算结果存储至第一存储装置13中。之后,运算电路12可以再次向第一存储装置13发送读写请求,以再次从第一存储装置13中读取第一子数据,循环多次执行运算操作,直至完成所述运算指令对应的运算操作。可选地,该处理器还可以包括计数器,该计数器可以连接至运算电路12,该计数器用于记录运算指令的目标循环次数。具体地,每当读写电路203将第二存储装置201的当前运算结果存储至第一存储装置13中之后,运算电路12可以控制计数器累加一次,再次向第一存储装置13发送读写请求,直至计数器从初始值累加至目标循环次数。本申请实施例中,该计数器的初始值可以是0,即当计数器从0累加至目标循环次数时,完成该运算指令的相应运算操作。或者,运算电路12可以控制计数器递减一次,再次向第一存储装置13发送读写请求,直至计数器从目标循环次数递减为初始值。本申请实施例中,该计数器的初始值可以是0,即当计数器从目标循环次数递减为0时,完成该运算指令的相应运算操作。进一步地,运算电路12可以设置有对应各个运算指令的运算模块。具体地,请参阅图2,该运算电路12可以包括两目最大值运算模块121、两目最小值运算模块122、逻辑与运算模块123、逻辑或运算模块124、逻辑异或运算模块125、交换运算模块126、替换运算模块127、单目最大值运算模块128、单目最小值运算模块129、加法运算模块130、累加运算模块131、减法运算模块132以及逻辑非运算模块133等。其中,两目最大值运算模块121用于实现上述的两目最大值运算指令atomicmax_vec的运算操作,即用于实现第一源操作数以及第二源操作数的最大值运算。两目最小值运算模块122用于实现上述两目最小值运算指令atomicmin_vec的运算操作,即用于实现第一源操作数以及第二源操作数的最小值运算。逻辑与运算模块123用于实现上述的逻辑与运算指令atomicand的运算操作,即用于实现第一源操作数以及第二源操作数的之间的逻辑与运算。逻辑或运算模块124用于实现上述的逻辑或运算指令atomicor的运算操作,即用于实现第一源操作数以及第二源操作数之间的逻辑或运算。逻辑异或运算模块125用于实现上述的逻辑异或运算指令atomicxor的运算操作,即用于实现第一源操作数以及第二源操作数之间的逻辑异或运算。交换运算模块126用于实现上述的交换运算指令atomicexch的运算操作,即用于现第一源操作数以及第二源操作数之间的交换运算。替换运算模块127用于实现上述的替换运算指令atomiccas的运算操作,即用于实现第一源操作数、第二源操作数以及第三源操作数之间的替换运算。单目最大值运算模块128用于实现上述的单目最大值运算指令atomicmax_scalar的运算操作,即用于实现第一源操作数中多个第一子数据的最大值运算。单目最小值运算模块129用于实现上述的单目最小值运算指令atomicmin_scalar的运算操作,即用于实现第一源操作数中多个第一子数据的最小值运算。加法运算模块130用于实现上述的加法运算指令atomicadd的运算操作,即用于实现第一源操作数与第二源操作数相加的运算。累加运算模块131用于实现上述的累加运算指令atomicinc的运算操作,即用于实现第一源操作数与第二源操作数之间进行累加的运算。减法运算模块132用于实现上述的减法运算指令atomicdec的运算操作,即用于实现第一源操作数与第二源操作数之间进行减法的运算。逻辑非运算模块133用于实现上述的逻辑非运算指令atomicnot的运算操作,即用于实现第一源操作数以及第二源操作数之间的逻辑非运算。可选地,各个运算模块可以包括运算单元以及与运算单元连接的结果输出单元。其中,运算单元用于执行具体的运算操作步骤,结果输出单元用于将运算操作步骤得出的结果作为当前运算结果。更进一步地,如图1和图2所示,该处理器还可以包括数据选择器14,数据选择器14连接在运算电路12和读写电路203之间。其中,数据选择器14用于分别选通运算电路12中各个运算模块与读写电路203的连接通路。例如,若运算指令为两目最大值运算指令atomicmax_vec时,数据选择器14用于选通两目最大值运算模块121与读写电路203的连接通路。此时,两目最大值运算模块121用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。若运算指令为两目最小值运算指令atomicmin_vec时,数据选择器14用于选通两目最小值运算模块122与读写电路203的连接通路。此时,两目最小值运算模块122用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否小等于第二子数据,将获得的当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。若运算指令为逻辑与运算指令atomicand时,数据选择器14用于选通逻辑与运算模块123与读写电路203的连接通路。此时,逻辑与运算模块123用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑与运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。若运算指令为逻辑与运算指令atomicor时,数据选择器14用于选通逻辑或运算模块124与读写电路203的连接通路。此时,逻辑或运算模块124用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑或运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。若运算指令为逻辑与运算指令atomicxor时,数据选择器14用于选通逻辑异或运算模块125与读写电路203的连接通路。此时,逻辑异或运算模块125用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑异或运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。若运算指令为替换运算指令atomiccas时,数据选择器14用于选通替换运算模块127与读写电路203的连接通路。此时,替换运算模块127用于获取第二子数据以及第三子数据,并根据运算指令将当前读取的第一子数据、第二子数据以及第三子数据进行替换运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。若运算指令为交换运算指令atomicexch时,数据选择器14用于选通交换运算模块126与读写电路203的连接通路。此时,交换运算模块126用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行交换运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。若运算指令为单目最大值运算指令atomicmax_scalar时,数据选择器14用于选通单目最大值运算模块128与读写电路203的连接通路。此时,单目最大值运算模块128用于将源操作数的子数据段中的n个子数据逐一进行比较,得到n个子数据中的最大值,并将该最大值作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。若运算指令为单目最小值运算指令atomicmin_scalar时,数据选择器14用于选通单目最小值运算模块129与读写电路203的连接通路。此时,单目最小值运算模块129用于将源操作数的子数据段中的n个子数据逐一进行比较,得到n个子数据中的最小值,并将该最小值作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。若运算指令为加法运算指令atomicadd时,数据选择器14用于选通加法运算模块130与读写电路203的连接通路。此时,加法运算模块130用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据相加得到当前运算结果,将当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。若运算指令为累加运算指令atomicinc时,数据选择器14用于选通累加运算模块131与读写电路203的连接通路。此时,累加运算模块131用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否大于或等于第二子数据,当第一子数据大于或等于第二子数据时,将第一子数据复位,并将复位后的第一子数据作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。若运算指令为减法运算指令atomicdec时,数据选择器14用于选通减法运算模块132与读写电路203的连接通路。此时,减法运算模块132用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储至第二存储装置201中;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。若运算指令为逻辑非运算指令atomicnot时,数据选择器14用于选通逻辑非运算模块133与读写电路203的连接通路。此时,逻辑非运算模块133用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑非运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。在一个实施例中,请继续参阅图3-图5,第二存储装置201与读写电路203可以封装为存储电路10。运算电路12包括主处理电路101和至少一个从处理电路102,至少一个从处理电路102均连接至主处理电路101,主处理电路101与分支处理电路103(一个或多个)连接,分支处理电路103与一个或多个从处理电路102连接;其中,分支处理电路103,用于执行转发主处理电路101与从处理电路102之间的数据或指令。其中,主处理电路101用于对源操作数执行前序处理以及与多个从处理电路之间传输数据以及运算指令;多个从处理电路102用于依据从主处理电路传输的数据以及运算指令并行执行中间运算得到多个中间结果,并将多个中间结果传输给主处理电路;主处理电路101用于对多个中间结果执行后续处理得到计算指令的计算结果。该主处理电路101可以包括上述两目最大值运算模块121、两目最小值运算模块122、逻辑与运算模块123、逻辑或运算模块124、逻辑异或运算模块125、替换运算模块126、交换运算模块127、单目最大值运算模块128、单目最小值运算模块129、加法运算模块130、累加运算模块131、减法运算模块132以及逻辑非运算模块133等。上述的数据选择器14可以连接在该主处理电路101和读写电路203之间。在一个实施例中,处理器还可以包括控制器电路11,该控制器电路11包括:指令缓存电路110、指令处理电路111和存储队列电路113。其中,指令缓存电路110,用于存储人工神经网络运算关联的计算指令。指令处理电路111,用于对计算指令解析得到多个运算指令。存储队列电路113,用于存储指令队列,该指令队列包括:按该队列的前后顺序待执行的多个运算指令或计算指令。进一步地,控制器电路11可以包括拆分粒度电路114、循环次数处理电路115以及数据读取容量计算电路116。其中,拆分粒度电路114连接循环次数处理电路115,循环次数处理电路115分别连接指令处理电路111以及数据读取容量计算电路116,数据读取容量计算电路116连接运算电路12,第二存储装置201能够通过读写电路203与处理器外部的第一存储装置13连接。其中,指令处理电路111用于获取运算指令,并根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小传送至循环次数处理电路115。拆分粒度电路114用于存储预设的拆分粒度。本申请实施例中,拆分粒度电路114可以是缓存(buffer)或第二存储装置中的一段存储空间,例如,该拆分粒度电路114可以是第二存储装置中指定地址区间对应的存储空间。循环次数处理电路115用于根据第一操作数大小以及预设的拆分粒度,得到目标循环次数,并将该目标循环次数传送至运算电路12。本申请实施例中,该循环次数处理电路115可以是计数器。数据读取容量计算电路116用于根据第一操作数大小以及预设的拆分粒度,得到数据读取容量,并将该数据读取容量传送至运算电路12。运算电路12用于根据运算指令向第一存储装置13发送读写请求,以从第一存储装置13中读取第一子数据,该第一子数据的大小等于该数据读取容量。之后,运算电路12可以根据读取的第一子数据和第二子数据进行运算,当前运算完成后,循环次数处理电路115将目标循环次数从初始值累加一次,再次向第一存储装置13发送读写请求,直至计数器从初始值累加至目标循环次数。本申请实施例中,该初始值可以是0,即直到当前循环次数从0累加至目标循环次数时,完成该运算指令的相应运算操作。或者,循环次数处理电路115将目标循环次数递减一次,再次向第一存储装置13发送读写请求,直至从目标循环次数递减为0。即直到当前循环次数递减为0时,完成该运算指令的相应运算操作。本实施例通过添加拆分粒度电路114、循环次数处理电路115以及数据读取容量计算电路116对数据进行拆分,使得处理的数据大小大于单时钟周期能容纳的访存带宽。请参阅图6或图7,当接收到运算指令后,该处理器可以进行相应的步骤:s100,获取运算指令。其中,该运算指令用于实现源操作数之间的运算,第一源操作数包括至少一个第一子数据。s200,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中。其中,数据读取容量表示每次读取的数据的数量,可以计算得到。第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。具体地,运算电路12获取运算指令之后,根据运算指令向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。s300,根据运算指令执行运算操作,将获得当前运算结果存储至第二存储装置以及第一存储装置中。具体地,运算电路12根据获取的运算指令,进行相应的运算操作,进而得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13中。s400,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。具体地,步骤s400可以包括:控制计数器累加一次或递减一次,之后,返回步骤s200,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。具体地,当上述运算指令为atomicmax_vec时,在一个实施例中,如图8所示的运算方法,该方法可以包括以下步骤:s102,获取运算指令。其中,运算指令用于实现第一源操作数以及第二源操作数之间的比较运算,第一源操作数包括至少一个第一子数据,第二源操作数包括至少一个第二子数据。具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的比较运算。s104,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。s106,根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至第二存储装置以及第一存储装置中。其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。具体地,运算电路12根据获取的运算指令,获取比较运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行比较,判断当前读取的第一子数据是否大于或等于第二子数据,进而得到当前比较结果,之后,将得到的当前比较结果存储在第二存储装置201中,再通过读写电路203将当前比较结果存储到第一存储装置13中。s108,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。具体地,步骤s108可以包括:控制计数器累加一次或递减一次,之后,返回步骤s104,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。上述运算方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器1000核访问该第一存储装置,保证了原子操作的原子性。在其中一个实施例中,请参阅图9,上述步骤s106还可以包括:s1062,将当前读取的第一子数据与第二子数据进行对位比较,判断当前读取的第一子数据是否大于或等于第二子数据。具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行比较,判断当前读取的第一子数据是否大于或等于第二子数据。当第一子数据大于或等于第二子数据时,执行s1064将第一子数据作为当前比较结果,当第一子数据小于第二子数据时,执行s1066将第二子数据作为当前比较结果。例如,当前读取的第一子数据以及第二子数据为多个,第一子数据集a={1,2,3,4,5,6,7,8},第二子数据集b={0,3,4,5,2,1,7,2},将a中的每一位第一子数据分别与b中对应位置的每一位第二子数据对应比较,即将a中的第一位第一子数据1与b中的第一位第二子数据0比较,显然1大于0,表示第一子数据大于第二子数据,此时将1作为比较结果;将a中的第二位2与b中的第二位3比较,显然2小于3,表示第一子数据小于第二子数据,此时将3作为比较结果,以此类推,将a中的第一子数据与b中的第二子数据比较完成后,得到当前比较结果为{1,3,4,5,5,6,7,8}。本实施例中通过将第一子数据与第二子数据进行对位比较,按照位置将第一子数据与第二子数据中最大的数据作为比较结果,存储在第一存储装置13中,完成了最大值的寻找。在另一个实施例中,请参阅图10,上述运算方法还可以包括以下步骤:s500,获取运算指令,根据运算指令解析出第一源操作数的数据大小。具体地,指令处理电路111获取到运算指令,根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小发送给循环次数处理电路115。s600,根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量。具体地,预设的拆分粒度存储在拆分粒度电路114中,可以为片上的静态存储器中的某个存储空间。循环次数处理电路115接收到第一源操作数的数据大小,根据第一源操作数的数据大小以及预设的拆分粒度,计算得到目标循环次数。数据读取容量计算电路116根据循环次数处理电路115发送的循环次数、指令处理电路111发送的第一源操作数的数据大小以及预设的拆分粒度,计算得到数据读取容量,并将数据读取容量以及目标循环次数发送给运算电路12。可选地,循环次数处理电路115可以按照如下公式计算目标循环次数:其中,count表示为目标循环次数,datasize表示为第一源操作数的数据大小,拆分粒度即为预设的拆分粒度。本申请实施例中,将datasize除以预设的拆分粒度的商值向上取整,获得目标循环次数count。数据读取容量计算电路116可以按照如下公式计算数据读取容量:datarealsize=min{未处理数据大小,拆分粒度}其中,datarealsize表示数据读取容量,拆分粒度即为预设的拆分粒度,未处理数据大小表示第一源操作数的数据大小减去数据读取容量以后剩余的数据大小。例如,控制器电路11根据运算指令解析出第一源操作数的数据大小为1000byte,预设的拆分粒度为512byte,可以得到循环次数为2,两次的数据读取容量分别为512byte和488byte。在其中一个实施例中,根据运算指令的指令格式,将源操作数a或源操作数b作为第二源操作数。具体地,可参照表2中srcop的格式,当接收到的运算指令中srcop对应为010时,此时表示源操作数a有效,则将源操作数a作为第二源操作数;当接收到的运算指令中srcop对应为011时,此时表示源操作数b有效,则将源操作数b作为第二源操作数;当接收到的运算指令中srcop对应为100时,此时表示源操作数a有效以及源操作数b有效,则将源操作数a作为第二源操作数,将源操作数b作为第三源操作数。本实施例中通过指令格式中操作码srcop的格式,选取源操作数a或源操作数b作为第二源操作数进行选择。在其中一个实施例中,预设的数据读取的方式可以包括:第一次从第一存储装置13中读取第一子数据后,将当前运算结果存储于第一存储装置13中,之后每次将当前运算结果存储于第一存储装置13中后,将上一次读取的第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。本申请实施例中,每次将当前运算结果存储于第一存储装置13中后,则对第一子数据对应的存储地址做一次地址偏移,且地址偏移量等于上一次读取的第一子数据所占用的存储地址。按照此方法,根据运算指令,从第一存储装置13中读取第一子数据后,并将当前读取的第一子数据存储至第二存储装置201。例如,第一源操作数的数据大小为1000byte,该1000byte所占用的存储地址为0~256;第一次读取的第一子数据是512byte,该第一子数据的存储地址可以是0~128;其中,该第一子数据的起始地址为0,结束地址为128。第二次读取数据时,将上一次读取的第一子数据的结束地址的下一位作为当前读取的第一子数据的起始地址,即第二次读取的第一子数据对应的存储地址可以是129~256。本实施例中,通过对第一源操作数进行循环分段读取,将上一次读取的第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址,实现了对第一存储装置13的不断读取,实现独占功能。在其中一个实施例中,当前运算结果存储于第一存储装置13中时,当前运算结果的存储地址与当前读取的第一子数据的存储地址一致。本实施例中,将当前运算结果存储在读取的第一子数据的位置,保证了分段读取的数据的准确性。在其中一个实施例中,运算电路12接收到运算指令以后,能够根据运算指令,确定出第二源操作数为立即数或第二存储装置201中存储的数据。具体地,当根据该运算指令确定第二源操作数为立即数时,运算电路12向第二存储装置201发送读写请求,则读写电路203将该立即数发送给运算电路12,运算电路12复制该立即数,复制后获得的多个立即数作为第二子数据,第二子数据的数量与当前读取的第一子数据的数量相等。例如,当前读取的第一子数据的数量为3byte,确定出第二源操作数为立即数时,可以为标量,假设为2,此时复制该立即数2,复制3byte的立即数2,即得到第二子数据为{2,2,2}。当确定第二源操作数为第二存储装置201中存储的数据时,运算电路12向第二存储装置201发送读写请求,则读写电路203从第二存储装置201的预设存储地址中读取第二子数据,当前读取的第二子数据的数量与第一子数据的数量相等。具体可参见上文的描述。应该理解的是,虽然图6-10的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且图6-10中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。在一个实施例中,如图11所示,提供了一种运算装置,包括:获取模块100、读取模块200、运算模块300和计数模块400,其中:获取模块100,用于获取运算指令。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中。运算模块300,用于根据运算指令执行运算操作,获得当前运算结果,并将当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和运算模块300,直至完成运算指令对应的运算操作。进一步地,该运算装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、运算模块300和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。关于运算装置的具体限定可以参见上文中对于运算方法的限定,在此不再赘述。上述运算装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。当上述运算指令为atomicmax_vec时,该运算模块300可以包括两目最大值运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一数据包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。两目最大值运算模块301,用于根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和两目最大值运算模块301,直至完成运算指令对应的运算操作。进一步地,该运算装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、两目最大值运算模块301和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:获取运算指令,其中,该运算指令用于实现源操作数之间的运算,第一源操作数包括第一子数据。根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中;其中,第一存储装置13片外存储装置,第二存储装置201为片上存储装置。根据运算指令执行运算操作,将获得当前运算结果存储至第二存储装置以及第一存储装置中。之后,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。应当清楚的是,本申请实施例中的计算机程序被处理器执行时实现的步骤,与上述实施例中的方法的各个步骤的执行过程一致,具体可参见上文的描述,此处不再赘述。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。当前第1页1 2 3 
技术特征:1.一种数据处理方法,其特征在于,所述方法包括:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于或等于所述第二子数据,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据所述运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。
2.根据权利要求1所述的数据处理方法,其特征在于,所述根据所述运算指令判断当前读取的所述第一子数据是否大于或等于所述第二子数据,获得当前比较结果的步骤,包括:
将当前读取的所述第一子数据与所述第二子数据进行对位比较,判断当前读取的所述第一子数据是否大于或等于所述第二子数据;
当所述第一子数据大于或等于所述第二子数据时,将所述第一子数据作为所述当前比较结果;
当判断所述第一子数据小于所述第二子数据时,将所述第二子数据作为所述当前比较结果。
3.根据权利要求1或2所述的运算方法,其特征在于,所述第二源操作数为立即数或所述第二存储装置中存储的数据,所述方法还包括:
若所述第二源操作数为立即数,则复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
4.根据权利要求3所述的数据处理方法,其特征在于,所述方法还包括如下步骤:
根据所述运算指令,将所述源操作数a或所述源操作数b作为所述第二源操作数。
5.根据权利要求1所述的数据处理方法,其特征在于,所述按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,包括:
每当将所述当前比较结果存储于所述第一存储装置中之后,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。
6.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
所述当前比较结果存储于所述第一存储装置中时,所述当前比较结果的存储地址与所述当前读取的第一子数据的存储地址一致。
7.根据权利要求1所述的数据处理方法,其特征在于,每当将所述当前比较结果存储于所述第一存储装置中之后,所述方法还包括如下步骤:
控制计数器累加一次或递减一次,之后,返回根据所述运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。
8.根据权利要求7所述的数据处理方法,其特征在于,所述方法还包括:
根据所述运算指令,获得所述第一源操作数的数据大小;
根据所述第一源操作数的数据大小以及预设的拆分粒度,得到所述目标循环次数。
9.根据权利要求1所述的数据处理方法,其特征在于,
所述运算指令的指令格式,包括指令类别、指令类型、第一源操作数、第二源操作数、目标操作数及操作码;
所述指令类别用于确定所述运算指令是否为原子操作运算指令;
所述指令类型用于确定所述运算指令的运算类型;
所述操作码用于配置源操作数的个数;
所述第一源操作数和所述第二源操作数分别用于表示参与运算的数据;
所述目标操作数用于表示所述当前比较结果。
10.一种处理器,其特征在于,所述处理器包括运算电路、读写电路以及与所述运算电路邻近设置的第二存储装置,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述运算电路用于获取运算指令,根据所述运算指令向所述第一存储装置发送读写请求;
所述运算指令用于实现第一源操作数和第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
所述读写电路用于根据所述读写请求,按照预设的数据读取方式,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路用于获取所述第二子数据,并根据所述运算指令判断当前读取的所述第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作。
11.根据权利要求10所述的处理器,其特征在于,所述处理器还包括数据选择器,所述运算电路包括两目最大值运算模块,所述数据选择器连接在所述运算电路和所述读写电路之间,所述数据选择器用于选通所述两目最大值运算模块与所述读写电路的连接通路;
所述两目最大值运算模块用于获取所述第二子数据,并根据所述运算指令判断当前读取的所述第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
12.根据权利要求11所述的处理器,其特征在于,所述两目最大值运算模块包括运算单元及与所述运算单元连接的结果输出单元;
所述运算单元用于将当前读取的所述第一子数据与所述第二子数据进行对位比较,判断当前读取的所述第一子数据是否大于或等于第二子数据;
所述结果输出单元用于当所述第一子数据大于或等于第二子数据时,将所述第一子数据作为所述当前比较结果;
所述结果输出单元用于当判断所述第一子数据小于第二子数据时,将所述第二子数据作为所述当前比较结果。
13.根据权利要求11所述的处理器,其特征在于,
所述两目最大值运算模块还用于根据所述运算指令,确定所述第二源操作数为立即数或所述第二存储装置中存储的数据,
若确定所述第二源操作数为立即数,则所述两目最大值运算模块复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若确定所述第二源操作数为所述第二存储装置中存储的数据,则所述读写电路从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
14.根据权利要求10-13任一项所述的处理器,其特征在于,所述运算电路包括主处理电路和至少一个的从处理电路,至少一个的所述从处理电路均连接至所述主处理电路;
所述两目最大值运算模块置于所述主处理电路中。
15.一种数据处理装置,其特征在于,所述装置包括:
获取模块,用于获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
读取模块,用于根据数据读取容量及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
运算模块,用于根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于或等于所述第二子数据,将获得的当前比较结果存储至所述第二存储装置以及所述第一存储装置中,之后,循环调用所述读取模块、所述运算模块和所述计数模块,直至完成所述运算指令对应的运算操作。
16.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至9中任一项所述的方法的步骤。
技术总结本申请涉及一种数据处理方法、处理器、数据处理装置及存储介质。所述方法包括:获取运算指令,根据运算指令,从第一存储装置中读取第一子数据,将当前读取的第一子数据存储至第二存储装置中,根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于或等于第二子数据,获得当前比较结果,将当前比较结果存储于第一存储装置中,返回继续从第一存储装置中读取第一子数据,直至完成运算指令对应的运算操作。通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对第一存储装置实现独占访问,避免其它的处理器核访问第一存储装置,保证原子操作的原子性。
技术研发人员:不公告发明人
受保护的技术使用者:上海寒武纪信息科技有限公司
技术研发日:2018.11.30
技术公布日:2020.06.09