CN111258646B - 指令拆解方法、处理器、指令拆解装置及存储介质 - Google Patents
指令拆解方法、处理器、指令拆解装置及存储介质 Download PDFInfo
- Publication number
- CN111258646B CN111258646B CN201811457930.4A CN201811457930A CN111258646B CN 111258646 B CN111258646 B CN 111258646B CN 201811457930 A CN201811457930 A CN 201811457930A CN 111258646 B CN111258646 B CN 111258646B
- Authority
- CN
- China
- Prior art keywords
- data
- sub
- storage device
- source operand
- read
- 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
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
Abstract
本申请涉及一种指令拆解方法、处理器、指令拆解装置及存储介质。所述指令拆解方法包括:根据解析得到的第一源操作数的数据大小以及预设的拆分粒度,计算得到目标循环次数以及数据读取容量,从第一存储装置中读取第一子数据,将当前读取的第一子数据存储到第二存储装置中,根据运算指令执行运算操作,将获得的当前运算结果存储到第一存储装置中,继续确定数据读取容量,直至当前循环次数等于初始值或当前循环次数等于目标循环次数,完成运算指令对应的运算操作。通过对第一源操作数拆分,循环读取,将大数据拆分成小数据进行循环运算处理,通过对操作数按照数据读取容量循环读取,使得运算处理时的能够容纳的数据大小满足要求,且加快运算速度。
Description
技术领域
本申请涉及多线程调度技术领域,特别是涉及一种指令拆解方法、处理器、指令拆解装置及存储介质。
背景技术
原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换(例如共享变量i执行累加,非原子操作情况下多个核同时i++的结果会出错)。
现在一条完整的原子操作指令进行执行时,对完整的数据进行处理,直到所有的数据都处理完毕。不同的处理器能够容乃的访存带宽不同,能够处理的数据位数不同,不能满足处理的数据位宽很大时的操作。
发明内容
基于此,有必要针对上述技术问题,提供一种能够处理数据位宽很大时的操作的指令拆解方法、处理器、指令拆解装置及存储介质。
一种指令拆解方法,所述方法包括:
获取运算指令,根据所述运算指令解析出第一源操作数的数据大小,其中,所述第一源操作数包括至少一个第一子数据;
根据所述第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量;
根据所述运算指令以及所述数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中;
根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据第一源操作数的数据大小以及预设的拆分粒度,得到数据读取容量的步骤,直至当前循环次数等于初始值或所述当前循环次数等于所述目标循环次数,完成运算指令对应的运算操作。
在其中一个实施例中,将所述第一源操作数的数据大小除以所述预设的拆分粒度的商值,向上取整,获得所述目标循环次数;
求取未处理数据大小以及所述预设的拆分粒度之间的最小值,作为所述数据读取容量。
在其中一个实施例中,每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,则将所述目标循环次数递减一次,获得所述当前循环次数,之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,得到数据读取容量的步骤,直至所述目标循环次数递减为初始值,确定所述当前循环次数等于初始值;
或者,每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,将所述循环次数从初始值累加一次,获得所述当前循环次数;之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,确定得到数据读取容量的步骤,直至从初始值累加至所述目标循环次数,确定所述当前循环次数等于所述目标循环次数。
在其中一个实施例中,将所述第一源操作数的数据大小除以所述预设的拆分粒度的商值,向上取整,获得所述目标循环次数;
求取未处理数据大小以及所述预设的拆分粒度之间的最小值,作为所述数据读取容量。
在其中一个实施例中,每当将所述当前运算结果存储至所述第一存储装置中时,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的所述第一子数据的起始地址。
在其中一个实施例中,所述当前运算结果存储至所述第一存储装置中时,所述当前运算结果的存储地址与所述当前读取的第一子数据的存储地址一致。
在其中一个实施例中,根据所述运算指令,确定所述运算指令中包括的源操作数的数量。
在其中一个实施例中,根据所述运算指令获取第二子数据;
根据所述运算指令、所述第一子数据和所述第二子数据,执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中。
在其中一个实施例中,第二源操作数为立即数或所述第二存储装置中存储的数据,所述根据所述运算指令获取第二子数据的步骤,包括:
若所述第二源操作数为立即数,则复制所述第二源操作数,复制后的所述第二源操作数作为所述第二子数据,使所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等;
其中,所述第二源操作数包括所述第二子数据。
在其中一个实施例中,根据所述运算指令,将所述源操作数A或所述源操作数B作为所述第二源操作数。
在其中一个实施例中,当确定所述运算指令中包括的所述源操作数的数量为三个时,所述的根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中的步骤,包括:
根据所述运算指令获取第二子数据以及第三子数据;
根据所述运算指令、所述第一子数据、所述第二子数据以及所述第三子数据,执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中。
在其中一个实施例中,所述第二源操作数为立即数或所述第二存储装置中存储的数据,以及所述第三源操作数为立即数或所述第二存储装置中存储的数据,所述根据所述运算指令获取第二子数据以及第三子数据的步骤,包括:
若所述第二源操作数为立即数,则复制所述第二源操作数,复制后的所述第二源操作数作为所述第二子数据,使所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等;
其中,所述第二源操作数包括所述第二子数据;
若所述第三源操作数为立即数,则复制所述第三源操作数,复制后的所述第三源操作数作为所述第三子数据,使所述第三子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第三源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第三子数据,当前读取的所述第三子数据的数量与所述第一子数据的数量相等;
其中,所述第三源操作数包括所述第三子数据。
一种数据处理方法,所述方法包括:
获取运算指令,其中,所述运算指令用于实现源操作数之间的运算,第一源操作数包括至少一个第一子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将所述当前读取的第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令执行运算操作,将获得当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成所述运算指令对应的运算操作。
一种处理器,所述处理器包括指令处理电路、读写电路、拆分粒度电路、循环次数处理电路、数据读取容量计算电路、运算电路、循环次数处理电路以及与所述运算电路邻近设置的第二存储装置;
其中,所述拆分粒度电路连接所述循环次数处理电路,所述循环次数处理电路分别连接所述指令处理电路以及所述数据读取容量计算电路,所述数据读取容量计算电路连接所述运算电路,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述指令处理电路用于获取运算指令,并根据所述运算指令解析出第一源操作数的数据大小;
所述运算电路用于根据所述运算指令向所述第一存储装置发送读写请求;
所述拆分粒度电路用于存储预设的拆分粒度;
所述循环次数处理电路用于根据所述第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数;
所述数据读取容量计算电路用于根据所述第一源操作数的数据大小以及预设的拆分粒度,得到数据读取容量;
所述读写电路,用于根据所述第一读写请求以及所述数据读取容量,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路,还用于根据所述运算指令执行运算操作,并将所述当前运算结果存储至所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作。
在其中一个实施例中,所述循环次数处理电路,还用于每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,则将所述目标循环次数递减一次,获得所述当前循环次数,之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,得到数据读取容量的步骤,直至所述目标循环次数递减为初始值,确定所述当前循环次数等于所述目标循环次数;
所述循环次数处理电路,还用于每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,将所述循环次数从初始值累加一次,获得所述当前循环次数;之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,确定得到数据读取容量的步骤,直至从初始值累加至所述目标循环次数,确定所述当前循环次数等于所述目标循环次数。
一种指令拆解装置,所述装置包括:
获取模块,用于获取运算指令,根据所述运算指令解析出第一源操作数的数据大小,其中,所述第一源操作数包括至少一个第一子数据;
循环次数计算模块,用于根据所述第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数;
数据读取容量计算模块,用于根据所述第一源操作数的数据大小以及所述预设的拆分粒度,得到数据读取容量;
读取模块,用于根据所述运算指令以及所述数据读取容量,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中;
运算模块,用于根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中,之后,调用所述循环次数计算模块、所述数据读取容量计算模块、所述读取模块和所述运算模块,直至完成所述运算指令对应的运算操作。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取运算指令,根据所述运算指令解析出第一源操作数的数据大小,其中,所述第一源操作数包括至少一个第一子数据;
根据所述第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量;
根据所述运算指令以及所述数据读取容量,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中;
根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据第一源操作数的数据大小以及预设的拆分粒度,得到数据读取容量的步骤,直至当前循环次数等于初始值或所述当前循环次数等于所述目标循环次数,完成运算指令对应的运算操作。
上述指令拆解方法、处理器和装置,通过获取运算指令,对运算指令进行解析,根据运算指令解析出第一源操作数的数据大小,然后根据第一源操作数的数据大小以及预设的拆分粒度,计算得到循环次数以及数据读取容量,之后依据运算指令以及数据读取容量,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储到第二存储装置中,此时根据运算指令对第一子数据执行运算操作,获得当前运算结果,并将当前运算结果存储到第一存储装置中,继续根据第一源操作数的数据大小以及预设的拆分粒度,确定数据读取容量,直至当前循环次数等于初始值或当前循环次数等于目标循环次数,完成运算指令对应的运算操作。通过对第一源操作数进行拆分,循环读取,将大数据拆分成小数据进行循环运算处理,通过对操作数按照数据读取容量循环读取,使得运算处理时的能够容纳的数据大小满足要求,且加快运算速度。
附图说明
图1为一个实施例中处理器的结构示意图;
图2为一个实施例中运算模块的结构示意图;
图3为另一个实施例中处理器的结构示意图;
图4为另一个实施例中处理器的结构示意图;
图5为另一个实施例中处理器的结构示意图;
图6为一个实施例中数据处理方法的流程示意图;
图7为另一个实施例中数据处理方法的流程示意图;
图8为一个实施例中Atomic MAX_VEC方法的流程示意图;
图9为一个实施例中步骤S106的流程示意图;
图10为一个实施例中Atomic MIN_VEC方法的流程示意图;
图11为一个实施例中步骤S206的流程示意图;
图12为一个实施例中Atomic AND方法的流程示意图;
图13为一个实施例中步骤S306的流程示意图;
图14为一个实施例中Atomic OR方法的流程示意图;
图15为一个实施例中步骤S406的流程示意图;
图16为一个实施例中Atomic XOR方法的流程示意图;
图17为一个实施例中步骤S506的流程示意图;
图18为一个实施例中Atomic EXCH方法的流程示意图;
图19为一个实施例中步骤S606的流程示意图;
图20为另一个实施例中指令拆解方法的流程示意图;
图21为一个实施例中步骤S300的流程示意图;
图22为另一个实施例中步骤S300的流程示意图;
图23为一个实施例中Atomic CAS方法的流程示意图;
图24为一个实施例中步骤S706的流程示意图;
图25为一个实施例中Atomic INC方法的流程示意图;
图26为一个实施例中Atomic DEC方法的流程示意图;
图27为另一个实施例中Atomic DEC方法的流程示意图;
图28为一个实施例中Atomic ADD方法的流程示意图;
图29为一个实施例中Atomic NOT方法的流程示意图;
图30为一个实施例中Atomic MAX_SCALAR方法的流程示意图;
图31为另一个实施例中Atomic MAX_SCALAR方法的流程示意图;
图32为一个实施例中Atomic MIN_SCALAR方法的流程示意图;
图33为一个实施例中数据处理装置的结构框图;
图34为一个实施例中指令拆解装置的结构框图。
实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、***、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。片外是指处理器外部,即片外存储装置是指设置在处理器外部的存储装置;片上是指处理器内部,即片上存储装置是指设置在处理器内部的存储装置。
本申请提供的数据处理方法,可以应用于如图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上的数据,即第一源操作数可以表示地址Src0 addr中存储的数据。第二源操作数可以表示立即数或者指令中的地址中存储的数据。
进一步地,运算指令的指令格式还可以包括用于标识源操作数A是立即数还是地址的标识位Src1 vec以及用于标识源操作数B是立即数还是地址的标识位Src2 vec。
具体地,Src1 vec为0时,表示源操作数A为立即数,Src1 vec为1时,表示源操作数A为地址中存储的数据;Src2 vec为0时,表示源操作数B为立即数,Src2 vec为1时,表示源操作数B为地址中存储的数据。
更进一步地,该运算指令的指令格式还包括用于表示标识第一源操作数的数据大小Data size以及用于请求拆分,标识计算所述目标循环次数的数据流IO config。
该运算指令的指令格式可以如下格式,如表1所示:
其中,Src0 addr表示第一源操作数的地址,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:
当操作码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表示数据类型,该指令支持但不限于以下几种数据类型:
可选地,该运算指令可以包括算术运算指令,也可以包括逻辑运算指令:其中,算术运算指令可以包括:单目最大值运算指令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 MAX_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中读取第一子数据。
上述数据处理方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。
在其中一个实施例中,请参阅图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中,完成了最大值的寻找。
具体地,当上述运算指令为Atomic MIN_VEC时,如图10所示的数据处理方法,可以包括以下步骤:
S202,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的比较运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的比较运算。
S204,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S206,根据运算指令获取第二子数据,判断当前读取的第一子数据是否小于第二子数据,将获得的当前比较结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取比较运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行比较,判断当前读取的第一子数据是否小于第二子数据,进而得到当前比较结果,之后,将得到的当前比较结果存储在第二存储装置201中,再通过读写电路203将当前比较结果存储到第一存储装置13中。
S208,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S208可以包括:控制计数器累加一次或递减一次,之后,返回步骤S204,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
在其中一个实施例中,请参阅图11,上述步骤S206还可以包括:
S2062,将当前读取的第一子数据与第二子数据进行对位比较,判断当前读取的第一子数据是否小于第二子数据。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行比较,判断当前读取的第一子数据是否小于第二子数据。
当第一子数据小于第二子数据时,执行S2064将第一子数据作为当前比较结果,当第一子数据大于或等于第二子数据时,执行S2066将第二子数据作为当前比较结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有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,表示第一子数据大于第二子数据,此时将0作为比较结果;将a中的第二位2与b中的第二位3比较,显然2小于3,表示第一子数据小于第二子数据,此时将2作为比较结果,以此类推,将a中的第一子数据与b中的第二子数据比较完成后,得到当前比较结果为{0,2,3,4,2,1,7,2}。
本实施例中通过将第一子数据与第二子数据进行对位比较,按照位置将第一子数据与第二子数据中最小的数据作为比较结果,存储在第一存储装置13中,完成了最小值的寻找。
具体地,当上述运算指令为Atomic AND时,如图12所示的数据处理方法,可以包括以下步骤:
S302,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑与运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的逻辑与运算。
S304,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S306,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑与运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行逻辑与运算,进而得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
S308,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S308可以包括:控制计数器累加一次或递减一次,之后,返回步骤S304,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
在其中一个实施例中,请参阅图13,上述步骤S306还可以包括:
S3062,将当前读取的第一子数据与第二子数据进行对位与运算。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行逻辑与运算。
S3064,将每一位第一子数据与第二子数据进行与运算的结果作为当前运算结果。
具体地,将每一位的第一子数据与第二子数据进行与运算后,每一位得到的结果作为当前运算结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有a={1,0,0,1,1,0,1,0},第二子数据有b={0,0,1,0,1,0,1,0},将a中的每一位第一子数据分别与b中的每一位第二子数据对应进行与运算,即将a中的第一位第一子数据1与b中的第一位第二子数据0进行与运算,此时运算结果为0;将a中的第二位0与b中的第二位0进行与运算,此时运算结果为0,以此类推,将a中的第一子数据与b中的第二子数据运算完成后,得到当前运算结果为{0,0,0,0,1,0,1,0}。
本实施例中通过将第一子数据与第二子数据进行对位与运算,按照位置将第一子数据与第二子数据进行运算得到当前运算结果,存储在第一存储装置13中。
具体地,当上述运算指令为Atomic OR时,如图14所示的数据处理方法,可以包括以下步骤:
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中读取第一子数据。
在其中一个实施例中,请参阅图15,上述步骤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}。
本实施例中通过将第一子数据与第二子数据进行对位或运算,按照位置将第一子数据与第二子数据进行运算得到当前运算结果,存储在第一存储装置13中。
具体地,当上述运算指令为Atomic XOR时,如图16所示的数据处理方法,可以包括以下步骤:
S502,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑异或运算,第一源操作数包括至少一个第一子数据,第二源操作数包括至少一个第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的逻辑异或运算。
S504,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S506,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑异或运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行逻辑异或运算,进而得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
S508,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S508可以包括:控制计数器累加一次或递减一次,之后,返回步骤S504,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
在其中一个实施例中,请参阅图17,上述步骤S506还可以包括:
S5062,将当前读取的第一子数据与第二子数据进行对位异或运算。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行逻辑异或运算。
S5064,将每一位第一子数据与第二子数据进行异或运算的结果作为当前运算结果。
具体地,将每一位的第一子数据与第二子数据进行异或运算后,每一位得到的结果作为当前运算结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有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,0,0,0,0}。
本实施例中通过将第一子数据与第二子数据进行对位异或运算,按照位置将第一子数据与第二子数据进行运算得到当前运算结果,存储在第一存储装置13中。
具体地,当上述运算指令为Atomic EXCH时,如图18所示的数据处理方法,可以包括以下步骤:
S602,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的交换运算,第一源操作数包括至少一个第一子数据,第二源操作数包括至少一个第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的交换运算。
S604,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S606,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行交换运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行交换运算,进而得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
S608,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S608可以包括:控制计数器累加一次或递减一次,之后,返回步骤S604,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
上述数据处理方法中,通过循环读取数据进行运算,将每次循环的运算结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。
在其中一个实施例中,请参阅图19,上述步骤S606还可以包括:
S6062,将当前读取的第一子数据与第二子数据进行对位交换。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行交换。
S6064,将第二子数据作为当前运算结果。
具体地,将每一位的第一子数据与第二子数据进行交换后,将第二子数据作为当前运算结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有a={1,0,0,1,1,0,1,0},第二子数据有b={0,0,1,0,1,0,1,0},将a中的每一位第一子数据分别与b中的每一位第二子数据对应进行交换,即将a中的第一位第一子数据1与b中的第一位第二子数据0进行交换,此时运算结果为0;将a中的第二位0与b中的第二位0进行交换,此时运算结果为0,以此类推,将a中的第一子数据与b中的第二子数据运算完成后,得到当前运算结果为{0,0,1,0,1,0,1,0}。
在另一个实施例中,请参阅图20,上述数据处理方法还可以包括以下步骤:
S500,获取运算指令,根据运算指令解析出第一源操作数的数据大小。
具体地,指令处理电路111获取到运算指令,根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小发送给循环次数处理电路115。
S600,根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量。
具体地,预设的拆分粒度存储在拆分粒度电路114中,可以为片上的静态存储器中的某个存储空间。循环次数处理电路115接收到第一源操作数的数据大小,根据第一源操作数的数据大小以及预设的拆分粒度,计算得到目标循环次数。数据读取容量计算电路116根据循环次数处理电路115发送的循环次数、指令处理电路111发送的第一源操作数的数据大小以及预设的拆分粒度,计算得到数据读取容量,并将数据读取容量以及目标循环次数发送给运算电路12。
可选地,循环次数处理电路115可以按照如下公式计算目标循环次数:
其中,Count表示为目标循环次数,data size表示为第一源操作数的数据大小,拆分粒度即为预设的拆分粒度。本申请实施例中,将data size除以预设的拆分粒度的商值向上取整,获得目标循环次数Count。
数据读取容量计算电路116可以按照如下公式计算数据读取容量:
其中,data real size表示数据读取容量,拆分粒度即为预设的拆分粒度,未处理数据大小表示第一源操作数的数据大小减去数据读取容量以后剩余的数据大小。
例如,控制器电路11根据运算指令解析出第一源操作数的数据大小为1000byte,预设的拆分粒度为512 byte,可以得到目标循环次数为2,两次的数据读取容量分别为512byte和488byte。
进一步地,上述数据处理方法还可以包括:
根据该运算指令,确定运算指令中包括的源操作数的数量。其中,源操作数的数量可以包括一个、两个或三个。
具体地,运算电路12可以根据运算指令中的操作码Scr Op进行判断,当操作码ScrOp为“000”时,则表示运算指令的源操作数为1个,为第一源操作数Src0。当操作码Scr Op为“010”时,则表示运算指令的源操作数为2个,包括第一源操作数Src0和第二源操作数,且第二源操作数为源操作数A(Src1)。当操作码Scr Op为“011”时,则表示运算指令的源操作数为2个,包括第一源操作数Src0和第二源操作数,且第二源操作数为源操作数B(Src2)。当操作码Scr Op为“100”时,则表示运算指令的源操作数为3个,包括第一源操作数Src0、源操作数A(Src1)以及源操作数B(Src2)。
可选地,当源操作数为一个时,上述步骤S300还可以包括以下步骤:
根据运算指令、子数据段,执行运算操作,将获得的当前运算结果/比较结果存储至第二存储装置以及第一存储装置中。
具体地,运算电路12根据接收到的指令、子数据段,执行相应的操作,获得当前运算结果/比较结果,将获得的当前运算结果/比较结果存储至第二存储装置201中,并通过读写电路203将第二存储装置201中的当前运算结果/比较结果存储至第一存储装置13中。
具体地,当源操作数的数量为一个时,该运算指令可以是单目最大值运算指令Atomic MAX_SCALAR、单目最小值运算指令Atomic MIN_SCALAR以及逻辑非运算指令AtomicNOT等,上述各个运算指令的具体执行过程具体可参见上文的描述。
可选地,当源操作数的数量为两个时,请一并参阅图21,两个源操作数分别为第一源操作数和第二源操作数,上述步骤S300还可以包括以下步骤:
S310,根据运算指令获取第二子数据。
具体地,根据运算指令确定出参加运算的源操作数为两个,运算电路12根据运算指令,获取第二子数据。
S320,根据运算指令、第一子数据和第二子数据,执行运算操作,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
具体地,运算电路12根据接收到的指令、第一子数据和第二子数据,执行相应的操作,获得当前运算结果,将获得的当前运算结果存储至第二存储装置201中,并通过读写电路203将第二存储装置201中的当前运算结果存储至第一存储装置13中。
具体地,当源操作数的数量为两个时,该运算指令可以是两目最大值运算指令Atomic MAX_VEC、两目最小值运算指令Atomic MIN_VEC、逻辑与运算指令Atomic AND、逻辑或运算指令Atomic OR、逻辑异或运算指令Atomic XOR、交换运算指令Atomic EXCH、加法运算指令Atomic ADD、累加运算指令Atomic INC以及减法运算指令Atomic DEC等,上述各个运算指令的具体执行过程具体可参见上文的描述。
可选地,当源操作数为三个时,请参阅图22,三个源操作数分别为第一源操作数、第二源操作数和第三源操作数,上述步骤S300还可以包括以下步骤:
S330,根据运算指令获取第二子数据以及第三子数据。
其中,第三源操作数包括至少一个第三子数据。
具体地,根据运算指令确定出参加运算的源操作数为三个,运算电路12根据运算指令,获取第二子数据以及第三子数据。
S340,根据运算指令、第一子数据、第二子数据和第三子数据,执行运算操作,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
具体地,运算电路12根据接收到的指令、第一子数据、第二子数据和第三子数据,执行相应的操作,获得当前运算结果,将获得的当前运算结果存储至第二存储装置201中,并通过读写电路203将第二存储装置201中的当前运算结果存储至第一存储装置13中。
在其中一个实施例中,根据运算指令的指令格式,将源操作数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作为第二源操作数进行选择。
具体地,当上述运算指令为Atomic CAS时,如图23所示的数据处理方法,可以包括以下步骤:
S702,获取运算指令。
其中,运算指令用于实现第一源操作数、第二源操作数以及第三源操作数之间的替换运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据,第三源操作数包括第三子数据。根据运算指令的格式可以将Src0作为第一源操作数,源操作数A(Src1)作为第二源操作数,源操作数B(Src2)作为第三源操作数。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数、第二源操作数以及第三源操作数之间的替换运算。
S704,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S706,根据运算指令获取第二子数据以及第三子数据,将当前读取的第一子数据、第二子数据以及第三子数据进行替换运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据、第三子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取比较运算需要的第二子数据以及第三子数据,将当前读取的第一子数据、第二子数据以及第三子数据进行替换运算,进而得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
S708,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
其中,本申请实施例中,计数器的初始值可以为0。目标循环次数根据第一源操作数的数据大小进行计算得到。
具体地,运算电路12比较运算执行完以后,控制计数器将目标循环次数递减一次,对循环次数进行判断,当循环次数不为零时,继续返回步骤S704,直到目标循环次数递减为0,停止向第一存储装置13读取第一子数据。或者,运算电路12比较运算执行完以后,控制计数器累加一次,对循环次数进行判断,当循环次数不为目标循环次数时,继续返回步骤S704,直到计数器从0累加至目标循环次数,停止向第一存储装置13读取第一子数据。
上述数据处理方法中,通过循环读取数据进行运算,将每次循环的运算结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。
在其中一个实施例中,请参阅图24,上述步骤S706包括:
S7062,将当前读取的第一子数据与第二子数据进行对位比较,判断当前读取的第一子数据是否等于第二子数据。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集、第二子数据集及第三子数据集,第一子数据集中的多个第一子数据顺序排列,第二子数据集中的多个第二子数据顺序排列,第三子数据集中的多个第三子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行比较,判断当前读取的第一子数据是否等于第二子数据。
当第一子数据等于第二子数据时,执行S7064将第三子数据作为当前运算结果,当第一子数据不等于第二子数据时,执行S7066将第一子数据作为当前运算结果。
例如,当前读取的第一子数据、第二子数据为多个数据以及第三子数据为多个数据,第一子数据有a={1,2,3,4,5,6,7,8},第二子数据有b={0,2,3,5,5,4,7,8},第三子数据有c={0,1,7,8,9,4,5,9}将a中的每一位第一子数据分别与b中的每一位第二子数据对应进行比较,即将a中的第一位第一子数据1与b中的第一位第二子数据0进行比较,显然1大于0,表示第一子数据不等于第二子数据,此时将第一子数据1作为运算结果;将a中的第二位2与b中的第二位2进行比较,显然2等于2,表示第一子数据等于第二子数据,此时将第二位的第三子数据1作为运算结果,以此类推,将a中的第一子数据与b中的第二子数据运算完成后,得到当前运算结果为{1,1,7,4,9,6,5,9}。
在其中一个实施例中,预设的数据读取的方式可以包括:第一次从第一存储装置13中读取第一子数据后,将当前运算结果存储于第一存储装置13中,之后每次将当前运算结果存储于第一存储装置13中后,将上一次读取的第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。本申请实施例中,每次将当前运算结果存储于第一存储装置13中后,则对第一子数据对应的存储地址做一次地址偏移,且地址偏移量等于上一次读取的第一子数据所占用的存储地址。按照此方法,根据运算指令,从第一存储装置13中读取第一子数据后,并将当前读取的第一子数据存储至第二存储装置201。
例如,第一源操作数的数据大小为1000byte,该1000 byte所占用的存储地址为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的预设存储地址中读取第二子数据,当前读取的第二子数据的数量与第一子数据的数量相等。具体可参见上文的描述。
在其中一个实施例中,运算电路12接收到运算指令以后,能够根据运算指令,确定出第二源操作数为立即数或第二存储装置201中存储的数据以及确定出第三源操作数为立即数或第二存储装置201中存储的数据。
具体地,第二源操作数的读取方式可参考上文的描述。
当根据该运算指令确定第三源操作数为立即数时,运算电路12向第二存储装置201发送读写请求,则读写电路203将该立即数发送给运算电路12,运算电路12复制该立即数,复制后获得的多个立即数作为第三子数据,第三子数据的数量与当前读取的第一子数据的数量相等。
例如,当前读取的第一子数据的数量为3byte,确定出第三源操作数为立即数时,可以为标量,假设为2,此时复制该立即数2,复制3byte的立即数2,即得到第三子数据为{2,2,2}。
当确定第三源操作数为第二存储装置201中存储的数据时,运算电路12向第二存储装置201发送读写请求,则读写电路203从第二存储装置201的预设存储地址中读取第三子数据,当前读取的第三子数据的数量与第一子数据的数量相等。
本实施例中通过对第二源操作数、第三源操作数进行复制或者读取第二子数据、第三子数据,使得第二子数据、第三子数据分别与第一子数据的数量相等,便于将第一子数据与第二子数据进行对位运算。
具体地,当上述运算指令为Atomic INC时,在一个实施例中,如图25所示的数据处理方法,该方法可以包括以下步骤:
S912,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的累加运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的累加运算。
S914,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S916,根据所运算指令获取第二子数据,判断当前读取的第一子数据是否大于或等于第二子数据,当第一子数据大于或等于第二子数据时,将第一子数据复位,并将复位后的第一子数据作为当前比较结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取累加运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行比较,判断当前读取的第一子数据是否大于或等于第二子数据,当第一子数据大于或等于第二子数据时,将第一子数据复位,并将复位后的第一子数据作为当前比较结果;当第一子数据小于第二子数据时,将第一子数据与预设值相加,并将相加后的第一子数据作为当前比较结果,将得到的当前比较结果存储在第二存储装置201中,再通过读写电路203将当前比较结果存储到第一存储装置13中。
可选的,当第一子数据大于或等于第二子数据时,可以将第一子数据复位到初始值,也可以将第一子数据置零。预设值可以根据需要任意设定,在此不做具体限制,优选地,神经网络处理器执行指令运算时,一般将预设值设置为1。
S918,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S918可以包括:控制计数器累加一次或递减一次,之后,返回步骤S914,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
具体地,步骤S918还可以包括:控制计数器累加一次或递减一次,之后,返回步骤S914,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至第一源操作数中的多个第一子数据全部复位或置零。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前比较结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
上述数据处理方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性;同时,通过第一源操作数中第一子数据与第二源操作数中第二子数据的多次比较,直至第一源操作数中的多个第一子数据全部复位或置零,可以通过比较次数获取两个源操作数之间的最大差值,节省了繁琐的差值计算过程。
在其中一个实施例中,上述步骤S916还可以包括:
将当前读取的所述第一子数据与第二子数据进行对位比较,判断当前读取的第一子数据是否大于或等于第二子数据。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行比较,判断当前读取的第一子数据是否大于或等于第二子数据。
当第一子数据大于或等于第二子数据时,将第一子数据复位,并将复位后的第一子数据作为当前比较结果;当第一子数据小于第二子数据时,将第一子数据与预设值相加,并将相加后的第一子数据作为当前比较结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有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置零,此时将0作为比较结果;将a中的第二位2与b中的第二位3比较,显然2小于3,表示第一子数据小于第二子数据,此时将第一子数据1与预设值相加(假设预设值为1)得到比较结果2,以此类推,将a中的第一子数据与b中的第二子数据比较完成后,得到当前比较结果为{0,3,4,5,0,0,0,0}。
本实施例中通过将第一子数据与第二子数据进行对位比较,并将当前比较结果存储在第一存储装置13中,完成了运算指令的累加运算。
具体地,当上述运算指令为Atomic DEC时,在一个实施例中,如图26所示的数据处理方法,该方法可以包括以下步骤:
S922,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的减法运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的减法运算。
S924,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S926,根据所运算指令获取第二子数据,判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储至第二存储装置以及第一存储装置中;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取减法运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据进行比较,判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果,将得到的当前比较结果存储在第二存储装置201中,再通过读写电路203将当前比较结果存储到第一存储装置13中。
可选的,第一预设值可以根据需要任意设定,在此不做具体限制,优选地,神经网络处理器执行指令运算时,一般将第一预设值设置为1。
S928,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S928可以包括:控制计数器累加一次或递减一次,之后,返回步骤S924,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
具体地,步骤S928还可以包括:控制计数器累加一次或递减一次,之后,返回步骤S924,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至第一源操作数与第二源操作数相同。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前比较结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
上述数据处理方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性;同时,通过第一源操作数中第一子数据与第二源操作数中第二子数据的多次比较,直至第一源操作数与第二源操作数相同,可以通过比较次数获取两个源操作数之间的最大差值,节省了繁琐的差值计算过程。
作为一种可选的实施方式,如图27所示的数据处理方法,该方法可以包括以下步骤:
S926a,根据运算指令获取第二子数据,判断当前读取的第一子数据是否与第二预设值相等,当第一子数据与第二预设值相等时,将第二子数据作为当前比较结果存储至第二存储装置以及第一存储装置中。
具体地,运算电路12根据获取的运算指令,获取减法运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二预设值进行比较,判断当前读取的第一子数据是否与第二预设值相等,当第一子数据与第二预设值相等时,将第二子数据作为当前比较结果;当第一子数据与第二预设值不相等时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果,将得到的当前比较结果存储在第二存储装置201中,再通过读写电路203将当前比较结果存储到第一存储装置13中。
可选的,第二预设值可以根据需要任意设定,在此不做具体限制,优选地,神经网络处理器执行指令运算时,一般将第二预设值设置为0。
在其中一个实施例中,上述步骤S926还可以包括:
将当前读取的所述第一子数据与第二子数据进行对位比较,判断当前读取的第一子数据是否大于第二子数据。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行比较,判断当前读取的第一子数据是否大于第二子数据。
当第一子数据大于第二子数据时,将第二子数据作为当前比较结果;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有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,表示第一子数据大于第二子数据,此时将第二子数据0作为比较结果;将a中的第二位2与b中的第二位3比较,显然2小于3,表示第一子数据小于第二子数据,此时将第一子数据2与第一预设值相减(假设第一预设值为1)得到比较结果1,以此类推,将a中的第一子数据与b中的第二子数据比较完成后,得到当前比较结果为{0,1,2,3,2,1,6,2}。
本实施例中通过将第一子数据与第二子数据进行对位比较,并将当前比较结果存储在第一存储装置13中,完成了运算指令的减法运算。
具体地,当上述运算指令为Atomic ADD时,如图28所示的数据处理方法,可以包括以下步骤:
S932,获取运算指令。
其中,运算指令用于实现第一源操作数以及第二源操作数之间的加法运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现第一源操作数以及第二源操作数之间的加法运算。
S934,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201。
S936,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据相加得到当前运算结果,将当前运算结果存储至第二存储装置以及第一存储装置中。
其中,获取的第二子数据与当前读取的第一子数据的数量是相等的。
具体地,运算电路12根据获取的运算指令,获取加法运算需要的第二子数据,获取到第二子数据之后,将当前读取的第一子数据与第二子数据相加得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
S938,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成运算指令对应的运算操作。
具体地,步骤S938可以包括:控制计数器累加一次或递减一次,之后,返回步骤S934,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据第一源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一子数据,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取第一子数据。
在其中一个实施例中,上述步骤S936还可以包括:
将当前读取的第一子数据与第二子数据进行对位相加,得到当前运算结果。
具体地,运算电路12获取到第一子数据以及第二子数据之后,得到第一子数据集及第二子数据集,第一子数据集中的多个第一子数据顺序排列;第二子数据集中的多个第二子数据顺序排列。将当前读取的第一子数据与第二子数据进行对位比较,即根据排列顺序的序号,将第一子数据集中的第一子数据,与第二子数据集中对应序号的第二子数据进行加法运算。
例如,当前读取的第一子数据以及第二子数据为多个数据,第一子数据有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;将a中的第二位2与b中的第二位3相加,得到当前运算结果5,以此类推,将a中的第一子数据与b中的第二子数据相加完成后,得到当前运算结果为{1,5,7,9,7,7,14,10}。
本实施例中通过将第一子数据与第二子数据进行对位相加,并将当前运算结果存储在第一存储装置13中,完成了运算指令的加法运算。
具体地,当上述运算指令为Atomic NOT时,如图29所示的数据处理方法,可以包括以下步骤:
S942,获取运算指令。
其中,运算指令用于实现源操作数的逻辑非运算,源操作数包括子数据段,每一子数据段包括N个子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现源操作数的逻辑非运算。
S944,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段,并将当前读取的子数据段存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取子数据段,并将当前读取的子数据段存储至第二存储装置201。
S946,根据运算指令获取,将子数据段中的N个子数据逐一进行逻辑非运算得到当前运算结果,并将当前运算结果存储至第二存储装置以及第一存储装置中。
具体地,运算电路12根据获取的运算指令,将子数据段中的N个子数据逐一进行逻辑非运算得到当前运算结果,之后,将得到的当前运算结果存储在第二存储装置201中,再通过读写电路203将当前运算结果存储到第一存储装置13中。
例如,当前读取的子数据段包括8个子数据,子数据段a={1,0,0,1,1,0,1,0},将a中的每一位子数据逐一进行逻辑非运算,即将a中的第一位1进行逻辑非运算,得到当前运算结果0,将a中的第一位0进行逻辑非运算,得到当前运算结果1,以此类推,将a中的每一子数据进行逻辑非运算完成后,得到当前运算结果为{0,1,1,0,0,1,0,1}。
S948,返回根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段的步骤,直至完成运算指令对应的运算操作。
具体地,步骤948可以包括:控制计数器累加一次或递减一次,之后,返回步骤S944,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取子数据段,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据源操作数的数据大小进行计算得到。当将第二存储装置201的当前运算结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取子数据段,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中读取子数据段。
本实施例中通过将源操作数中的每一子数据进行逻辑非运算得到当前运算结果,存储在第一存储装置13中。
具体地,当上述运算指令为Atomic MAX_SCALAR时,如图30所示的数据处理方法,可以包括以下步骤:
S952,获取运算指令。
其中,运算指令用于实现源操作数的比较运算,源操作数包括子数据段,每一子数据段包括N个子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现源操作数的比较运算。
S954,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段,并将当前读取的子数据段存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取子数据段,并将当前读取的子数据段存储至第二存储装置201。
S956,根据运算指令,将子数据段中的N个子数据逐一进行比较得到N个子数据中的最大值,并将最大值作为第一比较结果存储至第二存储装置以及第一存储装置中。
其中,第一比较结果指的是第一段子数据段中的最大值。
具体地,运算电路12根据获取的运算指令,将子数据段中的N个子数据逐一进行比较得到N个子数据中的最大值,并将最大值作为第一比较结果,之后,将得到的第一比较结果存储在第二存储装置201中,再通过读写电路203将第一比较结果存储到第一存储装置13中。
S958,从第一存储装置中读取第一比较结果和另一子数据段,并将当前读取的第一比较结果和另一子数据段存储至第二存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一比较结果和另一子数据段,并将当前读取的第一比较结果和另一子数据段存储至第二存储装置201。
可选的,可以根据第二存储装置201中存储地址的顺序,依次读取另一子数据段,也可以不按照地址的存储顺序进行读取,在此不做具体限定。
S960,根据运算指令,将第一比较结果与另一子数据段中的N个子数据逐一进行比较,将比较得到的最大值作为第二比较结果存储至第二存储装置以及第一存储装置中。
其中,第二比较结果指的是第一段子数据段与另一段子数据段中的最大值。
具体地,运算电路12根据获取的运算指令,将第一比较结果与另一子数据段中的N个子数据逐一进行比较,即将第一段子数据段中的最大值与另一子数据段中的N个子数据逐一进行比较,并将比较得到的最大值作为第二比较结果,之后,将得到的第二比较结果存储在第二存储装置201中,再通过读写电路203将第二比较结果存储到第一存储装置13中。
以此类推进行循环比较运算,直至完成所有子数据段的比较运算,得到源操作数中所有子数据中的最大值。
具体地,循环比较运算可以通过控制计数器累加一次或递减一次实现,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据源操作数的数据大小进行计算得到。当将第二存储装置201的第一比较结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一比较结果和另一子数据段,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中执行读取操作。
上述数据处理方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。
在其中一个实施例中,上述步骤S956还可以包括:
将子数据段中的第一个子数据与第二个子数据进行比较,当第一个子数据大于或等于第二个子数据时,继续将第一个子数据与第三个子数据进行比较,直到完成与第N个子数据的比较,得到N个子数据中的最大值。
具体地,运算电路12获取到子数据段之后,将当前读取的子数据段中的第一个子数据与第二个子数据进行比较,当第一个子数据大于或等于第二个子数据时,继续将第一个子数据与第三个子数据进行比较,直到完成与第N个子数据的比较,N个子数据中的最大值作为第一比较结果。
进一步,运算电路12获取到第一比较结果和另一子数据段之后,将当前读取的第一比较结果和另一子数据段中每一个子数据依次进行比较,直到完成与另一子数据段中第N个子数据的比较,将比较得到的最大值作为第一比较结果。
例如,当前读取的第一子数据段为多个数据,第一子数据段有a1={1,2,3,4,5,6,7,8},将a1中的多个子数据逐一进行比较,得到a1中的最大值8,将该最大值8作为第一比较结果,将该最大值8存储至第一存储装置13以及第二存储装置201中;再次读取第一比较结果和第二子数据段a2={0,3,4,5,2,10,7,2},将第一比较结果8与a2中的每一个子数据依次进行比较,得到最大值10,将该最大值10作为第二比较结果存储至第一存储装置13以及第二存储装置201中;依次类推。
本实施例中通过将子数据段中的N个子数据进行逐一比较,并将比较得到的最大值存储在第一存储装置13中,完成了最大值的寻找。
在其中一个实施例中,如图31所示的数据处理方法,可以包括以下步骤:
S1000,根据运算指令,获得源操作数的数据长度。
具体地,控制器电路11对该运算指令进行解析的过程中,可以根据该运算指令的Data size域,获取源操作数的数据长度。
S2000,将源操作数的数据长度增加操作位,得到源操作数的数据大小;其中,增加的操作位用于存储第一比较结果。
具体地,译码阶段,控制器电路11需要在源操作数的实际长度之后增加操作位,用于存放第一比较结果,并将增加操作位之后的数据长度作为源操作数的数据大小参与运算。可选的,可以增加一个或多个操作位,在此不做具体限定,优选为增加一个操作位。
例如:控制器电路11根据运算指令解析出源操作数的数据大小为1000byte,为源操作数增加操作位(假设操作位为1byte),则得到的源操作数的数据大小为1001byte。
具体地,当上述运算指令为Atomic MIN_SCALAR时,如图32所示的数据处理方法,可以包括以下步骤:
S962,获取运算指令。
其中,运算指令用于实现源操作数的比较运算,源操作数包括子数据段,每一子数据段包括N个子数据。
具体地,该运算电路12获取运算指令,该运算指令用于实现源操作数的比较运算。
S964,根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段,并将当前读取的子数据段存储至第二存储装置。
其中,第一存储装置13为片外存储装置,第二存储装置201为片上存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取子数据段,并将当前读取的子数据段存储至第二存储装置201。
S966,根据运算指令,将子数据段中的N个子数据逐一进行比较得到N个子数据中的最小值,并将最小值作为第一比较结果存储至第二存储装置以及第一存储装置中。
其中,第一比较结果指的是第一段子数据段中的最小值。
具体地,运算电路12根据获取的运算指令,将子数据段中的N个子数据逐一进行比较得到N个子数据中的最小值,并将最小值作为第一比较结果,之后,将得到的第一比较结果存储在第二存储装置201中,再通过读写电路203将第一比较结果存储到第一存储装置13中。
S968,从第一存储装置中读取第一比较结果和另一子数据段,并将当前读取的第一比较结果和另一子数据段存储至第二存储装置。
具体地,运算电路12获取运算指令之后,根据运算指令以及数据读取容量,向第一存储装置13发送读写请求,之后读写电路203按照预设的数据读取方式,根据该读写请求,从第一存储装置13中读取第一比较结果和另一子数据段,并将当前读取的第一比较结果和另一子数据段存储至第二存储装置201。
可选的,可以根据第二存储装置201中存储地址的顺序,依次读取另一子数据段,也可以不按照地址的存储顺序进行读取,在此不做具体限定。
S970,根据运算指令,将第一比较结果与另一子数据段中的N个子数据逐一进行比较,将比较得到的最小值作为第二比较结果存储至第二存储装置以及第一存储装置中。
其中,第二比较结果指的是第一段子数据段与另一段子数据段中的最小值。
具体地,运算电路12根据获取的运算指令,将第一比较结果与另一子数据段中的N个子数据逐一进行比较,即将第一段子数据段中的最小值与另一子数据段中的N个子数据逐一进行比较,并将比较得到的最小值作为第二比较结果,之后,将得到的第二比较结果存储在第二存储装置201中,再通过读写电路203将第二比较结果存储到第一存储装置13中。
以此类推进行循环比较运算,直至完成所有子数据段的比较运算,得到源操作数中所有子数据中的最小值。
具体地,循环比较运算可以通过控制计数器累加一次或递减一次实现,直至计数器从初始值累加至目标循环次数,或计数器从目标循环次数递减为初始值。本申请实施例中,计数器的初始值可以为0。
进一步地,目标循环次数是根据源操作数的数据大小进行计算得到。当将第二存储装置201的第一比较结果通过读写电路203存储到第一存储装置13后,控制计数器累加一次,之后继续根据运算指令以及数据读取容量,从第一存储装置13中读取第一比较结果和另一子数据段,直至计数器从0累加至目标循环次数。或者控制计数器递减一次,直至计数器将目标循环次数递减为0,停止从第一存储装置13中执行读取操作。
上述数据处理方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。
在其中一个实施例中,上述步骤S966还可以包括:
将子数据段中的第一个子数据与第二个子数据进行比较,当第一个子数据小于或等于第二个子数据时,继续将第一个子数据与第三个子数据进行比较,直到完成与第N个子数据的比较,得到N个子数据中的最小值。
具体地,运算电路12获取到子数据段之后,将当前读取的子数据段中的第一个子数据与第二个子数据进行比较,当第一个子数据小于或等于第二个子数据时,继续将第一个子数据与第三个子数据进行比较,直到完成与第N个子数据的比较,N个子数据中的最小值作为第一比较结果。
进一步,运算电路12获取到第一比较结果和另一子数据段之后,将当前读取的第一比较结果和另一子数据段中每一个子数据依次进行比较,直到完成与另一子数据段中第N个子数据的比较,将比较得到的最小值作为第一比较结果。
例如,当前读取的第一子数据段为多个数据,第一子数据段有a1={1,2,3,4,5,6,7,8},将a1中的多个子数据逐一进行比较,得到a1中的最小值1,将该最小值1作为第一比较结果,将该最小值1存储至第一存储装置13以及第二存储装置201中;再次读取第一比较结果和第二子数据段a2={0,3,4,5,2,10,7,2},将第一比较结果1与a2中的每一个子数据依次进行比较,得到最小值0,将该最小值0作为第二比较结果存储至第一存储装置13以及第二存储装置201中;依次类推。
本实施例中通过将子数据段中的N个子数据进行逐一比较,并将比较得到的最小值存储在第一存储装置13中,完成了最小值的寻找。
在一个实施例中,请继续参阅图20,提供了一种指令拆解方法,可以包括:
S500,获取运算指令,根据运算指令解析出第一源操作数的数据大小。
具体地,指令处理电路111获取到运算指令,根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小发送给循环次数处理电路115。
S600,根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量。
其中,预设的拆分粒度存储在拆分粒度电路114中,可以为片上的静态存储器中的某个存储空间。
具体地,循环次数处理电路115接收到第一源操作数的数据大小,根据第一源操作数的数据大小以及预设的拆分粒度,计算得到目标循环次数。数据读取容量计算电路116根据循环次数处理电路115发送的循环次数、指令处理电路111发送的第一源操作数的数据大小以及预设的拆分粒度,计算得到数据读取容量。并将数据读取容量以及循环次数发送给运算电路12。
可选地,计算目标循环次数的公式可以是:
其中,Count表示为目标循环次数,data size表示为第一源操作数的数据大小,拆分粒度即为预设的拆分粒度。
计算数据读取容量的公式可以是:
其中,data real size表示数据读取容量,拆分粒度即为预设的拆分粒度,未处理数据大小表示第一源操作数的数据大小减去数据读取容量以后剩余的数据大小。
例如,控制器电路11根据运算指令解析出第一源操作数的数据大小为1000byte,预设的拆分粒度为512 byte,可以得到目标循环次数为2,两次的数据读取容量分别为512byte和488byte。
S700,根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中。
具体地,运算电路12接收到运算指令,根据运算指令以及数据读取容量,向第一存储装置13发起读写请求,通过读写电路203按照预设的数据读取方式,从第一存储装置13中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置201中。
S800,根据运算指令执行运算操作,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。
具体地,运算电路12根据接收到的运算指令,执行相应的运算操作,获得当前运算结果,将当前运算结果存储至第二存储装置201中,并将第二存储装置201中的当前运算结果存储至第一存储装置13中。
S900,返回根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量的步骤,直至当前循环次数等于初始值或所述当前循环次数等于所述目标循环次数,完成运算指令对应的运算操作。
具体地,上述步骤可以包括:将目标循环次数递减一次或从初始值累加一次,之后,返回上述步骤S600,根据第一操作数的数据大小以及预设的拆分粒度,确定数据读取容量的步骤,直至目标循环次数递减为初始值或从初始值累加至目标循环次数。本申请实施例中,计数器的初始值可以为0。
进一步地,运算电路12执行完运算操作后,将当前运算结果存储至第一存储装置13中后,循环次数处理电路115将目标循环次数递减一次,之后继续执行步骤S600,直至目标循环次数递减为0。或者从0累加一次,之后继续执行步骤S600,直至累加到目标循环次数。
进一步地,运算电路12可以根据运算指令中的操作码Scr Op进行判断,判断出源操作数的个数,当源操作数为两个时,根据指令获取第二子数据,然后执行运算操作。当源操作数为三个时,根据指令获取第二子数据以及第三子数据,然后执行运算操作。对于第二子数据和/或第三子数据的读取,具体可参见上文中的描述。
本实施例中的指令拆解方法,通过译码阶段得到第一源操作数的数据大小,并且对第一源操作数进行拆分,循环读取,将大数据拆分成小数据进行运算处理,通过对操作数按照数据读取容量循环读取,使得运算处理时的能够容纳的数据大小满足要求,并且加快运算速度。
应该理解的是,虽然图6-32的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且图6-32中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图33所示,提供了一种数据处理装置,包括:获取模块100、读取模块200、运算模块300和计数模块400,其中:
获取模块100,用于获取运算指令。
读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中。
运算模块300,用于根据运算指令执行运算操作,获得当前运算结果,并将当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和运算模块300,直至完成运算指令对应的运算操作。
进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、运算模块300和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
关于数据处理装置的具体限定可以参见上文中对于数据处理方法的限定,在此不再赘述。上述数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
当上述运算指令为Atomic MAX_VEC时,该运算模块300可以包括两目最大值运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一数据包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。两目最大值运算模块301,用于根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于或等于第二子数据,将获得的当前比较结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和两目最大值运算模块301,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、两目最大值运算模块301和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic MIN_VEC时,该运算模块300可以包括两目最小值运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一数据包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。两目最小值运算模块302,用于根据运算指令获取第二子数据,判断当前读取的第一子数据是否小于第二子数据,将获得的当前比较结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和两目最小值运算模块302,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、两目最小值运算模块302和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic AND时,该运算模块300可以包括逻辑与运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑与运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。逻辑与运算模块303,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑与运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和逻辑与运算模块303,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、逻辑与运算模块303和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic OR时,该运算模块300可以包括逻辑或运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑或运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。逻辑或运算模块304,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑或运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和逻辑或运算模块304,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、逻辑或运算模块304和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic XOR时,该运算模块300可以包括逻辑异或运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数之间的逻辑异或运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。逻辑异或运算模块305,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行逻辑异或运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和逻辑异或运算模块305,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、逻辑异或运算模块305和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic EXCH时,该运算模块300可以包括交换运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数之间的交换运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。交换运算模块306,根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据进行交换运算,将获得的以及中,并将第二存储装置的当前运算结果存储于第一存储装置中,之后,循环调用读取模块200和交换运算模块306,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、交换运算模块306和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic CAS时,该运算模块300可以包括替换运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数、第二源操作数以及第三源操作数之间的替换运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据,第三源操作数包括的第三子数据。读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置。替换运算模块307,根据运算指令获取第二子数据以及第三子数据,将当前读取的第一子数据、第二子数据以及第三子数据进行替换运算,将获得的当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和替换运算模块307,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、替换运算模块307和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic INC时,该运算模块300可以包括累加运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据;读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取第一子数据存储至第二存储装置中,其中,所述一存储装置为片外存储装置,第二存储装置为片上存储装置;累加运算模块308,用于根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于或等于第二子数据,当第一子数据大于或等于第二子数据时,将第一子数据复位,并将复位后的第一子数据作为当前比较结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和累加运算模块308,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、累加运算模块308和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic DEC时,该运算模块300可以包括减法运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据;读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置;减法运算模块309,用于根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储至第二存储装置以及所述第一存储装置中;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和减法运算模块309,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、减法运算模块309和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic ADD时,该运算模块300可以包括加法运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一源操作数包括第一子数据,第二源操作数包括第二子数据;读取模块,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置;减法运算模块310,用于根据运算指令获取第二子数据,将当前读取的第一子数据与第二子数据相加得到当前运算结果,将当前运算结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和加法运算模块310,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、加法运算模块310和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic NOT时,该运算模块300可以包括逻辑非运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现源操作数的逻辑非运算,源操作数包括子数据段,每一子数据段包括N个子数据;读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段,并将当前读取的子数据段存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置;逻辑非运算模块311,用于根据运算指令,将子数据段中的N个子数据逐一进行逻辑非运算得到当前运算结果,并将当前运算结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和逻辑非运算模块311,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、逻辑非运算模块311和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic MAX_SCALAR时,该运算模块300可以包括单目最大值运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现源操作数的比较运算,源操作数包括子数据段,每一子数据段包括N个子数据;读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段,并将当前读取的子数据段存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置;单目最大值运算模块312,用于根据运算指令,将子数据段中的N个子数据逐一进行比较得到N个子数据中的最大值,并将最大值作为第一比较结果存储至第二存储装置以及第一存储装置中;从第一存储装置中读取第一比较结果和另一子数据段,并将当前读取的第一比较结果和另一子数据段存储至第二存储装置;根据运算指令,将第一比较结果与另一所述子数据段中的N个子数据逐一进行比较,将比较得到的最大值作为第二比较结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和单目最大值运算模块312,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、单目最大值运算模块312和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
当上述运算指令为Atomic MIN_SCALAR时,该运算模块300可以包括单目最小值运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现源操作数的比较运算,源操作数包括子数据段,每一子数据段包括N个子数据;读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取子数据段,并将当前读取的子数据段存储至第二存储装置,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置;单目最小值运算模块313,用于根据运算指令,将子数据段中的N个子数据逐一进行比较得到N个子数据中的最小值,并将最小值作为第一比较结果存储至第二存储装置以及第一存储装置中;从第一存储装置中读取第一比较结果和另一子数据段,并将当前读取的第一比较结果和另一子数据段存储至第二存储装置;根据运算指令,将第一比较结果与另一所述子数据段中的N个子数据逐一进行比较,将比较得到的最小值作为第二比较结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和单目最小值运算模块313,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、单目最小值运算模块313和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
本申请实施例中,上述运算模块的具体结构与上述实施例中运算电路的结构类似,具体可参见图2与上文中的描述。
在一个实施例中,如图34所示,提供了一种指令拆解装置,包括:获取模块500、循环次数处理模块600、数据读取容量计算模块700、读取模块800以及运算模块900,其中:
获取模块500,用于获取运算指令,根据运算指令解析出第一源操作数的数据大小。
循环次数处理模块600,用于根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数。数据读取容量计算模块700,用于根据第一源操作数的数据大小以及预设的拆分粒度,得到数据读取容量。读取模块800,用于根据运算指令以及数据读取容量,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中。运算模块900,用于根据运算指令执行运算操作,将获得的当前运算结果存储至第二存储装置以及第一存储装置中。循环次数处理模块600,用于将目标循环次数递减一次或从0累加一次,之后,调用数据读取容量计算模块700、读取模块800以及运算模块900,直至当前循环次数等于初始值或所述当前循环次数等于所述目标循环次数,完成运算指令对应的运算操作。
本申请实施例中,该运算模块900的工作原理与上述运算模块300及运算电路的工作原理相同,具体可参见上文中的描述。关于指令拆解装置的具体限定可以参见上文中对于指令拆解方法的限定,在此不再赘述。上述数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现以下步骤:
获取运算指令,其中,该运算指令用于实现源操作数之间的运算,第一源操作数包括至少一个第一子数据。
根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中;其中,第一存储装置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所述的方法,其特征在于,返回根据第一源操作数的数据大小以及预设的拆分粒度,得到数据读取容量的步骤,直至当前循环次数等于所述目标循环次数,完成运算指令对应的运算操作的步骤,还包括:
每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,则将所述目标循环次数递减一次,获得所述当前循环次数,之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,得到数据读取容量的步骤,直至所述目标循环次数递减为初始值,确定所述当前循环次数等于初始值;
或者,每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,将所述循环次数从初始值累加一次,获得所述当前循环次数;之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,确定得到数据读取容量的步骤,直至从初始值累加至所述循环次数,确定所述当前循环次数等于所述目标循环次数。
4.根据权利要求1所述的方法,其特征在于,所述方法还包括:
所述当前运算结果存储至所述第一存储装置中时,所述当前运算结果的存储地址与所述当前读取的第一子数据的存储地址一致。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
根据所述运算指令,确定所述运算指令中包括的源操作数的数量。
6.根据权利要求5所述的方法,其特征在于,当确定所述运算指令中包括的所述源操作数的数量为两个时,所述根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中的步骤,包括:
根据所述运算指令获取第二子数据;
根据所述运算指令、所述第一子数据和所述第二子数据,执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中。
7.根据权利要求6所述的方法,其特征在于,第二源操作数为立即数或所述第二存储装置中存储的数据,所述根据所述运算指令获取第二子数据的步骤,包括:
若所述第二源操作数为立即数,则复制所述第二源操作数,复制后的所述第二源操作数作为所述第二子数据,使所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等;
其中,所述第二源操作数包括所述第二子数据。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括如下步骤:
根据所述运算指令,将所述源操作数A或所述源操作数B作为所述第二源操作数。
9.根据权利要求5所述的方法,其特征在于,当确定所述运算指令中包括的所述源操作数的数量为三个时,所述的根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中的步骤,包括:
根据所述运算指令获取第二子数据以及第三子数据;
根据所述运算指令、所述第一子数据、所述第二子数据以及所述第三子数据,执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中。
10.根据权利要求9所述的方法,其特征在于,第二源操作数为立即数或所述第二存储装置中存储的数据,以及第三源操作数为立即数或所述第二存储装置中存储的数据,所述根据所述运算指令获取第二子数据以及第三子数据的步骤,包括:
若所述第二源操作数为立即数,则复制所述第二源操作数,复制后的所述第二源操作数作为所述第二子数据,使所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等;
其中,所述第二源操作数包括所述第二子数据;
若所述第三源操作数为立即数,则复制所述第三源操作数,复制后的所述第三源操作数作为所述第三子数据,使所述第三子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第三源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第三子数据,当前读取的所述第三子数据的数量与所述第一子数据的数量相等;
其中,所述第三源操作数包括所述第三子数据。
11.一种数据处理方法,其特征在于,所述方法包括:
获取运算指令,其中,所述运算指令用于实现源操作数之间的运算,第一源操作数包括至少一个第一子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令执行运算操作,将获得当前运算结果存储至所述第二存储装置以及所述第一存储装置中;
返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据的步骤,直至完成所述运算指令对应的运算操作;
所述按照预设的数据读取方式的步骤,包括:
每当将所述当前运算结果存储至所述第一存储装置中时,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的所述第一子数据的起始地址。
12.一种处理器,其特征在于,所述处理器包括指令处理电路、读写电路、拆分粒度电路、循环次数处理电路、数据读取容量计算电路、运算电路、循环次数处理电路以及与所述运算电路邻近设置的第二存储装置;
其中,所述拆分粒度电路连接所述循环次数处理电路,所述循环次数处理电路分别连接所述指令处理电路以及所述数据读取容量计算电路,所述数据读取容量计算电路连接所述运算电路,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述指令处理电路用于获取运算指令,并根据所述运算指令解析出第一源操作数的数据大小;
所述运算电路用于根据所述运算指令向所述第一存储装置发送读写请求;
所述拆分粒度电路用于存储预设的拆分粒度;
所述循环次数处理电路用于根据所述第一源操作数的数据大小以及预设的拆分粒度,得到循环次数;
所述数据读取容量计算电路用于根据所述第一源操作数的数据大小以及预设的拆分粒度,得到数据读取容量;
所述读写电路,用于根据第一读写请求以及所述数据读取容量,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路,还用于根据所述运算指令执行运算操作,并将当前运算结果存储至所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作;
所述读写电路,还用于每当将所述当前运算结果存储至所述第一存储装置中时,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的所述第一子数据的起始地址。
13.根据权利要求12所述的处理器,其特征在于,
所述循环次数处理电路,还用于每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,则将目标循环次数递减一次,获得当前循环次数,之后,返回根据所述第一源操作数的数据大小以及所述预设的拆分粒度,得到数据读取容量的步骤,直至所述目标循环次数递减为初始值,确定所述当前循环次数等于所述目标循环次数;
所述循环次数处理电路,还用于每当将当前运算结果存储至所述第二存储装置以及所述第一存储装置中之后,将所述循环次数从初始值累加一次,获得所述当前循环次数;之后,返回根据所述第一源操作数的数据大小以及预设的拆分粒度,确定得到数据读取容量的步骤,直至当前循环次数等于初始值或所述当前循环次数等于所述目标循环次数,完成运算指令对应的运算操作。
14.一种指令拆解装置,其特征在于,所述装置包括:
获取模块,用于获取运算指令,根据所述运算指令解析出第一源操作数的数据大小,其中,所述第一源操作数包括至少一个第一子数据;
循环次数计算模块,用于根据所述第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数;
数据读取容量计算模块,用于根据所述第一源操作数的数据大小以及所述预设的拆分粒度,得到数据读取容量;
读取模块,用于根据所述运算指令以及所述数据读取容量,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中;
运算模块,用于根据所述运算指令执行运算操作,将获得的当前运算结果存储至所述第二存储装置以及所述第一存储装置中,之后,调用所述循环次数计算模块、所述数据读取容量计算模块、所述读取模块和所述运算模块,直至完成运算指令对应的运算操作;
所述读取模块,还用于每当将所述当前运算结果存储至所述第一存储装置中时,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的所述第一子数据的起始地址。
15.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至11中任一项所述的方法的步骤。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811457930.4A CN111258646B (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 |
---|---|---|---|
CN201811457930.4A CN111258646B (zh) | 2018-11-30 | 2018-11-30 | 指令拆解方法、处理器、指令拆解装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111258646A CN111258646A (zh) | 2020-06-09 |
CN111258646B true CN111258646B (zh) | 2023-06-13 |
Family
ID=70944804
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811457930.4A Active CN111258646B (zh) | 2018-11-30 | 2018-11-30 | 指令拆解方法、处理器、指令拆解装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111258646B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113934678A (zh) * | 2020-06-29 | 2022-01-14 | 中科寒武纪科技股份有限公司 | 一种计算装置、集成电路芯片、板卡、设备和计算方法 |
CN114461978B (zh) * | 2022-04-13 | 2022-07-08 | 苏州浪潮智能科技有限公司 | 数据处理方法、装置、电子设备及可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102298515A (zh) * | 2010-06-22 | 2011-12-28 | 国际商业机器公司 | 执行对两个操作数的操作并随后存储原始值的方法和*** |
CN107688466A (zh) * | 2016-08-05 | 2018-02-13 | 北京中科寒武纪科技有限公司 | 一种运算装置及其操作方法 |
CN108509592A (zh) * | 2018-03-30 | 2018-09-07 | 贵阳朗玛信息技术股份有限公司 | 基于Redis的数据存储方法、读取方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2411976B (en) * | 2003-12-09 | 2006-07-19 | Advanced Risc Mach Ltd | A data processing apparatus and method for moving data between registers and memory |
-
2018
- 2018-11-30 CN CN201811457930.4A patent/CN111258646B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102298515A (zh) * | 2010-06-22 | 2011-12-28 | 国际商业机器公司 | 执行对两个操作数的操作并随后存储原始值的方法和*** |
CN107688466A (zh) * | 2016-08-05 | 2018-02-13 | 北京中科寒武纪科技有限公司 | 一种运算装置及其操作方法 |
CN108509592A (zh) * | 2018-03-30 | 2018-09-07 | 贵阳朗玛信息技术股份有限公司 | 基于Redis的数据存储方法、读取方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN111258646A (zh) | 2020-06-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109145158B (zh) | 一种布隆过滤器中数据的处理方法以及布隆过滤器 | |
CN111258646B (zh) | 指令拆解方法、处理器、指令拆解装置及存储介质 | |
TWI489383B (zh) | 遮蔽排列指令的裝置及方法 | |
TW201344565A (zh) | 用以對緊縮資料執行差異解碼之系統,設備,及方法 | |
US20170017489A1 (en) | Semiconductor device | |
US20170139713A1 (en) | Vector store instruction having instruction-specified byte count to be stored supporting big and little endian processing | |
CN111258635B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258644B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258770B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258652B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258637B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258643B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258645B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258640B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258638B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258639B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN111258636B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN109271383B (zh) | 动态标签处理方法、装置、计算机设备和存储介质 | |
CN108345534B (zh) | 生成和处理跟踪流的装置和方法 | |
CN111258647B (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
CN116932202A (zh) | 一种访存方法、处理器、电子设备及可读存储介质 | |
CN114064122A (zh) | 指令处理方法、装置、设备及存储介质 | |
CN114064123A (zh) | 指令处理方法、装置、设备及存储介质 | |
CN111258642A (zh) | 数据处理方法、处理器、数据处理装置及存储介质 | |
US20160110199A1 (en) | Device and method for processing counter data |
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 |