CN111258640B - 数据处理方法、处理器、数据处理装置及存储介质 - Google Patents
数据处理方法、处理器、数据处理装置及存储介质 Download PDFInfo
- Publication number
- CN111258640B CN111258640B CN201811456528.4A CN201811456528A CN111258640B CN 111258640 B CN111258640 B CN 111258640B CN 201811456528 A CN201811456528 A CN 201811456528A CN 111258640 B CN111258640 B CN 111258640B
- Authority
- CN
- China
- Prior art keywords
- storage device
- data
- subdata
- source operand
- instruction
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本申请涉及一种数据处理方法、处理器、数据处理装置及存储介质,所述方法包括:获取运算指令,根据运算指令,从第一存储装置中读取第一子数据,将当前读取的第一子数据存储至第二存储装置中,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑或运算,获得当前运算结果,将当前运算结果存储于第一存储装置中,返回继续从第一存储装置中读取第一子数据,直至完成该运算指令对应的运算操作。通过循环读取数据进行运算,将每次循环的运算结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。
Description
技术领域
本申请涉及数据处理技术领域,特别是涉及一种数据处理方法、处理器、数据处理装置及存储介质。
背景技术
原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换(例如共享变量i执行累加,非原子操作情况下多个核同时i++的结果会出错)。在多核处理器***当中,多个处理器核共享同一块存储空间,通常的数据传输技术可能无法保证原子性,即同一时间可能有多个处理器核访问同一地址。
在实际程序当中,运算结果存储在一个存储空间内,该存储空间具有一定的地址范围,由于该存储空间可能在运算完成之前被其他处理器核访问,传统的做法是先将该存储空间的数据读到存储单元,然后将运算结果存在该存储单元,指令运算结束之后将该存储单元的结果写回到该存储空间。然而,如果运算期间有其它的处理器核访问该存储空间,就会得到一个错误的结果,破坏这次累加的原子性。
发明内容
基于此,有必要针对上述技术问题,提供一种能够实现原子操作期间单独访问片外存储空间的数据处理方法、处理器、数据处理装置及存储介质。
一种数据处理方法,所述方法包括:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据所述运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。
在其中一个实施例中,将当前读取的所述第一子数据与所述第二子数据进行对位逻辑或运算;
将每一位所述第一子数据与所述第二子数据进行逻辑或运算的结果作为所述当前运算结果。
在其中一个实施例中,所述第二源操作数为立即数或所述第二存储装置中存储的数据,所述方法还包括:
若所述第二源操作数为立即数,则复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
在其中一个实施例中,根据所述运算指令,将所述源操作数A或所述源操作数B作为所述第二源操作数。
在其中一个实施例中,每当将所述当前运算结果存储于所述第一存储装置中之后,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。
在其中一个实施例中,所述当前运算结果存储于所述第一存储装置中时,所述当前运算结果的存储地址与所述当前读取的第一子数据的存储地址一致。
在其中一个实施例中,控制计数器累加一次或递减一次,之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述计数器从初始值累加至所述目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。
在其中一个实施例中,根据所述运算指令,获得所述第一源操作数的数据大小;
根据所述第一源操作数的数据大小以及预设的拆分粒度,得到所述目标循环次数。
在其中一个实施例中,所述运算指令的指令格式,包括指令类别、指令类型、第一源操作数、第二源操作数、目标操作数及操作码;
所述指令类别用于确定所述运算指令是否为原子操作运算指令;
所述指令类型用于确定所述运算指令的运算类型;
所述操作码用于配置源操作数的个数;
所述第一源操作数和所述第二源操作数分别用于表示参与运算的数据;
所述目标操作数用于表示所述当前运算结果。
一种处理器,所述处理器包括运算电路、读写电路以及与所述运算电路邻近设置的第二存储装置,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述运算电路用于获取运算指令,根据所述运算指令向所述第一存储装置发送读写请求;
所述运算指令用于实现第一源操作数和第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
所述读写电路用于根据所述读写请求,按照预设的数据读取方式,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路用于获取所述第二子数据,并根据所述运算指令将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作。
在其中一个实施例中,所述处理器还包括数据选择器,所述运算电路包括逻辑或运算模块,所述数据选择器连接在所述运算电路和所述读写电路之间,所述数据选择器用于选通所述逻辑或运算模块与所述读写电路的连接通路;
所述逻辑与运算模块用于获取所述第二子数据,并根据所述运算指令将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中。
在其中一个实施例中,所述逻辑或运算模块包括运算单元及与所述运算单元连接的结果输出单元;
所述运算单元用于将所述当前读取的第一子数据与所述第二子数据进行对位逻辑或运算;
所述结果输出单元用于将每一位所述第一子数据与所述第二子数据进行逻辑或运算的结果作为当前运算结果。
在其中一个实施例中,所述逻辑或运算模块还用于根据所述运算指令,确定所述第二源操作数为立即数或所述第二存储装置中存储的数据;
若确定所述第二源操作数为立即数,则所述逻辑或运算模块复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若确定所述第二源操作数为所述第二存储装置中存储的数据,则所述读写电路从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
在其中一个实施例中,所述运算电路包括主处理电路和至少一个从处理电路,至少一个所述从处理电路均连接至所述主处理电路;
所述逻辑或运算模块置于所述主处理电路中。
一种数据处理装置,所述装置包括:
获取模块,用于获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
读取模块,用于根据数据读取容量及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
运算模块,用于根据所述运算指令获取所述第二子数据,将当前读取的所述第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中,之后,循环调用所述读取模块、所述运算模块和所述计数模块,直至完成所述运算指令对应的运算操作。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据所述运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。
上述数据处理方法、处理器、数据处理装置及存储介质,根据运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,然后根据运算指令获取第二子数据,并且将当前读取的第一子数据与第二子数据进行逻辑或运算,进而获得当前运算结果,并将当前运算结果存储于第一存储装置中,之后返回继续从第一存储装置中读取第一子数据,直至完成该运算指令对应的运算操作。处理器通过循环读取数据进行运算,将每次循环的运算结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。对处理器的算术运算功能进一步扩展,通过对该第一存储装置实现独占访问,提高了原子操作期间的运算效率。
附图说明
图1为一个实施例中处理器的结构示意图;
图2为一个实施例中运算模块的结构示意图;
图3为另一个实施例中处理器的结构示意图;
图4为另一个实施例中处理器的结构示意图;
图5为另一个实施例中处理器的结构示意图;
图6为一个实施例中数据处理方法的流程示意图;
图7为另一个实施例中数据处理方法的流程示意图;
图8为一个实施例中Atomic OR方法的流程示意图;
图9为一个实施例中步骤S406的流程示意图;
图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及操作码Src Op等等。
其中,指令类别Name用于确定指令的类别(指令的类别包括原子操作运算指令和其他普通运算指令),即指令类别用于确定运算指令是否为原子操作运算指令。指令类型Op用于确定运算指令的运算类型,运算类型用于表明该运算指令实现何种运算,以区分该运算的具体功能,例如,运算类型可以是累加运算、递减运算、最大值运算、最小值运算、逻辑与运算、逻辑或运算、逻辑异或运算、替换运算、交换运算等。操作码Src Op用于配置该运算指令涉及的源操作数的个数。目标操作数Dst addr用于表示至少一个源操作数运算后获得的当前运算结果,具体地,该目标操作数Dst addr可以是指该当前比较结果的存储地址,该运算指令对应的运算结果可以存储在Dst addr对应的存储地址表示的存储空间内。第一源操作数和第二源操作数可以表示参与运算的数据,第一源操作数可以是存储在片外的第一存储装置13上的数据,即第一源操作数可以表示地址Src0addr中存储的数据。第二源操作数可以表示立即数或者指令中的地址中存储的数据。
进一步地,运算指令的指令格式还可以包括用于标识源操作数A是立即数还是地址的标识位Src1vec以及用于标识源操作数B是立即数还是地址的标识位Src2vec。
具体地,Src1vec为0时,表示源操作数A为立即数,Src1vec为1时,表示源操作数A为地址中存储的数据;Src2vec为0时,表示源操作数B为立即数,Src2vec为1时,表示源操作数B为地址中存储的数据。
更进一步地,该运算指令的指令格式还包括用于表示标识第一源操作数的数据大小Data size以及用于请求拆分,标识计算所述目标循环次数的数据流IO config。
该运算指令的指令格式可以如下格式,如表1所示:
其中,Src0addr表示第一源操作数的地址,Dst addr表示目标操作数的存储地址。
在其中一个实施例中,根据运算指令,将源操作数A或源操作数B作为第二源操作数。
可选地,第二源操作数包括源操作数A(Src1)、源操作数B(Src2)、源操作A选定标识位、源操作数B选定标识位。具体地,当源操作数A选定标识位有效时,将源操作数A作为第二源操作数;当源操作数B选定标识位有效时,将源操作数B作为第二源操作数。当源操作数A选定标识位有效,且源操作数B选定标识位有效时,则源操作数A和源操作数B可以同时作为第二源操作数,此时,第二源操作数的数量为两个。进一步地,该操作码Scr Op的位宽可以包括3比特,其中2比特用于区分参加运算的源操作数的个数,1比特用于选择源操作数A(Src1)和/或源操作数B(Src2)作为第二源操作数参加运算。可参考表2:
源操作数 | Src Op |
Src0 | 000 |
Src0、Src1 | 010 |
Src0、Src2 | 011 |
Src0、Src1、Src2 | 100 |
当操作码Scr Op为“000”时,则表示运算指令的源操作数为1个,为第一源操作数Src0。当操作码Scr Op为“010”时,则表示运算指令的源操作数为2个,包括第一源操作数Src0和第二源操作数,且此时源操作数A选定标识位有效,第二源操作数为源操作数A(Src1)。当操作码Scr Op为“011”时,则表示运算指令的源操作数为2个,包括第一源操作数Src0和第二源操作数,且此时源操作数B选定标识位有效,第二源操作数为源操作数B(Src2)。当操作码Scr Op为“100”时,则表示运算指令的源操作数为3个,包括第一源操作数Src0、源操作数A(Src1)以及源操作数B(Src2)。
本申请实施例中,可以默认第一源操作数Src0始终有效。
可选地,Data Type表示数据类型,该指令支持但不限于以下几种数据类型:
数据类型 | Data Type |
Int16 | 000 |
Uint16 | 001 |
Int32 | 010 |
Uint32 | 011 |
可选地,该运算指令可以包括算术运算指令,也可以包括逻辑运算指令:其中,算术运算指令可以包括:单目最大值运算指令Atomic MAX_SCALAR、单目最小值运算指令Atomic MIN_SCALAR、两目最大值运算指令Atomic MAX_VEC、两目最小值运算指令AtomicMIN_VEC、替换运算指令Atomic CAS、交换运算指令Atomic EXCH、加法运算指令AtomicADD、累加运算指令Atomic INC及减法运算指令Atomic DEC。逻辑运算指令可以包括:逻辑与运算指令Atomic AND、逻辑或运算指令Atomic OR、逻辑异或运算指令Atomic XOR及逻辑非运算指令Atomic NOT。
其中,单目最大值运算指令Atomic MAX_SCALAR,用于求取第一源操作数中多个第一子数据的最大值。
单目最小值运算指令Atomic MIN_SCALAR,用于求取第一源操作数中多个第一子数据的最小值。
两目最大值运算指令Atomic MAX_VEC,用于求取第一源操作数以及第二源操作数的最大值。
两目最小值运算指令Atomic MIN_VEC,用于求取第一源操作数以及第二源操作数的最小值。
加法运算指令Atomic ADD,用于将第一源操作数与第二源操作数相加。
累加运算指令Atomic INC,用于在第一源操作数与第二源操作数之间进行累加运算。
减法运算指令Atomic DEC,用于在第一源操作数与第二源操作数之间进行减法运算。
逻辑与运算指令Atomic AND,用于在第一源操作数以及第二源操作数之间进行与逻辑运算。
逻辑或运算指令Atomic OR,用于在第一源操作数以及第二源操作数之间进行逻辑或运算。
逻辑异或运算指令Atomic XOR,用于在第一源操作数以及第二源操作数之间进行逻辑异或运算。
逻辑非运算指令Atomic NOT,用于在第一源操作数以及第二源操作数之间进行非运算。
替换运算指令Atomic CAS,用于在第一源操作数、第二源操作数以及第三源操作数之间进行替换。
交换运算指令Atomic EXCH,用于在第一源操作数以及第二源操作数之间进行交换的运算指令。
本申请实施例中,为保证运算的原子性,可以将该运算指令能够将同一运算操作划分为多次子运算操作实现,通过不断地向第一存储装置写回中间计算结果,实现第一存储装置的独占。
具体地,第一源操作数包括至少一个第一子数据,运算电路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用于实现上述的两目最大值运算指令Atomic MAX_VEC的运算操作,即用于实现第一源操作数以及第二源操作数的最大值运算。
两目最小值运算模块122用于实现上述两目最小值运算指令Atomic MIN_VEC的运算操作,即用于实现第一源操作数以及第二源操作数的最小值运算。
逻辑与运算模块123用于实现上述的逻辑与运算指令Atomic AND的运算操作,即用于实现第一源操作数以及第二源操作数的之间的逻辑与运算。
逻辑或运算模块124用于实现上述的逻辑或运算指令Atomic OR的运算操作,即用于实现第一源操作数以及第二源操作数之间的逻辑或运算。
逻辑异或运算模块125用于实现上述的逻辑异或运算指令Atomic XOR的运算操作,即用于实现第一源操作数以及第二源操作数之间的逻辑异或运算。
交换运算模块126用于实现上述的交换运算指令Atomic EXCH的运算操作,即用于现第一源操作数以及第二源操作数之间的交换运算。
替换运算模块127用于实现上述的替换运算指令Atomic CAS的运算操作,即用于实现第一源操作数、第二源操作数以及第三源操作数之间的替换运算。
单目最大值运算模块128用于实现上述的单目最大值运算指令Atomic MAX_SCALAR的运算操作,即用于实现第一源操作数中多个第一子数据的最大值运算。
单目最小值运算模块129用于实现上述的单目最小值运算指令Atomic MIN_SCALAR的运算操作,即用于实现第一源操作数中多个第一子数据的最小值运算。
加法运算模块130用于实现上述的加法运算指令Atomic ADD的运算操作,即用于实现第一源操作数与第二源操作数相加的运算。
累加运算模块131用于实现上述的累加运算指令Atomic INC的运算操作,即用于实现第一源操作数与第二源操作数之间进行累加的运算。
减法运算模块132用于实现上述的减法运算指令Atomic DEC的运算操作,即用于实现第一源操作数与第二源操作数之间进行减法的运算。
逻辑非运算模块133用于实现上述的逻辑非运算指令Atomic NOT的运算操作,即用于实现第一源操作数以及第二源操作数之间的逻辑非运算。
可选地,各个运算模块可以包括运算单元以及与运算单元连接的结果输出单元。其中,运算单元用于执行具体的运算操作步骤,结果输出单元用于将运算操作步骤得出的结果作为当前运算结果。
更进一步地,如图1和图2所示,该处理器还可以包括数据选择器14,数据选择器14连接在运算电路12和读写电路203之间。其中,数据选择器14用于分别选通运算电路12中各个运算模块与读写电路203的连接通路。例如,若运算指令为两目最大值运算指令AtomicMAX_VEC时,数据选择器14用于选通两目最大值运算模块121与读写电路203的连接通路。此时,两目最大值运算模块121用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。
若运算指令为两目最小值运算指令Atomic MIN_VEC时,数据选择器14用于选通两目最小值运算模块122与读写电路203的连接通路。此时,两目最小值运算模块122用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否小等于第二子数据,将获得的当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。
若运算指令为逻辑与运算指令Atomic AND时,数据选择器14用于选通逻辑与运算模块123与读写电路203的连接通路。此时,逻辑与运算模块123用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑与运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。
若运算指令为逻辑与运算指令Atomic OR时,数据选择器14用于选通逻辑或运算模块124与读写电路203的连接通路。此时,逻辑或运算模块124用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑或运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。
若运算指令为逻辑与运算指令Atomic XOR时,数据选择器14用于选通逻辑异或运算模块125与读写电路203的连接通路。此时,逻辑异或运算模块125用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行逻辑异或运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。
若运算指令为替换运算指令Atomic CAS时,数据选择器14用于选通替换运算模块127与读写电路203的连接通路。此时,替换运算模块127用于获取第二子数据以及第三子数据,并根据运算指令将当前读取的第一子数据、第二子数据以及第三子数据进行替换运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。
若运算指令为交换运算指令Atomic EXCH时,数据选择器14用于选通交换运算模块126与读写电路203的连接通路。此时,交换运算模块126用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据进行交换运算,将获得的当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。
若运算指令为单目最大值运算指令Atomic MAX_SCALAR时,数据选择器14用于选通单目最大值运算模块128与读写电路203的连接通路。此时,单目最大值运算模块128用于将源操作数的子数据段中的N个子数据逐一进行比较,得到N个子数据中的最大值,并将该最大值作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。
若运算指令为单目最小值运算指令Atomic MIN_SCALAR时,数据选择器14用于选通单目最小值运算模块129与读写电路203的连接通路。此时,单目最小值运算模块129用于将源操作数的子数据段中的N个子数据逐一进行比较,得到N个子数据中的最小值,并将该最小值作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。
若运算指令为加法运算指令Atomic ADD时,数据选择器14用于选通加法运算模块130与读写电路203的连接通路。此时,加法运算模块130用于获取第二子数据,并根据运算指令将当前读取的第一子数据与第二子数据相加得到当前运算结果,将当前运算结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前运算结果存储至第一存储装置13中。
若运算指令为累加运算指令Atomic INC时,数据选择器14用于选通累加运算模块131与读写电路203的连接通路。此时,累加运算模块131用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否大于或等于第二子数据,当第一子数据大于或等于第二子数据时,将第一子数据复位,并将复位后的第一子数据作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。
若运算指令为减法运算指令Atomic DEC时,数据选择器14用于选通减法运算模块132与读写电路203的连接通路。此时,减法运算模块132用于获取第二子数据,并根据运算指令判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储至第二存储装置201中;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果存储至第二存储装置201中,通过读写电路203和数据选择器14将第二存储装置201的当前比较结果存储至第一存储装置13中。
若运算指令为逻辑非运算指令Atomic NOT时,数据选择器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中读取第一子数据。
具体地,当上述运算指令为Atomic OR时,如图8所示的运算方法,可以包括以下步骤:
S402,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算。
S404,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S406,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑或运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行逻辑或运算,进而得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
S408,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S408可以包括:控制计数器累加一次或递减一次,之后,返回步骤S404,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
在其中一个实施例中,请参阅图9,上述步骤S406还可以包括:
S4062,将当前读取的第一子数据与第二子数据进行对位逻辑或运算。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行逻辑或运算。
S4064,将每一位第一子数据与第二子数据进行逻辑或运算的结果作为当前运算结果。
具体地,将每一位的第一子数据与第二子数据进行逻辑或运算后,每一位得到的结果作为当前运算结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据集a={1,0,0,1,1,0,1,0},第二子数据集b={0,0,1,0,1,0,1,0},将a中的每一位第一子数据分别与b中对应位置的每一位第二子数据对应进行逻辑或运算,即将a中的第一位第一子数据1与b中的第一位第二子数据0进行逻辑或运算,此时运算结果为1;将a中的第二位0与b中的第二位0进行逻辑或运算,此时运算结果为0,以此类推,将a中的第一子数据与b中的第二子数据运算完成后,得到当前运算结果为{1,0,1,1,1,0,1,0}。
本实施例中通过将第一子数据与第二子数据进行对位或运算,按照位置将第一子数据与第二子数据进行运算得到当前运算结果,存储在第一存储装置11中。
在另一个实施例中,请参阅图10,上述运算方法还可以包括以下步骤:
S500,获取运算指令,根据运算指令解析出第一源操作数的数据大小。
具体地,指令处理电路111获取到运算指令,根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小发送给循环次数处理电路115。
S600,根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量。
具体地,预设的拆分粒度存储在拆分粒度电路114中,可以为片上的静态存储器中的某个存储空间。循环次数处理电路115接收到第一源操作数的数据大小,根据第一源操作数的数据大小以及预设的拆分粒度,计算得到目标循环次数。数据读取容量计算电路116根据循环次数处理电路115发送的循环次数、指令处理电路111发送的第一源操作数的数据大小以及预设的拆分粒度,计算得到数据读取容量,并将数据读取容量以及目标循环次数发送给运算电路12。
可选地,循环次数处理电路115可以按照如下公式计算目标循环次数:
其中,Count表示为目标循环次数,data size表示为第一源操作数的数据大小,拆分粒度即为预设的拆分粒度。本申请实施例中,将data size除以预设的拆分粒度的商值向上取整,获得目标循环次数Count。
数据读取容量计算电路116可以按照如下公式计算数据读取容量:
data real size=min{未处理数据大小,拆分粒度}
其中,data real size表示数据读取容量,拆分粒度即为预设的拆分粒度,未处理数据大小表示第一源操作数的数据大小减去数据读取容量以后剩余的数据大小。
例如,控制器电路11根据运算指令解析出第一源操作数的数据大小为1000byte,预设的拆分粒度为512byte,可以得到循环次数为2,两次的数据读取容量分别为512byte和488byte。
在其中一个实施例中,根据运算指令的指令格式,将源操作数A或源操作数B作为第二源操作数。
当根据运算指令可以确定有三个源操作数参与运算时,据运算指令的指令格式,将源操作数A作为第二源操作数,将源操作数B作为第三源操作数。
具体地,可参照表2中Src Op的格式,当接收到的运算指令中Src Op对应为010时,此时表示源操作数A有效,则将源操作数A作为第二源操作数;当接收到的运算指令中SrcOp对应为011时,此时表示源操作数B有效,则将源操作数B作为第二源操作数;当接收到的运算指令中Src Op对应为100时,此时表示源操作数A有效以及源操作数B有效,则将源操作数A作为第二源操作数,将源操作数B作为第三源操作数。
本实施例中通过指令格式中操作码Src Op的格式,选取源操作数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。
关于运算装置的具体限定可以参见上文中对于运算方法的限定,在此不再赘述。上述运算装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
当上述运算指令为Atomic OR时,该运算模块300可以包括逻辑或运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。逻辑或运算模块304,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑或运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和逻辑或运算模块304,直至完成运算指令对应的运算操作。进一步地,该运算装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、逻辑或运算模块304和计数模块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)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (15)
1.一种数据处理方法,其特征在于,所述方法包括:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
控制计数器累加一次或递减一次,之后,返回根据所述运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,直至完成所述运算指令对应的运算操作。
2.根据权利要求1所述的数据处理方法,其特征在于,所述根据所述运算指令获取所述第二子数据,将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,获得当前运算结果的步骤,包括:
将当前读取的所述第一子数据与所述第二子数据进行对位逻辑或运算;
将每一位所述第一子数据与所述第二子数据进行逻辑或运算的结果作为所述当前运算结果。
3.根据权利要求1或2所述的数据处理方法,其特征在于,所述第二源操作数为立即数或所述第二存储装置中存储的数据,所述方法还包括:
若所述第二源操作数为立即数,则复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
4.根据权利要求3所述的数据处理方法,其特征在于,所述方法还包括如下步骤:
根据所述运算指令,将所述源操作数A或所述源操作数B作为所述第二源操作数。
5.根据权利要求1所述的数据处理方法,其特征在于,所述按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,包括:
每当将所述当前运算结果存储于所述第一存储装置中之后,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。
6.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
所述当前运算结果存储于所述第一存储装置中时,所述当前运算结果的存储地址与所述当前读取的第一子数据的存储地址一致。
7.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
根据所述运算指令,获得所述第一源操作数的数据大小;
根据所述第一源操作数的数据大小以及预设的拆分粒度,得到所述目标循环次数。
8.根据权利要求1所述的数据处理方法,其特征在于,
所述运算指令的指令格式,包括指令类别、指令类型、第一源操作数、第二源操作数、目标操作数及操作码;
所述指令类别用于确定所述运算指令是否为原子操作运算指令;
所述指令类型用于确定所述运算指令的运算类型;
所述操作码用于配置源操作数的个数;
所述第一源操作数和所述第二源操作数分别用于表示参与运算的数据;
所述目标操作数用于表示所述当前运算结果。
9.一种处理器,其特征在于,所述处理器包括运算电路、读写电路以及与所述运算电路邻近设置的第二存储装置,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述运算电路用于获取运算指令,根据所述运算指令向所述第一存储装置发送读写请求;
所述运算指令用于实现第一源操作数和第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
所述读写电路用于根据所述读写请求,按照预设的数据读取方式,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路用于获取所述第二子数据,并根据所述运算指令将当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;控制计数器累加一次或递减一次,之后,再次向所述第一存储装置发送读写请求,根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。
10.根据权利要求9所述的处理器,其特征在于,所述处理器还包括数据选择器,所述运算电路包括逻辑或运算模块,所述数据选择器连接在所述运算电路和所述读写电路之间,所述数据选择器用于选通所述逻辑或运算模块与所述读写电路的连接通路;
所述逻辑与运算模块用于获取所述第二子数据,并根据所述运算指令将所述当前读取的第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中。
11.根据权利要求10所述的处理器,其特征在于,所述逻辑或运算模块包括运算单元及与所述运算单元连接的结果输出单元;
所述运算单元用于将所述当前读取的第一子数据与所述第二子数据进行对位逻辑或运算;
所述结果输出单元用于将每一位所述第一子数据与所述第二子数据进行逻辑或运算的结果作为当前运算结果。
12.根据权利要求10所述的处理器,其特征在于,
所述逻辑或运算模块还用于根据所述运算指令,确定所述第二源操作数为立即数或所述第二存储装置中存储的数据;
若确定所述第二源操作数为立即数,则所述逻辑或运算模块复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若确定所述第二源操作数为所述第二存储装置中存储的数据,则所述读写电路从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
13.根据权利要求9-12任一项所述的处理器,其特征在于,所述运算电路包括主处理电路和至少一个从处理电路,至少一个所述从处理电路均连接至所述主处理电路;
所述逻辑或运算模块置于所述主处理电路中。
14.一种数据处理装置,其特征在于,所述装置包括:
获取模块,用于获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,所述第一源操作数包括第一子数据,所述第二源操作数包括第二子数据;
读取模块,用于根据数据读取容量及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
运算模块,用于根据所述运算指令获取所述第二子数据,将当前读取的所述第一子数据与所述第二子数据进行逻辑或运算,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中,控制计数器累加一次或递减一次,之后,循环调用所述读取模块、所述运算模块根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至8中任一项所述的方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811456528.4A CN111258640B (zh) | 2018-11-30 | 2018-11-30 | 数据处理方法、处理器、数据处理装置及存储介质 |
PCT/CN2019/121064 WO2020108496A1 (zh) | 2018-11-30 | 2019-11-26 | 原子操作中的数据处理方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811456528.4A CN111258640B (zh) | 2018-11-30 | 2018-11-30 | 数据处理方法、处理器、数据处理装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111258640A CN111258640A (zh) | 2020-06-09 |
CN111258640B true CN111258640B (zh) | 2022-10-04 |
Family
ID=70953851
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811456528.4A Active CN111258640B (zh) | 2018-11-30 | 2018-11-30 | 数据处理方法、处理器、数据处理装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111258640B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101441616A (zh) * | 2008-11-24 | 2009-05-27 | 中国人民解放军信息工程大学 | 基于寄存器文件的快速数据交换结构及其管理方法 |
CN102298515A (zh) * | 2010-06-22 | 2011-12-28 | 国际商业机器公司 | 执行对两个操作数的操作并随后存储原始值的方法和*** |
CN104699629A (zh) * | 2015-03-16 | 2015-06-10 | 清华大学 | 共享片上缓存划分装置 |
CN104794100A (zh) * | 2015-05-06 | 2015-07-22 | 西安电子科技大学 | 基于片上网络的异构多核处理*** |
CN105389277A (zh) * | 2015-10-29 | 2016-03-09 | 中国人民解放军国防科学技术大学 | Gpdsp中面向科学计算的高性能dma部件 |
CN107957976A (zh) * | 2017-12-15 | 2018-04-24 | 北京中科寒武纪科技有限公司 | 一种计算方法及相关产品 |
CN108197705A (zh) * | 2017-12-29 | 2018-06-22 | 国民技术股份有限公司 | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 |
CN108701027A (zh) * | 2016-04-02 | 2018-10-23 | 英特尔公司 | 用于将比原生支持的数据宽度更宽的数据原子地存储到存储器的处理器、方法、***和指令 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8996845B2 (en) * | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
US20140181474A1 (en) * | 2012-12-26 | 2014-06-26 | Telefonaktiebolaget L M Ericsson (Publ) | Atomic write and read microprocessor instructions |
US10678545B2 (en) * | 2016-07-07 | 2020-06-09 | Texas Instruments Incorporated | Data processing apparatus having streaming engine with read and read/advance operand coding |
-
2018
- 2018-11-30 CN CN201811456528.4A patent/CN111258640B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101441616A (zh) * | 2008-11-24 | 2009-05-27 | 中国人民解放军信息工程大学 | 基于寄存器文件的快速数据交换结构及其管理方法 |
CN102298515A (zh) * | 2010-06-22 | 2011-12-28 | 国际商业机器公司 | 执行对两个操作数的操作并随后存储原始值的方法和*** |
CN104699629A (zh) * | 2015-03-16 | 2015-06-10 | 清华大学 | 共享片上缓存划分装置 |
CN104794100A (zh) * | 2015-05-06 | 2015-07-22 | 西安电子科技大学 | 基于片上网络的异构多核处理*** |
CN105389277A (zh) * | 2015-10-29 | 2016-03-09 | 中国人民解放军国防科学技术大学 | Gpdsp中面向科学计算的高性能dma部件 |
CN108701027A (zh) * | 2016-04-02 | 2018-10-23 | 英特尔公司 | 用于将比原生支持的数据宽度更宽的数据原子地存储到存储器的处理器、方法、***和指令 |
CN107957976A (zh) * | 2017-12-15 | 2018-04-24 | 北京中科寒武纪科技有限公司 | 一种计算方法及相关产品 |
CN108197705A (zh) * | 2017-12-29 | 2018-06-22 | 国民技术股份有限公司 | 卷积神经网络硬件加速装置及卷积计算方法及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN111258640A (zh) | 2020-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7227680B2 (ja) | ノンブロッキング高性能トランザクションクレジットシステムを備えるマルチコアバスアーキテクチャ | |
KR102212269B1 (ko) | I/o 패킷 압축을 위한 레지스터 파일 | |
CN105393240A (zh) | 具有辅助异步向量处理器的异步处理器的方法和装置 | |
US20060265571A1 (en) | Processor with different types of control units for jointly used resources | |
KR20160092007A (ko) | 자율 메모리를 위한 방법 및 시스템 | |
CN113254073A (zh) | 数据处理方法及装置 | |
CN111258646B (zh) | 指令拆解方法、处理器、指令拆解装置及存储介质 | |
CN111258635B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258644B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258950B (zh) | 原子访存方法、存储介质、计算机设备、装置和*** | |
CN111258640B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258638B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258652B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258636B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258639B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258647B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258637B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258642B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258643B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258645B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN109923520B (zh) | 计算机***及内存访问技术 | |
CN111258770B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
KR102145457B1 (ko) | 방향 인디케이터 | |
CN116627867A (zh) | 数据交互***、方法、大规模运算处理方法、设备及介质 | |
JP2008077625A (ja) | ユーザ定義の拡張演算を処理する演算システムおよび方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |