CN111258645A - 数据处理方法、处理器、数据处理装置及存储介质 - Google Patents

数据处理方法、处理器、数据处理装置及存储介质 Download PDF

Info

Publication number
CN111258645A
CN111258645A CN201811457851.3A CN201811457851A CN111258645A CN 111258645 A CN111258645 A CN 111258645A CN 201811457851 A CN201811457851 A CN 201811457851A CN 111258645 A CN111258645 A CN 111258645A
Authority
CN
China
Prior art keywords
subdata
storage device
data
source operand
operation 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.)
Granted
Application number
CN201811457851.3A
Other languages
English (en)
Other versions
CN111258645B (zh
Inventor
不公告发明人
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Cambricon Information Technology Co Ltd
Original Assignee
Shanghai Cambricon Information Technology Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shanghai Cambricon Information Technology Co Ltd filed Critical Shanghai Cambricon Information Technology Co Ltd
Priority to CN201811457851.3A priority Critical patent/CN111258645B/zh
Priority to PCT/CN2019/121064 priority patent/WO2020108496A1/zh
Publication of CN111258645A publication Critical patent/CN111258645A/zh
Application granted granted Critical
Publication of CN111258645B publication Critical patent/CN111258645B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N3/00Computing arrangements based on biological models
    • G06N3/02Neural networks
    • G06N3/06Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons
    • G06N3/063Physical realisation, i.e. hardware implementation of neural networks, neurons or parts of neurons using electronic means

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Biomedical Technology (AREA)
  • Biophysics (AREA)
  • Neurology (AREA)
  • Artificial Intelligence (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Evolutionary Computation (AREA)
  • General Health & Medical Sciences (AREA)
  • Molecular Biology (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请涉及一种数据处理方法、处理器、数据处理装置及存储介质。所述数据处理方法包括:根据运算指令从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,获取第二子数据,并且判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储于第一存储装置中,之后返回继续从第一存储装置中读取第一子数据,直至完成该运算指令对应的相关运算操作。通过将大数据拆分成小数据进行循环运算处理,通过对操作数按照数据读取容量循环读取,使得运算处理时的能够容纳的数据大小满足要求,且加快运算速度。

Description

数据处理方法、处理器、数据处理装置及存储介质
技术领域
本申请涉及数据处理技术领域,特别是涉及一种数据处理方法、处理器、数据处理装置及存储介质。
背景技术
原子操作是指不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束,中间不会有任何线程切换(例如共享变量i执行累加,非原子操作情况下多个核同时i++的结果会出错)。在多核处理器系统当中,多个处理器核共享同一块存储空间,通常的数据传输技术可能无法保证原子性,即同一时间可能有多个处理器核访问同一地址。
在实际程序当中,运算结果存储在一个存储空间内,该存储空间具有一定的地址范围,由于该存储空间可能在运算完成之前被其他处理器核访问,传统的做法是先将该存储空间的数据读到存储单元,然后将运算结果存在该存储单元,指令运算结束之后将该存储单元的结果写回到该存储空间。然而,如果运算期间有其它的处理器核访问该存储空间,就会得到一个错误的结果,破坏这次累加的原子性。
发明内容
基于此,有必要针对上述技术问题,提供一种能够实现原子操作期间单独访问片外存储空间的数据处理方法、处理器、数据处理装置及存储介质。
一种数据处理方法,所述方法包括:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的减法运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;
之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。
在其中一个实施例中,所述方法还包括:
根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否与第二预设值相等,当所述第一子数据与所述第二预设值相等时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
在其中一个实施例中,所述方法还包括:
当所述第一子数据与所述第二预设值不相等时,将所述第一子数据与所述第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
在其中一个实施例中,每当将所述当前比较结果存储至所述第一存储装置中之后,所述方法还包括如下步骤:
控制计数器累加一次或递减一次,之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。
在其中一个实施例中,所述运算指令的指令格式,包括指令类别、指令类型、第一源操作数、第二源操作数、目标操作数及操作码;
所述指令类别用于确定所述运算指令是否为原子操作运算指令;
所述指令类型用于确定所述运算指令的运算类型;
所述操作码用于配置源操作数的个数;
所述目标操作数用于表示所述当前比较结果。
一种用于数据处理方法的处理器,所述处理器包括运算电路、读写电路以及与所述运算电路邻近设置的第二存储装置,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述运算电路用于获取运算指令,根据所述运算指令向所述第一存储装置发送读写请求;
所述运算指令用于实现第一源操作数和第二源操作数的减法运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
所述读写电路用于根据所述读写请求,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路用于获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作。
在其中一个实施例中,所述运算电路包括主处理电路和一个以上的从处理电路,一个以上的所述从处理电路均连接至所述主处理电路;
所述减法运算模块置于所述主处理电路中。
一种数据处理装置,所述装置包括:
获取模块,用于获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
读取模块,用于根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
运算模块,用于根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的减法运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;
之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。
上述数据处理方法、处理器、数据处理装置及存储介质,根据运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,然后根据运算指令获取第二子数据,并且判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储于第二存储装置以及第一存储装置中;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果存储于第二存储装置以及第一存储装置中,之后返回继续从第一存储装置中读取第一子数据,直至完成该运算指令对应的相关运算操作。通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性。对处理器的算术运算功能进一步扩展,通过对该第一存储装置实现独占访问,提高了原子操作期间的运算效率。
附图说明
图1为一个实施例中处理器的结构示意图;
图2为一个实施例中运算模块的结构示意图;
图3为另一个实施例中处理器的结构示意图;
图4为另一个实施例中处理器的结构示意图;
图5为另一个实施例中处理器的结构示意图;
图6为一个实施例中数据处理方法的流程示意图;
图7为另一个实施例中数据处理方法的流程示意图;
图8为另一个实施例中指令拆解方法的流程示意图;
图9为一个实施例中步骤S300的流程示意图;
图10为另一个实施例中步骤S300的流程示意图;
图11为一个实施例中Atomic DEC方法的流程示意图;
图12为另一个实施例中Atomic DEC方法的流程示意图;
图13为一个实施例中数据处理装置的结构框图;
图14为一个实施例中指令拆解装置的结构框图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
本申请的说明书和权利要求书及所述附图中的术语“第一”、“第二”和“第三”等是用于区别不同对象,而不是用于描述特定顺序。此外,术语“包括”和“具有”以及它们任何变形,意图在于覆盖不排他的包含。例如包含了一系列步骤或单元的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可选地还包括没有列出的步骤或单元,或可选地还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。
其中,运算电路12用于接收运算指令,对该运算指令进行解析,并根据该运算指令实现相应的运算操作。可选地,该运算指令可以具有特定的指令格式,该运算电路可以对根据该运算指令的指令格式进行解析,获得该运算指令的指令类型、源操作数及操作码等指令信息,从而根据该运算指令实现相应的运算操作。
可选地,本申请实施例中的运算指令可以是原子操作运算指令,如下表1所示,该运算指令的指令格式可以包括有指令类别Name、指令类型Op、第一源操作数、第二源操作数、目标操作数Dst及操作码Src Op等等。
其中,指令类别Name用于确定指令的类别(指令的类别包括原子操作运算指令和其他普通运算指令),即指令类别用于确定运算指令是否为原子操作运算指令。指令类型Op用于确定运算指令的运算类型,运算类型用于表明该运算指令实现何种运算,以区分该运算的具体功能,例如,运算类型可以是累加运算、递减运算、最大值运算、最小值运算、逻辑与运算、逻辑或运算、逻辑异或运算、替换运算、交换运算等。片外是指处理器外部,即片外存储装置是指设置在处理器外部的存储装置;片上是指处理器内部,即片上存储装置是指设置在处理器内部的存储装置。
本申请提供的数据处理方法,可以应用于如图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的独占使用,从而可以保证运算的原子性及运算结果的准确性。作码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所示:
指令域 位宽 含义
Name 8 指令类别,Atomic类为15
Op 8 指令类型,区分具体功能
Src0addr 49 源操作数0地址,仅片外,按byte对齐
Dst addr 32 目的地址,仅片上
Src1 32 源操作数A,立即数/地址(由Src1vec决定)
Src2 32 源操作数B,立即数/地址(由Src2vec决定)
IO config 9 原子操作读写数据流ID,用于请求拆分
Data size 32 原子操作读写数据大小,按byte对齐
Scr Op 3 操作码,配置源操作数个数
Data type 3 数据类型
Src1 vec 1 源操作数A类型(立即数/地址)
Src2 vec 1 源操作数B类型(立即数/地址)
其中,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:
源操作数 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中读取第一子数据。
在另一个实施例中,请参阅图8,上述数据处理方法还可以包括以下步骤:
S500,获取运算指令,根据运算指令解析出第一源操作数的数据大小。
具体地,指令处理电路111获取到运算指令,根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小发送给循环次数处理电路115。
S600,根据第一源操作数的数据大小以及预设的拆分粒度,得到循环次数以及数据读取容量。
具体地,预设的拆分粒度存储在拆分粒度电路114中,可以为片上的静态存储器中的某个存储空间。循环次数处理电路115接收到第一源操作数的数据大小,根据第一源操作数的数据大小以及预设的拆分粒度,计算得到循环次数。数据读取容量计算电路116根据循环次数处理电路115发送的循环次数、指令处理电路111发送的第一源操作数的数据大小以及预设的拆分粒度,计算得到数据读取容量,并将数据读取容量以及循环次数发送给运算电路12。
可选地,循环次数处理电路115可以按照如下公式计算循环次数:
Figure BDA0001888082910000151
其中,Count表示为循环次数,data size表示为第一源操作数的数据大小,拆分粒度即为预设的拆分粒度。本申请实施例中,将data size除以预设的拆分粒度的商值向上取整,获得循环次数Count。
数据读取容量计算电路116可以按照如下公式计算数据读取容量:
data real size=min{未处理数据大小,拆分粒度}
其中,data real size表示数据读取容量,拆分粒度即为预设的拆分粒度,未处理数据大小表示第一源操作数的数据大小减去数据读取容量以后剩余的数据大小。
例如,控制器电路11根据运算指令解析出第一源操作数的数据大小为1000byte,预设的拆分粒度为512byte,可以得到循环次数为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等,上述各个运算指令的具体执行过程具体可参见上文的描述。
可选地,当源操作数的数量为两个时,请一并参阅图9,两个源操作数分别为第一源操作数和第二源操作数,上述步骤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等,上述各个运算指令的具体执行过程具体可参见上文的描述。
可选地,当源操作数为三个时,请参阅图10,三个源操作数分别为第一源操作数、第二源操作数和第三源操作数,上述步骤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 DEC时,在一个实施例中,如图11所示的数据处理方法,该方法可以包括以下步骤:
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中读取第一子数据。
上述数据处理方法中,通过循环读取数据进行比较,将每次循环的比较结果不断地存储到第一存储装置中,对该第一存储装置实现独占访问,避免其它的处理器核访问该第一存储装置,保证了原子操作的原子性;同时,通过第一源操作数中第一子数据与第二源操作数中第二子数据的多次比较,直至第一源操作数与第二源操作数相同,可以通过比较次数获取两个源操作数之间的最大差值,节省了繁琐的差值计算过程。
作为一种可选的实施方式,如图12所示的数据处理方法,该方法可以包括以下步骤:
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中,完成了运算指令的减法运算。
在一个实施例中,请继续参阅图8,提供了一种指令拆解方法,可以包括:
S500,获取运算指令,根据运算指令解析出第一源操作数的数据大小。
具体地,指令处理电路111获取到运算指令,根据运算指令解析出第一源操作数的数据大小,并将该第一源操作数的数据大小发送给循环次数处理电路115。
S600,根据第一源操作数的数据大小以及预设的拆分粒度,得到目标循环次数以及数据读取容量。
具体地,预设的拆分粒度存储在拆分粒度电路114中,可以为片上的静态存储器中的某个存储空间。循环次数处理电路115接收到第一源操作数的数据大小,根据第一源操作数的数据大小以及预设的拆分粒度,计算得到目标循环次数。数据读取容量计算电路116根据循环次数处理电路115发送的循环次数、指令处理电路111发送的第一源操作数的数据大小以及预设的拆分粒度,计算得到数据读取容量,并将数据读取容量以及目标循环次数发送给运算电路12。
可选地,循环次数处理电路115可以按照如下公式计算目标循环次数:
Figure BDA0001888082910000191
其中,Count表示为目标循环次数,data size表示为第一源操作数的数据大小,拆分粒度即为预设的拆分粒度。本申请实施例中,将data size除以预设的拆分粒度的商值向上取整,获得目标循环次数Count。
计算数据读取容量的公式可以是:
data real size=min{未处理数据大小,拆分粒度}
其中,data real size表示数据读取容量,拆分粒度即为预设的拆分粒度,未处理数据大小表示第一源操作数的数据大小减去数据读取容量以后剩余的数据大小。
例如,控制器电路11根据运算指令解析出第一源操作数的数据大小为1000byte,预设的拆分粒度为512byte,可以得到循环次数为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进行判断,判断出源操作数的个数,当源操作数为两个时,根据指令获取第二子数据,然后执行运算操作。当源操作数为三个时,根据指令获取第二子数据以及第三子数据,然后执行运算操作。对于第二子数据和/或第三子数据的读取,具体可参见上文中的描述。
本实施例中的指令拆解方法,通过译码阶段得到第一源操作数的数据大小,并且对第一源操作数进行拆分,循环读取,将大数据拆分成小数据进行运算处理,通过对操作数按照数据读取容量循环读取,使得运算处理时的能够容纳的数据大小满足要求,并且加快运算速度。
在其中一个实施例中,根据运算指令的指令格式,将源操作数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作为第二源操作数进行选择。
应该理解的是,虽然图6-12的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且图6-12中的至少一部分步骤可以包括多个子步骤或者多个阶段,这些子步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些子步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤的子步骤或者阶段的至少一部分轮流或者交替地执行。
在一个实施例中,如图13所示,提供了一种数据处理装置,包括:获取模块100、读取模块200、运算模块300和计数模块400,其中:
获取模块100,用于获取运算指令。
读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中。
运算模块300,用于根据运算指令执行运算操作,获得当前运算结果,并将当前运算结果存储至第二存储装置以及第一存储装置中,之后,循环调用读取模块200和运算模块300,直至完成运算指令对应的运算操作。
进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、运算模块300和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
关于数据处理装置的具体限定可以参见上文中对于数据处理方法的限定,在此不再赘述。上述数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
当上述运算指令为Atomic DEC时,该运算模块300可以包括减法运算模块,其中,获取模块100,用于获取运算指令,其中,运算指令用于实现第一源操作数以及第二源操作数的比较运算,第一源操作数包括至少一个第一子数据,第二源操作数包括至少一个第二子数据;读取模块200,用于根据数据读取容量以及运算指令,按照预设的数据读取方式,从第一存储装置中读取第一子数据,并将当前读取的第一子数据存储至第二存储装置中,其中,第一存储装置为片外存储装置,第二存储装置为片上存储装置;减法运算模块309,用于根据运算指令获取第二子数据,判断当前读取的第一子数据是否大于第二子数据,当第一子数据大于第二子数据时,将第二子数据作为当前比较结果存储至第二存储装置以及所述第一存储装置中;当第一子数据小于或等于第二子数据时,将第一子数据与第一预设值相减,并将相减后的第一子数据作为当前比较结果存储至第二存储装置以及第一存储装置中。之后,循环调用读取模块200和减法运算模块309,直至完成运算指令对应的运算操作。进一步地,该数据处理装置可以包括计数模块400,用于在将第二存储装置中的当前运算结果存储于第一存储装置之后,控制计数器累加一次或递减一次,之后,循环调用读取模块200、减法运算模块309和计数模块400,直至计数器从初始值累加至目标循环次数或计数器从目标循环次数递减为初始值。本申请实施例中,初始值可以为0。
本申请实施例中,上述运算模块的具体结构与上述实施例中运算电路的结构类似,具体可参见图2与上文中的描述。
在一个实施例中,如图14所示,提供了一种指令拆解装置,包括:获取模块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 (20)

1.一种数据处理方法,其特征在于,所述方法包括:
获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的减法运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;
之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至完成所述运算指令对应的运算操作。
2.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否与第二预设值相等,当所述第一子数据与所述第二预设值相等时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
3.根据权利要求2所述的数据处理方法,其特征在于,所述方法还包括:
当所述第一子数据与所述第二预设值不相等时,将所述第一子数据与所述第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
4.根据权利要求1所述的数据处理方法,其特征在于,所述判断当前读取的所述第一子数据是否大于所述第二子数据的步骤,包括:
将当前读取的所述第一子数据与所述第二子数据进行对位比较,判断当前读取的所述第一子数据是否大于所述第二子数据。
5.根据权利要求1至4中任一项所述的数据处理方法,其特征在于,所述第二源操作数为立即数或所述第二存储装置中存储的数据,所述方法还包括:
若所述第二源操作数为立即数,则复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若所述第二源操作数为所述第二存储装置中存储的数据,则从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
6.根据权利要求5所述的数据处理方法,其特征在于,所述方法还包括如下步骤:
根据所述运算指令,将所述源操作数A和/或所述源操作数B作为所述第二源操作数。
7.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
每当将所述当前比较结果存储于所述第一存储装置中之后,将上一次读取的所述第一子数据的结束地址的下一位地址,作为当前读取的第一子数据的起始地址。
8.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
所述当前比较结果存储于所述第一存储装置中时,所述当前比较结果的存储地址与所述当前读取的第一子数据的存储地址一致。
9.根据权利要求1所述的数据处理方法,其特征在于,所述将所述当前比较结果存储至所述第二存储装置以及所述第一存储装置中的步骤,包括:
将所述当前比较结果存储至所述第二存储装置中;
将所述第二存储装置中的所述当前比较结果存储至所述第一存储装置中。
10.根据权利要求1所述的数据处理方法,其特征在于,每当将所述当前比较结果存储至所述第一存储装置中之后,所述方法还包括如下步骤:
控制计数器累加一次或递减一次,之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述计数器从初始值累加至目标循环次数,或所述计数器从所述目标循环次数递减为初始值,完成所述运算指令对应的运算操作。
11.根据权利要求1所述的数据处理方法,其特征在于,每当将所述当前比较结果存储至所述第一存储装置中之后,所述方法还包括如下步骤:
控制计数器累加一次或递减一次,之后,返回根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据的步骤,直至所述第一源操作数与所述第二源操作数相同。
12.根据权利要求1所述的数据处理方法,其特征在于,所述方法还包括:
根据所述运算指令,获得所述第一源操作数的数据大小;
根据所述第一源操作数的数据大小以及预设的拆分粒度,得到所述目标循环次数。
13.根据权利要求1所述的数据处理方法,其特征在于,
所述运算指令的指令格式,包括指令类别、指令类型、第一源操作数、第二源操作数、目标操作数及操作码;
所述指令类别用于确定所述运算指令是否为原子操作运算指令;
所述指令类型用于确定所述运算指令的运算类型;
所述操作码用于配置源操作数的个数;
所述目标操作数用于表示所述当前比较结果。
14.一种用于数据处理方法的处理器,其特征在于,所述处理器包括运算电路、读写电路以及与所述运算电路邻近设置的第二存储装置,所述第二存储装置能够通过所述读写电路与所述处理器外部的第一存储装置连接;
其中,所述运算电路用于获取运算指令,根据所述运算指令向所述第一存储装置发送读写请求;
所述运算指令用于实现第一源操作数和第二源操作数的减法运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
所述读写电路用于根据所述读写请求,从所述第一存储装置中读取第一子数据,并将所述第一子数据存储至所述第二存储装置;
所述运算电路用于获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;之后,再次向所述第一存储装置发送读写请求,直至完成所述运算指令对应的运算操作。
15.根据权利要求14所述的处理器,其特征在于,所述处理器还包括数据选择器,所述运算电路包括减法运算模块,所述数据选择器连接在所述运算电路和所述读写电路之间,所述数据选择器用于选通所述减法运算模块与所述读写电路的连接通路;
所述减法运算模块用于获取所述第二子数据,并根据所述运算指令判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置中;通过所述读写电路和所述数据选择器将所述第二存储装置的所述当前比较结果存储至所述第一存储装置中。
16.根据权利要求15所述的处理器,其特征在于,所述减法运算模块包括减法单元及与所述减法单元连接的结果输出单元;
所述减法单元用于将当前读取的所述第一子数据与所述第二子数据进行对位比较,判断当前读取的所述第一子数据是否大于第二子数据;
所述结果输出单元用于当所述第一子数据大于所述第二子数据时,将所述第二子数据作为所述当前比较结果;
所述结果输出单元用于当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为所述当前比较结果。
17.根据权利要求15所述的处理器,其特征在于,
所述减法运算模块还用于根据所述运算指令,确定所述第二源操作数为立即数或所述第二存储装置中存储的数据,
若确定所述第二源操作数为立即数,则所述减法运算模块复制所述立即数,复制获得的多个所述立即数作为所述第二子数据,所述第二子数据的数量与当前读取的所述第一子数据的数量相等;
若确定所述第二源操作数为所述第二存储装置中存储的数据,则所述读写电路从所述第二存储装置的预设存储地址中读取所述第二子数据,当前读取的所述第二子数据的数量与所述第一子数据的数量相等。
18.根据权利要求14至17中任一项所述的处理器,其特征在于,所述运算电路包括主处理电路和一个以上的从处理电路,一个以上的所述从处理电路均连接至所述主处理电路;
所述减法运算模块置于所述主处理电路中。
19.一种数据处理装置,其特征在于,所述装置包括:
获取模块,用于获取运算指令,其中,所述运算指令用于实现第一源操作数以及第二源操作数的比较运算,所述第一源操作数包括至少一个第一子数据,所述第二源操作数包括至少一个第二子数据;
读取模块,用于根据数据读取容量以及所述运算指令,按照预设的数据读取方式,从第一存储装置中读取所述第一子数据,并将当前读取的所述第一子数据存储至第二存储装置中,其中,所述第一存储装置为片外存储装置,所述第二存储装置为片上存储装置;
运算模块,用于根据所述运算指令获取所述第二子数据,判断当前读取的所述第一子数据是否大于所述第二子数据,当所述第一子数据大于所述第二子数据时,将所述第二子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中;当所述第一子数据小于或等于所述第二子数据时,将所述第一子数据与第一预设值相减,并将相减后的所述第一子数据作为当前比较结果存储至所述第二存储装置以及所述第一存储装置中。
20.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至13中任一项所述的方法的步骤。
CN201811457851.3A 2018-11-30 2018-11-30 数据处理方法、处理器、数据处理装置及存储介质 Active CN111258645B (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN201811457851.3A CN111258645B (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
CN201811457851.3A CN111258645B (zh) 2018-11-30 2018-11-30 数据处理方法、处理器、数据处理装置及存储介质

Publications (2)

Publication Number Publication Date
CN111258645A true CN111258645A (zh) 2020-06-09
CN111258645B CN111258645B (zh) 2022-12-09

Family

ID=70950297

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811457851.3A Active CN111258645B (zh) 2018-11-30 2018-11-30 数据处理方法、处理器、数据处理装置及存储介质

Country Status (1)

Country Link
CN (1) CN111258645B (zh)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102298515A (zh) * 2010-06-22 2011-12-28 国际商业机器公司 执行对两个操作数的操作并随后存储原始值的方法和系统
CN104794100A (zh) * 2015-05-06 2015-07-22 西安电子科技大学 基于片上网络的异构多核处理系统
US20180011707A1 (en) * 2016-07-07 2018-01-11 Texas Instruments Incorporated Data processing apparatus having streaming engine with read and read/advance operand coding
CN107688853A (zh) * 2016-08-05 2018-02-13 北京中科寒武纪科技有限公司 一种用于执行神经网络运算的装置及方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102298515A (zh) * 2010-06-22 2011-12-28 国际商业机器公司 执行对两个操作数的操作并随后存储原始值的方法和系统
CN104794100A (zh) * 2015-05-06 2015-07-22 西安电子科技大学 基于片上网络的异构多核处理系统
US20180011707A1 (en) * 2016-07-07 2018-01-11 Texas Instruments Incorporated Data processing apparatus having streaming engine with read and read/advance operand coding
CN107688853A (zh) * 2016-08-05 2018-02-13 北京中科寒武纪科技有限公司 一种用于执行神经网络运算的装置及方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
李涛 等: "《多态并行阵列机中处理单元的设计与实现》", 《西安邮电大学学报》 *

Also Published As

Publication number Publication date
CN111258645B (zh) 2022-12-09

Similar Documents

Publication Publication Date Title
JP7227680B2 (ja) ノンブロッキング高性能トランザクションクレジットシステムを備えるマルチコアバスアーキテクチャ
JP5512803B2 (ja) ベクトル命令を取り扱うためのデータ処理装置および方法
BR102020019657A2 (pt) aparelhos, métodos e sistemas para instruções de um acelerador de operações de matriz
CN105393240A (zh) 具有辅助异步向量处理器的异步处理器的方法和装置
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
TWI740851B (zh) 用於向量負載指示之資料處理設備、方法及電腦程式
JP6807073B2 (ja) 高速ベクトルによる動的なメモリ競合検出
US5577256A (en) Data driven type information processor including a combined program memory and memory for queuing operand data
JP2001273275A (ja) データ駆動型情報処理装置
CN110377339B (zh) 长延时指令处理装置、方法以及设备、可读存储介质
CN111258644B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258646A (zh) 指令拆解方法、处理器、指令拆解装置及存储介质
CN111258635B (zh) 数据处理方法、处理器、数据处理装置及存储介质
RU2598594C2 (ru) Нечувствительный к задержке буфер транзакции для связи с квитированием
CN111258645B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258642B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258639B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258643B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258637B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258636B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258638B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258647B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258652B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258640B (zh) 数据处理方法、处理器、数据处理装置及存储介质
CN111258770A (zh) 数据处理方法、处理器、数据处理装置及存储介质

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