CN107038021A - 用于访问随机存取存储器ram的方法、装置和系统 - Google Patents

用于访问随机存取存储器ram的方法、装置和系统 Download PDF

Info

Publication number
CN107038021A
CN107038021A CN201710216353.9A CN201710216353A CN107038021A CN 107038021 A CN107038021 A CN 107038021A CN 201710216353 A CN201710216353 A CN 201710216353A CN 107038021 A CN107038021 A CN 107038021A
Authority
CN
China
Prior art keywords
thread
address
data
processor
value
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
CN201710216353.9A
Other languages
English (en)
Other versions
CN107038021B (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201710216353.9A priority Critical patent/CN107038021B/zh
Publication of CN107038021A publication Critical patent/CN107038021A/zh
Application granted granted Critical
Publication of CN107038021B publication Critical patent/CN107038021B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • 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
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • 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/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供了一种用于访问随机存取存储器RAM的方法和装置,该方法包括:处理器通过第一线程读取所述RAM的第一地址的数据,所述第一线程为连续访问所述第一地址的多个线程中的任一线程;所述处理器在通过所述第一线程从所述第一地址读取数据之后,确定与所述第一地址对应的指示信息,所述指示信息用于指示在所述第一线程之前是否有第二线程对所述第一地址进行读改写操作;所述处理器根据所述指示信息,确定所述第一线程的待修改数据;所述处理器对所述第一线程的待修改数据进行修改,生成所述第一线程的回写数据。本申请实施例的方法和装置,能够在多个线程连续对RAM的同一地址进行读改写操作时,有利于降低数据的出错率。

Description

用于访问随机存取存储器RAM的方法、装置和系统
技术领域
本申请涉及通信领域,并且更具体地,涉及一种用于访问随机存取存储器RAM的方法、装置和系统。
背景技术
为了追求低延时、高吞吐率、高性能,当前的网络处理器(Network Processor,NP)广泛使用了硬件多线程技术,它利用多个线程的并发,节省了处理延时,提高了处理性能。
而随着NP转发带宽的要求逐渐提升,NP对随机存取存储器(Random AccessMemory,RAM)容量、访问时延以及成本也有更加苛刻的需求。当前RAM主要有两大类:一种是访问时延固定的RAM,然而它容量小,面积大,成本高;一种是访问时延不固定的RAM,它常被作为独立存储芯片与NP芯片在单板上对接,它容量大,成本低。
当NP的多线程连续访问时延不固定的RAM时,进一步地,若线程执行的业务操作需要对RAM进行读改写(Read-Modify-Write,R-M-W)操作,也就是对RAM进行读操作,修改数据,再执行回写。由于RAM读延时不确定,那么多个此类线程连续访问同一RAM地址时的情况下,芯片就会由于触发数据相关性而无法保证被修改的数据是当前最新的,而用旧数据修改后回写到RAM也会使得RAM数据错乱,功能出错。
发明内容
本申请提供一种用于访问随机存取存储器RAM的方法和装置,能够在多个线程连续对RAM的同一地址进行读改写操作时,有利于降低数据的出错率。
第一方面,提供了一种用于访问随机存取存储器RAM的方法,该方法包括:处理器通过第一线程读取该RAM的第一地址的数据,该第一线程为连续访问该第一地址的多个线程中的任一线程;该处理器在通过该第一线程从该第一地址读取数据之后,确定与该第一地址对应的指示信息,该指示信息用于指示在该第一线程之前是否有该多个线程中的第二线程对该第一地址进行读改写操作;该处理器根据该指示信息,确定该第一线程的待修改数据;该处理器对该第一线程的待修改数据进行修改,生成该第一线程的回写数据。
通过指示信息,判断前后线程读取数据的相关性,从而可以获取到最新的数据,避免了在多个线程连续访问同一地址时的数据出错。
该多个线程可以是指网络处理器NP使用多线程技术发起的读改写操作,也可以是指其他处理器。例如,微控制器。
该多个线程中的任意连续的两个线程发起读改写操作的时间间隔都小于该任意连续的两个线程中的前一个线程完成读改写操作的时延。进一步地,该多个线程为网络处理器NP中的线程,该时间间隔为该NP的系统时钟周期。
在这里,每个线程之间发起读改写操作的时间间隔可以为1个系统周期,可以是2个系统时钟周期,或者其他,任何两个之间的时间间隔可以相等也可以不等,甚至该时间间隔可以大于前一线程完成读改写操作的时延。
通过控制线程迸发时延,以及采用同地址的各种信息判断数据的相关性,进而可以降低访问时延,从而提高了处理性能。
在一种可能的实现方式中,该处理器根据该指示信息,确定该第一线程的待修改数据,包括:若该指示信息的内容为第一值,该处理器确定在该第一线程之前有该第二线程对该第一地址进行读改写操作;该处理器将缓存在缓冲器中的数据确定为该第一线程的待修改数据,该缓存在该缓冲器中的数据为该第二线程的回写数据。
在一种可能的实现方式中,该处理器根据该指示信息,确定该第一线程的待修改数据,包括:若该指示信息的内容为第二值,该处理器确定该第一线程为该多个线程中的第一个线程;该处理器将通过该第一线程从该第一地址读取的数据确定为该第一线程的待修改数据。
可选地,该处理器可以等前一个线程处理完成之后再执行第二个线程,这样的话可以保证数据的准确性。该处理器还可以直接都读取第一地址中的数据,在读取之后再根据与第一地址相关的信息获取与第一地址对应的指示信息,进而判断读取到的数据是否是最新的数据,例如可以直接将第一地址作为伴随信息,也可以是处理器为第一地址申请一个标识,将该标识作为伴随信息。也就是说处理器可以直接根据第一地址获取对应的指示信息,也可以根据该第一地址的标识获取与第一地址对应的指示信息。
将标识作为伴随信息,由于标识的比特数小于地址的比特数,可以极大地减少系统开销。
在一种可能的实现方式中,该方法还包括:在该处理器生成该第一线程的回写数据之后,该处理器获取与该第一地址对应的计数器的值,该计数器的变化用于记录该多个线程对该第一地址发起读改写操作的情况;该处理器根据该计数器的值是否为初始值,确定在该第一线程之后是否有第三线程对该第一地址进行读改写操作。
可以直接采用第一地址作为伴随信息,确定与该第一地址对应的计数器的值,也可以采用上述第一地址的标识作为伴随信息,确定与该第一地址对应的计数器的值。
在一种可能的实现方式中,该处理器根据该计数器的值是否为初始值,确定在该第一线程之后是否有第三线程对该第一地址进行读改写操作,包括:在该计数器的值不为初始值时,该处理器确定在该第一线程之后有该第三线程对该第一地址进行读改写操作;该方法还包括:该处理器将该第一线程的回写数据缓存到缓冲器中,以作为该第三线程的待修改数据。
可选地,该计数器的初始值默认为0。
例如,处理器在发起一个线程,计数器就加1,处理完一个线程,计数器就减1。通常情况下,连续发起多个线程的第一线程与最后一个线程之间的时间间隔小于一个线程完成读改写操作的时延。
可选地,若根据计数器的值判断出来该第一线程为最后一个线程,可以不用将该回写数据写入缓冲器中。
可选地,无论第一线程是否是最后一个线程,都需要将回写数据写入RAM的第一地址中。
在一种可能的实现方式中,该方法还包括:在该计数器的值为初始值时,该处理器将该指示信息的内容设置为第二值;在该计数器的值不为初始值时,该处理器将该指示信息的内容设置为第一值。
在一种可能的实现方式中,该方法还包括:该处理器确定与该第一地址对应的标识信息,该标识信息的比特数小于该第一地址的比特数,该标识信息作为该处理器通过该第一线程从该第一地址读取的数据的伴随信息;该处理器在通过该第一线程从该第一地址读取数据之后,确定与该第一地址对应的指示信息,包括:该处理器根据该标识信息,确定与该第一地址对应的指示信息。
可选地,该第一地址、标识信息以及指示信息这三者一一对应,处理器可以给第一地址分配一个标识,将该标识伴随从第一地址读取数据一直到读回数据。
可选地,处理器将多个线程从第一地址读回的数据存入队列中,控制在一个线程的修改时延内只出一个线程读回的数据。
第二方面,提供了一种用于访问随机存取存储器RAM的装置,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。具体地,该装置包括用于执行上述第一方面或第一方面的任意可能的实现方式中的方法的单元。
第三方面,提供了一种用于访问随机存取存储器RAM的装置,该系统包括:存储器、处理器、输入接口和输出接口。其中,存储器、处理器、输入接口和输出接口通过总线系统相连。该存储器用于存储指令,该处理器用于执行该存储器存储的指令,用于执行上述第一方面或第一方面的任意可能的实现方式中的方法。
第四方面,提供了一种计算机存储介质,用于储存为执行上述第一方面或第一方面的任意可能的实现方式中的方法所用的计算机软件指令,其包含用于执行上述方面所设计的程序。
第五方面,提供了一种用于访问随机存取存储器RAM的系统,该系统包括第二方面所提供的装置、缓存器以及RAM。
本申请的这些方面或其他方面在以下实施例的描述中会更加简明易懂。
附图说明
图1是本申请实施例的一种可能的应用场景。
图2是本申请实施例的用于访问随机存取存储器RAM的方法的示意性框图。
图3是本申请实施例的用于访问随机存取存储器RAM的流程框图。
图4是本申请实施例的用于访问随机存取存储器RAM的装置的示意性框图。
图5是本申请实施例的用于访问随机存取存储器RAM的装置的另一示意性框图。
具体实施方式
下面将结合附图,对本申请中的技术方案进行描述。
多线程,是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能、具有这种能力的系统包括对称多处理机、多核心处理器以及芯片级多处理或同时多线程处理器。在一个程序中,这些独立的程序片段叫做线程(Thread),利用它编译的概念就叫作多线程处理。本申请实施例中对处理器不作限定,只要能够实现多线程的处理器都在本申请的保护范围之内。
当前RAM主要有两大类:一种是静态RAM(Static RAM,SRAM),它常与处理器集成在一个芯片内部,它访问时延小且确定,然而它容量小,面积大,成本高;一种是动态RAM(Dynamic RAM,DRAM),它常被作为独立存储芯片与NP芯片在单板上对接,它容量大,成本低,然而它访问时延大且不确定。可见容量和访问时延就是一对矛盾体,因此现在NP转发芯片领域,广泛的应用还是根据转发业务对带宽的要求来对接SRAM或DRAM,对于容量需求小,访问时延要求小的业务则选用SRAM,对于容量需求大,访问时延要求不高的业务则选用DRAM。
当处理器的多线程连续访问DRAM时,由于RAM读延时不确定,若线程执行的业务操作需要对RAM进行R-M-W操作(即对RAM进行读操作,修改数据,再执行回写),那么多个此类线程连续访问同一RAM地址时的情况下,芯片就会由于触发数据相关性而无法保证被修改的数据是当前最新的,而用旧数据修改后回写到RAM也会使得RAM数据错乱,功能出错。
举例来说,如图1,当多个线程如1/2/3/4/5连续访问RAM,且是同一地址,并且这些线程发起的是R-M-W操作,线程1/2/3/4/5读回的数据分别是D1/D2/D3/D4/D5,线程1从发读操作到读数据回来,再执行修改,最后回写W1,由于RAM读延时不确定,线程1从读到回写之间的时延是不确定的,因此线程1后面的线程2若在W1写入RAM前,读回了D2,这个D2就不是当前最新的数据,而仍是RAM中的原始数据D1,最新的数据应该是W1,而使用旧数据D2进行修改,回写错误数据W2,从而引起后续线程的访问均出现功能错乱。
应理解,在本申请实施例中,是以DRAM为例进行描述,但本申请并不限于此,只要是访问时延不确定的RAM都可以是本申请实施例中多线程访问的存储器。
图2示出了根据本申请实施例的一种用于访问随机存取存储器RAM的方法100的示意性框图。如图2所示,该方法100包括:
S110,处理器通过第一线程读取该RAM的第一地址的数据,该第一线程为连续访问该第一地址的多个线程中的任一线程;
S120,该处理器在通过该第一线程从该第一地址读取数据之后,确定与该第一地址对应的指示信息,该指示信息用于指示在该第一线程之前是否有第二线程对该第一地址进行读改写操作;
S130,该处理器根据该指示信息,确定该第一线程的待修改数据;
S140,该处理器对该第一线程的待修改数据进行修改,生成该第一线程的回写数据。
具体地,处理器可以连续发起多个线程对RAM的同一地址读改写命令,连续访问可以是指该多个线程中的任意连续的两个线程发起读改写操作的时间间隔都小于该任意连续的两个线程中的前一个线程完成读改写操作的时延。例如,可以是一个时钟发起一个线程。该读改写命令通常是指处理器对RAM中的某一个地址中的数据进行读改写操作,也就是说该读改写命令携带着需要访问的RAM的地址。在处理器生成其中某一个线程的读改写命令时,该处理器可以向RAM直接读取数据,在读回数据的同时可以将该地址作为伴随信息输出,然后再一次将该地址送入处理器中,该处理器可以根据该地址获取与该地址对应的指示信息,根据该指示信息可以判断在当前线程之前是否有别的线程在对同一地址进行读改写操作。例如一个1bit的参数,若该参数为0,则表示当前线程之前没有别的线程在对同一地址进行读改写操作,若该参数为1,则反之。进而该处理器可以根据该指示信息确定需要修改的最新数据的来源,具体地,若该参数为0,则可以判断从RAM读回来的数据为最新数据,也就是说,从RAM中读回来的数据可以作为修改的基础,不会引起数据错误。若该参数为1,则可以判断读回来的数据不是最新数据,那么可以从缓冲器中获取最新数据作为修改基础。进一步地,该处理器可以对确定的最新数据进行修改,生成该线程的回写数据。
下面以连续3个线程访问RAM中的地址0000H为例详细描述本申请实施例中的用于访问随机存取存储器RAM的方法。
需要说明的是,这里是以每个线程之间发起读改写命令的时间间隔为1个系统周期为例进行描述,还可以是2个系统时钟周期,或者其他,任何两个之间的时间间隔可以相等也可以不等,本申请实施例不限于此。
实施例1:
处理器在第一个系统周期生成线程1的读改写命令,换句话说,处理器通过线程1读取地址0000H的数据,不管该地址0000H的数据是否是最新的数据,在读取完之后,同样将地址信息0000H作为伴随信息送入处理器,此时判断该线程是否是第一个线程,这里判断结果为是,所以从0000H读回来的数据为最新的数据,这时可以进一步判断是否是最后一个线程,这里判断结果为否,那么可以将生成的线程1的回写数据写入缓冲器中,作为线程2的修改基础。
处理器在第二个系统周期生成线程2的读改写命令,换句话说,处理器通过线程2读取地址0000H的数据,不管该地址0000H的数据是否是最新的数据,在读取完之后,同样将地址信息0000H作为伴随信息送入处理器,此时判断该线程是否是第一个线程,这里判断结果为否,所以从0000H读回来的数据不是最新的数据,从缓冲器中读取最新的数据,这时还可以进一步判断是否是最后一个线程,这里判断结果为否,那么同样可以将生成的线程2写入缓冲器,并且覆盖线程1的回写数据,作为线程3的修改基础。
处理器在第三个系统周期生成线程3的读改写命令,换句话说,处理器通过线程3读取地址0000H的数据,不管该地址0000H的数据是否是最新的数据,在读取完之后,同样将地址信息0000H作为伴随信息送入处理器,此时判断该线程是否是第一个线程,这里判断结果为否,所以从0000H读回来的数据不是最新的数据,从缓冲器中读取最新的数据,这时可以进一步判断是否是最后一个线程,这里判断结果为是,那么可以将生成的线程3的回写数据不写入缓冲器中。
实施例2:
处理器在第一个系统周期生成线程1的读改写命令,处理器可以直接查找该读改写命令所操作的地址是否具有标识信息,若具有,则说明该线程不是第一线程,否则向资源池申请一个该地址的标识信息,进而将该标识信息作为伴随信息转向RAM,直接读取地址0000H的数据,在读取完之后,同样将该标识信息作为伴随信息送入处理器,此时判断该线程是否是第一个线程,这里判断结果为是,所以从0000H读回来的数据为最新的数据,这时可以进一步判断是否是最后一个线程,这里判断结果为否,那么可以将生成的线程1的回写数据写入缓冲器,作为线程2的修改基础。
处理器在第二个系统周期生成线程2的读改写命令,同样地,该处理器可以直接查找该读改写命令所操作的地址是否具有标识信息,这里因为查找有结果,所以可以直接将该标识信息作为伴随信息转向RAM,读取地址0000H的数据。在读取完之后,同样将该标识信息作为伴随信息送入处理器,此时判断该线程是否是第一个线程,这里判断结果为否,所以从0000H读回来的数据不是最新的数据,从缓冲器中读取最新的数据,这时可以进一步判断是否是最后一个线程,这里判断结果为否,那么可以将生成的线程2的回写数据,并且覆盖线程1的回写数据,作为线程3的修改基础。
处理器在第三个系统周期生成线程3的读改写命令,同样地,该处理器可以直接查找该读改写命令所操作的地址是否具有标识信息,这里因为查找有结果,所以可以直接将该标识信息作为伴随信息转向RAM,读取地址0000H的数据。在读取完之后,同样将该标识信息作为伴随信息送入处理器,此时判断该线程是否是第一个线程,这里判断结果为否,所以从0000H读回来的数据不是最新的数据,从缓冲器读取最新的数据,这时可以进一步判断是否是最后一个线程,这里判断结果为是,那么可以不用将生成的线程3的回写数据写入缓冲器。
应理解,无论是线程1、线程2或线程3,处理器都需要将回写数据写入地址0000H中。另外,无论某个线程将回写数据写入该地址的时间是否晚于后一线程从该地址读取数据的时间,本申请实施例总能保证后一线程修改数据的基础都是最新数据。
在这里,处理器在生成每个线程的读改写命令之后,可以通过该处理器存储每个线程访问的地址来比较之前是否有线程访问同一地址,该处理器也可以存储地址与指示信息的多个对应表,例如,该地址0000H对应一个1bit的指示信息,该指示信息可以在初始时默认为0,并且可以配置在一定时间间隔后会自动回归默认值,该时间间隔应该至少大于多个线程的读改写操作时延之和。也就是说,上述线程1获取到的指示信息值为0,那么处理器判断没有别的线程,线程2和线程3获取到的指示信息值为1,那么处理器判断之前还有别的线程。同样地,线程1和线程2在对地址0000H的数据修改完之后,并且判断出来后续还有线程需要访问该0000H,则可以将该指示信息设置为1,而线程3在对地址0000H的数据修改完之后,判断出来后续没有线程需要访问该0000H,则可以将该指示信息设置为0。
本领域技术人员理解,1bit的指示信息仅仅指示示意性说明,也可以包括多个比特位,并且可以提前配置与用多个比特位表示的某个值对应一个判断结果,用多个比特位表示的另一值对应另外一个判断结果。本申请实施例对此不够成限定。
需要说明的是,由于RAM读改写时延的不确定性,处理器可能先生成线程1的读改写命令,后生成线程2的读改写命令,而处理器先对线程2读回的数据先进行处理,后对线程1读回的数据先进行处理,而在本申请实施例中,线程1是指在不同阶段第一个处理的线程。换句话说,在第一个发起读改写命令的线程在RAM读取阶段是线程1,而对第一个进行修改操作的线程在RAM修改阶段是线程1。
在本申请实施例中,处理器还需要控制从RAM读取数据后,在一个修改操作时延内同一地址仅输出一个线程。也就是说,对同一地址读取数据的多个线程可以以队列的方式依次确定每个线程获取最新数据的来源,并对获取的最新数据进行修改操作。处理器可以在确定上一个线程将修改之后的数据存放在缓冲器之后,才进行后一个线程的修改操作。举例来说,当上述3个线程依次读取地址0000H的数据之后,将该3个线程读回的数据缓存到读改写队列中,具体地该读改写队列可以确保在线程修改操作时延内控制同一个地址仅出一个线程,不同地址可以连续出队。
本领域技术人员还理解,判断该线程是否为最后一个线程可以采用计数器的方式。举例来说,可以为RAM的每个地址设置一个计数器,初始值可以默认为0,以上述3个线程连续访问地址0000H为例,该处理器可以在生成一个与地址0000H有关的线程时,将与该地址0000H对应的计数器加1,也就是说,线程1发起读改写命令,该计数器的值为1,线程2发起读改写命令,该计数器的值为2,线程3发起读改写命令,该计数器的值为3。同样地,当线程1对数据修改完之后,将计数器减1,计数值为2,当线程2对数据修改完之后,将计数器再减1,计数值为1,当线程3对数据修改完之后,将计数器再减1,计数值为0,因此,可以通过判断计数器减1之后的值是否为0来判断后续是否还有线程对地址0000H进行读改写操作。
应理解,上述是以第一个线程和最后一个线程发起读改写命令的时间间隔小于一个线程对RAM执行读改写操作的时延为例进行说明的,也可以是第一个线程和最后一个线程发起读改写命令的时间间隔大于一个线程对RAM执行读改写操作的时延。也就是说,上述计数器的变化可以是这样的过程:线程1发起读改写命令,计数值为1——线程2发起读改写命令,计数值为2——线程1修改完数据,计数值为1——线程3发起读改写命令,计数值为2——线程2修改完数据,计数值为1——线程3修改完数据,计数值为0。
可选地,在本申请实施例中,还可以在多线程处理器生成多个线程之后,将该多个线程通过线程请求缓存单元按照系统时钟周期送出。
因此,本申请实施例的一种用于访问随机存取存储器RAM的方法,能够在多个线程连续访问同一地址时,避免数据出错,并且进一步的通过控制线程迸发时延,以及采用同地址的各种信息判断数据的相关性,进而可以降低访问时延,从而提高了处理性能。
图3示出了本申请实施例的具体实现框图。由图3所示,该方案的执行主体主要包括多线程处理单元(Multi-Thread Core)、线程请求缓冲单元(Thread-Request-Buffer)、线程响应缓冲单元(Thread-Response-Buffer)、读改写缓存单元(R-M-W Cache)、读改写操作单元(R-M-W operation)、随机存取存储器RAM和读改写队列管理单元(R-M-W link listmanagerment)、读改写数据缓冲单元(R-M-W data buffer)等组成,这些逻辑单元可以集成在一块电路上,例如,同一个NP的电路板上,也可以是分开的,例如,在同一个NP的电路板上没有RAM,也就是RAM为外部存储器。如图3,其中:
R-M-W Cache:它主要完成数据相关性的判断,完成对线程R-M-W操作RAM地址的管理;Cache深度可根据性能要求灵活设计,最大为线程数目。
R-M-W operation:获取最新数据,再进行修改操作,最后通过Thread-Response-Buffer返回修改结果的同时,执行回写操作。
RAM:随机存储器,它具有读写延时不确定的特性。
R-M-W link list managerment:RAM返回数据的队列管理,按地址入队,例如,可以是先进先出(First Input First Output,FIFO)队列。在R-M-W Operation操作时延内控制同一地址仅出队一个线程,不同地址可以连续出队;队列深度可根据性能要求灵活设计,最大为线程数目。
具体的实施步骤如下:
步骤一:请求侧
多线程通过Thread_request_buffer缓存后发出,可背靠背送出线程(这里的背靠背是指多线程发起的读改写操作是连续的,每个系统周期一个,没有间隙),线程将读改写命令对应的RAM地址送入R-M-W Cache中进行比较,如果地址比较命中hit,说明前面已有线程访问同一地址,则将该地址对应的读改写标识rmw_id输出,对应的缓存计数器cache cnt递增1;如果地址比较为未命中miss,说明该地址还未被其他线程访问,则向资源池申请一个新的用来存储RAM地址到Cache的rmw_id。
返回的rmw_id,会作为伴随信息送入RAM,并伴随RAM的读数据返回。
步骤二:响应侧
当RAM读数据返回时,会携带伴随信息rmw_id及读地址,此时在R-M-W link listmanagement中按地址入队,在R-M-W Operation操作时延内控制同一地址仅出队一个线程,不同地址可连续出队;
出队时携带rmw_id及地址,将rmw_id送入RMW Cache进行查找,对应的rmw_data_buffer_Valid参数(默认为0),如果该rmw_id对应的rmw_data_buffer_Valid参数为1,说明前面有同一地址的读改写线程,RAM读回来的数据为旧数据,前一线程的改写还未写入,因此此时需要读取前一线程同一地址的修改数据,它被存在本地rmw_data_buffer中;反之,如果rmw_id对应的rmw_data_buffer_Valid为0,则说明RAM读回来的数据为最新数据。
获取最新数据后,开始执行数据修改操作,修改完后,将rmw_id再次送入RMWCache中,并将rmw_id对应的cache cnt递减1处理。如果递减后的cache cnt不为0,说明后面还有同一地址的其他线程需要使用该修改后的数据,因此需要将修改后的数据写入rmw_data_buffer中;反之则说明后面无同一地址的读改写操作,因此无需不写rmw_data_buffer。
修改后的数据,会通过Thread-Response-Buffer返回多线程处理器的同时,执行RAM的回写操作。
采用标识信息rmw_id可以减少开销,例如,若采用地址来作为判断数据相关性的信息,地址通常为16bit,那么如果标识为地址的话得采用16个比特位的开销,而如果采用rmw_id,假设总共有32个地址,只需要5位就可以标识每一个地址,极大地减小了开销。
应理解,在本申请的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。
图4示出了本申请实施例的用于访问随机存取存储器RAM的装置200的示意性框图。如图4所示,该装置200包括:
读取单元210,用于处理器通过第一线程读取该RAM的第一地址的数据,该第一线程为连续访问该第一地址的多个线程中的任一线程;
第一确定单元220,用于在通过该第一线程从该第一地址读取数据之后,确定与该第一地址对应的指示信息,该指示信息用于指示在该第一线程之前是否有第二线程对该第一地址进行读改写操作;
第二确定单元230,用于根据该指示信息,确定该第一线程的待修改数据;
修改单元240,用于对该第一线程的待修改数据进行修改,生成该第一线程的回写数据。
因此,本申请实施例的一种用于访问随机存取存储器RAM的装置,能够在多个线程连续访问同一地址时,有利于降低数据的出错率。
可选地,在本申请实施例中,该第二确定单元230具体用于:若该指示信息的内容为第一值,确定在该第一线程之前有该第二线程对该第一地址进行读改写操作;将缓存在缓冲器中的数据确定为该第一线程的待修改数据,该缓存在该缓冲器中的数据为该第二线程的回写数据。
可选地,在本申请实施例中,该第二确定单元230具体用于:若该指示信息的内容为第二值,确定该第一线程为该多个线程中的第一个线程;将通过该第一线程从该第一地址读取的数据确定为该第一线程的待修改数据。
可选地,在本申请实施例中,该装置200还包括:获取单元240,用于在生成该第一线程的回写数据之后,获取与该第一地址对应的计数器的值,该计数器的变化用于记录该多个线程对该第一地址发起读改写操作的情况;第三确定单元250,用于根据该计数器的值是否为初始值,确定在该第一线程之后是否有第三线程对该第一地址进行读改写操作。
可选地,在本申请实施例中,该第三确定单元250具体用于:在该计数器的值不为初始值时,确定在该第一线程之后有该第三线程对该第一地址进行读改写操作;该装置还包括:写入单元260,用于将该第一线程的回写数据缓存到缓冲器中,以作为该第三线程的待修改数据。
可选地,在本申请实施例中,该装置200还包括:设置单元270,用于在该计数器的值为初始值时,将该指示信息的内容设置为第二值;在该计数器的值不为初始值时,将该指示信息的内容设置为第一值。
可选地,在本申请实施例中,该装置200还包括:第四确定单元280,用于确定与该第一地址对应的标识信息,该标识信息的比特数小于该第一地址的比特数,该标识信息作为该处理器通过该第一线程从该第一地址读取的数据的伴随信息;该第一确定单元220具体用于:根据该标识信息,确定与该第一地址对应的指示信息。
可选地,在本申请实施例中,该多个线程中的任意连续的两个线程发起读改写操作的时间间隔都小于该任意连续的两个线程中的前一个线程完成读改写操作的时延。
可选地,在本申请实施例中,该装置为网络处理器NP,该时间间隔为该NP的系统时钟周期。
应理解,根据本申请实施例的用于访问随机存取存储器RAM的装置200可对应于本申请方法实施例中的处理器,并且装置200中的各个单元的上述和其它操作和/或功能分别为了实现图2和图3所示各方法中处理器的相应流程,为了简洁,在此不再赘述。
本申请实施例还提供了一种用于访问随机存取存储器RAM的系统,该系统包括上述装置200、缓存器以及RAM。
如图5所示,本申请实施例还提供了一种用于访问随机存取存储器RAM的装置300,该装置300可以是图4中的装置200,其能够用于执行与图2和图3中各方法对应的处理器的步骤。该装置300包括:输入接口310、输出接口320、处理器330以及存储器340,该输入接口310、输出接口320、处理器330和存储器340可以通过总线系统相连。所述存储器340用于存储包括程序、指令或代码。所述处理器330,用于执行所述存储器340中的程序、指令或代码,以控制输入接口310接收信号、控制输出接口320发送信号以及完成前述方法实施例中的操作。
因此,本申请实施例的用于访问随机存取存储器RAM的装置,能够在多个线程连续对RAM的同一地址进行读改写操作时,有利于降低数据的出错率。
应理解,在本申请实施例中,该处理器330可以是中央处理单元(CentralProcessing Unit,CPU),该处理器330还可以是其他通用处理器、数字信号处理器(DigitalSignal Processor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
该存储器340可以包括只读存储器和随机存取存储器,并向处理器330提供指令和数据。存储器340的一部分还可以包括非易失性随机存取存储器。例如,存储器340还可以存储设备类型的信息。
在实现过程中,上述方法的各步骤可以通过处理器330中的硬件的集成逻辑电路或者软件形式的指令完成。结合本申请实施例所公开的方法的步骤可以直接体现为硬件处理器执行完成,或者用处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器340,处理器330读取存储器340中的信息,结合其硬件完成上述方法的步骤。为避免重复,这里不再详细描述。
一个具体的实施方式中,图4中的读取单元210、第一确定单元220、第二确定单元230以及修改单元240均可以用图5的处理器630实现。
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (18)

1.一种用于访问随机存取存储器RAM的方法,其特征在于,包括:
处理器通过第一线程读取RAM的第一地址的数据,所述第一线程为连续访问所述第一地址的多个线程中的任一线程;
所述处理器在通过所述第一线程从所述第一地址读取数据之后,确定与所述第一地址对应的指示信息,所述指示信息用于指示在所述第一线程之前是否有第二线程对所述第一地址进行读改写操作;
所述处理器根据所述指示信息,确定所述第一线程的待修改数据;
所述处理器对所述第一线程的待修改数据进行修改,生成所述第一线程的回写数据。
2.根据权利要求1所述的方法,其特征在于,所述处理器根据所述指示信息,确定所述第一线程的待修改数据,包括:
若所述指示信息的内容为第一值,所述处理器确定在所述第一线程之前有所述第二线程对所述第一地址进行读改写操作;
所述处理器将缓存在缓冲器中的数据确定为所述第一线程的待修改数据,所述缓存在所述缓冲器中的数据为所述第二线程的回写数据。
3.根据权利要求1所述的方法,其特征在于,所述处理器根据所述指示信息,确定所述第一线程的待修改数据,包括:
若所述指示信息的内容为第二值,所述处理器确定所述第一线程为所述多个线程中的第一个线程;
所述处理器将通过所述第一线程从所述第一地址读取的数据确定为所述第一线程的待修改数据。
4.根据权利要求1至3中任一项所述的方法,其特征在于,所述方法还包括:
在所述处理器生成所述第一线程的回写数据之后,所述处理器获取与所述第一地址对应的计数器的值,所述计数器的变化用于记录所述多个线程对所述第一地址发起读改写操作的情况;
所述处理器根据所述计数器的值是否为初始值,确定在所述第一线程之后是否有第三线程对所述第一地址进行读改写操作。
5.根据权利要求4所述的方法,其特征在于,所述处理器根据所述计数器的值是否为初始值,确定在所述第一线程之后是否有第三线程对所述第一地址进行读改写操作,包括:
在所述计数器的值不为初始值时,所述处理器确定在所述第一线程之后有所述第三线程对所述第一地址进行读改写操作;
所述方法还包括:
所述处理器将所述第一线程的回写数据缓存到缓冲器中,以作为所述第三线程的待修改数据。
6.根据权利要求4或5所述的方法,其特征在于,所述方法还包括:
在所述计数器的值为初始值时,所述处理器将所述指示信息的内容设置为第二值;或
在所述计数器的值不为初始值时,所述处理器将所述指示信息的内容设置为第一值。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述方法还包括:
所述处理器确定与所述第一地址对应的标识信息,所述标识信息的比特数小于所述第一地址的比特数,所述标识信息作为所述处理器通过所述第一线程从所述第一地址读取的数据的伴随信息;
所述处理器在通过所述第一线程从所述第一地址读取数据之后,确定与所述第一地址对应的指示信息,包括:
所述处理器在通过所述第一线程从所述第一地址读取数据之后,根据所述标识信息,确定与所述第一地址对应的指示信息。
8.根据权利要求1至7中任一项所述的方法,其特征在于,所述多个线程中的任意连续的两个线程发起读改写操作的时间间隔都小于所述任意连续的两个线程中的前一个线程完成读改写操作的时延。
9.根据权利要求8所述的方法,其特征在于,所述处理器为网络处理器NP,所述时间间隔为所述NP的系统时钟周期。
10.一种用于访问随机存取存储器RAM的装置,其特征在于,所述装置包括:
读取单元,用于处理器通过第一线程读取所述RAM的第一地址的数据,所述第一线程为连续访问所述第一地址的多个线程中的任一线程;
第一确定单元,用于在通过所述第一线程从所述第一地址读取数据之后,确定与所述第一地址对应的指示信息,所述指示信息用于指示在所述第一线程之前是否有第二线程对所述第一地址进行读改写操作;
第二确定单元,用于根据所述指示信息,确定所述第一线程的待修改数据;
修改单元,用于对所述第一线程的待修改数据进行修改,生成所述第一线程的回写数据。
11.根据权利要求10所述的装置,其特征在于,所述第二确定单元具体用于:
若所述指示信息的内容为第一值,确定在所述第一线程之前有所述第二线程对所述第一地址进行读改写操作;
将缓存在缓冲器中的数据确定为所述第一线程的待修改数据,所述缓存在所述缓冲器中的数据为所述第二线程的回写数据。
12.根据权利要求10所述的装置,其特征在于,所述第二确定单元具体用于:
若所述指示信息的内容为第二值,确定所述第一线程为所述多个线程中的第一个线程;
将通过所述第一线程从所述第一地址读取的数据确定为所述第一线程的待修改数据。
13.根据权利要求10至12中任一项所述的装置,其特征在于,所述装置还包括:
获取单元,用于在生成所述第一线程的回写数据之后,获取与所述第一地址对应的计数器的值,所述计数器的变化用于记录所述多个线程对所述第一地址发起读改写操作的情况;
第三确定单元,用于根据所述计数器的值是否为初始值,确定在所述第一线程之后是否有第三线程对所述第一地址进行读改写操作。
14.根据权利要求13所述的装置,其特征在于,所述第三确定单元具体用于:
在所述计数器的值不为初始值时,确定在所述第一线程之后有所述第三线程对所述第一地址进行读改写操作;
所述装置还包括:
写入单元,用于将所述第一线程的回写数据缓存到缓冲器中,以作为所述第三线程的待修改数据。
15.根据权利要求13或14所述的装置,其特征在于,所述装置还包括:
设置单元,用于在所述计数器的值为初始值时,将所述指示信息的内容设置为第二值;或在所述计数器的值不为初始值时,将所述指示信息的内容设置为第一值。
16.根据权利要求10至15中任一项所述的装置,其特征在于,所述装置还包括:
第四确定单元,用于确定与所述第一地址对应的标识信息,所述标识信息的比特数小于所述第一地址的比特数,所述标识信息作为所述处理器通过所述第一线程从所述第一地址读取的数据的伴随信息;
所述第一确定单元具体用于:
在通过所述第一线程从所述第一地址读取数据之后,根据所述标识信息,确定与所述第一地址对应的指示信息。
17.根据权利要求10至16中任一项所述的装置,其特征在于,所述多个线程中的任意连续的两个线程发起读改写操作的时间间隔都小于所述任意连续的两个线程中的前一个线程完成读改写操作的时延。
18.根据权利要求17所述的装置,其特征在于,所述装置为网络处理器NP,所述时间间隔为所述NP的系统时钟周期。
CN201710216353.9A 2017-04-05 2017-04-05 用于访问随机存取存储器ram的方法、装置和系统 Active CN107038021B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710216353.9A CN107038021B (zh) 2017-04-05 2017-04-05 用于访问随机存取存储器ram的方法、装置和系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710216353.9A CN107038021B (zh) 2017-04-05 2017-04-05 用于访问随机存取存储器ram的方法、装置和系统

Publications (2)

Publication Number Publication Date
CN107038021A true CN107038021A (zh) 2017-08-11
CN107038021B CN107038021B (zh) 2019-05-24

Family

ID=59533999

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710216353.9A Active CN107038021B (zh) 2017-04-05 2017-04-05 用于访问随机存取存储器ram的方法、装置和系统

Country Status (1)

Country Link
CN (1) CN107038021B (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109558249A (zh) * 2017-09-27 2019-04-02 北京国双科技有限公司 一种并发操作的控制方法及装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020078307A1 (en) * 2000-12-15 2002-06-20 Zahir Achmed Rumi Memory-to-memory copy and compare/exchange instructions to support non-blocking synchronization schemes
CN102483708A (zh) * 2010-07-07 2012-05-30 松下电器产业株式会社 处理器
CN102521279A (zh) * 2011-11-25 2012-06-27 Tcl集团股份有限公司 一种流媒体文件播放方法、系统及播放器

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020078307A1 (en) * 2000-12-15 2002-06-20 Zahir Achmed Rumi Memory-to-memory copy and compare/exchange instructions to support non-blocking synchronization schemes
CN102483708A (zh) * 2010-07-07 2012-05-30 松下电器产业株式会社 处理器
CN102521279A (zh) * 2011-11-25 2012-06-27 Tcl集团股份有限公司 一种流媒体文件播放方法、系统及播放器

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109558249A (zh) * 2017-09-27 2019-04-02 北京国双科技有限公司 一种并发操作的控制方法及装置
CN109558249B (zh) * 2017-09-27 2022-11-04 北京国双科技有限公司 一种并发操作的控制方法及装置

Also Published As

Publication number Publication date
CN107038021B (zh) 2019-05-24

Similar Documents

Publication Publication Date Title
CN108234641B (zh) 基于分布式一致性协议实现的数据读写方法及装置
CN109597818A (zh) 数据更新方法、装置、存储介质和设备
US9594696B1 (en) Systems and methods for automatic generation of parallel data processing code
US20150134912A1 (en) Scheduler, multi-core processor system, and scheduling method
CN105677580A (zh) 访问缓存的方法和装置
CN109977129A (zh) 多级数据缓存方法及设备
US20070005925A1 (en) Methods for optimizing memory unit usage to maximize packet throughput for multi-processor multi-threaded architectures
CN105637524B (zh) 硬件平台中的资产管理设备和方法
CN105051708B (zh) 用于包含存储器节点的分布式存储器系统的设备及方法
CN111880956B (zh) 一种数据同步方法和装置
US9690713B1 (en) Systems and methods for effectively interacting with a flash memory
CN103345451A (zh) 一种在多核处理器中缓冲数据的方法
US20030121030A1 (en) Method for implementing dual link list structure to enable fast link-list pointer updates
CN108958848A (zh) 近存储器计算体系结构
CN109471843A (zh) 一种元数据缓存方法、系统及相关装置
CN105357042A (zh) 一种高可用集群系统及其主节点和从节点
CN109740083A (zh) 一种页面跳转的方法及装置
CN107025130A (zh) 处理节点、计算机系统及事务冲突检测方法
CN115794682A (zh) 缓存替换方法及装置、电子设备、存储介质
US20050188158A1 (en) Cache memory with improved replacement policy
US20070233965A1 (en) Way hint line replacement algorithm for a snoop filter
CN109446225A (zh) 数据缓存方法、装置、计算机设备及存储介质
CN105103138B (zh) 用于实时应用的嵌入式存储器管理方案
CN105094742B (zh) 一种写数据的方法和设备
CN107038021A (zh) 用于访问随机存取存储器ram的方法、装置和系统

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