CN109923520B - 计算机系统及内存访问技术 - Google Patents

计算机系统及内存访问技术 Download PDF

Info

Publication number
CN109923520B
CN109923520B CN201680090723.2A CN201680090723A CN109923520B CN 109923520 B CN109923520 B CN 109923520B CN 201680090723 A CN201680090723 A CN 201680090723A CN 109923520 B CN109923520 B CN 109923520B
Authority
CN
China
Prior art keywords
memory access
instruction
memory
access request
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.)
Active
Application number
CN201680090723.2A
Other languages
English (en)
Other versions
CN109923520A (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
Publication of CN109923520A publication Critical patent/CN109923520A/zh
Application granted granted Critical
Publication of CN109923520B publication Critical patent/CN109923520B/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/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/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
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • 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
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)

Abstract

一种计算机系统及内存访问技术。在本申请提供的计算机系统中,在处理具有依赖关系的访存指令时,能够在处理器中获取生产者访存指令和消费者访存指令之间的依赖信息,并根据获取的依赖信息向计算机系统中的内存控制器发送消费者访存请求,从而内存控制器能够根据接收的消费者访存请求中的依赖信息在内存控制器本地解决访存请求之间的依赖关系,并执行消费者访存请求。本申请提供的计算机系统及内存访问技术能够减少内存控制器和处理器核之间的通信次数,缩短内存访问延时,提高内存访问效率。

Description

计算机系统及内存访问技术
技术领域
本发明涉及存储技术领域,尤其涉及一种计算机系统及内存访问技术。
背景技术
随着集成电路工艺不断发展,处理器和内存的速度差距不断变大,内存访问成为计算系统中的瓶颈。实际应用中,将内存访问时延称为访存时延。通常,访存时延可以分成片上时延和内存访问时延两部分。片上时延是指处理器核与内存控制器之间的通信时延。内存访问时延指的是内存控制器访问片外内存的时延。随着处理器芯片规模不断增大,处理器芯片中集成了更多的处理器核,导致了片上时延增大,加剧了访存时延的影响。
发明人在实现本发明的过程中发现,由于具有依赖关系的多条访存指令需要串行完成。因此,现有技术中在处理有依赖关系的多条访存指令时通常需要经过多次片上通信才能完成。例如,以处理一对具有依赖关系的访存请求为例。处理器核首先需要向内存控制器发送生产者访存请求。然后,处理器核接收内存控制器向处理器核返回的生产者访存请求的请求内容。之后,处理器核根据生产者访存请求的请求内容获得消费者访存的访存地址,并根据获得的所述消费者访存的访存地址向内存控制器发送所述消费者访存请求。最后,内存控制器会根据消费者访存请求向处理器核返回消费者访存请求的请求内容。需要说明的是,在本申请中,生产者访存请求是指其访问结果被其他内存访问请求依赖的内存访问请求,消费者访存请求是指其访问需要依赖其他访问请求的访问结果的内存访问请求。从现有技术中处理具有依赖关系的访存请求的过程可以看出,现有技术中,由于在处理具有依赖关系的多条访存请求时需要经过多次片上通信才能完成,因此导致内存访问时延较大。
发明内容
本申请实施例中提供了的一种计算机系统及内存访问技术,能够缩短内存访问延时,提高内存访问效率。
第一方面,本申请实施例提供了一种计算机系统。所述计算机系统包括处理器和内存控制器。在该计算机系统中,所述处理器用于获取待处理的第一访存指令和第二访存指令之间的第一依赖信息。其中,所述第一依赖信息用于指示所述第二访存指令待访问的地址依赖于所述第一访存指令的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存指令的第一访存结果。并且,所述处理器根据所述第一访存指令向所述计算机系统中的内存控制器发送第一访存请求,并根据所述第二访存指令向所述内存控制器发送第二访存请求,其中,所述第二访存请求中包含有所述第一依赖信息。所述内存控制器可以根据所述第一访存请求访问所述计算机系统的内存,以获得所述第一访存结果。并且,所述内存控制器可以根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址,并根据所述第二访存请求待访问的地址执行所述第二访存请求以获得第二访存结果。所述内存控制器将所述第一访存结果以及所述第二访存结果返回所述处理器。
在本申请提供的计算机系统中,处理器可以获得指令队列中的第一访存指令和第二访存指令之间的第一依赖信息,并根据第一访存指令向内存控制器发送第一访存请求,根据第二访存指令以及所述第一依赖信息向内存控制器发送第二访存请求,并能够在处理具有依赖关系的访存指令时,即使在某个访存指令未命中缓存的情况下,依然向内存控制器发送该访存请求,防止该访存指令的后续指令被阻塞在处理器中,从而减少了处理指令对处理器资源的占用,并减少了后续指令的等待时延。
进一步的,当内存控制器接收到具有依赖关系的第一访存请求和第二访存请求时,内存控制器可以先执行第一访存请求。在获得第一访存请求的第一访存结果之后,内存控制器可以根据第一访存结果以及第二访存请求中携带的第一依赖信息按照预设的计算方法计算所述第二访存请求待访问的地址,从而在内存控制器中就能解除第二访存请求与第一访存请求的依赖关系,并根据计算获得的第二访存请求待访问的地址执行所述第二访存请求以获得所述第二访存结果。在本申请提供的计算机系统中,内存控制器不通过与处理器的再次通信就能够在内存控制器本地解决访存请求之间的依赖关系,执行消费者访存请求。减少了内存控制器和处理器核之间的通信次数,降低了内存访问延时,并节省了网络资源。
并且,由于内存控制器接收的访存请求中增加了对依赖信息的描述,内存控制器在处理具有依赖关系的访存请求时,只需要进行简单的计算就能够得到第二访存请求待访问的地址。实际应用中,内存控制器可以只需要通过一个加法器就能够实现对消费者访存请求待访问地址的计算,因此,内存控制器的硬件开销也比较小。
在一种可能的实现方式中,所述第一依赖信息包括所述第一目标寄存器的标识以及第一偏移量信息,所述第一偏移量信息用于指示所述第二访存请求待访问的地址的偏移量。所述内存控制器根据所述第一访存结果以及所述第一偏移量信息按照预设的计算方法计算所述第二访存请求待访问的地址。
在一种可能的实现方式中,所述预设的计算方法包括:
Figure GPA0000266263150000051
其中,Address为访存请求待访问的内存地址,n为访存请求所依赖的寄存器的数量,REG[SRk]用于指示访存请求所依赖的第k个寄存器中存储的内容,offset为地址偏移量。
在一种可能的实现方式中,处理器可以根据指令队列中各个指令的源寄存器标识和目标寄存器标识获得指令之间的依赖信息。
在一种可能的实现方式中,当所述第一访存指令未命中所述计算机系统的缓存时,所述处理器用于为所述第一目标寄存器设置第一标识,其中,所述第一标识用于指示所述第一目标寄存器中的值推测可用。之后,所述处理器根据所述第一访存指令向所述内存控制器发送所述第一访存请求。根据这种方式,能够减少所述第一访存指令的后续指令被阻塞在处理器中,从而能够减少后续指令的等待时延。
在一种可能的实现方式中,所述处理器还用于获取待处理的第三访存指令与所述第一访存指令的第三依赖信息,并根据所述第三访存指令向所述内存控制器发送携带有所述第三依赖信息的第三访存请求。其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器。所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算。所述第三依赖信息中包括所述第一目标寄存器的标识以及根据所述第四指令获得的第二偏移量信息。所述内存控制器还用于根据所述第一访问结果以及所述第二偏移量信息计算获得所述第三访存请求待访问的地址,并根据所述第三访存请求待访问的地址执行所述第三访存请求,以获得第三访存结果。
在一种可能的实现方式中,所述处理器还用于确定待处理的第四指令待操作的源寄存器为所述第一访存指令的目标寄存器。其中,所述第四指令用于指示对所述第一目标寄存器的值进行计算,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据。所述处理器还用于为所述第四指令的第四目标寄存器设置第二标识并记录所述第四指令的第二依赖信息。其中,所述第四目标寄存器用于存储所述第四指令的执行结果,所述第二标识用于指示所述第四目标寄存器的值依赖于其他的寄存器的值,所述第二依赖信息包括所述第一目标寄存器的标识,所述第二依赖信息用于指示所述第四目标寄存器的值依赖于所述第一目标寄存器的值。
在一种可能的实现方式中,所述处理器还用于根据所述第一访存结果更新所述第一访存指令的目标寄存器的值。具体的,内存控制器可以将所述第一访存结果放入处理器的缓存中。处理器会执行第一访存指令,从缓存中获得所述第一访存结果,并将所述第一访存结果存储在所述第一访存指令的目标寄存器中。
第二方面,本申请提供了一种处理器,包括指令队列和访存单元。所述指令队列用于缓存待处理的第一访存指令和第二访存指令,并获得所述第一访存指令和所述第二访存指令之间的第一依赖信息。所述访存单元用于根据所述第一访存指令向所述计算机系统中的内存控制器发送第一访存请求。所述访存单元还用于根据所述第二访存指令向所述内存控制器发送第二访存请求,其中,所述第二访存请求中包含有所述第一依赖信息。所述第一依赖信息用于指示所述第二访存指令待访问的地址依赖于所述第一访存指令的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存指令的第一访存结果。
在一种可能的实现方式中,当所述第一访存指令未命中所述计算机系统的缓存时,所述访存单元为所述第一目标寄存器设置第一标识,并根据所述第一访存指令向所述内存控制器发送所述第一访存请求。其中,所述第一标识用于指示所述第一目标寄存器中的值推测可用。根据这种方式,能够减少所述第一访存指令的后续指令被阻塞在处理器中,从而能够减少后续指令的等待时延。
在一种可能的实现方式中,所述指令队列还用于获取待处理的第三访存指令与所述第一访存指令的第三依赖信息。其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算。所述访存单元还用于根据所述第三访存指令向所述内存控制器发送携带有所述第三依赖信息的第三访存请求。其中,所述第三依赖信息中包括所述第一目标寄存器标识以及根据所述第四指令获得的第二偏移量信息。
第三方面,本申请实施例提供了一种内存控制器,包括分别用于实现上述第一方面以及第一方面的任意一种可能的实现方式中由内存控制器实现的功能的虚拟模块。
第四方面,本申请提供了一种内存访问方法,该方法分别由计算机系统中的处理器和内存控制器执行,用于实现上述第一方面及第一方面可能的实现方式中处理器和内存控制器实现的功能。
第五方面,本申请提供了一种指令处理方法,该方法由计算机系统中的处理器执行,用于实现上述第一方面及第一方面可能的实现方式中处理器实现的功能。
第六方面,本申请提供了又一种内存访问方法,该方法由计算机系统中的内存控制器执行,用于实现上述第一方面及第一方面可能的实现方式中内存控制器实现的功能。
第七方面,本申请提供了一种计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于实现上述第四方面、第五方面及第六方面中的至少一种方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍。显而易见地,下面描述中的附图仅仅是本发明的一些实施例。
图1为本发明实施例提供的一种计算机系统的结构示意图;
图2为本发明实施例提供的一种处理计算机指令的方法流程图;
图3为本发明实施例提供的一种指令间依赖信息的示意图;
图4为本发明实施例提供的又一种处理计算机指令的方法信令图;
图5为本发明实施例提供的一种内存访问方法流程图;
图6为本发明实施例提供的一种访存请求的格式示意图;
图7为本发明实施例提供的一种内存控制器的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。
图1为本发明实施例提供的一种计算机系统的结构示意图。如图1所示,计算机系统100至少可以包括处理器10、内存控制器20以及内存30。处理器10是一台计算机系统100的运算核心(Core)和控制核心(Control Unit)。处理器10可以是一块超大规模的集成电路。在处理器10中安装有操作系统和其他软件程序,从而处理器10能够实现对计算机系统100的内存、缓存及磁盘的访问。本领域技术人员可以知道,处理器10可以是中央处理单元(Central Processing Unit,CPU),还可以是包含有至少一个处理器核12的处理电路或其他被配置成实施本发明实施例的一个或多个特定集成电路(Application SpecificIntegrated Circuit,ASIC)。随着集成电路工艺的发展,处理器10中可以集成越来越多的处理器核(core)12。当处理器10中集成有多个处理器核12时,多个处理器核12可以通过片上网络实现互连。可以理解的是,实际应用中,计算机系统还可以包括多个处理器。本发明实施例以一个处理器为例进行示例。在本发明实施例中不对处理器的数量以及一个处理器中处理器核的数量进行限定。
缓存14是计算机系统100中位于处理器10与内存30之间的临时存储器。通常,缓存14均由静态随机存取存储器(Static Random Access Memory,SRAM)组成。以图1所示的计算机系统为例,由于缓存14的速率较快,因此,缓存14用于与处理器核12进行高速数据交换。在缓存14中的数据是内存30中的一部分。当处理器核12访问数据时,处理器核12会先在缓存14中查找,当缓存14中没有处理器核12所需的数据时,处理器核12才访问内存30,从而加快了处理器核12的访问速率。具体的,缓存14可以包括控制器件以及存储介质,缓存14中的控制器件可以根据处理器核12的操作指令向处理器核12返回其存储介质中缓存的数据。缓存14中的控制器件还可以根据处理器核12的写操作指令将待写入的数据缓存于缓存14的存储介质中。本领域人员可以知道,缓存14可以集成在处理器10中。在多核处理器系统中,每个处理器核12都可以包含一个缓存14。
内存控制器(Memory Controller)20是计算机系统100内部控制内存30并用于管理与规划从内存30到处理器10间的数据传输的总线电路控制器。内存控制器20是使内存30与处理器10(例如CPU)之间交换数据的重要组成部分。通过内存控制器20,内存30与处理器10之间可以交换数据。内存控制器20可以是一个单独的芯片,并通过系统总线与处理器10连接。本领域技术人员可以知道,内存控制器20也可以被集成到处理器10中或被内置于北桥中。本发明实施例不对内存控制器20的具体位置进行限定。为了方便描述,在图1所示的系统架构中,以内存控制器20单独设置为例进行描述。内存控制器20控制必要的逻辑以将数据写入内存30或从内存30中读取数据。
内存30是计算机系统100的主存。内存30通常用来存放操作系统中各种正在运行的软件、输入和输出数据以及与外部设备交换的信息等。为了提高处理器10的访问速度,内存30需要具备访问速度快的优点。在传统的计算机系统架构中,通常采用动态随机存取存储器(Dynamic Random Access Memory,DRAM)作为内存30。随着非易失性存储器(Non-Volatile Memory,NVM)技术的发展,相变存储器(Phase-change Random Access memory,PCM),阻变存储器(resistive random access memory,RRAM)、磁性存储器(magneticrandom access memory,MRAM)或铁电式存储器(ferroelectric random access memory,FRAM)等新型NVM也逐渐被作为内存使用。在本发明实施例中不对内存30的具体存储介质进行限定。
下面将结合图1所示的计算机系统100对本发明实施例提供的内存访问技术进行详细介绍。图2为本发明实施例提供的一种处理计算机指令的方法流程图。图3为本发明实施例提供的一种指令间依赖信息的示意图。图4为本发明实施例提供的一种处理计算机指令的方法信令图。下面将结合图3和图4对图2中的方法进行详细描述。
在步骤202中,处理器10获取待处理的多个访存指令间的依赖信息。本领域人员可以知道,在处理器10的指令队列中有多个待处理的计算机指令,这些指令可以包括访存指令、运算指令及其他指令。在本申请中只涉及对访存指令以及运算指令的处理。访存指令是指示处理器10访问内存30的指令。访存指令可以包括加载(load)和存储(store)指令,其中,load指令用于将从内存30中从内存中读取的数据存入寄存器中。Store指令用于将寄存器中的数据保存到内存30。访存指令的命令格式可以为:
Load<地址><Rd>:用于指示将内存中指定地址的数据读入寄存器Rd;
Store<地址><Rd>:用于指示将寄存器Rd中的数据存入内存中的指定地址。
运算指令用于指示处理器10对寄存器的值进行相应计算。运算指令可以包括加法(add)指令、减法(sub)指令等。运算指令的格式通常可以为:
Add<REG1><REG2><Rd>:用于指示将寄存器REG1中存储的数据和REG2中存储的数据进行加法运算,并将运算结果存入寄存器Rd;
Sub<REG1><REG2><Rd>:用于指示将寄存器REG1中存储的数据和REG2中存储的数据进行减法运算,并将运算结果存入寄存器Rd。
本领域人员可以知道,为了保证数据的正确性,指令队列301中的处理指令需要在其待操作的源寄存器准备就绪时才可以被执行。例如,若第二指令和第一指令之间存在数据依赖关系,第二指令待操作的源寄存器依赖于第一指令的处理结果,若第一指令未被处理完成,则第二指令的源寄存器就无法准备就绪,则第二指令无法被执行。在本发明实施例中,在处理器10侧,当处理器10处理指令队列201中的多个访存指令时,处理器10可以根据各个访存指令中携带的源寄存器标识和目标寄存器标识获得各个访存指令之间的依赖关系。如图3所示,指令队列301中可以包括多个访存指令:ld_1、ld_2、ld_3、ld_4以及ld_5,还包含有多个运算指令:alu_1和alu_2。在本发明实施例中,处理器10可以根据各个指令的操作类型以及源地址和目的地址获得指令队列301中的多个处理指令之间的依赖关系。
需要说明的是,在本发明实施例中,源寄存器是指用于存放待操作的数据的寄存器,目标寄存器是指用于存放指令的执行结果的寄存器。对于访存指令来说,源寄存器是指用于存储待访问的内存地址的寄存器。目标寄存器是指用于存储访存结果的寄存器。换一种表达方式,源寄存器用于存储操作数。访存指令的源寄存器中存储的操作数可以用于产生访存地址。运算指令的源寄存器中存储的操作数为待操作的内容。目标寄存器用于存储操作结果。访存指令的目标寄存器用于存储访存结果。运算指令的目标寄存器用于存储运算结果。
在指令队列301中,访存指令ld_1用于指示将内存中地址为寄存器10(REG_10)中存储的地址的数据读取到寄存器1(REG_1)。访存指令ld_2用于指示将内存中地址为寄存器11(REG_11)中存储的地址的数据读取到寄存器2(REG_2)。访存指令ld_3用于指示将内存中地址为寄存器12(REG_12)中存储的地址的数据读取到寄存器3(REG_3)。运算指令alu_1用于指示将寄存器1(REG_1)和寄存器2(REG_2)中的数据相加,并将计算结果放入寄存器6(REG_6)。运算指令alu_2用于指示将寄存器6的数据减去100,并将计算结果放入寄存器7(REG_7)。访存指令ld_4用于指示将内存中地址为寄存器7(REG_7)中存储的地址的数据读取到寄存器8(REG_8)。访存指令ld_5用于指示将内存中地址为寄存器3(REG_3)中存储的地址的数据读取到寄存器4(REG_4)。
从指令队列301中的多个指令可以看出,访存指令ld_1、ld_2、ld_3的执行没有依赖其他指令的执行结果。访存指令ld_1、ld_2、ld_3的执行结果被其他访存指令用于产生访存地址。在本发明实施例中也可以将访存指令ld_1、ld_2和ld_3称为生产者指令。具体的,运算指令alu_1的执行需要依赖指令ld_1和ld_2指令的执行结果。运算指令alu_2的执行需要依赖指令alu_1的执行结果。访存指令ld_4的访存地址的产生需要依赖alu_2的执行结果。因此,访存指令ld_4的访存地址的产生需要依赖访存指令ld_1和ld_2的执行结果。换一种表达方式,访存指令ld_4与访存指令ld_1和ld_2存在依赖关系。在本发明实施例中,可以将执行结果被其他访存指令用于产生访存地址的指令称为生产者访存指令。将其执行需要依赖于其他指令的执行结果的访存指令称为消费者访存指令。由于处理器不会根据运算指令执行访问内存的动作,运算指令的执行不会影响内存访问时延。运算指令只会传递访存指令之间的依赖关系。在本发明实施例中主要对如何处理具有依赖关系的访存指令进行详细描述。
在本发明实施例中,处理器可以根据指令队列301中各个处理指令的源寄存器标识和目标寄存器标识获得指令之间的依赖信息。为了描述清楚,在本发明实施例中就可以依赖关系表302的形式来呈现指令队列301中各个处理指令之间的依赖关系。如图3所示,可以为每个处理指令建立一个表项以记录该指令与其他指令的依赖关系。为了获得访存指令待访问的地址,在本发明实施例中,依赖关系表302中可以包括三个信息:SR1、SR2和Offset。其中,SR1和SR2是该指令所依赖的寄存器的标识,寄存器号码前面带有符号代表正负,Offset是立即数,用于表示地址偏移量。根据依赖关系表302中的信息,可以按照如下计算方法计算得到消费者访存待访问的内存地址:
Figure GPA0000266263150000121
其中,n为所依赖的寄存器的数量,REG[SRk]用于指示访存请求所依赖的第k个寄存器中存储的内容,其中k的值由1到n。
如前所述,访存指令ld_1、ld_2和ld_3的执行不需要依赖其他指令的执行结果,因此访存指令ld_1、ld_2和ld_3在依赖关系表302中对应的表项为空。运算指令alu_1是用于指示将寄存器1(REG_1)和寄存器2(REG_2)中的数据相加,并将计算结果放入寄存器6(REG_6)。因此,在依赖关系表302与运算指令alu_1对应的表项中,SR1和SR2分别为+1和+2。运算指令alu_2是用于指示将寄存器6的数据减去100,并将计算结果放入寄存器7(REG_7)。REG_6的数据是由寄存器1(REG_1)和寄存器2(REG_2)的数据经过运算指令(alu_1)的运算得到的。因此,运算指令alu_1将依赖关系进行了传递,换一种表达方式,REG_7=REG_1+REG_2-100。在依赖关系表302与运算指令alu_2对应的表项中,SR1和SR2可以分别为+1和+2。Offset是-100。对于访存指令ld_4,访存指令ld_4用于指示将内存中地址为寄存器7(REG_7)中存储的地址的数据读取到寄存器8(REG_8)。REG_7是由寄存器1(REG_1)和寄存器2(REG_2)的数据经过运算指令alu_1和alu_2两次运算得到的,因此,运算指令alu_1和alu_2将依赖关系进行了传递,在依赖关系表302中与访存指令ld_4对应的表项中,SR1和SR2可以分别为+1和+2,Offset是-100。换一种表达方式,访存指令ld_4待访问的地址是通过将访存指令ld_1和ld_2的执行结果经过运算指令alu_1和alu_2两次运算来得到的,访存指令ld_4最终依赖于访存指令ld_1和ld_2的执行结果。对于访存指令ld_5,由于访存指令ld_5用于指示内存中地址为寄存器3(REG_3)中存储的地址的数据读取到寄存器4(REG_4),因此,访存指令ld_5依赖于访存指令ld_3的执行。在依赖关系表302中与访存指令ld_5对应的表项中,SR1可以为+3,SR2为空,Offset为0。
在步骤204中,处理器将根据所述多个指令以及各指令的依赖信息获得的至少两个访存请求发送给内存控制器20。其中,所述至少两个访存请求中的消费者访存请求中携带有该访存请求的依赖信息。实际应用中,处理器10中的处理器核12在获得所述多个指令之间的依赖信息之后,当某个访存指令未命中缓存14时,处理器核12可以在根据该访存指令向内存控制器20发送的访存请求中携带该访存请求的依赖信息。所述依赖信息包括所述访存请求所依赖的寄存器标识、偏移量等信息。寄存器标识可以包括依赖关系表中的SR1和SR2,偏移量信息可以包括前述的Offset。其中,SR1和SR2是该指令所依赖的寄存器编号,寄存器号码前面带有代表“加”“减”的运算符号,Offset是立即数。内存控制器20可以根据访存请求中携带的依赖信息按照预设的计算方法计算获得访存请求待访问地址。进而,内存控制器20能够根据计算获得的待访问的地址实现对内存30的访问。在本发明实施例中,也可以将访存指令待访问的地址称为访存地址。
可以理解的是,图3中的依赖关系表302仅仅是处理器获得的多个指令间的依赖关系的一种示意。实际应用中,处理器还可以以其他方式记录指令间的依赖关系。并且,一种情形下,处理器可以通过运行软件获得各个指令之间的依赖信息。例如,处理器可以通过运行软件遍历检测各个指令待访问的源寄存器的标识和目标寄存器的标识,以获得并记录各指令之间的依赖信息。另一种情形下,处理器还可以利用其硬件检测和获得各个处理指令之间的依赖关系。下面就以图3所示的指令队列301为例,结合图4详细描述处理器如何利用其硬件检测获得各处理指令之间的依赖信息,并向内存控制器20发送携带有依赖信息的访存请求。
图4为本发明实施例提供的一种处理器处理多个指令的方法信令图。如图4所示,本领域人员可以知道,处理器核12通常可以包括用于指令队列301、算术逻辑单元(Arithmetic Logic Unit,ALU)402、访存单元(Load/Store Unit,LSU)404以及数据转发通路。在本发明实施例中,数据转发通路指的是从ALU 402和LSU 404出接口到指令队列中的数据转发通路。本领域人员可以知道,指令队列301可以是硬件队列,指令队列301可以通过多个寄存器来实现。下面将以图3所示的指令队列301指令为例,对处理器核12如何处理指令队列301中的各个指令进行具体的描述。
在步骤S1中,当访存指令的地址没有数据依赖时,这些指令可以被处理器核12从其指令队列301直接发射到LSU 404。在步骤S2中,当某个访存指令未命中缓存,即发生cache miss时,在本发明实施例中,处理器核12为该指令的目标寄存器增加第一标识,所述第一标识用于指示该目标寄存器的值推测可用(speculative)。并且,处理器核12将其目标寄存器的值设置为0,并通过数据转发通路将该指令转发给指令队列中的后续相关指令。例如,如图4中指令队列301中的访存指令ld_1、ld_2和ld_3被发射到LSU 404后,若LSU 404判断访存指令ld_1、ld_2和ld_3均发生了cache miss,则LSU 404可以分别根据访存指令ld_1、ld_2和ld_3向内存控制器发送访存请求(参见图4中步骤S2.1)。并且,处理器核12可以分别为访存指令ld_1的目标寄存器(REG_1)、访存指令ld_2的目标寄存器(REG_2)以及访存指令ld_3的目标寄存器(REG_3)设置第一标识,并将各目标寄存器的值设置为0。处理器核12可以通过数据转发通路将目标寄存器(REG_1)和目标寄存器(REG_2)的值转发给指令队列301中的运算指令alu_1,通过数据转发通路将目标寄存器(REG_3)的值转发给指令队列301中的访存指令ld_5(参见图4中步骤S2.2)。
需要说明的是,在现有技术中,当处理指令发生cache miss而导致该指令的目标寄存器不可用时,后续依赖于此目标寄存器的指令就无法被发射到LSU。然而,在本发明实施例中,为了获得指令队列301中多个处理指令之间的依赖信息,当某个指令发生cachemiss时,通过将该访存指令的目标寄存器标记为speculative,并将其目标寄存器的值设置为0的方式来标识该指令cache miss,从而能够使后续依赖于此目标寄存器的指令不会被阻塞在处理器核12中,进而不会占用处理器的资源,为后续指令提供了更多被发射的机会,可以更早地发现后续指令的cache miss,减少内存访问时延。
在步骤S3中,对于指令队列301中的运算指令,若处理器核12确定该运算指令中的源寄存器的值处于speculative状态时,处理器核12可以将该指令从指令队列301发射到ALU 402,并产生依赖信息。例如,对于指令队列301中的运算指令alu_1,处理器核12确定该指令的源寄存器REG_1和REG_2都是speculative,因此,处理器核12可以将运算指令alu_1发射到ALU 402,由ALU402执行运算指令alu_1。并且,处理器核12可以记录运算指令alu_1与访存指令ld_1和ld_2的依赖信息。具体的,处理器核12可以记录运算指令alu_1所依赖的寄存器的标识(例如源寄存器REG_1和REG_2)以及偏移量信息。在步骤S4中,ALU 402执行运算指令alu_1。具体的,由于REG_1和REG_2的值为0,因此,运算指令alu_1的运算结果为0。进一步的,当处理器核需要通过数据转发通路将alu_1的目标寄存器REG_6提供给指令队列301中需要访问目标寄存器REG_6的后续指令时,处理器核12为目标寄存器REG_6设置第二标识,所述第二标识用于指示所述目标寄存器的值依赖(depend)于其他寄存器的值。换一种表达方式,所述第二标识用于指示所述目标寄存器的值用于传递依赖关系。ALU402通过数据转发通路将alu_1的目标寄存器REG_6的值以及依赖信息转发给指令队列301中需要访问目标寄存器REG_6的后续指令。
在步骤S5中,对于指令队列301中的运算指令,若处理器核12确定该运算指令中的源寄存器包含有用于指示源寄存器的值处于为depend状态的第二标识,处理器核12可以将该指令从指令队列301发射到ALU 402,并产生依赖信息。例如,对于指令队列301中的运算指令alu_2,由于运算指令alu_2的源寄存器为运算指令alu_1的目标寄存器REG_6,且目标寄存器REG_6的值处于depend状态,因此处理器核12可以将运算指令alu_2发射到ALU 402。并且,由于运算指令alu_2的源寄存器REG_6的值依赖于寄存器REG_1和REG_2的值,因此,处理器核12可以记录运算指令alu_2与访存指令ld_1和ld_2的依赖信息,例如,处理器核12可以记录运算指令alu_2所依赖的寄存器的标识(例如源寄存器REG_1和REG_2)。在步骤S6中,ALU 402可以执行运算指令alu_2以获得运算指令alu_2的计算结果,并且通过数据转发通路将运算指令alu_2的依赖信息以及计算结果发送给指令队列301中需要访问运算指令alu_2的目标寄存器REG_7的后续指令(例如访存指令ld_4)。具体的,由于寄存器REG_6的值为0,因此ALU 402根据运算指令alu_2执行的结果为-100,这表示需要访问运算指令alu_2的目标寄存器REG_7的后续指令(访存指令ld_4)的Offset为-100。ALU 402可以将目标寄存器REG_7的值以及该指令的依赖信息(例如,依赖于REG_1和REG_2,Offset为-100)通过数据转发通路转发给指令队列301中的访存指令ld_4。
在步骤S7中,对于指令队列301中的消费者访存指令,若其访存地址依赖的寄存器包含有用于指示源寄存器的值处于为depend状态的第二标识,则可以将该访存指令发射到LSU 404,并传递依赖关系。例如,处理器核12确定访存指令ld_4为消费者访存指令,访存指令ld_4指令的访存地址依赖寄存器REG_7,由于寄存器REG_7的状态为depend,因此,处理器核12可以将访存指令ld_4发射到LSU 404。在步骤S8中,LSU 404执行访存指令ld_4,若访存指令ld_4发生cache miss,处理器核12可以根据访存指令ld_4向内存控制器20发送访存请求。在根据访存指令ld_4向内存控制器20发送的访存请求中,包含有该访存请求的依赖信息。例如,依赖信息可以包括依赖的寄存器为REG_1和REG_2,offset为-100。
在步骤S9中,对于指令队列301中的消费者访存指令,若其访存地址依赖的寄存器包含有第一标识(speculative),换一种表达方式,若消费者访存指令的访存地址依赖的寄存器的值为推测可用,则处理器核12可以将该访存指令发射到LSU 404,并记录该访存指令的依赖信息。例如,处理器核12确定访存指令ld_5为依赖寄存器REG_3的消费者访存指令,则处理器12可以记录访存指令ld_5所依赖的寄存器的标识为REG_3,并将访存指令ld_5发射到LSU 404。在步骤S10中,在LSU 404执行访存指令ld_5,若访存指令ld_5发生cachemiss,处理器核12可以根据访存指令ld_5向内存控制器20发送访存请求。具体的,处理器核12根据访存指令ld_5向内存控制器20发送的访存请求中可以包含该访存请求的依赖信息,例如,依赖信息可以包括依赖的寄存器为REG_3。
综上所述,在处理器核12处理指令队列301中的多个处理指令时,可以按照下述几条规则来进行处理:
1)当访存指令发生cache miss时,将其目标寄存器设置第一标识,将其目标寄存器的状态标志为speculative态。并发射执行该访存指令及其后续相关指令。LSU404在处理该访存指令时,可以将其目标寄存器的值设置为0。但需要说明的是,在这种情况下,虽然该访存指令被发射到LSU404并被执行,但处理器核不会修改处理器状态;
2)当运算指令的源寄存器包含第一标识,即运算指令的源寄存器处于speculative状态时,处理器核12可以将该运算指令的目标寄存器标志为depend态,并记录该运算指令的目标寄存器依赖的寄存器;
3)当运算指令的源寄存器包含第二标识,即运算指令的源寄存器处于depend状态时,处理器核12可以将该运算指令的目标寄存器标志为depend态,并记录该运算指令的源寄存器所依赖的寄存器。根据这种方式,该运算指令可以传递依赖关系;
4)当访存指令的访存地址依赖的寄存器包含有第一标识,即访存指令的源寄存器处于speculative状态时,处理器核12可以在根据该访存指令获得的访存请求中记录该访存指令所依赖的寄存器;
5)当访存指令的访存地址依赖的寄存器包含有第二标识,即访存指令的源寄存器处于depend状态时,处理器核12可以在根据该访存指令获得访存请求中记录该访存指令的源寄存器所依赖的寄存器。
总的来说,一种情况下,当消费者访存指令直接依赖于生产者访存指令时,在消费者访存请求中携带所述生产者访存指令的目标寄存器标识。另一种情况下,当消费者访存指令待访问的地址依赖于运算指令的目标寄存器,且所述运算指令目标寄存器依赖于一个生产者访存指令的目标寄存器时,在消费者访存请求中携带所述生产者访存指令的目标寄存器标识,以及待访问的地址的偏移量,其中,所述偏移量可以根据所述运算指令的运算结果获得。
需要说明的是,由于消费者访存指令依赖的生产者访存指令数量通常不会超过两个,并且,为了减少内存控制器处理访存请求时的硬件开销,在本发明实施例中,在获得访存指令之间的依赖信息时,是以一个访存指令所依赖的访存指令不超过两个为例进行描述。换一种表达方式,在本发明实施例中,是以消费者访存指令所依赖的生产者访存指令不超过两个为例进行描述。可以理解的是,实际应用中,当一个消费者访存指令所依赖的生产者访存指令超过两个时,处理器10也可以按照本发明实施例所提供的方式对各指令进行处理。
按照上述处理指令队列301中提供的各个指令的方法,处理器核12可以获得指令队列301中各个指令之间的依赖信息,并将根据访存指令以及获得的依赖信息向内存控制器发送访存请求,从而能够将处理器核12获得的多个处理指令之间的依赖信息发送给内存控制器,并能够防止处理指令被阻塞在处理器中,减少处理指令对处理器资源的占用,并减少了后续指令的等待时延。
在本申请提供的访存指令的处理方法中,处理器在处理具有依赖关系的访存指令时,并不等访存指令之间的依赖关系解除后再发射执行访存指令,而是通过推测执行的方式获得并记录访存指令之间的依赖信息,并将获得的依赖信息携带在相应的访存请求中。访存指令之间的依赖信息的生成主要是借助处理器核中原有的功能单元(例如:ALU、LSU以及数据转发通路等),根据本发明实施例提供的方法,只需要在数据转发通路中增加少量的标签来记录访存指令之间的依赖信息。因此,不会增加处理器额外的硬件开销。
上述只是对本发明实施例中处理器如何处理具有依赖关系的访存指令进行描述。可以理解的是,实际应用中,处理器10还可以优先处理指令队列中不依赖于其他指令的访存指令,在本发明实施例中,也可以将不依赖于其他指令的访存指令称为非依赖访存指令。根据这种方式,处理器10能够提前触发非依赖访存请求,进一步减少处理后续指令时处理器的等待时延。
上面描述了处理器10如何处理具有依赖关系的访存指令,下面将详细描述内存控制器20如何处理具有依赖关系的访存请求。图5为本发明实施例提供的一种内存控制器处理具有依赖关系的访存请求的方法流程图。为了描述方便,在本发明实施例中,以第一访存请求为生产者访存请求,第二访存请求为消费者访存请求为例进行描述。其中,生产者访存请求是处理器10根据生产者访存指令发送的访存请求,消费者访存请求是处理器10根据消费者访存指令发送的访存请求。可以理解的是,当两个访存指令之间具有依赖关系时,则根据这两个访存指令获得的相应的访存请求之间也具有相同的依赖关系。如图5所示,该方法可以包括下述步骤。
在步骤502中,内存控制器20接收处理器发送的至少两个访存请求。实际应用中,内存控制器20可以将接收的至少两个访存请求缓存在访存请求队列中。在本发明实施例中,为了记录访存请求之间的依赖信息,内存控制器20中的访存请求队列中的每个表项中都增加了一些字段。图6为本发明实施例提供的一种访存请求队列的示意图。需要说明的是,图6仅仅是以#3号访存请求依赖于#1访存请求和#2访存请求为例对具有依赖关系的多个访存请求进行了示例。其中,#1访存请求为处理器10根据图3中的访存指令Ld_1向内存控制器20发送的访存请求,#2访存请求为处理器10根据图3中的访存指令Ld_2向内存控制器20发送的访存请求,#3访存请求为处理器10根据图3中的访存指令Ld_4向内存控制器20发送的访存请求。如图6所示。在内存控制器20的访存请求队列中,每一个表项都包含了下述字段。
准备标识(ready,r)位:用于指示访存请求是否可以被发送到内存。例如,当“r”位的值为0时,用于表示访存请求还未准备就绪,不能根据访存请求访问内存。当“r”位的值为1时,表示访存请求已经准备就绪,可以根据访存请求访问内存。
地址(addr)位:用于指示访存请求待访问的内存地址。
目标寄存器(dest)位:用于指示存储访存请求的访存结果的寄存器的标识。换一种表达方式,dest位用于指示访存请求写回的目标寄存器的标识。
源寄存器(src)字段:用于指示访存请求待访问的地址所依赖的寄存器的标识。在本发明实施例中,每个访存请求的源寄存器字段具体可以包括3个部分:有效位(valid)位、信号(signal)位以及寄存器标识位(num)。其中,valid位用于指示访存请求是否与其他访存请求存在依赖关系。Signal位用于指示访存请求所依赖的寄存器的正、负值。Num位用于指示访存请求待访问的地址所依赖的寄存器的标识(例如,寄存器的编号)。需要说明的是,本发明实施例以消费者访存请求所依赖的生产者访存请求不超过两个为例进行描述。因此,在本发明实施例中,访存请求中的源寄存器字段用于记录两个生产者访存的目标寄存器的标识。例如,可以通过如图6中的src1和src2字段来记录两个生产者访存的目标寄存器标识。
在步骤504中,内存控制器20根据所述第一访存请求访问内存30以获得第一访存结果。具体的,对于访存请求队列中的生产者访存请求(例如,如图6中的#1访存请求),当内存控制器20确定其ready位指示该访存请求已经准备就绪时,内存控制器20可以根据所述第一访存请求的访存地址(例如图6中的地址:xxx)访问内存30,以获得第一访存结果。本领域技术人员可以理解的是,第一访存结果可以是从内存30中读取的数据。类似的,由于图6中的#2访存请求也是生产者访存请求,因此,内存控制器20也可以根据#2访存请求待访问的地址(例如:YYY)访问内存30,以获得#2访存请求的访存结果。
在步骤506中,内存控制器20根据所述第一访存结果计算所述第二访存请求待访问的地址。具体的,当内存控制器20获得第一访存结果后,内存控制器20可以根据所述第一访存结果以及访存请求列表中记录的第二访存请求的依赖信息按照设置的计算方法计算所述第二访存请求待访问的地址。实际应用中,内存控制器20可以将第一访存请求的目标寄存器的标识与访存请求队列中第二访存请求(未准备就绪的访存请求)的src1和src2中的寄存器标识进行比较,如果匹配,内存控制器20可以根据前述的计算方法:
Figure GPA0000266263150000201
计算第二访存请求待访问的地址。可以理解的是,实际应用中,offset的值可以为0。当SR1用于存储第一访存指令的访存结果时,REG[SR1]用于指示第一访存请求的访存结果。通过这种方式,内存控制器20可以将所述第一访存请求的结果累加到所述第二访存请求的addr位中。进一步的,内存控制器20将相应的valid位设置为0用于指示所述第二访存请求与所述第一访存请求的依赖关系已经被解除。可以理解的是,在第二访存请求依赖于两个生产者访存请求的情况下,当所述第二访存请求与所有生产者访存请求的依赖关系解除时,内存控制器20可以将所述第二访存请求中的ready标识设置为1,用于指示所述第二访存请求已经准备就绪。
例如,以图6中的#3访存请求为第二访存请求为例,#3访存请求的访存地址依赖于寄存器1(#1访存请求的目标寄存器)以及寄存器2(#2访存请求的目标寄存器),当内存控制器20获得#1访存请求的访存结果以及#2访存请求的访存结果后,内存控制器20可以根据#1访存请求的访存结果以及#2访存请求的访存结果以及#3访存请求中携带的依赖信息计算#3访存请求待访问的地址。具体的,如图6所示,#3访存请求待访问的地址为#1访存请求的访存结果、#2访存请求的访存结果以及偏移量offset的和。实际应用中,当获得所述#3访存请求待访问的地址后,可以将#3访存请求中的ready位设置为1,用于指示所述#3访存请求准备就绪,内存控制器20可以根据所述#3访存请求访问内存30。可以理解的是,图6是以消费者访存请求(例如,#3访存请求)依赖于两个生产者访存请求(#1访存请求和#2访存请求)为例,实际应用中,消费者访存请求可以依赖于一个或多个生产者访存请求。
在步骤508中,内存控制器20根据所述待访问的地址执行所述第二访存请求以获得第二访存结果。实际应用中,内存控制器20在通过步骤506获得消费者访存请求待访问的地址之后,内存控制器20可以根据计算获得的消费者访存请求待访问的地址访问内存30以获得所述消费者访存请求的访存结果。例如,以图6中的#3访存请求为第二访存请求为例,当内存控制器20获得#3访存请求待访问的地址之后,内存控制器20可以根据所述待访问的地址执行所述#3访存请求,以获得第二访存结果。
在步骤510中,内存控制器20将所述第一访存结果以及所述第二访存结果返回处理器10。实际应用中,当内存控制器20执行所述第一访存请求,从内存30中获得第一访存结果之后,内存控制器20可以将所述第一访存结果返回给处理器10。具体的,内存控制器20可以将所述第一访存结果放入处理器10的缓存14中。处理器10会执行第一访存指令,从缓存14中获得所述第一访存结果,并将所述第一访存结果存储在所述第一访存指令(例如,图3中的访存指令Ld_1)的目标寄存器(例如,寄存器REG_1)中。换一种表达方式,当处理器10获得第一访存结果之后,处理器10会根据所述第一访存结果更新所述第一访存指令的目标寄存器的值。类似的,当内存控制器20执行完与所述第一访存请求具有依赖关系第二访存请求(例如图6中的#3访存请求)之后,内存控制器20也会将所述第二访存请求的第二访存结果返回给处理器10,处理器10在执行与所述第二访存请求对应的第二访存指令(例如,图3中的访存指令Ld_4)时,可以从缓存14中获得所述第二访存结果,并存储到所述第二访存指令的目标寄存器(例如,寄存器REG_8)中。
在本申请提供的内存访问方法中,当内存控制器接收到具有依赖关系的第一访存请求和第二访存请求时,内存控制器可以先执行第一访存请求,其中,第一访存请求为生产者访存请求。由于第二访存请求中携带有用于指示第二访存请求依赖于所述第一访存请求的依赖信息,因此,在获得第一访存请求的访存结果之后,内存控制器可以根据第一访存请求的访存结果以及第二访存请求中携带的依赖信息按照预设的计算方法计算所述第二访存请求待访问的地址,从而在内存控制器中就能解除第二访存请求与第一访存请求的依赖关系,并根据计算获得的第二访存请求待访问的地址执行所述第二访存请求。根据本申请提供的内存访问方法,内存控制器在处理具有依赖关系的访存请求时,能够根据生产者访存请求的访存结果以及消费者访存请求中携带的依赖信息在内存控制中计算消费者访存待访问的地址,从而不通过与处理器的再次通信就能够在内存控制器本地解决访存请求之间的依赖关系,执行消费者访存请求。减少了内存控制器和处理器核之间的通信次数,节省了网络资源,进一步降低了内存访问延时。
并且,在申请提供的内存访问方法中,由于访存请求队列中增加了对依赖信息的描述,内存控制器在处理具有依赖关系的访存请求时,内存控制器只需要根据生产者访存请求的访存结果、以及消费者访存请求中携带的依赖信息就能够计算消费者访存待访问的地址,计算方式简单。实际应用中,内存控制器可以只需要通过一个加法器就能够实现对消费者访存请求待访问地址的计算,因此,内存控制器的硬件开销也比较小。
图7为本发明实施例提供的一种内存控制器的结构示意图。图7所示的内存控制器可以为图1中的内存控制器20。如图7所示,内存控制器20可以包括下述接收模块702、访问模块704、计算模块706以及发送模块708。
接收模块702,用于接收所述处理器发送的第一访存请求以及第二访存请求,其中,所述第二访存请求中包含有第一依赖信息,所述第一依赖信息用于指示所述第二访存请求待访问的地址依赖于所述第一访存请求的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存请求的第一访存结果;
访问模块704用于根据所述第一访存请求访问所述计算机系统的内存,以获得所述第一访存结果;
计算模块706用于根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址;
访问模块704还用于根据所述第二访存请求待访问的地址执行所述第二访存请求以获得第二访存结果;
发送模块708,用于将所述第一访存结果以及所述第二访存结果返回所述处理器。
实际应用中,所述第一依赖信息包括所述第一目标寄存器的标识以及第一偏移量信息。所述计算模块706具体用于根据所述第一访存结果以及所述第一偏移量信息按照预设的计算方法计算所述第二访存请求待访问的地址。
在本发明实施例中,所述预设的计算方法包括:
Figure GPA0000266263150000231
其中,Address为访存请求待访问的内存地址,n为访存请求所依赖的寄存器的数量,REG[SRk]用于指示访存请求所依赖的第k个寄存器中存储的内容,offset为地址偏移量。
可选的,在本发明实施例中,接收模块702还用于接收处理器根据第三访存指令发送的第三访存请求,其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器,所述第三访存请求中携带有第三依赖信息,所述第三依赖信息中包括所述第一目标寄存器标识以及根据所述第四指令获得的第二偏移量信息,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算。计算模块706还用于根据所述第一访问结果以及所述第二偏移量信息计算获得所述第三访存指令待访问的地址。访问模块704还用于根据所述第三访存指令访问所述内存获得第三访存结果。
本发明实施例所提供的内存控制器20可以用于执行前述内存访问方法,具体的,各个模块功能的详细描述可参见前述实施例中对内存控制器的相关描述,在此不再赘述。
需要说明的是,本申请中的术语“第一”、“第二”、“第三”、“第四”等是用于区别不同的对象,而不是用于描述对象的特定顺序。本文中的术语“多个”是指两个或两个以上。
本发明实施例还提供一种内存访问方法的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令用于执行前述任意一个方法实施例所述的方法流程。本领域普通技术人员可以理解,前述的存储介质包括:U盘、移动硬盘、磁碟、光盘、随机存储器(Random-Access Memory,RAM)、固态硬盘(Solid State Disk,SSD)或者其他非易失性存储器(non-volatile memory)等各种可以存储程序代码的非短暂性的(non-transitory)机器可读介质。
需要说明的是,本申请所提供的实施例仅仅是示意性的。所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。在本发明实施例、权利要求以及附图中揭示的特征可以独立存在也可以组合存在。在本发明实施例中以硬件形式描述的特征可以通过软件来执行,反之亦然。在此不做限定。

Claims (14)

1.一种计算机系统,其特征在于,包括:
处理器,用于:
获取待处理的第一访存指令和第二访存指令之间的第一依赖信息,其中,所述第一依赖信息用于指示所述第二访存指令待访问的地址依赖于所述第一访存指令的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存指令的第一访存结果;
当所述第一访存指令未命中所述计算机系统的缓存时,所述处理器为所述第一目标寄存器设置第一标识,其中,所述第一标识用于指示所述第一目标寄存器中的值推测可用;
根据所述第一访存指令向所述计算机系统中的内存控制器发送第一访存请求;
根据所述第二访存指令向所述内存控制器发送第二访存请求,其中,所述第二访存请求中包含有所述第一依赖信息;
所述内存控制器,用于:
根据所述第一访存请求访问所述计算机系统的内存,以获得所述第一访存结果;
根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址;
所述内存控制器根据所述第二访存请求待访问的地址执行所述第二访存请求以获得第二访存结果;
所述内存控制器将所述第一访存结果以及所述第二访存结果返回所述处理器。
2.根据权利要求1所述的计算机系统,其特征在于,所述第一依赖信息包括所述第一目标寄存器的标识以及第一偏移量信息,所述第一偏移量信息用于指示所述第二访存请求待访问的地址的偏移量;
所述内存控制器根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址包括:
所述内存控制器根据所述第一访存结果以及所述第一偏移量信息按照预设的计算方法计算所述第二访存请求待访问的地址。
3.根据权利要求2所述的计算机系统,其特征在于,所述预设的计算方法包括:
Figure FDA0003417418170000011
其中,Address为访存请求待访问的内存地址,n为访存请求所依赖的寄存器的数量,REG[SRk]用于指示访存请求所依赖的第k个寄存器中存储的内容,offset为地址偏移量。
4.根据权利要求1所述的计算机系统,其特征在于,所述处理器还用于:
获取待处理的第三访存指令与所述第一访存指令之间的第三依赖信息,其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算;
根据所述第三访存指令向所述内存控制器发送携带有所述第三依赖信息的第三访存请求,其中,所述第三依赖信息中包括所述第一目标寄存器的标识以及根据所述第四指令获得的第二偏移量信息;
所述内存控制器还用于:
根据所述第一访存结果以及所述第二偏移量信息计算获得所述第三访存请求待访问的地址;
根据所述第三访存请求待访问的地址执行所述第三访存请求,以获得第三访存结果。
5.一种处理器,应用于计算机系统中,其特征在于,包括:
指令队列,用于缓存待处理的第一访存指令和第二访存指令,并获得所述第一访存指令和所述第二访存指令之间的第一依赖信息,其中,所述第一依赖信息用于指示所述第二访存指令待访问的地址依赖于所述第一访存指令的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存指令的第一访存结果;
访存单元,用于根据所述第一访存指令向所述计算机系统中的内存控制器发送第一访存请求;
所述访存单元还用于,根据所述第二访存指令向所述内存控制器发送第二访存请求,其中,所述第二访存请求中包含有所述第一依赖信息;
所述访存单元具体用于:
当所述第一访存指令未命中所述计算机系统的缓存时,为所述第一目标寄存器设置第一标识,其中,所述第一标识用于指示所述第一目标寄存器中的值推测可用;
根据所述第一访存指令向所述内存控制器发送所述第一访存请求。
6.根据权利要求5所述的处理器,其特征在于:
所述指令队列还用于,获取待处理的第三访存指令与所述第一访存指令的第三依赖信息,其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算;
所述访存单元还用于,根据所述第三访存指令向所述内存控制器发送携带有所述第三依赖信息的第三访存请求,其中,所述第三依赖信息中包括所述第一目标寄存器标识以及根据所述第四指令获得的第二偏移量信息。
7.一种内存控制器,应用于计算机系统中,其特征在于,包括:
接收模块,用于接收所述计算机系统中的处理器发送的第一访存请求以及第二访存请求,当第一访存指令未命中所述计算机系统的缓存时,所述处理器为第一目标寄存器设置第一标识,其中,所述第一标识用于指示所述第一目标寄存器中的值推测可用;
其中,所述第二访存请求中包含有第一依赖信息,所述第一依赖信息用于指示所述第二访存请求待访问的地址依赖于所述第一访存请求的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存请求的第一访存结果;
访问模块,用于根据所述第一访存请求访问所述计算机系统的内存,以获得所述第一访存结果;
计算模块,用于根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址;
所述访问模块还用于,根据所述第二访存请求待访问的地址执行所述第二访存请求以获得第二访存结果;
发送模块,用于将所述第一访存结果以及所述第二访存结果返回所述处理器。
8.根据权利要求7所述的内存控制器,其特征在于,所述第一依赖信息包括所述第一目标寄存器的标识以及第一偏移量信息;
所述计算模块具体用于:
根据所述第一访存结果以及所述第一偏移量信息按照预设的计算方法计算所述第二访存请求待访问的地址。
9.根据权利要求8所述的内存控制器,其特征在于,所述预设的计算方法包括:
Figure FDA0003417418170000031
其中,Address为访存请求待访问的内存地址,n为访存请求所依赖的寄存器的数量,REG[SRk]用于指示访存请求所依赖的第k个寄存器中存储的内容,offset为地址偏移量。
10.根据权利要求7-9任意一项所述的内存控制器,其特征在于:
所述接收模块,还用于接收处理器根据第三访存指令发送的第三访存请求,其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器,所述第三访存请求中携带有第三依赖信息,所述第三依赖信息中包括所述第一目标寄存器标识以及根据所述第四指令获得的第二偏移量信息,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算;
所述计算模块,还用于根据所述第一访存结果以及所述第二偏移量信息计算获得所述第三访存请求待访问的地址;
所述访问模块,还用于根据所述第三访存请求待访问的地址执行所述第三访存请求,以获得第三访存结果。
11.一种内存访问方法,其特征在于,所述方法应用于包括处理器和内存控制器的计算机系统中,所述方法包括:
所述处理器获得待处理的第一访存指令和第二访存指令之间的第一依赖信息,其中,所述第一依赖信息用于指示所述第二访存指令待访问的地址依赖于所述第一访存指令的第一目标寄存器的值,所述第一目标寄存器用于存储所述第一访存指令的第一访存结果;
当所述第一访存指令未命中所述计算机系统的缓存时,所述处理器为所述第一目标寄存器设置第一标识,其中,所述第一标识用于指示所述第一目标寄存器中的值推测可用;
所述处理器根据所述第一访存指令向所述计算机系统中的内存控制器发送第一访存请求;
所述处理器根据所述第二访存指令向所述内存控制器发送第二访存请求,其中,所述第二访存请求中包含有所述第一依赖信息;
所述内存控制器根据所述第一访存请求访问所述计算机系统的内存,以获得所述第一访存结果;
所述内存控制器根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址;
所述内存控制器根据所述第二访存请求待访问的地址执行所述第二访存请求以获得第二访存结果;
所述内存控制器将所述第一访存结果以及所述第二访存结果返回所述处理器。
12.根据权利要求11所述的内存访问方法,其特征在于,所述第一依赖信息包括所述第一目标寄存器的标识以及第一偏移量信息,所述第一偏移量信息用于指示所述第二访存请求待访问的地址的偏移量;
所述内存控制器根据所述第一访存结果以及所述第一依赖信息计算所述第二访存请求待访问的地址包括:
所述内存控制器根据所述第一访存结果以及所述第一偏移量信息按照预设的计算方法计算所述第二访存请求待访问的地址。
13.根据权利要求12所述的内存访问方法,其特征在于,所述预设的计算方法包括:
Figure FDA0003417418170000051
其中,Address为访存请求待访问的内存地址,n为访存请求所依赖的寄存器的数量,REG[SRk]用于指示访存请求所依赖的第k个寄存器中存储的内容,offset为地址偏移量。
14.根据权利要求11所述的内存访问方法,其特征在于,还包括:
所述处理器获取待处理的第三访存指令与所述第一访存指令的第三依赖信息,其中,所述第三访存指令待访问的地址依赖于第四指令的目标寄存器,且所述第四指令待操作的源寄存器依赖于所述第一目标寄存器,所述第四指令待操作的源寄存器用于存储所述第四指令待操作的数据,所述第四指令用于指示对所述第一目标寄存器的值进行计算;
所述处理器根据所述第三访存指令向所述内存控制器发送携带有第三依赖信息的第三访存请求,其中,所述第三依赖信息中包括所述第一目标寄存器标识以及根据所述第四指令获得的第二偏移量信息;
所述内存控制器根据所述第一访存结果以及所述第二偏移量信息计算获得所述第三访存请求待访问的地址;
所述内存控制器根据所述第三访存请求待访问的地址执行所述第三访存请求,以获得第三访存结果。
CN201680090723.2A 2016-12-12 2016-12-12 计算机系统及内存访问技术 Active CN109923520B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2016/109518 WO2018107331A1 (zh) 2016-12-12 2016-12-12 计算机系统及内存访问技术

Publications (2)

Publication Number Publication Date
CN109923520A CN109923520A (zh) 2019-06-21
CN109923520B true CN109923520B (zh) 2022-05-13

Family

ID=62557809

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680090723.2A Active CN109923520B (zh) 2016-12-12 2016-12-12 计算机系统及内存访问技术

Country Status (4)

Country Link
US (1) US11093245B2 (zh)
EP (1) EP3543846B1 (zh)
CN (1) CN109923520B (zh)
WO (1) WO2018107331A1 (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20200192842A1 (en) * 2018-12-14 2020-06-18 Ati Technologies Ulc Memory request chaining on bus
CN114567520B (zh) * 2020-11-26 2023-06-02 华为技术有限公司 实现集合通信的方法、计算机设备和通信系统
CN116909755B (zh) * 2023-09-13 2023-12-22 北京开源芯片研究院 一种访存方法、处理器、电子设备及可读存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104216837A (zh) * 2013-05-31 2014-12-17 华为技术有限公司 一种内存系统、内存访问请求的处理方法和计算机系统
CN105095149A (zh) * 2015-08-10 2015-11-25 青岛中星微电子有限公司 一种片上系统参数的批处理方法和装置
CN105934933A (zh) * 2014-12-30 2016-09-07 华为技术有限公司 一种防止终端丢失的方法和终端

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6735685B1 (en) * 1992-09-29 2004-05-11 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
US7363467B2 (en) * 2002-01-03 2008-04-22 Intel Corporation Dependence-chain processing using trace descriptors having dependency descriptors
US7348236B2 (en) * 2004-06-28 2008-03-25 Micron Technology, Inc. Formation of memory cells and select gates of NAND memory arrays
US20060064546A1 (en) * 2004-07-28 2006-03-23 Hiroshi Arita Microprocessor
US20070234014A1 (en) * 2006-03-28 2007-10-04 Ryotaro Kobayashi Processor apparatus for executing instructions with local slack prediction of instructions and processing method therefor
CN100545806C (zh) * 2006-12-30 2009-09-30 中国科学院计算技术研究所 基于局部相联查找的解决访存相关的方法和处理器
JP2009098934A (ja) * 2007-10-17 2009-05-07 Hitachi Ltd プロセッサ及びキャッシュメモリ
CN102841857B (zh) * 2012-07-25 2015-02-25 龙芯中科技术有限公司 缓存预测执行的处理器与装置及方法
US9092275B2 (en) * 2012-11-20 2015-07-28 International Business Machines Corporation Store operation with conditional push of a tag value to a queue
US10977036B2 (en) * 2016-09-30 2021-04-13 Intel Corporation Main memory control function with prefetch intelligence

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104216837A (zh) * 2013-05-31 2014-12-17 华为技术有限公司 一种内存系统、内存访问请求的处理方法和计算机系统
CN105934933A (zh) * 2014-12-30 2016-09-07 华为技术有限公司 一种防止终端丢失的方法和终端
CN105095149A (zh) * 2015-08-10 2015-11-25 青岛中星微电子有限公司 一种片上系统参数的批处理方法和装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Overlapping Dependent Loads with Addressless Preload;Zhen Yang;《Computer and Information Science and Engineering》;20060916;第275-284页 *

Also Published As

Publication number Publication date
EP3543846B1 (en) 2022-09-21
US11093245B2 (en) 2021-08-17
EP3543846A4 (en) 2019-12-04
WO2018107331A1 (zh) 2018-06-21
US20190294442A1 (en) 2019-09-26
EP3543846A1 (en) 2019-09-25
CN109923520A (zh) 2019-06-21

Similar Documents

Publication Publication Date Title
US10990546B2 (en) Hardware-based virtual machine communication supporting direct memory access data transfer
CN111506534B (zh) 具有非阻塞高性能事务信用系统的多核总线架构
US20200336421A1 (en) Optimized function assignment in a multi-core processor
US10127043B2 (en) Implementing conflict-free instructions for concurrent operation on a processor
US9910802B2 (en) High bandwidth low latency data exchange between processing elements
US20170039144A1 (en) Loading data using sub-thread information in a processor
US9626316B2 (en) Managing shared resources between multiple processing devices
EP2523099B1 (en) Method for selective routing of local memory accesses and device thereof
US9251048B2 (en) Memory page management
CN109923520B (zh) 计算机系统及内存访问技术
JP2012508938A (ja) セキュアなアプリケーション実行方法および装置
US8788766B2 (en) Software-accessible hardware support for determining set membership
US20150234687A1 (en) Thread migration across cores of a multi-core processor
US11748109B2 (en) System and method for implementing strong load ordering in a processor using a circular ordering ring
US20180336034A1 (en) Near memory computing architecture
US10324862B2 (en) Supporting oversubscription of guest enclave memory pages
US20160224252A1 (en) Hybrid memory architecture
US20210191867A1 (en) Hardware Accelerator Automatic Detection of Software Process Migration
US11182161B2 (en) Fractional or partial line usage prediction in a processor
US11900116B1 (en) Loosely-coupled slice target file data
US20220342835A1 (en) Method and apparatus for disaggregation of computing resources
CN114924793A (zh) 处理单元、计算设备和指令处理方法
CN116745754A (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