CN110825437A - 用于处理数据的方法和装置 - Google Patents
用于处理数据的方法和装置 Download PDFInfo
- Publication number
- CN110825437A CN110825437A CN201810906537.2A CN201810906537A CN110825437A CN 110825437 A CN110825437 A CN 110825437A CN 201810906537 A CN201810906537 A CN 201810906537A CN 110825437 A CN110825437 A CN 110825437A
- Authority
- CN
- China
- Prior art keywords
- instruction
- read
- write
- memory
- address
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 71
- 230000004044 response Effects 0.000 claims description 32
- 238000013473 artificial intelligence Methods 0.000 claims description 18
- 230000008569 process Effects 0.000 claims description 18
- 238000004364 calculation method Methods 0.000 claims description 14
- 238000004590 computer program Methods 0.000 claims description 10
- 239000013598 vector Substances 0.000 abstract description 14
- 238000010586 diagram Methods 0.000 description 12
- 230000006870 function Effects 0.000 description 7
- 238000004891 communication Methods 0.000 description 5
- 238000001514 detection method Methods 0.000 description 5
- 238000007667 floating Methods 0.000 description 4
- 230000003287 optical effect Effects 0.000 description 4
- 238000005516 engineering process Methods 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 230000000644 propagated effect Effects 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 238000013135 deep learning Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 231100001267 hazard identification Toxicity 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
- G06F9/3887—Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Advance Control (AREA)
Abstract
本申请实施例公开了用于处理数据的方法和装置。该方法的一具体实施方式包括:读取第一单指令流多数据流指令。对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。根据第一源地址从存储器中读取源操作数。根据源操作数计算得到执行结果;根据第一目的地址将执行结果写回存储器中。该实施方式可以在单指令流多数据流指令时不需要使用向量寄存器,而是将处理器中的存储器部分复用为向量寄存器,从而节省了不必要的面积开销。
Description
技术领域
本申请实施例涉及计算机技术领域,具体涉及用于处理数据的方法和装置。
背景技术
在通用处理器或者是针对一些有计算密集型特点的例如深度学习领域的处理器中,为了提高计算性能,往往通过增加SIMD(Single Instruction Multiple Data,单指令多数据流)指令来实现多路并行计算。在SIMD指令中,只需要译码一条指令,就可以并行读取多个源操作数,并行完成多个计算。
SIMD已经被广泛应用于通用处理器以及一些其它计算密集型处理器中。SIMD指令的存在大大提高的并行数据并行计算能力,但是需要使用额外的向量寄存器来满足并行计算对数据访存更高的要求,普通的标量寄存器已经无法提供与SIMD指令相匹配的数据访问效率。如果想要获得更加灵活高效的SIMD指令计算效率,需要比较大容量的向量寄存器,这将会对资源和面积提出更高的需求。
发明内容
本申请实施例提出了用于处理数据的方法和装置。
第一方面,本申请实施例提供了一种用于处理数据的方法,包括:读取第一单指令流多数据流指令;对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址;根据第一源地址从存储器中读取源操作数;根据源操作数计算得到执行结果;根据第一目的地址将执行结果写回存储器中。
在一些实施例中,该方法还包括:响应于读取到第二单指令流多数据流指令或装载指令,对第二单指令流多数据流指令或装载指令译码,得到第二源操作数在存储器中的第二源地址;确定预先生成的写后读表中是否存在第二源地址,其中,写后读表用于记录正在执行过程中的、未将执行结果写回到存储器中的单指令流多数据流指令或存储指令的目的操作数在存储器中的地址;若写后读表中存在第二源地址,则暂停第二单指令流多数据流指令或装载指令的流水线。
在一些实施例中,该方法还包括:响应于读取到第二单指令流多数据流指令或存储指令,对第二单指令流多数据流指令或存储指令译码,得到第二目的操作数在存储器中的第二目的地址;确定预先生成的读后写表中是否存在第二目的地址,其中,读后写表用于记录正在执行过程中的、未从存储器中读取出源操作数的单指令流多数据流指令或装载指令的源操作数在存储器中的地址;若读后写表中存在第二目的地址,则暂停第二单指令流多数据流指令或存储指令的流水线。
在一些实施例中,该方法还包括:响应于检测到写后读表中不存在第二源地址并且读后写表中不存在第二目的地址,结束第二单指令流多数据流指令或第二存储指令的流水线的暂停。
在一些实施例中,写后读表包括标志位和存储器写回地址;以及写后读表通过以下步骤生成:在对第一单指令流多数据流指令或存储指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第一计数器,其中,第一计数器用于索引写后读表中的表格位置对应的存储器写回地址;将第一计数器索引到的写后读表中的表格位置对应的存储器写回地址替换为第一目的地址,以及将索引到的写后读表中的表格位置对应的标志位设置为有效。
在一些实施例中,写后读表通过以下步骤生成:响应于检测到第一单指令流多数据流指令或存储指令的执行结果写回到存储器中,累加第二计数器,其中,第二计数器用于索引写后读表中的表格位置对应的标志位;将第二计数器索引到写后读表中的表格位置中的标志位设置为无效。
在一些实施例中,读后写表包括标志位和存储器读出地址;以及读后写表通过以下步骤生成:在对第一单指令流多数据流指令或第一装载指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第三计数器,其中,第三计数器用于索引读后写表中的表格位置对应的存储器读出地址;将第三计数器索引到的读后写表中的表格位置对应的存储器读出地址替换为第一源地址,以及将索引到的读后写表中的表格位置对应的标志位设置为有效。
在一些实施例中,读后写表通过以下步骤生成:响应于检测到从存储器中根据第一源地址读取第一单指令流多数据流指令或第一装载指令的源操作数,累加第四计数器,其中,第四计数器用于索引读后写表中的表格位置对应的标志位;将第四计数器索引到读后写表中的表格位置中的标志位设置为无效。
第二方面,本申请实施例提供了一种用于处理数据的装置,包括:取指单元,被配置成读取第一单指令流多数据流指令;译码单元,被配置成对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址;读取单元,被配置成根据第一源地址从存储器中读取源操作数;计算单元,被配置成根据源操作数计算得到执行结果;写入单元,被配置成根据第一目的地址将执行结果写回存储器中。
在一些实施例中,该装置还包括数据冒险判断单元,被配置成:响应于读取到第二单指令流多数据流指令或装载指令,对第二单指令流多数据流指令或装载指令译码,得到第二源操作数在存储器中的第二源地址;确定预先生成的写后读表中是否存在第二源地址,其中,写后读表用于记录正在执行过程中的、未将执行结果写回到存储器中的单指令流多数据流指令或存储指令的目的操作数在存储器中的地址;若写后读表中存在第二源地址,则暂停第二单指令流多数据流指令或装载指令的流水线。
在一些实施例中,数据冒险判断单元进一步被配置成:响应于读取到第二单指令流多数据流指令或存储指令,对第二单指令流多数据流指令或存储指令译码,得到第二目的操作数在存储器中的第二目的地址;确定预先生成的读后写表中是否存在第二目的地址,其中,读后写表用于记录正在执行过程中的、未从存储器中读取出源操作数的单指令流多数据流指令或装载指令的源操作数在存储器中的地址;若读后写表中存在第二目的地址,则暂停第二单指令流多数据流指令或存储指令的流水线。
在一些实施例中,数据冒险判断单元进一步被配置成:响应于检测到写后读表中不存在第二源地址并且读后写表中不存在第二目的地址,结束第二单指令流多数据流指令或第二存储指令的流水线的暂停。
在一些实施例中,写后读表包括标志位和存储器写回地址;以及写后读表通过以下步骤生成:在对第一单指令流多数据流指令或存储指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第一计数器,其中,第一计数器用于索引写后读表中的表格位置对应的存储器写回地址;将第一计数器索引到的写后读表中的表格位置对应的存储器写回地址替换为第一目的地址,以及将索引到的写后读表中的表格位置对应的标志位设置为有效。
在一些实施例中,写后读表通过以下步骤生成:响应于检测到第一单指令流多数据流指令或存储指令的执行结果写回到存储器中,累加第二计数器,其中,第二计数器用于索引写后读表中的表格位置对应的标志位;将第二计数器索引到写后读表中的表格位置中的标志位设置为无效。
在一些实施例中,读后写表包括标志位和存储器读出地址;以及读后写表通过以下步骤生成:在对第一单指令流多数据流指令或第一装载指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第三计数器,其中,第三计数器用于索引读后写表中的表格位置对应的存储器读出地址;将第三计数器索引到的读后写表中的表格位置对应的存储器读出地址替换为第一源地址,以及将索引到的读后写表中的表格位置对应的标志位设置为有效。
在一些实施例中,读后写表通过以下步骤生成:响应于检测到从存储器中根据第一源地址读取第一单指令流多数据流指令或第一装载指令的源操作数,累加第四计数器,其中,第四计数器用于索引读后写表中的表格位置对应的标志位;将第四计数器索引到读后写表中的表格位置中的标志位设置为无效。
第三方面,本申请实施例提供了一种人工智能芯片,包括:一个或多个处理器;存储装置,其上存储有一个或多个程序,当一个或多个程序被一个或多个处理器执行,使得一个或多个处理器实现如第一方面中任一的方法。
第四方面,本申请实施例提供了一种计算机可读介质,其上存储有计算机程序,其中,程序被处理器执行时实现如第一方面中任一的方法。
本申请实施例提供的用于处理数据的方法和装置,对于SIMD指令,格式可以保持和普通标量计算指令相同,只是在译码阶段从寄存器堆中读取到的内容不再是直接送到执行单元中计算的源操作数了,而是源操作数在存储器中的地址。从存储器中根据地址读取一个或两个源操作数的过程也是在执行阶段完成。这种方式,既可以节省掉以往方案中向量寄存器的资源,同时指令也保持了比较简单的格式,简洁、易用。
附图说明
通过阅读参照以下附图所作的对非限制性实施例所作的详细描述,本申请的其它特征、目的和优点将会变得更明显:
图1是本申请的一个实施例可以应用于其中的示例性系统架构图;
图2是根据本申请的用于处理数据的方法的一个实施例的流程图;
图3是根据本申请的用于处理数据的方法的又一个实施例的流程图;
图4是根据本申请的用于处理数据的方法的另一个实施例的流程图;
图5是根据本申请的用于处理数据的方法的一个应用场景的示意图;
图6是根据本申请的用于处理数据的装置的一个实施例的结构示意图;
图7是适于用来实现本申请实施例的人工智能芯片的计算机系统的结构示意图。
具体实施方式
下面结合附图和实施例对本申请作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释相关发明,而非对该发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与有关发明相关的部分。
需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。下面将参考附图并结合实施例来详细说明本申请。
图1示出了可以应用本申请的用于处理数据的方法或用于处理数据的装置的实施例的示例性系统架构100。
如图1所示,系统架构100可以包括AI(Artificial Intelligence,人工智能)芯片101、CPU(Central Processing Unit,中央处理器)102、PCIE103。AI芯片也被称为AI加速器或计算卡,即专门用于处理人工智能应用中的大量计算任务的模块(其他非计算任务仍由CPU负责)。PCIE103用以在AI芯片101和CPU102之间提供通信链路的高速串行计算机扩展总线。
AI芯片101可包括取指单元1011、译码单元1012、寄存器1013、数据冒险判断单元1014、ALU(arithmetic and logic unit,算术逻辑单元)1015、SIMD1016、LD/ST1017、存储器1018、写回单元1019。
取指单元1011用于从CPU获取待执行的指令。该指令可以是标量计算指令,也可以是向量计算指令,例如SIMD指令。或者访存指令,例如LOAD指令(装载指令)、STORE指令(存储指令)。
译码单元1012用于对指令译码,得到操作码和地址码。操作码表示要执行的操作性质,即执行什么操作,或做什么。地址码是操作码执行时的操作对象的地址。计算机执行一条指定的指令时,必须首先分析这条指令的操作码是什么,以决定操作的性质和方法,然后才能控制计算机其他各部件协同完成指令表达的功能。这个分析工作由译码单元1012来完成。
数据冒险判断单元1014用于在接收到SIMD指令或者STORE指令或LOAD指令时,先做数据冒险判断,如果存在数据冒险则暂停流水线,直到数据冒险消失再结束流水线的暂停。在处理器的流水线执行过程中,还需要判断是否存在数据冒险,否则可能得到错误的计算结果。流水线中的数据冒险分为三类,分别是RAW(Read After Write,写后读)类型数据冒险、WAR(Write After Read,读后写)类型数据冒险和WAW(Write After Write,写后写)类型数据冒险。其中RAW类型数据冒险表示一条指令试图在其前面的一条指令写一个数据之前读取它。WAR类型数据冒险表示一条指令试图在其前面的一条指令读一个数据之前写该数据。WAW类型数据冒险表示一条指令试图在其前面一条指令写一个数据之前写改数据。当发生数据冒险时,以RAW类型数据冒险为例,就需要将当前译码的指令停顿,直到等到前面的指令将数据写回这个数据之后才结束停顿,开始执行当前译码好的指令,并读取已经被前面指令写回的数据,这样就保证了计算结果的正确性,很多处理器中还会采用直通技术来处理数据冒险。因此,数据冒险的判断和识别是非常重要的一步,简洁、高效地识别流水线中可能存在的数据冒险,是处理器中不可或缺的部分。
寄存器1013可包括数据寄存器和指令寄存器。数据寄存器可以保存一条正在译码的指令。指令寄存器用来保存当前正在执行的一条指令。
ALU1015是能实现多组算术运算和逻辑运算的组合逻辑电路。
需要说明的是,本申请实施例所提供的用于处理数据的方法一般由AI芯片101执行,相应地,用于处理数据的装置一般设置于AI芯片101。
SIMD1016是SIMD指令的执行单元。可包括读取单元,被配置成根据源地址从存储器中读取源操作数。计算单元,被配置成根据源操作数计算得到执行结果。写入单元,被配置成根据目的操作数的目的地址将执行结果写回存储器中。
LD/ST1017,LD即LOAD用于从内存中取数据,而ST即STORE用于存数据到内存。
存储器1018中存储了操作数。
写回单元1019用于将ALU1015和LD/ST1017写回到寄存器中。
应该理解,图1中的AI芯片、CPU、PCIE的数目仅仅是示意性的。根据实现需要,可以具有任意数目的AI芯片、CPU、PCIE。
继续参考图2,示出了根据本申请的用于处理数据的方法的一个实施例的流程200。该用于处理数据的方法,包括以下步骤:
步骤201,读取第一单指令流多数据流指令。
在本实施例中,用于处理数据的方法的执行主体(例如图1所示的AI芯片)可以通过PCIE从CPU读取待处理的指令。指令可包括第一单指令流多数据流指令,即SIMD指令,为了区分不同的单指令流多数据流指令,用第一单指令流多数据流指令、第二单指令流多数据流指令来区分。指令还可包括访存指令,例如LOAD指令、STORE指令。或者用于ALU处理的指令。
步骤202,对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。
在本实施例中,译码指的是按预定的指令格式对取回的第一单指令流多数据流指令进行拆分和解译,识别区分出不同的指令类别以及获取源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。普通的标量计算指令中需要提供的是源操作数和目的操作数的寄存器的索引。计算过程中,在译码阶段从寄存器堆中根据寄存器索引读取到寄存器的内容,送到执行阶段的ALU或者LD/ST执行单元中。而对于向量计算指令,也就是SIMD指令,格式可以保持和标量计算指令相同,只是在译码阶段从寄存器堆中读取到的内容不再是直接送到执行单元中计算的源操作数了,而是源操作数在存储器中的地址。可以在汇编阶段控制SIMD指令的写入值或地址。从而使得译码结果是地址。
步骤203,根据第一源地址从存储器中读取源操作数。
在本实施例中,从存储器中根据第一源地址读取一个或两个源操作数的过程也是在执行阶段完成。这种方式,既可以节省掉以往方案中向量寄存器的资源,同时指令也保持了比较简单的格式,简洁、易用。
步骤204,根据源操作数计算得到执行结果。
在本实施例中,对一组源操作数(又称“数据向量”)中的每一个分别执行相同的计算操作得到执行结果,从而实现空间上的并行性。
步骤205,根据第一目的地址将执行结果写回存储器中。
在本实施例中,译码后得到目的操作数的目的地址。可根据该目的地址将执行结果写回存储器中。而不是写回寄存器中。SIMD指令可以很大程度上面提高处理器数据计算的效率,但由于普通的标量寄存器无法满足SIMD指令更大的数据访问需求,一般的处理器中采用了增加专用的向量寄存器的方式来支持,这样需要增加额外的存储资源。本发明中没有使用向量寄存器,而是复用了处理器中部分的访存资源来充当向量寄存器,这样有效节约了面积。
本申请的上述实施例提供的方法通过将存储器复用为SIMD的向量寄存器,无需专用的向量寄存器,从而节省了不必要的面积开销,并降低了成本。
目前处理器中常用的数据冒险识别是放在指令译码阶段的,流水线数据冒险检测硬件通过比较相邻指令的源操作数和目的操作数来发现可能存在的数据冒险,例如MIPS(Microprocessor without interlocked piped stages,无内部互锁流水级的微处理器)中的定点计算流水线就是采用了这种冒险判断的方式。对于MIPS中的浮点计算流水线,也是通过比较相邻指令中的源操作数和目的操作数的方法,只是由于浮点计算在执行阶段消耗的周期数较多,需要做的比较也变多了,但是判断思路和定点计算一致。
对于SIMD指令,由于其计算的流水线级数比较长,尤其是对于浮点计算来说,所以当该指令的前面或者后面有另一条SIMD指令或是LD/ST类型的访存指令时,就可能发生数据冒险。由于WAW类型的数据冒险往往是通过编译器优化掉第一条无用的写指令,所以这里主要讨论RAW类型数据冒险和WAR类型数据冒险。
进一步参考图3,其示出了用于处理数据的方法的又一个实施例的流程300。该用于处理数据的方法的流程300,包括以下步骤:
步骤301,读取第一单指令流多数据流指令。
步骤302,对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。
步骤303,根据第一源地址从存储器中读取源操作数。
步骤304,根据源操作数计算得到执行结果。
步骤305,根据第一目的地址将执行结果写回存储器中。
步骤301-305与步骤201-205基本相同,因此不再赘述。
步骤306,响应于读取到第二单指令流多数据流指令或装载指令,对第二单指令流多数据流指令或装载指令译码,得到第二源操作数在存储器中的第二源地址。
在本实施例中,引发RAW类型数据冒险的有以下几种情况,当SIMD指令或STORE指令后面紧跟了另一条SIMD指令,且后者的源操作数地址与前者的目的操作数地址相同,或者当SIMD指令或STORE后面紧跟了一条LOAD指令,且LOAD指令的源地址同前面SIMD指令或STORE指令的目的操作数地址,这种情况下就会引发RAW类型数据冒险。因此,响应于读取到第二单指令流多数据流指令或装载指令,先对第二单指令流多数据流指令或装载指令译码,得到第二源操作数在存储器中的第二源地址。再判断第二源地址是否与其它SIMD指令或STORE指令的目的操作数在存储器中的地址冲突。
步骤307,确定预先生成的写后读表中是否存在第二源地址。
在本实施例中,数据冒险的判断通过维护两张长度比较小的表来实现,一张写后读表(RAW表)针对RAW类型数据冒险,一张读后写表(WAR表)针对WAR类型数据冒险。写后读表用于记录正在执行过程中的、未将执行结果写回到存储器中的单指令流多数据流指令或存储指令的目的操作数在存储器中的地址。表的格式同图5中所示,RAW表中存放目前仍然没有返回结果到存储器中的还在执行过程中的SIMD指令或STORE指令的目的操作数在存储器中的地址。每当译码一条SIMD指令或者是LOAD/STORE指令,并发送到执行阶段之后,需要预先经过该数据冒险判断模块的判断检测。检测的方法是,将指令的源操作数在存储器中的地址与RAW冒险表中有效地址一一对比,如果有相同的,说明存在RAW类型数据冒险。将指令的目的操作数在存储器中的地址与WAR冒险表中的有效地址一一对比,如果有相同的,说明存在WAR类型数据冒险。
步骤308,若写后读表中存在第二源地址,则暂停第二单指令流多数据流指令或装载指令的流水线。
在本实施例中,如果有数据冒险则暂停流水线,或者通过其它数据冒险处理技术,如果不存在数据冒险了,那么可以把流水线暂停结束,将执行发送到相应的执行单元中。这张表中除了存放访问存储器的地址,还额外增加了标志位,来表示存放的内容是否为有效地址,只有有效地址才参与比较,无效地址不参与对比。如果不增加标志位,表内存放的地址总是需要一个默认初始地址,如果指令中的源操作数在存储器中的地址或目的操作数在存储器中的地址刚好是这个默认初始地址,那对比得到的冒险结果就是不可信的。有了标志位可以有效解决这个问题,并且在清零的时候,只需要清零标志位,不需要清零整个地址内容,硬件实现更加简洁。
在本实施例的一些可选的实现方式中,写后读表通过以下步骤生成:
在对第一单指令流多数据流指令或存储指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第一计数器。将第一计数器索引到的写后读表中的表格位置对应的存储器写回地址替换为第一目的地址,以及将索引到的写后读表中的表格位置对应的标志位设置为有效。响应于检测到第一单指令流多数据流指令或存储指令的执行结果写回到存储器中,累加第二计数器。将第二计数器索引到写后读表中的表格位置中的标志位设置为无效。
其中,该写后读表的维护通过两个计数器来维护。如图5中所示,以RAW表为例,当一条SIMD指令进入数据冒险判断单元中时,第一计数器加一,并将SIMD指令的目的操作数在存储器中的地址写入第一计数器索引到的表格位置,将标志位置为有效。当一个SIMD指令的结果写回到存储器中时,则将第二计数器加1,并将第二计数器索引到的表格中的相应位置的标志位置为无效。第一计数器用于索引写后读表中的表格位置对应的存储器写回地址。数据冒险判断过程在译码之后的执行阶段实现。这里的第一单指令流多数据流指令或第二单指令流多数据流指令仅仅为了区分不同的单指令流多数据流指令。
通过上述逻辑,可以实现对表格的比较简洁、高效的维护。
从图3中可以看出,与图2对应的实施例相比,本实施例中的用于处理数据的方法的流程300突出了对写后读类型数据冒险进行判断的步骤。由此,本实施例描述的方案可以提高指令的写后读类型数据冒险的判断的及时性和准确性。
进一步参考图4,其示出了用于处理数据的方法的又一个实施例的流程400。该用于处理数据的方法的流程400,包括以下步骤:
步骤401,读取第一单指令流多数据流指令。
步骤402,对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。
步骤403,根据第一源地址从存储器中读取源操作数。
步骤404,根据源操作数计算得到执行结果。
步骤405,根据第一目的地址将执行结果写回存储器中。
步骤401-405与步骤201-205基本相同,因此不再赘述。
步骤406,响应于读取到第二单指令流多数据流指令或存储指令,对第二单指令流多数据流指令或存储指令译码,得到第二目的操作数在存储器中的第二目的地址。
在本实施例中,对于SIMD指令,由于其计算的流水线级数比较长,尤其是对于浮点计算来说,所以当该指令的前面或者后面有另一条SIMD指令或是LD/ST类型的访存指令时,就可能发生数据冒险。由于WAW类型的数据冒险往往是通过编译器优化掉第一条无用的写指令,所以这里主要讨论RAW类型数据冒险和WAR类型数据冒险。引发WAR类型数据冒险的情况是,当SIMD指令或LOAD指令后面紧跟了一条STORE指令,或者当SIMD指令或LOAD指令后面紧跟了一条SIMD指令,由于执行单元中无法保证SIMD读存储器的请求一定发生在STORE指令写寄存器请求之前,所以可能发生WAR类型的数据冒险。因此,响应于读取到第二单指令流多数据流指令或存储指令,对第二单指令流多数据流指令或存储指令译码,得到第二目的操作数在存储器中的第二目的地址。再判断第二目的地址是否与其它SIMD指令或LOAD指令的源操作数在存储器中的地址冲突。
步骤407,确定预先生成的读后写表中是否存在第二目的地址。
在本实施例中,数据冒险的判断通过维护两张长度比较小的表来实现,一张写后读表(RAW表)针对RAW类型数据冒险,一张读后写表(WAR表)针对WAR类型数据冒险。WAR表中存放已经进入到执行阶段但还未从存储器中读取源操作数的SIMD指令或LOAD指令的源操作数在存储器中的地址。每当译码一条SIMD指令或者是LOAD/STORE指令,并发送到执行阶段之后,需要预先经过该数据冒险判断模块的判断检测。检测的方法是,将指令的源操作数在存储器中的地址与RAW冒险表中有效地址一一对比,如果有相同的,说明存在RAW类型数据冒险。将指令的目的操作数在存储器中的地址与WAR冒险表中的有效地址一一对比,如果有相同的,说明存在WAR类型数据冒险。
步骤408,若读后写表中存在第二目的地址,则暂停第二单指令流多数据流指令或存储指令的流水线。
在本实施例中,如果有数据冒险则暂停流水线,或者通过其它数据冒险处理技术,如果不存在数据冒险了,那么可以把流水线暂停结束,将执行发送到相应的执行单元中。这张表中除了存放访问存储器的地址,还额外增加了标志位,来表示存放的内容是否为有效地址,只有有效地址才参与比较,无效地址不参与对比。如果不增加标志位,表内存放的地址总是需要一个默认初始地址,如果指令中的源操作数在存储器中的地址或目的操作数在存储器中的地址刚好是这个默认初始地址,那对比得到的冒险结果就是不可信的。有了标志位可以有效解决这个问题,并且在清零的时候,只需要清零标志位,不需要清零整个地址内容,硬件实现更加简洁。
在本实施例的一些可选的实现方式中,读后写表通过以下步骤生成:
在对第一单指令流多数据流指令或第一装载指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第三计数器,其中,第三计数器用于索引读后写表中的表格位置对应的存储器读出地址。将第三计数器索引到的读后写表中的表格位置对应的存储器读出地址替换为第一源地址,以及将索引到的读后写表中的表格位置对应的标志位设置为有效。响应于检测到从存储器中根据第一源地址读取第一单指令流多数据流指令或第一装载指令的源操作数,累加第四计数器,其中,第四计数器用于索引读后写表中的表格位置对应的标志位。将第四计数器索引到读后写表中的表格位置中的标志位设置为无效。
其中,该读后写表的维护通过两个计数器来维护。类似于图5,以WAR表为例,当一条SIMD指令进入数据冒险判断单元中时,第三计数器加一,并将SIMD指令的源操作数在存储器中的地址写入第三计数器索引到的表格位置,将标志位置为有效。当一个SIMD指令的操作数从存储器中读取出时,则将第四计数器加1,并将第四计数器索引到的表格中的相应位置的标志位置为无效。第三计数器用于索引读后写表中的表格位置对应的存储器读出地址。数据冒险判断过程在译码之后的执行阶段实现。
通过上述逻辑,可以实现对表格的比较简洁、高效的维护。
在本实施例的一些可选的实现方式中,响应于检测到写后读表中不存在第二源地址并且读后写表中不存在第二目的地址,结束第二单指令流多数据流指令或第二存储指令的流水线的暂停。如果即不存在RAW数据冒险也不存在WAR数据冒险,则可把流水线停顿结束,将执行发送到相应的执行单元中。
从图4中可以看出,与图2对应的实施例相比,本实施例中的用于处理数据的方法的流程400突出了对读后写类型数据冒险进行判断的步骤。由此,本实施例描述的方案可以提高指令的读后写类型数据冒险的判断的及时性和准确性。
进一步参考图6,作为对上述各图所示方法的实现,本申请提供了一种用于处理数据的装置的一个实施例,该装置实施例与图2所示的方法实施例相对应,该装置具体可以应用于各种电子设备中。
如图6所示,本实施例的用于处理数据的装置600包括:取指单元601、译码单元602、读取单元603、计算单元604和写入单元605。其中,取指单元601,被配置成读取第一单指令流多数据流指令。译码单元602,被配置成对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。读取单元603,被配置成根据第一源地址从存储器中读取源操作数。计算单元604,被配置成根据源操作数计算得到执行结果。写入单元605,被配置成根据第一目的地址将执行结果写回存储器中。
在本实施例中,用于处理数据的装置600的取指单元601、译码单元602、读取单元603、计算单元604和写入单元605的具体处理可以参考图2对应实施例中的步骤201、步骤202、步骤203、步骤204和步骤205。
在本实施例的一些可选的实现方式中,装置600还包括数据冒险判断单元(未示出),被配置成:响应于读取到第二单指令流多数据流指令或装载指令,对第二单指令流多数据流指令或装载指令译码,得到第二源操作数在存储器中的第二源地址。确定预先生成的写后读表中是否存在第二源地址,其中,写后读表用于记录正在执行过程中的、未将执行结果写回到存储器中的单指令流多数据流指令或存储指令的目的操作数在存储器中的地址。若写后读表中存在第二源地址,则暂停第二单指令流多数据流指令或装载指令的流水线。
在本实施例的一些可选的实现方式中,数据冒险判断单元进一步被配置成:响应于读取到第二单指令流多数据流指令或存储指令,对第二单指令流多数据流指令或存储指令译码,得到第二目的操作数在存储器中的第二目的地址。确定预先生成的读后写表中是否存在第二目的地址,其中,读后写表用于记录正在执行过程中的、未从存储器中读取出源操作数的单指令流多数据流指令或装载指令的源操作数在存储器中的地址。若读后写表中存在第二目的地址,则暂停第二单指令流多数据流指令或存储指令的流水线。
在本实施例的一些可选的实现方式中,数据冒险判断单元进一步被配置成:响应于检测到写后读表中不存在第二源地址并且读后写表中不存在第二目的地址,结束第二单指令流多数据流指令或第二存储指令的流水线的暂停。
在本实施例的一些可选的实现方式中,写后读表包括标志位和存储器写回地址。写后读表通过以下步骤生成:在对第一单指令流多数据流指令或存储指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第一计数器,其中,第一计数器用于索引写后读表中的表格位置对应的存储器写回地址。将第一计数器索引到的写后读表中的表格位置对应的存储器写回地址替换为第一目的地址,以及将索引到的写后读表中的表格位置对应的标志位设置为有效。
在本实施例的一些可选的实现方式中,写后读表通过以下步骤生成:响应于检测到第一单指令流多数据流指令或存储指令的执行结果写回到存储器中,累加第二计数器,其中,第二计数器用于索引写后读表中的表格位置对应的标志位。将第二计数器索引到写后读表中的表格位置中的标志位设置为无效。
在本实施例的一些可选的实现方式中,读后写表包括标志位和存储器读出地址。读后写表通过以下步骤生成:在对第一单指令流多数据流指令或第一装载指令译码后得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址之后,累加第三计数器,其中,第三计数器用于索引读后写表中的表格位置对应的存储器读出地址。将第三计数器索引到的读后写表中的表格位置对应的存储器读出地址替换为第一源地址,以及将索引到的读后写表中的表格位置对应的标志位设置为有效。
在本实施例的一些可选的实现方式中,读后写表通过以下步骤生成:响应于检测到从存储器中根据第一源地址读取第一单指令流多数据流指令或第一装载指令的源操作数,累加第四计数器,其中,第四计数器用于索引读后写表中的表格位置对应的标志位。将第四计数器索引到读后写表中的表格位置中的标志位设置为无效。
下面参考图7,其示出了适于用来实现本申请实施例的电子设备(如图1所示的AI芯片)的计算机系统700的结构示意图。图7示出的电子设备仅仅是一个示例,不应对本申请实施例的功能和使用范围带来任何限制。
如图7所示,计算机系统700包括AI芯片712和中央处理单元(CPU)701,CPU可以根据存储在只读存储器(ROM)702中的程序或者从存储部分708加载到随机访问存储器(RAM)703中的程序而执行各种适当的动作和处理。在RAM 703中,还存储有系统700操作所需的各种程序和数据。AI芯片712、CPU 701、ROM 702以及RAM 703通过总线704彼此相连。输入/输出(I/O)接口705也连接至总线704。
以下部件连接至I/O接口705:包括键盘、鼠标等的输入部分706;包括诸如阴极射线管(CRT)、液晶显示器(LCD)等以及扬声器等的输出部分707;包括硬盘等的存储部分708;以及包括诸如LAN卡、调制解调器等的网络接口卡的通信部分709。通信部分709经由诸如因特网的网络执行通信处理。驱动器710也根据需要连接至I/O接口705。可拆卸介质711,诸如磁盘、光盘、磁光盘、半导体存储器等等,根据需要安装在驱动器710上,以便于从其上读出的计算机程序根据需要被安装入存储部分708。
特别地,根据本公开的实施例,上文参考流程图描述的过程可以被实现为计算机软件程序。例如,本公开的实施例包括一种计算机程序产品,其包括承载在计算机可读介质上的计算机程序,该计算机程序包含用于执行流程图所示的方法的程序代码。在这样的实施例中,该计算机程序可以通过通信部分709从网络上被下载和安装,和/或从可拆卸介质711被安装。在该计算机程序被中央处理单元(CPU)701执行时,执行本申请的方法中限定的上述功能。需要说明的是,本申请所述的计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质或者是上述两者的任意组合。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子可以包括但不限于:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机访问存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本申请中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。而在本申请中,计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本申请的操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
附图中的流程图和框图,图示了按照本申请各种实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段、或代码的一部分,该模块、程序段、或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个接连地表示的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
描述于本申请实施例中所涉及到的单元可以通过软件的方式实现,也可以通过硬件的方式来实现。所描述的单元也可以设置在处理器中,例如,可以描述为:一种处理器包括取指单元、译码单元、读取单元、计算单元和写入单元。其中,这些单元的名称在某种情况下并不构成对该单元本身的限定,例如,取指单元还可以被描述为“读取第一单指令流多数据流指令的单元”。
作为另一方面,本申请还提供了一种计算机可读介质,该计算机可读介质可以是上述实施例中描述的装置中所包含的;也可以是单独存在,而未装配入该装置中。上述计算机可读介质承载有一个或者多个程序,当上述一个或者多个程序被该装置执行时,使得该装置:读取第一单指令流多数据流指令。对第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在存储器中的第一目的地址。根据第一源地址从存储器中读取源操作数。根据源操作数计算得到执行结果;根据第一目的地址将执行结果写回存储器中。
以上描述仅为本申请的较佳实施例以及对所运用技术原理的说明。本领域技术人员应当理解,本申请中所涉及的发明范围,并不限于上述技术特征的特定组合而成的技术方案,同时也应涵盖在不脱离所述发明构思的情况下,由上述技术特征或其等同特征进行任意组合而形成的其它技术方案。例如上述特征与本申请中公开的(但不限于)具有类似功能的技术特征进行互相替换而形成的技术方案。
Claims (18)
1.一种用于处理数据的方法,包括:
读取第一单指令流多数据流指令;
对所述第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在所述存储器中的第一目的地址;
根据所述第一源地址从所述存储器中读取所述源操作数;
根据所述源操作数计算得到执行结果;
根据所述第一目的地址将所述执行结果写回所述存储器中。
2.根据权利要求1所述的方法,其中,所述方法还包括:
响应于读取到第二单指令流多数据流指令或装载指令,对所述第二单指令流多数据流指令或所述装载指令译码,得到第二源操作数在所述存储器中的第二源地址;
确定预先生成的写后读表中是否存在所述第二源地址,其中,所述写后读表用于记录正在执行过程中的、未将执行结果写回到所述存储器中的单指令流多数据流指令或存储指令的目的操作数在所述存储器中的地址;
若所述写后读表中存在所述第二源地址,则暂停所述第二单指令流多数据流指令或所述装载指令的流水线。
3.根据权利要求2所述的方法,其中,所述方法还包括:
响应于读取到所述第二单指令流多数据流指令或存储指令,对所述第二单指令流多数据流指令或所述存储指令译码,得到第二目的操作数在所述存储器中的第二目的地址;
确定预先生成的读后写表中是否存在所述第二目的地址,其中,所述读后写表用于记录正在执行过程中的、未从所述存储器中读取出源操作数的单指令流多数据流指令或装载指令的源操作数在所述存储器中的地址;
若所述读后写表中存在所述第二目的地址,则暂停所述第二单指令流多数据流指令或所述存储指令的流水线。
4.根据权利要求3所述的方法,其中,所述方法还包括:
响应于检测到所述写后读表中不存在所述第二源地址并且所述读后写表中不存在所述第二目的地址,结束所述第二单指令流多数据流指令或所述第二存储指令的流水线的暂停。
5.根据权利要求2所述的方法,其中,所述写后读表包括标志位和存储器写回地址;以及
所述写后读表通过以下步骤生成:
在对所述第一单指令流多数据流指令或存储指令译码后得到源操作数在存储器中的第一源地址和目的操作数在所述存储器中的第一目的地址之后,累加第一计数器,其中,所述第一计数器用于索引所述写后读表中的表格位置对应的存储器写回地址;
将所述第一计数器索引到的所述写后读表中的表格位置对应的存储器写回地址替换为所述第一目的地址,以及将所述索引到的所述写后读表中的表格位置对应的标志位设置为有效。
6.根据权利要求5所述的方法,其中,所述写后读表通过以下步骤生成:
响应于检测到所述第一单指令流多数据流指令或所述存储指令的执行结果写回到所述存储器中,累加第二计数器,其中,所述第二计数器用于索引所述写后读表中的表格位置对应的标志位;
将所述第二计数器索引到所述写后读表中的表格位置中的标志位设置为无效。
7.根据权利要求3所述的方法,其中,所述读后写表包括标志位和存储器读出地址;以及
所述读后写表通过以下步骤生成:
在对所述第一单指令流多数据流指令或第一装载指令译码后得到源操作数在存储器中的第一源地址和目的操作数在所述存储器中的第一目的地址之后,累加第三计数器,其中,所述第三计数器用于索引所述读后写表中的表格位置对应的存储器读出地址;
将所述第三计数器索引到的所述读后写表中的表格位置对应的存储器读出地址替换为所述第一源地址,以及将所述索引到的所述读后写表中的表格位置对应的标志位设置为有效。
8.根据权利要求7所述的方法,其中,所述读后写表通过以下步骤生成:
响应于检测到从所述存储器中根据所述第一源地址读取所述第一单指令流多数据流指令或所述第一装载指令的源操作数,累加第四计数器,其中,所述第四计数器用于索引所述读后写表中的表格位置对应的标志位;
将所述第四计数器索引到所述读后写表中的表格位置中的标志位设置为无效。
9.一种用于处理数据的装置,包括:
取指单元,被配置成读取第一单指令流多数据流指令;
译码单元,被配置成对所述第一单指令流多数据流指令译码,得到源操作数在存储器中的第一源地址和目的操作数在所述存储器中的第一目的地址;
读取单元,被配置成根据所述第一源地址从所述存储器中读取所述源操作数;
计算单元,被配置成根据所述源操作数计算得到执行结果;
写入单元,被配置成根据所述第一目的地址将所述执行结果写回所述存储器中。
10.根据权利要求9所述的装置,其中,所述装置还包括数据冒险判断单元,被配置成:
响应于读取到第二单指令流多数据流指令或装载指令,对所述第二单指令流多数据流指令或所述装载指令译码,得到第二源操作数在所述存储器中的第二源地址;
确定预先生成的写后读表中是否存在所述第二源地址,其中,所述写后读表用于记录正在执行过程中的、未将执行结果写回到所述存储器中的单指令流多数据流指令或存储指令的目的操作数在所述存储器中的地址;
若所述写后读表中存在所述第二源地址,则暂停所述第二单指令流多数据流指令或所述装载指令的流水线。
11.根据权利要求10所述的装置,其中,所述数据冒险判断单元进一步被配置成:
响应于读取到所述第二单指令流多数据流指令或存储指令,对所述第二单指令流多数据流指令或所述存储指令译码,得到第二目的操作数在所述存储器中的第二目的地址;
确定预先生成的读后写表中是否存在所述第二目的地址,其中,所述读后写表用于记录正在执行过程中的、未从所述存储器中读取出源操作数的单指令流多数据流指令或装载指令的源操作数在所述存储器中的地址;
若所述读后写表中存在所述第二目的地址,则暂停所述第二单指令流多数据流指令或所述存储指令的流水线。
12.根据权利要求11所述的装置,其中,所述数据冒险判断单元进一步被配置成:
响应于检测到所述写后读表中不存在所述第二源地址并且所述读后写表中不存在所述第二目的地址,结束所述第二单指令流多数据流指令或所述第二存储指令的流水线的暂停。
13.根据权利要求10所述的装置,其中,所述写后读表包括标志位和存储器写回地址;以及
所述写后读表通过以下步骤生成:
在对所述第一单指令流多数据流指令或存储指令译码后得到源操作数在存储器中的第一源地址和目的操作数在所述存储器中的第一目的地址之后,累加第一计数器,其中,所述第一计数器用于索引所述写后读表中的表格位置对应的存储器写回地址;
将所述第一计数器索引到的所述写后读表中的表格位置对应的存储器写回地址替换为所述第一目的地址,以及将所述索引到的所述写后读表中的表格位置对应的标志位设置为有效。
14.根据权利要求13所述的装置,其中,所述写后读表通过以下步骤生成:
响应于检测到所述第一单指令流多数据流指令或所述存储指令的执行结果写回到所述存储器中,累加第二计数器,其中,所述第二计数器用于索引所述写后读表中的表格位置对应的标志位;
将所述第二计数器索引到所述写后读表中的表格位置中的标志位设置为无效。
15.根据权利要求11所述的装置,其中,所述读后写表包括标志位和存储器读出地址;以及
所述读后写表通过以下步骤生成:
在对所述第一单指令流多数据流指令或第一装载指令译码后得到源操作数在存储器中的第一源地址和目的操作数在所述存储器中的第一目的地址之后,累加第三计数器,其中,所述第三计数器用于索引所述读后写表中的表格位置对应的存储器读出地址;
将所述第三计数器索引到的所述读后写表中的表格位置对应的存储器读出地址替换为所述第一源地址,以及将所述索引到的所述读后写表中的表格位置对应的标志位设置为有效。
16.根据权利要求15所述的装置,其中,所述读后写表通过以下步骤生成:
响应于检测到从所述存储器中根据所述第一源地址读取所述第一单指令流多数据流指令或所述第一装载指令的源操作数,累加第四计数器,其中,所述第四计数器用于索引所述读后写表中的表格位置对应的标志位;
将所述第四计数器索引到所述读后写表中的表格位置中的标志位设置为无效。
17.一种人工智能芯片,包括:
一个或多个处理器;
存储装置,其上存储有一个或多个程序,
当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现如权利要求1-8中任一所述的方法。
18.一种计算机可读介质,其上存储有计算机程序,其中,所述程序被处理器执行时实现如权利要求1-8中任一所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810906537.2A CN110825437B (zh) | 2018-08-10 | 2018-08-10 | 用于处理数据的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810906537.2A CN110825437B (zh) | 2018-08-10 | 2018-08-10 | 用于处理数据的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110825437A true CN110825437A (zh) | 2020-02-21 |
CN110825437B CN110825437B (zh) | 2022-04-29 |
Family
ID=69541018
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810906537.2A Active CN110825437B (zh) | 2018-08-10 | 2018-08-10 | 用于处理数据的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110825437B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116229A (zh) * | 2021-12-01 | 2022-03-01 | 北京奕斯伟计算技术有限公司 | 调节指令流水线的方法及装置、存储器和存储介质 |
CN115454693A (zh) * | 2022-08-30 | 2022-12-09 | 昆仑芯(北京)科技有限公司 | 写后读异常的检测方法、装置、控制器、处理器及介质 |
CN115794671A (zh) * | 2023-02-07 | 2023-03-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
CN116028118A (zh) * | 2023-01-31 | 2023-04-28 | 南京砺算科技有限公司 | 保障数据一致性的指令执行方法及图形处理器、介质 |
WO2023142528A1 (zh) * | 2022-01-30 | 2023-08-03 | 上海商汤智能科技有限公司 | 指令处理装置、方法、芯片、计算机设备以及存储介质 |
Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030135713A1 (en) * | 2002-01-02 | 2003-07-17 | Bohuslav Rychlik | Predicate register file scoreboarding and renaming |
CN1534462A (zh) * | 2003-03-29 | 2004-10-06 | 汤姆森许可贸易公司 | 流水线处理一系列处理指令的方法和设备 |
CN1961302A (zh) * | 2004-04-28 | 2007-05-09 | 英特尔公司 | 具有命令前瞻的存储器控制器 |
CN101021779A (zh) * | 2007-03-19 | 2007-08-22 | 中国人民解放军国防科学技术大学 | 一种针对流处理器的指令控制方法 |
CN101021799A (zh) * | 2007-03-19 | 2007-08-22 | 中国人民解放军国防科学技术大学 | 基于逻辑发射序号的软、硬件结合指令相关性控制方法 |
CN101593097A (zh) * | 2009-05-22 | 2009-12-02 | 西安交通大学 | 嵌入式同构对称双核risc微处理器的设计方法 |
CN101996139A (zh) * | 2009-08-28 | 2011-03-30 | 百度在线网络技术(北京)有限公司 | 数据匹配方法和数据匹配装置 |
US20130173886A1 (en) * | 2012-01-04 | 2013-07-04 | Qualcomm Incorporated | Processor with Hazard Tracking Employing Register Range Compares |
US20140108874A1 (en) * | 2011-07-25 | 2014-04-17 | Microsoft Corporation | Detecting memory hazards in parallel computing |
CN104216681A (zh) * | 2013-05-31 | 2014-12-17 | 华为技术有限公司 | 一种cpu指令处理方法和处理器 |
CN104536914A (zh) * | 2014-10-15 | 2015-04-22 | 中国航天科技集团公司第九研究院第七七一研究所 | 基于寄存器访问标记的相关处理装置和方法 |
CN106201935A (zh) * | 2016-06-28 | 2016-12-07 | 田彬 | 用于处理存储队列中数据相关的装置及方法 |
CN108287730A (zh) * | 2018-03-14 | 2018-07-17 | 武汉市聚芯微电子有限责任公司 | 一种处理器流水线结构 |
-
2018
- 2018-08-10 CN CN201810906537.2A patent/CN110825437B/zh active Active
Patent Citations (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030135713A1 (en) * | 2002-01-02 | 2003-07-17 | Bohuslav Rychlik | Predicate register file scoreboarding and renaming |
CN1534462A (zh) * | 2003-03-29 | 2004-10-06 | 汤姆森许可贸易公司 | 流水线处理一系列处理指令的方法和设备 |
CN1961302A (zh) * | 2004-04-28 | 2007-05-09 | 英特尔公司 | 具有命令前瞻的存储器控制器 |
CN101021779A (zh) * | 2007-03-19 | 2007-08-22 | 中国人民解放军国防科学技术大学 | 一种针对流处理器的指令控制方法 |
CN101021799A (zh) * | 2007-03-19 | 2007-08-22 | 中国人民解放军国防科学技术大学 | 基于逻辑发射序号的软、硬件结合指令相关性控制方法 |
CN101593097A (zh) * | 2009-05-22 | 2009-12-02 | 西安交通大学 | 嵌入式同构对称双核risc微处理器的设计方法 |
CN101996139A (zh) * | 2009-08-28 | 2011-03-30 | 百度在线网络技术(北京)有限公司 | 数据匹配方法和数据匹配装置 |
US20140108874A1 (en) * | 2011-07-25 | 2014-04-17 | Microsoft Corporation | Detecting memory hazards in parallel computing |
US20130173886A1 (en) * | 2012-01-04 | 2013-07-04 | Qualcomm Incorporated | Processor with Hazard Tracking Employing Register Range Compares |
CN104216681A (zh) * | 2013-05-31 | 2014-12-17 | 华为技术有限公司 | 一种cpu指令处理方法和处理器 |
CN104536914A (zh) * | 2014-10-15 | 2015-04-22 | 中国航天科技集团公司第九研究院第七七一研究所 | 基于寄存器访问标记的相关处理装置和方法 |
CN106201935A (zh) * | 2016-06-28 | 2016-12-07 | 田彬 | 用于处理存储队列中数据相关的装置及方法 |
CN108287730A (zh) * | 2018-03-14 | 2018-07-17 | 武汉市聚芯微电子有限责任公司 | 一种处理器流水线结构 |
Non-Patent Citations (1)
Title |
---|
黄磊等: "自动向量化中基于数据依赖分析的循环分布算法", 《计算机科学》 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116229A (zh) * | 2021-12-01 | 2022-03-01 | 北京奕斯伟计算技术有限公司 | 调节指令流水线的方法及装置、存储器和存储介质 |
WO2023142528A1 (zh) * | 2022-01-30 | 2023-08-03 | 上海商汤智能科技有限公司 | 指令处理装置、方法、芯片、计算机设备以及存储介质 |
CN115454693A (zh) * | 2022-08-30 | 2022-12-09 | 昆仑芯(北京)科技有限公司 | 写后读异常的检测方法、装置、控制器、处理器及介质 |
CN115454693B (zh) * | 2022-08-30 | 2023-11-14 | 昆仑芯(北京)科技有限公司 | 写后读异常的检测方法、装置、控制器、处理器及介质 |
CN116028118A (zh) * | 2023-01-31 | 2023-04-28 | 南京砺算科技有限公司 | 保障数据一致性的指令执行方法及图形处理器、介质 |
CN116028118B (zh) * | 2023-01-31 | 2023-07-25 | 南京砺算科技有限公司 | 保障数据一致性的指令执行方法及图形处理器、介质 |
CN115794671A (zh) * | 2023-02-07 | 2023-03-14 | 成都申威科技有限责任公司 | 一种兼容向量数据的访存系统及方法 |
Also Published As
Publication number | Publication date |
---|---|
CN110825437B (zh) | 2022-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110825437B (zh) | 用于处理数据的方法和装置 | |
US9292291B2 (en) | Instruction merging optimization | |
US9323530B2 (en) | Caching optimized internal instructions in loop buffer | |
US8464271B2 (en) | Runtime dependence-aware scheduling using assist thread | |
US20140223144A1 (en) | Load Latency Speculation In An Out-Of-Order Computer Processor | |
US9262161B2 (en) | Tracking multiple conditions in a general purpose register and instruction therefor | |
US9632775B2 (en) | Completion time prediction for vector instructions | |
US20180107510A1 (en) | Operation of a multi-slice processor implementing instruction fusion | |
CN117193861B (zh) | 指令处理方法、装置、计算机设备和存储介质 | |
US6862676B1 (en) | Superscalar processor having content addressable memory structures for determining dependencies | |
US20170228234A1 (en) | Parallel dispatching of multi-operation instructions in a multi-slice computer processor | |
US6871343B1 (en) | Central processing apparatus and a compile method | |
US9442734B2 (en) | Completion time determination for vector instructions | |
US11314510B2 (en) | Tracking load and store instructions and addresses in an out-of-order processor | |
US20100306513A1 (en) | Processor Core and Method for Managing Program Counter Redirection in an Out-of-Order Processor Pipeline | |
US11243774B2 (en) | Dynamic selection of OSC hazard avoidance mechanism | |
KR100837400B1 (ko) | 멀티스레딩/비순차 병합 기법에 따라 처리하는 방법 및장치 | |
US20010037446A1 (en) | Processor and branch prediction method | |
US11687337B2 (en) | Processor overriding of a false load-hit-store detection | |
US11868773B2 (en) | Inferring future value for speculative branch resolution in a microprocessor | |
CN114461278B (zh) | 操作指令调度队列的方法、操作装置和电子装置 | |
CN117931293B (zh) | 指令处理方法、装置、设备及存储介质 | |
CN111209039B (zh) | 指令处理方法及装置 | |
WO2024087039A1 (zh) | 一种块指令的处理方法和块指令处理器 | |
CN115080121A (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 | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20210929 Address after: Baidu building, No. 10, Shangdi 10th Street, Haidian District, Beijing 100086 Applicant after: Kunlun core (Beijing) Technology Co.,Ltd. Address before: 2 / F, baidu building, 10 Shangdi 10th Street, Haidian District, Beijing 100085 Applicant before: BEIJING BAIDU NETCOM SCIENCE AND TECHNOLOGY Co.,Ltd. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |