CN115335802A - 用于优化从一个存储器到另一个存储器的数据传输的方法和系统 - Google Patents

用于优化从一个存储器到另一个存储器的数据传输的方法和系统 Download PDF

Info

Publication number
CN115335802A
CN115335802A CN202180024592.9A CN202180024592A CN115335802A CN 115335802 A CN115335802 A CN 115335802A CN 202180024592 A CN202180024592 A CN 202180024592A CN 115335802 A CN115335802 A CN 115335802A
Authority
CN
China
Prior art keywords
instructions
memory
instruction
data
processor
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.)
Pending
Application number
CN202180024592.9A
Other languages
English (en)
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.)
Nordic Semiconductor ASA
Original Assignee
Nordic Semiconductor ASA
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 Nordic Semiconductor ASA filed Critical Nordic Semiconductor ASA
Publication of CN115335802A publication Critical patent/CN115335802A/zh
Pending legal-status Critical Current

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator
    • G06F9/3895Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros
    • G06F9/3897Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator for complex operations, e.g. multidimensional or interleaved address generators, macros with adaptable data path
    • 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
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4451Avoiding pipeline stalls
    • 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
    • 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
    • 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/30098Register arrangements
    • 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
    • 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/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

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

Abstract

公开了一种用于通过处理器(106)将数据从源存储器(102)移动到目标存储器(104)的方法和系统(100)。处理器(106)具有多个寄存器(114)并且源存储器(102)存储包括一个或多个加载指令和一个或多个存储指令的指令序列。处理器(106)将加载指令从源存储器(102)移动到目标存储器(104)。然后,处理器(106)启动来自目标存储器(104)的加载指令的执行,以便将来自源存储器(102)的数据加载到处理器(106)中的一个或多个寄存器(114)。然后执行返回到存储在源存储器(102)中的指令序列,并且处理器(106)将来自寄存器(114)的数据存储到目标存储器(104)。

Description

用于优化从一个存储器到另一个存储器的数据传输的方法和 系统
背景技术
在计算机系统或数据处理系统上运行的大多数程序执行大量数据传输操作,即将数据块从一个存储器移动到另一个存储器。程序的典型示例是引导加载程序。引导加载程序是一个简单的程序或代码序列,它通过将一组程序和数据从一个存储器传输到另一个存储器以由处理器执行来引导或启动计算机系统。在某些情况下,引导加载程序会引导连接到进入休眠或睡眠状态的计算机系统的设备。此类设备的示例包括经常进入休眠或睡眠状态的IoT设备。在某些示例中,引导加载程序每秒最多可引导这些IoT设备20次,这涉及大量数据传输操作。因此,优化将数据从一个存储器移动到另一个存储器的方法很重要。
通常,程序被编写并作为源代码或汇编代码指令序列提供给计算机系统。这些程序包括用于执行数据传输或将数据从一个存储器复制到另一个存储器的函数。将数据从一个存储器复制到另一个存储器的常用函数之一是称为memcpy()的存储器复制函数。该程序由程序员或用户以人可读格式(或源代码)编写,并由计算机系统中的编译器和/或汇编器转换为机器可读代码。然后,链接器将程序存储为一组指令(机器可读代码),这些指令可以加载到计算机系统的存储器中以由处理器执行。程序可以直接从外部源加载到存储器中并从存储器中执行,或者程序可以移动到存储器中,引导加载程序可以在执行之前将它们从存储器中传输到任何存储器中所需的最终位置。这种存储器的一个例子是ROM镜像。然后,处理器通过执行从存储器中取出的指令来执行数据传输或存储器复制。
一般来说,当处理器在一个时钟周期内取出一条指令以将数据从一个存储器移动到另一个存储器时,如果要取出的并发指令和要访问的数据在同一个存储器中,则指令的执行会停止。这是因为处理器无法同时从存储器中执行指令取出和数据访问。因此,数据传输操作通常由处理器在两个或更多时钟周期内完成。数据传输操作的执行时间的增加导致计算机系统的计算开销增加。因此,需要以更优化的方式将数据从一个存储器传输到另一存储器。
发明内容
提供本发明内容以便以简化形式介绍概念的选择,这些概念将在下面的详细描述中进一步描述。本发明内容并非旨在识别所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。
本文公开了用于通过处理器将数据从源存储器移动到目标存储器的各种方法和系统。处理器具有多个寄存器并且源存储器存储包括一个或多个加载指令和一个或多个存储指令的指令序列。处理器将加载指令从源存储器移动到目标存储器。然后,处理器启动来自目标存储器的加载指令的执行,以便将数据从源存储器加载到处理器中的一个或多个寄存器。然后执行返回到存储在源存储器中的指令序列,并且处理器将数据从寄存器存储到目标存储器。
根据第一方面,提供了一种通过包括多个寄存器的处理器将数据从源存储器移动到目标存储器的方法,所述源存储器存储指令序列,其中所述指令序列包括一个或多个加载指令以及一个或多个存储指令,所述方法包括以下步骤:将一个或多个加载指令从源存储器移动到目标存储器;启动来自目标存储器的一个或多个加载指令的执行;在执行一个或多个加载指令时,将数据从源存储器加载到所述处理器中的至少一个寄存器;将执行返回到存储在源存储器中的指令序列;和在执行来自源存储器的一个或多个存储指令时,将数据从至少一个寄存器存储到目标存储器。
任选地,将一个或多个加载指令从源存储器移动到目标存储器的步骤是通过执行处理器存储在源存储器中的指令序列中的一组数据传输指令来执行的。
任选地,将一个或多个加载指令从源存储器移动到目标存储器的步骤通过在执行指令序列之前执行一组预配置指令来执行。
任选地,移动一个或多个加载指令的步骤包括将一个或多个加载指令移动到目标存储器。
任选地,在执行指令序列中的第一分支指令时执行启动来自目标存储器的一个或多个加载指令的执行的步骤。
任选地,将执行返回到存储在源存储器中的指令序列的步骤是在执行存储在目标存储器中的一个或多个加载指令之后的第二分支指令或返回指令时执行的。
任选地,该方法还包括通过执行以下步骤来执行每条加载指令:在第一时钟周期从目标存储器获取加载指令,所述加载指令标识要从源存储器加载的数据的存储器地址;在第二时钟周期内从目标存储器中获取后续加载指令;和在第二时钟周期期间,将数据从源存储器中的存储器地址加载到多个寄存器中的寄存器。
任选地,该方法还包括通过执行以下步骤来执行每条存储指令:在第一时钟周期从源存储器中获取存储指令,所述存储指令标识用于存储数据的目标存储器中的存储器地址;在第二时钟周期内从源存储器中获取后续存储指令;和在第二时钟周期内,将来自多个寄存器中的寄存器的数据存储到目标存储器中的存储器地址。
任选地,一个或多个加载指令作为源存储器中数据的一部分存储在源存储器中。
任选地,指令序列和数据作为机器可读代码存储在源存储器中。
任选地,该方法还包括通过转换用户编写的源代码或汇编代码来生成指令序列。
任选地,一个或多个加载指令和一个或多个存储指令在用于将数据从源存储器移动到目标存储器的循环中执行。
根据第二方面,提供了一种配置用于移动数据的计算机系统,所述系统包括:源存储器,其配置为存储指令序列和所述数据,其中所述指令序列包括一个或多个加载指令和一个或多个存储指令;目标存储器;和处理器,其耦合到所述源存储器和所述目标存储器,被配置为执行指令序列,其中所述处理器被配置为:将一个或多个加载指令从源存储器移动到目标存储器;启动来自目标存储器的一个或多个加载指令的执行;在执行一个或多个加载指令时,将数据从源存储器加载到所述处理器中的至少一个寄存器;将执行返回到存储在源存储器中的指令序列;和在执行来自源存储器的一个或多个存储指令时,将数据从至少一个寄存器存储到目标存储器。
任选地,处理器在执行指令序列中的一组数据传输指令时将一个或多个加载指令移动到目标存储器。
任选地,处理器在执行指令序列之前在执行一组预配置指令时将一个或多个加载指令移动到目标存储器。
任选地,处理器在执行指令序列中的第一分支指令时启动来自目标存储器的一个或多个加载指令的执行。
任选地,处理器在执行存储在目标存储器中的一个或多个加载指令之后的第二分支指令或返回指令时将执行返回到指令序列。
任选地,源存储器存储指令序列中的一个或多个加载指令或作为数据中的数据元素存储。
任选地,目标存储器包括被配置为用于存储指令序列的堆栈存储器的目标存储器的一部分。
任选地,处理器通过指令路径和数据路径耦合到源存储器和目标存储器。
任选地,处理器通过指令路径从源存储器和目标存储器获取指令。
任选地,处理器从源存储器访问数据并通过数据路径将数据移动到目标存储器。
任选地,源存储器被配置为由配置计算机系统的用户或在计算机系统的制造期间存储指令序列和数据。
任选地,处理器在用于将数据从源存储器移动到目标存储器的循环中执行一个或多个加载指令和一个或多个存储指令。
根据第三方面,提供了计算机可读代码,其被配置为当代码运行时使得根据第一方面的方法被执行。
根据第四方面,提供一种计算机可读存储介质,其上编码有根据第三方面的计算机可读代码。
计算机系统可以体现在集成电路上的硬件中。可以提供一种在集成电路制造系统中制造计算机系统的方法。可以提供集成电路定义数据集,当在集成电路制造系统中被处理时,该数据集将系统配置以制造计算机系统。可以提供一种非暂时性计算机可读存储介质,其上存储有计算机系统的计算机可读描述,当在集成电路制造系统中处理该描述时,该描述使集成电路制造系统制造体现计算机系统的集成电路。
可以提供一种集成电路制造系统,其包括:非暂时性计算机可读存储介质,其上存储有计算机系统的计算机可读描述;布局处理系统,其被配置为处理计算机可读描述以生成体现计算机系统的集成电路的电路布局描述;以及集成电路生成系统,其被配置为根据所述电路布局描述制造计算机系统。
可以提供用于执行本文描述的任何方法的计算机程序代码。可以提供非暂时性计算机可读存储介质,其上存储有计算机可读指令,当在计算机系统处执行这些指令时,其使计算机系统执行本文描述的任何方法。
如对本领域技术人员显而易见的,上述特征可以适当地组合,并且可以与本文描述的示例的任何方面组合。
附图说明
现将参考附图详细描述实例,在附图中:
图1是具有耦合到源存储器和目标存储器的处理器的计算机系统的示例的框图;
图2是当指令序列存储在源存储器中时执行一个或多个加载指令的计算机系统的示例的框图;
图3是当指令序列存储在源存储器中时执行一个或多个存储指令的计算机系统的示例的框图;
图4是当指令序列存储在目标存储器中时执行一个或多个加载指令的计算机系统的示例的框图;
图5是当指令序列存储在目标存储器中时执行一个或多个存储指令的计算机系统的示例的框图;
图6示出了将数据从源存储器移动到目标存储器的方法的示例的流程图;
图7示出了将数据从源存储器移动到目标存储器的另一方法的示例的流程图;
图8显示了计算机系统的框图;和
图9示出了用于产生体现计算机系统的集成电路的集成电路制造系统。
附图图解了各个实例。本领域技术人员将理解,图中图解的元素边界(例如,框、框组或其他形状)代表边界的一个实例。在一些实例中,可以将一个元素设计为多个元素,或者可以将多个元素设计为一个元素。在适当的情况下,在所有附图中使用共同的附图标记指示相似的特征。
具体实施方式
以下描述以示例的方式呈现以使本领域技术人员能够制造和使用本发明。本发明不限于这里描述的实施例,并且对公开的实施例的各种修改对于本领域技术人员来说将是显而易见的。
现在仅以举例的方式描述实施例。
如上所述,在某些情况下,处理器需要数百个时钟周期才能完成程序指令的执行。这包括将每个数据传输指令的执行停止两个或更多时钟周期(总计数百个时钟周期),这会降低计算机系统的性能。时钟周期是计算机系统中处理器速度的度量。如果一秒钟内有更多的时钟周期,则认为处理器速度更快。处理器的性能基于每个时钟周期的指令确定,即执行每条指令所需的平均时钟周期数。在执行数据传输操作时,到处理器完成执行所有数据传输操作时,处理器可能停顿数百个时钟周期。在这种情况下,等待数据传输操作完成的其他存储器操作会暂停数百个时钟周期,这会影响计算机系统的性能。
通常,在流水线计算机系统中,处理器能够在单个时钟周期内有效地完成指令的执行。这是因为处理器能够在每个时钟周期内执行指令获取和数据访问。在时钟周期期间,处理器被配置为获取新指令并进行先前获取的指令的执行。但是,如果处理器在时钟周期内执行先前获取的指令时,从向其发送数据访问请求(以执行先前获取的指令所需的动作)的同一存储器中获取新指令,则新指令的指令获取停顿两个或更多时钟周期。尽管这里提到了指令获取停止,但是本领域技术人员知道,在每个时钟周期期间,处理器的指令获取或数据访问都可能停止。
这是执行数据传输指令(例如加载指令和存储指令)时的常见情况。例如,当在一个时钟周期内执行一条加载指令时,如果要从存储器中加载的数据是从该时钟周期内要获取下一条指令的存储器中访问的,那么下一条指令的指令获取就会停止。类似地,在执行存储指令时,如果将数据存储到从中获取下一条指令的同一存储器中,则下一条指令的指令获取停止。由于在运行计算机系统中的大多数程序以将数据从一个存储器移动到另一个存储器时,处理器执行大量数据传输指令,因此需要优化数据传输指令的执行而不停顿。
本文描述了用于以优化方式将数据从计算机系统中的一个存储器移动到另一存储器的各种技术。该方法由处理器通过执行存储在计算机系统中耦合到处理器的存储器的指令序列来执行。该指令序列包括多个数据传输指令,例如加载指令和存储指令。该方法使处理器能够在单个时钟周期内执行每个数据传输指令,从而优化计算机系统中从一个存储器到另一个存储器的数据传输。
例如,参考图1,其图解了执行程序的示例计算机系统100,该程序包括指向一个或多个数据元素的计算机可执行指令。在实例中,计算机系统是嵌入式系统,其是为特定目的而设计的基于计算的系统,并且与通用的基于计算的系统相比通常在其尺寸、功率要求和/或特征方面受到限制。例如,一些计算机系统,例如图1的计算机系统100,不包括专用存储器管理硬件,例如存储器管理单元(MMU),其是通用的基于计算的系统的典型特征。某些计算机系统通常还具有实时计算限制,从而更加重视实现高但可预测的性能。计算机系统的非限制性实例是专门设计用于处理无线电信号的无线电处理单元(RPU)。计算机系统100可以耦合到不同的存储器。
图1是具有耦合到源存储器102和目标存储器104的处理器106的计算机系统100的示例的框图。源存储器102存储对应于在计算机系统上运行的程序的指令序列和数据元素。指令序列包括一组计算机可执行指令。用户以源代码或汇编代码语言编写的程序由计算机系统100中的编译器和/或汇编器转换为机器可读代码(计算机可读代码)或目标代码。编译器将用户编写的源代码转换为汇编代码。汇编器将用户编写或编译器生成的汇编代码转换为目标代码或机器可读代码。机器可读代码或目标代码由链接器处理成完整的计算机可执行指令。链接器是一个程序,它结合目标代码来创建指向固定存储器位置的计算机可执行指令。然后将来自链接器的输出存储在与计算机系统100相关联的存储器中。指令序列和数据元素可以由配置计算机系统的用户或在制造期间存储在源存储器102中。
处理器106包括用于执行指令序列的执行单元112,该指令序列使处理器对或使用存储在源存储器102中的数据元素执行不同的动作。指令序列涉及数据元素并指示计算机系统(例如计算机系统的处理器)对数据元素(也称为数据)执行或使用数据元素执行哪些动作。术语“数据”在本文中用于指代表示单独信息项的位或字节的组合。“数据”的实例包括但不限于变量、数组和缓冲区。此外,处理器106包括多个寄存器114。在图1的实例中,多个寄存器被示为八个寄存器R0-R7。多个寄存器114可以包括任意数量的寄存器。处理器106可以是微处理器、控制器或任何其他合适类型的处理器,用于处理计算机可执行指令以控制计算机系统100的操作。
术语“源存储器”和“目标存储器”在本文中用于表示位于处理器106附近以使处理器106能够访问存储在其中的信息(例如计算机可执行指令和数据元素)的存储器单元。源存储器102和目标存储器104可以使用任何合适类型的存储器来实现,例如但不限于RAM或ROM。源存储器102和目标存储器104可以包括多个存储器部分。每个存储器部分代表总存储器的一个区域。源存储器102和目标存储器104中的多个存储器部分可以具有相同的大小或可以是不同的大小。存储器部分可以形成连续的存储器块;或者存储器部分可以通过其他存储器模块或组件彼此分离。在图1所示的实例中,源存储器102和目标存储器104包括两个存储器部分。然而,对于本领域技术人员来说显而易见的是,这仅仅是示例并且源存储器102和目标存储器104可以不是单独的区域并且可以是连续的。
在图1所示的实例中,源存储器102包括存储器部分,例如指令存储器部分108和非指令存储器部分110。指令存储器部分108和非指令存储器部分110是同一源存储器的两个区域。指令存储器部分108被配置用于存储程序的指令序列,并且非指令存储器部分110被指定用于存储程序的数据。目标存储器104包括第一存储器部分116和第二存储器部分118。第一存储器部分116和第二存储器部分118是同一目标存储器的两个区域。指令序列包括多个数据传输指令,其包括一个或多个加载指令和一个或多个存储指令。处理器106执行用于将数据块(一个或多个数据元素)从源存储器102移动到目标存储器104的数据传输指令。
本文讨论的计算机系统100的架构包括用于指令和数据的不同信号路径(例如总线)。当处理器106正在执行指令序列(存储的计算机可执行指令)时,将有许多时钟周期,其中处理器106将在同一时钟周期中访问存储在源存储器102和目标存储器104中的指令和数据元素。为了允许处理器106向源存储器102和/或目标存储器104发出指令获取请求和数据访问请求,在处理器106和存储器(源存储器102和目标存储器104)之间存在两条路径或总线120和122。例如,在图1中,存在用于发送指令获取请求的指令路径120和用于发送数据访问请求的数据路径122。虽然指令路径120和数据路径122确保处理器能够在相同的时钟周期内访问来自源存储器102或来自目标存储器104的指令和数据元素,但是如上所述,当指令获取请求和数据访问请求尝试在相同时钟周期内访问相同的存储器时出现问题。在这种情况下,后续指令的指令获取会停止。
运行具有数据传输操作的程序时生成的指令序列的典型实例如表1所示。在表1中给出的实例中,处理器最初执行循环设置指令以设置循环以执行用于将数据从一个存储器移动到另一存储器的指令序列。循环中的指令序列包括单个加载指令和单个存储指令,以在执行循环时每次传输单个数据元素。处理器执行加载指令以将数据元素从源地址加载到处理器中的寄存器。此外,执行存储指令以将数据元素从寄存器存储到目标存储器中的地址。在执行加载指令时,后续指令(在此实例中为存储指令)的指令获取每次都停止,因为处理器从同一源存储器执行指令获取和数据访问。此外,对于每个数据传输操作,处理器需要执行三个循环控制指令来控制循环。因此,存在显著的计算开销/循环开销,这会降低计算机的性能。
在下面的示例程序中,使用了以下符号:
SXXX表示源存储器中的地址位置XXX。在此实例中,指令序列存储在源存储器中指定地址处,数据元素也存储在源存储器中指定地址处。
DXXX表示目标存储器中的地址位置XXX
RX表示处理器中的寄存器X
N是整数,其中N表示重复循环的次数,因此在此实例中表示要移动的数据元素的数量
Figure BDA0003864004920000081
Figure BDA0003864004920000091
在运行具有存储器复制功能或数据传输操作的程序时生成的指令序列的另一个典型实例如表2所示。表2的实例通过增加在循环的每次重复中执行的加载和存储指令的数量来减少循环开销,使得三个循环控制指令中的每一个都有更多的存储和加载指令。指令序列包括加载指令块(x加载指令,其中x是任意数字)和存储指令块(x存储指令)以及循环设置和循环控制指令块。在运行程序时,处理器最初通过执行循环设置指令来设置循环。处理器进一步执行加载指令块中的每个加载指令,用于将数据元素从源存储器中的地址加载到处理器中的多个寄存器中的寄存器。
此外,处理器执行存储指令块中的所有存储指令,以将加载到多个寄存器中的数据移动到目标存储器。一旦加载指令块和存储指令块被执行,循环控制指令被执行以确定是否需要重复循环。在此实例中,在执行每条加载指令时,后续指令的指令获取暂停,因为处理器从源存储器执行指令获取和数据访问二者。在执行每个循环时,处理器会停止最少‘x’个时钟周期。因此,处理器停顿‘n’个时钟周期,同时将n个数据元素从源存储器移动到目标存储器(因为处理器在循环的每次重复中为每个加载指令停顿)。例如,如果在循环中有128个数据元素要传输并且有16个加载指令(x=16),那么处理器可能停止至少128个时钟周期(即循环的重复次数×16),而执行循环。在其他实例中,‘n’可以是16的任意倍数,这取决于要传输的数据元素的数量。此实例要求要传输的元素数量是十六的倍数。对于本领域的技术人员来说显而易见的是,可以在更复杂的实现方式中解决该约束。当指令的数量不是x的倍数时,则程序包括结语循环来执行剩余的指令(即在执行x的倍数之后剩余的指令)。
Figure BDA0003864004920000092
Figure BDA0003864004920000101
发明人发现计算机系统100的数据传输操作通过使处理器106能够在单个时钟周期内获取并执行指令序列中的数据传输指令而不会停顿的技术进行了优化,从而提高了计算机系统的性能。通过调整指令序列来优化数据传输操作,如下面详细描述的。
指令序列包括多个数据传输指令,其包括一个或多个加载指令和一个或多个存储指令。为了避免停顿,来自多个数据传输指令的一个或多个指令从不同的存储器移动和执行。在实例中,指令序列包括用于移动一个或多个指令的一组数据传输指令(设置部分)。该组数据传输指令的实例包括一组加载和存储指令或一组移动指令。
在图1所示的实例中,其中指令序列存储在源存储器102中,在执行该组数据传输指令时,一个或多个指令(例如一个或多个加载指令)最初被移动到不同的存储器(目标存储器104)。因此,在执行指令序列的同时,当处理器106从目标存储器104获取多个数据传输指令(加载指令)中的一个或多个指令时,这使得多个数据传输指令的执行能够在单个时钟周期内对源存储器102中的数据进行而不会停顿。下面详细说明执行指令序列中的多个数据传输指令中的每一个的方法。因此,从目标存储器104中获取多个数据传输指令中的一个或多个指令,并且从源存储器102中获取多个数据传输指令中的剩余指令,用于将数据从源存储器102移动到目标存储器104。
使用图2和3详细说明将数据从源存储器102移动到目标存储器104的方法的实例。如图2所示,源存储器102中的指令存储器部分108包括描述指令1、指令2…指令n的指令序列。该指令序列包括多个数据传输指令,例如一个或多个加载指令,以及一个或多个存储指令,用于将数据从源存储器102移动到目标存储器104。该程序被编写成将一个或多个加载指令组合在一起作为x个加载指令的块,并且将一个或多个存储指令组合在一起作为x个存储指令的块(其中x是整数)。数据作为多个数据元素存储在非指令存储器部分110中作为数据元素1、数据元素2…数据元素n。
表3显示了在运行具有用于将数据从一个存储器传输到另一存储器的数据传输操作的程序时生成的优化指令序列的实例。
Figure BDA0003864004920000111
Figure BDA0003864004920000121
从表3中给出的实例中,考虑指令存储器部分108具有从S000到S099的源存储器地址,并且非指令存储器部分110具有从S100-S200的源存储器地址。类似地,考虑第一存储器部分116具有从D000到D099的目标存储器地址并且第二存储器部分118具有从D100到D200的目标存储器地址。
指令序列包括一组数据传输指令(在表3中表示为‘加载指令设置’),用于将x个加载指令的块和返回指令(在表3中一起表示为加载部分)移动到目标存储器104。该实例中的加载指令设置包括一组加载和存储指令,用于将加载部分移动到目标存储器104。加载部分与指令序列一起或与指令序列分开存储在源存储器中。在此实例中,表3中的加载部分包括2个加载指令,但可以有任意数量的加载指令。加载部分也可以作为多个数据元素的一部分存储在非指令存储器部分110中。指令序列还包括包含循环设置指令、存储部分和循环控制指令的循环。多个数据传输指令中的一个或多个存储指令被组合在一起作为x个存储指令的块(在表3中表示为‘存储部分’)。在此实例中,表3中的存储部分包括2个存储指令,但可以具有任意数量的存储指令。
在运行程序时,处理器106以程序计数器所指向的顺序执行从第一条指令开始的指令序列。在实例中,处理器从源存储器地址S000开始执行指令序列。指令序列包括一组数据传输指令,称为源存储器中的加载设置指令。该组数据传输指令在指令序列的开始处执行,或者在执行指令序列之前作为单独一组预配置指令执行。在此实例中,加载设置指令存储在源存储器地址S000-S005中。在执行加载设置指令时,处理器将加载部分移动到目标存储器104中的第一存储器部分116。在此实例中,在执行加载设置指令时,处理器将加载部分移动到目标存储器地址D000到D002。图2示出了一个或多个被称为加载指令1的加载指令以将加载指令x移动到第一存储器部分116。
此外,处理器106执行循环建立指令以建立循环。在执行循环建立指令之后,处理器106执行第一分支指令(例如分支D000)以分支到第一存储器部分116中的目标存储器地址(D000)。因此,分支指令的执行导致处理器106开始从目标存储器地址(在这种情况下为第一存储器部分116中的D000)获取指令。在一个实例中,第一存储器部分116用作堆栈。
当处理器106开始从目标存储器104中的堆栈中取出一个或多个加载指令时,将程序计数器用存储在用作堆栈的目标存储器的区域中的第一加载指令(加载指令1)的地址更新。可以使用堆栈指针来定位堆栈,其中堆栈指针是一个寄存器,其通常存储最近使用的堆栈存储器区域的地址。在这种情况下,堆栈指针包含一个值,从该值导出目标存储器地址D000并用作分支目标。因此,地址D000处的指令被取出并执行,地址D000移入程序计数器。每个加载指令包括源存储器中的存储器位置的指示,数据元素将从该存储器位置加载到多个寄存器114中的寄存器中。在该实例中,第一加载指令指示处理器从源存储器S100中的地址位置加载数据元素1。在一些实例中,所使用的存储器地址可以相对于保存在寄存器中的地址而不是该地址本身。
处理器106从目标地址D000获取第一条加载指令(加载指令1),当执行该指令时,将数据元素1从第一源地址(S100)移动到多个寄存器114中的寄存器R2(示为数据元素1,DE1)。处理器106在第一时钟周期内经由指令路径120从目标存储器104中的堆栈存储器中的第一位置D000获取第一加载指令。在获取第一条加载指令后,程序计数器更新以保存第二条加载指令的地址(D001)。在第二时钟周期期间,处理器106从堆栈存储器中的第二位置D001获取第二加载指令(加载指令2)。此外,在第二时钟周期中,处理器106执行第一加载指令以通过数据路径122从源存储器102中的非指令存储器部分110的第一地址S100访问数据元素1。由于处理器106在第二时钟周期中的指令获取和数据访问来自两个不同的存储器并且经由两个不同的路径/总线,所以第一指令的执行和第二指令的提取不会停止。因此,处理器106能够在两个时钟周期内获取并执行第一加载指令。
类似地,在获取第二条加载指令之后,程序计数器更新以在第三个时钟周期期间将后续指令的地址保存在堆栈存储器中。处理器106在第三时钟周期期间从堆栈存储器中获取返回指令。此外,在第三时钟周期期间,处理器106执行在第二时钟周期中取出的第二加载指令以将数据元素2从非指令存储器部分110中的第二源地址(S101)加载到多个寄存器114中的寄存器R3中。因此,针对存储在目标存储器中的一个或多个加载指令的指令获取和数据获取发生在每个时钟周期中。对于每个加载指令,从目标存储器104到处理器106的指令流由沿着指令路径120的箭头描绘,并且从源存储器102到多个寄存器的数据流由沿着数据路径122的箭头描绘。因此,处理器106能够在单个时钟周期内有效地获取和执行加载指令而不会停顿。
返回或分支指令的执行使处理器106返回以执行来自源存储器102的指令序列。返回指令用源存储器中的指令地址更新程序计数器。在另一个实例中,使用分支指令而不是返回指令来分支到源存储器中的地址位置。因此,程序计数器被更新以指向第一条分支指令(分支D000)之后的指令序列中的一条指令。处理器106从更新的位置开始按顺序继续处理指令序列。指令序列的下一部分包括用于将数据元素从多个寄存器114移动到目标存储器104的一个或多个存储指令。
图3解释了指令序列中一个或多个存储指令的执行。一个或多个存储指令以指令存储器部分108中的第一分支指令之后的指令序列存储在源存储器102中。图3示出了存储在指令存储器部分108中的一个或多个存储指令,作为存储指令1、存储指令2…存储指令x。如上所述,程序计数器用第一条存储指令的地址更新(由图3中的箭头所示)。每个存储指令包括来自多个寄存器114中的寄存器的数据元素将被存储到的目标存储器中的存储器位置的指示。在一些实例中,数据元素将被存储到的第一存储器位置(DXXX)可以相对于寄存器中保存的值来寻址。
在第一个实例中,程序计数器包含第一条存储指令(存储指令1)的更新地址S009。当程序计数器在第一时钟周期指向第一存储指令时,处理器106通过指令路径120向源存储器102发送指令获取请求以获取第一存储指令。在获取存储指令1后,程序计数器更新以存储第二存储指令的地址S010。在第二时钟周期期间,处理器106通过指令路径120从源存储器102获取第二存储指令,存储指令2。此外,在第二时钟周期期间,处理器106执行存储指令1。处理器106通过数据路径122将数据元素1从寄存器R2传送到目标存储器中的第二存储器部分118中的第一位置(D100)。处理器106通过指令路径120从源存储器获取指令,并通过数据路径122将数据存储到目标存储器104。因此,第一存储指令的执行发生在两个时钟周期内而不会停顿。
类似地,在获取第二存储指令之后,程序计数器更新以在第三时钟周期期间存储下一条指令(在循环控制指令中)S011的地址。处理器106在第三时钟周期期间获取下一指令。此外,在第三时钟周期期间,处理器106执行在第二时钟周期中取出的第二存储指令以将数据元素2从多个寄存器114中的寄存器R3加载到第二存储器部分118中的地址(D101)。因此,存储指令的指令获取和数据访问发生在单个时钟周期内,而不会停顿。在执行x存储指令的块时,存储在多个寄存器114中的所有数据被存储到目标存储器104中的第二存储器部分118。对于每个存储指令,从源存储器102到处理器106的指令流由沿着指令路径120的箭头描绘,并且从多个寄存器到目标存储器104的数据流由沿着数据路径122的箭头描绘。
一旦存储部分中的所有存储指令都被执行,处理器执行循环控制指令以检查是否需要继续循环。在上述例子中,当第二次执行循环时,处理器106执行分支指令(分支若S008)以分支到源地址S008。处理器106进一步获取第一分支指令(分支D000)以从目标存储器地址D000开始执行以获取第一加载指令。在执行循环控制指令时,寄存器R0增加一个等于循环中加载指令或存储指令数量的值,在此实例中,R0增加2,因为有两个加载指令。现在,处理器执行加载部分中的一个或多个加载指令以将数据从源存储器中的下一组存储器位置(即S102和S103)加载到多个寄存器。类似地,处理器执行存储部分中的一个或多个存储指令以将来自多个寄存器的数据存储到目标存储器中的下一组存储器地址(即D102和D103)。因此,将循环执行多次迭代以将数据从一个存储器移动到另一个存储器而不会停止。
因此,一个或多个加载指令和一个或多个存储指令都不会在循环执行任意次数的迭代时停止。在执行数据传输指令组中的加载和存储指令时,处理器最初只会停顿几个时钟周期。因此,处理器106能够执行一个或多个加载指令和一个或多个存储指令数百或数千次以将数据从源存储器移动到目标存储器而不会停顿,从而提高计算机系统100的性能。
在另一实例中,指令序列可以存储在计算机系统100中的目标存储器104中并且数据元素存储在源存储器102中。图4图解了指令序列(指令1、指令2…指令n)被存储在目标存储器104中的第一存储器部分116中的情况。指令序列包括多个数据传输指令,包括用于将数据从源存储器102移动到目标存储器104的一个或多个加载指令和一个或多个存储指令。由于指令序列存储在要移动数据的目标存储器104中,因此数据传输操作在存储指令的执行期间停止。这是因为在执行一个或多个存储指令期间,数据被存储到从中提取指令的同一存储器中。
通过调整程序来优化数据传输指令的执行以防止停顿。在指令序列中,一个或多个加载指令被组合在一起作为x个加载指令的块,并且一个或多个存储指令被组合在一起作为x个存储指令的块。处理器能够在执行指令序列之前将一个或多个存储指令移动到不同的存储器以防止停顿。在一个实例中,程序被编写成使得处理器106执行一组数据传输指令,使得处理器在执行之前将一个或多个存储指令移动到不同的存储器。该组数据传输指令在指令序列的开始处执行,或者在执行指令序列之前作为单独一组预配置指令执行。在图4中,一个或多个存储指令在执行指令序列之前或开始时被移动到源存储器102。图4示出了移动至指令存储器部分108中的一个或多个存储指令,作为存储指令1、存储指令2…存储指令x。
在运行程序时生成的优化指令序列的实例将包括一组数据传输指令,以及包含循环设置指令、一个或多个加载指令和循环控制指令的循环。一旦将存储指令移动到源存储器,处理器106就开始以程序计数器所指向的顺序执行来自目标存储器104的指令序列。指令由处理器106中的执行单元112执行。处理器执行循环设置指令以设置循环。在执行加载设置指令之后,程序计数器更新以存储在该实例中存储在目标存储器104中的指令序列中的第一加载指令(图4中未示出)的地址。考虑第一加载指令指示处理器106将第一数据元素(数据元素1或DE1)从源存储器中的非指令存储器部分110中的第一地址加载到多个寄存器114中的寄存器R2。
在第一时钟周期期间,处理器106通过指令路径120从目标存储器104中的第一存储器部分116(堆栈存储器)中取出第一加载指令。此外,在第二时钟周期期间,程序计数器递增以指向第二加载指令。这使得处理器106能够从目标存储器104中的堆栈存储器中获取第二加载指令。此外,在第二时钟周期期间,处理器106中的执行单元112解码并执行第一加载指令以将数据元素1(DE1)从源存储器102中的非指令存储器部分110中的第一地址移动到多个寄存器114中的寄存器R2。因此,在第二时钟周期期间,处理器通过指令路径120从目标存储器104获取第二加载指令,并通过数据路径122访问来自源存储器102的数据。
类似地,在获取第二加载指令之后,程序计数器更新以在第三时钟周期期间存储下一指令的地址。处理器106在第三时钟周期期间获取下一指令。此外,在第三时钟周期期间,处理器106执行在第二时钟周期中取出的第二加载指令以将数据元素2(DE2)加载到多个寄存器114中的寄存器R3。因此,加载指令的指令获取和数据访问发生在单个时钟周期内而不会停顿。类似地,一个或多个加载指令中的所有加载指令被取出并执行以将数据从源存储器102移动到多个寄存器114,如图4所示。对于每个加载指令,从目标存储器104到处理器106的指令流由沿着指令路径120的箭头描绘,并且从源存储器102到多个寄存器的数据流由沿着数据路径122的箭头描绘。因此,处理器106能够在单个时钟周期中获取和执行加载指令而不会停顿。
在执行一个或多个加载指令之后,处理器106在一个或多个加载指令之后执行分支指令(例如分支S000)。分支指令使程序计数器用移动到源存储器102的第一存储指令的地址来更新。一个或多个存储指令的执行在图5的帮助下解释。如图5所示,程序计数器(由指向指令存储器部分108的箭头所示)指向源存储器102中的第一存储指令。处理器106在第一时钟周期经由指令路径120(由路径120上的箭头描绘)从源存储器102获取第一存储指令。在获取第一存储指令之后,程序计数器更新以指向源存储器102中的第二存储指令(存储指令2)。
在第二时钟周期期间,处理器106从源存储器102获取第二存储指令。此外,处理器106执行在第一时钟周期中取出的第一存储指令。第一存储指令使处理器将存储在R2中的数据元素1存储到目标存储器104中的第二存储器部分118中的第一位置。处理器106经由由数据路径122上所示的箭头描绘的数据路径122将数据元素1存储到目标存储器104。在第二时钟周期内,由于第二存储指令的指令获取和第一存储指令的数据访问来自不同的存储器,因此第二加载指令的指令获取不会停止。
类似地,每个存储指令从源存储器102中取出并被执行以将数据元素从多个寄存器114移动到目标存储器104。在执行完一个或多个存储指令中的所有存储指令后,处理器执行返回指令以返回指令序列的执行。对于每个存储指令,从源存储器102到处理器106的指令流由沿着指令路径120的箭头描绘,并且从多个寄存器到目标存储器104的数据流由沿着数据路径122的箭头描绘。由于指令获取和数据访问来自不同的存储器,因此没有任何存储指令的指令获取或执行停止。因此,该方法使处理器能够将数据从源存储器102移动到目标存储器104,而不会停止数据传输操作。
在返回到指令序列的执行时,处理器106执行循环控制指令以确定是否需要重复循环。下一次执行循环时,从目标存储器执行一个或多个加载指令,从源存储器执行一个或多个存储指令,以将前一次循环移动的数据之后的一组数据移动到目标存储器中在前一个循环中存储数据的位置之后的位置。因此,循环被执行多次以将数据从源存储器移动到目标存储器而不会停顿。停顿仅在第一次执行该组数据传输指令以将一个或多个存储指令移动到源存储器时发生。
在另一实例中,解释了通过包括多个寄存器的处理器将数据从源存储器移动到目标存储器的方法。处理器执行存储在源存储器或目标存储器之一中的指令序列。指令序列包括多个数据传输指令,例如一个或多个加载指令和一个或多个存储指令。在执行指令序列时,指令序列使处理器执行以下步骤。处理器在执行指令序列时执行数据传输操作,用于将一个或多个指令从多个数据传输指令移动到源存储器或目标存储器之一,指令序列最初从该源存储器或目标存储器中存储。在第一实例中,如果指令序列存储在源存储器中,则处理器将一个或多个加载指令从多个数据传输指令移动到目标存储器。参考图2和3解释在该第一实例中用于将数据从源存储器移动到目标存储器的指令序列的执行。在第二实例中,如果指令序列存储在目标存储器中,则处理器将一个或多个存储指令从多个数据传输指令移动到源存储器。已经参考图4和5解释了在该第二种情况中用于将数据从源存储器移动到目标存储器的指令序列的执行。
图6是说明将数据从源存储器移动到目标存储器的方法的流程图。该方法由处理器以程序计数器指向的顺序执行存储在源存储器中的指令序列来执行。处理器通过指令路径和数据路径耦合到源存储器和目标存储器。指令序列包括多个数据传输指令,例如一个或多个加载指令和一个或多个存储指令。一个或多个加载指令被组合在一起作为加载指令的块,并且一个或多个存储指令被组合在一起作为存储指令的块。指令序列被配置为使处理器执行以下步骤以将数据从源存储器移动到目标存储器。
在步骤604中,该方法包括将一个或多个加载指令从源存储器移动到目标存储器。通过执行一组数据传输指令来移动一个或多个加载指令,以将一个或多个加载指令从源存储器中的指令序列移动到目标存储器。在一个实例中,第一存储器部分是堆栈存储器。
在步骤606中,该方法包括启动来自目标存储器的一个或多个加载指令的执行。可以在执行指令序列中的第一分支指令时启动一个或多个加载指令的执行,这导致处理器开始从新的存储器位置获取指令。第一分支指令使处理器从分支目标获取指令,在这种情况下从源存储器获取第一加载指令。在执行第一分支指令之后,处理器按顺序从目标存储器中取出并执行一个或多个加载指令。
在步骤608中,该方法包括在执行存储在目标存储器中的一个或多个加载指令时将数据从源存储器加载到处理器中的多个寄存器中的至少一个寄存器。对于每条加载指令,处理器在第一个时钟周期期间通过指令路径从目标存储器中取出一条加载指令。加载指令标识要从源存储器加载的数据的存储器地址。在第二时钟周期内,处理器通过指令路径从目标存储器中取出下一条加载指令,并执行在第一时钟周期内取出的加载指令。加载指令的执行使得处理器通过数据路径从源存储器中的存储器地址访问数据,以将数据加载到多个寄存器中的一个寄存器中。由于在第二时钟周期期间,处理器的指令获取和数据访问发生在不同的存储器中,因此加载指令的执行不会停止。因此,加载指令在第一时钟周期被取出并在第二时钟周期被执行。因此,有效地在单个时钟周期中取出并执行加载指令。
一旦执行了一个或多个加载指令中的所有加载指令,在步骤610,该方法包括将执行返回到存储在源存储器中的指令序列。该方法使处理器在存储在目标存储器中的一个或多个加载指令结束时在执行第二分支指令或返回指令时返回以执行来自源存储器的指令序列。第二分支指令或返回指令使处理器从分支目的地获取指令,在这种情况下,从源存储器获取指令序列中第一分支指令之后的下一条指令。在执行第二分支指令后,处理器从源存储器中按顺序取出并执行指令序列。处理器进一步按顺序执行指令序列中的一个或多个存储指令。
在执行一个或多个存储指令时,在步骤612,该方法包括将来自多个寄存器中的至少一个寄存器的数据存储到目标存储器。对于每个存储指令,处理器在第一时钟周期期间通过指令路径从源存储器中取出存储指令。存储指令识别目标存储器中用于存储数据的存储器地址。在第二时钟周期内,处理器通过指令路径从源存储器中取出下一条存储指令,并执行在第一时钟周期内取出的存储指令。存储指令的执行使处理器从多个寄存器中的一个寄存器经由数据路径将数据存储到目标存储器中的存储器地址。由于处理器在第二时钟周期内从不同的存储器进行指令获取和数据访问,因此存储指令的执行不会停止。因此,存储指令在第一时钟周期被取出并在第二时钟周期被执行。类似地,存储指令的获取和执行发生在单个时钟周期内。因此,所描述的方法使得处理器能够以优化的方式将数据从源存储器移动到目标存储器,因为一个或多个加载指令和一个或多个存储指令的执行不会停止。
注意,在替代实例中,移动加载指令的步骤(604)可以在程序的执行(602)之前执行。可选地,程序可以被预先配置为使这些指令已经存在于不同的存储器中,从而不需要更多的操作(在步骤604中的类型)来获得执行数据传输而不停止的益处。
图7是说明将数据从源存储器移动到目标存储器的另一方法的流程图。该方法通过执行包括由处理器存储在目标存储器中的指令序列的程序来执行。处理器通过指令路径和数据路径耦合到源存储器和目标存储器。指令序列包括一个或多个加载指令和一个或多个存储指令。一个或多个加载指令被组合在一起作为加载指令的块,并且一个或多个存储指令被组合在一起作为存储指令的块。指令序列被配置为使处理器执行以下步骤以将数据从源存储器移动到目标存储器。
在步骤704中,该方法包括将一个或多个存储指令从目标存储器移动到源存储器。通过执行用于将一个或多个存储指令移动到源存储器的一组数据传输指令来移动一个或多个存储指令。
在步骤706中,该方法包括执行存储在目标存储器中的指令序列中的一个或多个加载指令。处理器按顺序从目标存储器中取出并执行一个或多个加载指令。
在步骤708中,该方法包括在执行存储在目标存储器中的指令序列中的一个或多个加载指令时,将数据从源存储器加载到处理器中的多个寄存器中的至少一个寄存器。对于每条加载指令,处理器在第一个时钟周期期间通过指令路径从目标存储器中取出一条加载指令。在第二时钟周期内,处理器通过指令路径从目标存储器中取出下一条加载指令,并执行在第一时钟周期内取出的加载指令。加载指令的执行使得处理器通过数据路径从源存储器中访问数据,以将数据加载到多个寄存器中的一个寄存器中。由于处理器在第二时钟周期期间从不同的存储器进行指令获取和数据访问,因此一个或多个加载指令的执行不会停止。因此,加载指令在第一时钟周期被取出并在第二时钟周期被执行。因此,加载指令的获取和执行发生在单个时钟周期中。
一旦执行了一个或多个加载指令中的所有加载指令,在步骤710,该方法包括启动存储在源存储器中的一个或多个存储指令的执行。该方法使处理器在执行一个或多个加载指令之后的第一分支指令时启动一个或多个存储指令的执行。第一分支指令使处理器从分支目标获取指令,在这种情况下从源存储器获取第一存储指令。在执行第一分支指令之后,处理器按顺序从源存储器中取出并执行一个或多个存储指令。
在执行一个或多个存储指令时,在步骤712,该方法包括将来自多个寄存器中的至少一个寄存器的数据存储到目标存储器。对于每个存储指令,处理器在第一时钟周期期间通过指令路径从源存储器中取出存储指令。在第二时钟周期内,处理器通过指令路径从源存储器中取出下一条存储指令,并执行在第一时钟周期内取出的存储指令。存储指令的执行使处理器将数据从多个寄存器中的一个寄存器经由数据路径存储到目标存储器。由于处理器在第二时钟周期内从不同的存储器进行指令获取和数据访问,因此存储指令的执行不会停止。因此,存储指令在第一时钟周期被取出并在第二时钟周期被执行。一个或多个加载指令和一个或多个存储指令在循环中执行n次,从而处理器以优化的方式将数据从源存储器移动到目标存储器。处理器能够在单个时钟周期内有效地执行每个加载指令和每个存储指令,而不会由于对同一存储器的并发访问而停顿。
注意,在替代实例中,移动存储指令的步骤(704)可以在执行程序(702)之前执行。可选地,程序可以被预先配置为使这些指令已经存在于不同的存储器中,从而不需要更多的操作(在步骤704中的类型)来获得执行数据传输而不停止的益处。
图8示出了可以实现本文描述的数据传输操作的计算机系统的实例。该计算机系统包括CPU 802、GPU 804、存储器806、无线通信模块810和其他设备814,例如显示器816、扬声器818和相机820。本文所述的数据传输操作可以在CPU 802、GPU 804和无线通信模块810或执行存储器位置之间的数据传输的任何其他模块中的一个或多个中实现。计算机系统的组件可以通过通信总线820相互通信。存储部812被实现为存储器806的一部分。
图8的计算机系统和图1中的计算机系统被示为包括多个功能块。这只是示意性的,并不旨在限定这些实体的不同逻辑元素之间的严格划分。可以任何合适的方式提供每个功能块。应当理解,本文描述为由功能块形成的中间值不需要在任何点由特定功能块物理地生成,并且可以仅表示方便地描述计算机系统在其输入和输出之间执行的处理的逻辑值。
本文描述的计算机系统可以体现在集成电路上的硬件中。本文所述的计算机系统可被配置为执行本文所述的方法中的任一者。通常,上述任何功能、方法、技术或组件可以在软件、固件、硬件(例如,固定逻辑电路)或它们的任何组合中实现。术语“模块”、“功能”、“组件”、“元件”、“单元”、“块”和“逻辑”可以在本文中用于一般地表示软件、固件、硬件或其任何组合。在软件实现方式的情况下,模块、功能、组件、元件、单元、块或逻辑表示当在处理器上执行时执行指定任务的程序代码。本文所描述的算法和方法可以由一个或多个处理器,该处理器执行使处理器执行算法/方法的代码。计算机可读存储介质的实例包括随机存取存储器(RAM)、只读存储器(ROM)、光盘、闪存、硬盘存储器和其他可以使用磁、光和其他存储指令或其他数据并可由机器访问的技术的存储设备。
如本文所用,术语计算机程序代码和计算机可读指令是指用于处理器的任何种类的可执行代码,包括以机器语言、解释语言或脚本语言表达的代码。可执行代码包括二进制代码、机器代码、字节码、定义集成电路的代码(如硬件描述语言或网表),以及以C、Java或OpenCL等编程语言代码表示的代码。可执行代码可以是例如任何类型的软件、固件、脚本、模块或库,当在虚拟机或其他软件环境中适当地执行、处理、解释、编译、执行时,其使计算机系统的处理器(在此,支持可执行代码)执行由代码指定的任务。
处理器、计算机或计算机系统可以是任何类型的设备、机器或专用电路,或者它们的集合或部分,具有能够执行指令的处理能力。处理器可以是任何类型的通用或专用处理器,例如CPU、GPU、片上系统、状态机、媒体处理器、专用集成电路(ASIC)、可编程逻辑阵列、现场可编程门阵列(FPGA)等。计算机或计算机系统可以包括一个或多个处理器。
它还旨在涵盖限定如本文所述的硬件配置的软件,例如用于设计集成电路或用于配置可编程芯片以执行期望功能的HDL(硬件描述语言)软件。也就是说,可以提供一种计算机可读存储介质,其上编码有集成电路定义数据集形式的计算机可读程序代码,当在集成电路制造系统中被处理(即运行)时,该数据集将系统配置为制造计算机系统,该计算机系统配置为执行本文所述的任何方法,或制造包括本文所述的任何装置的计算机系统。例如,集成电路定义数据集可以是集成电路描述。
因此,可以提供一种在集成电路制造系统中制造如本文所述的计算机系统的方法。此外,可以提供集成电路定义数据集,当在集成电路制造系统中处理该数据集时,使制造计算机系统的方法被执行。
集成电路定义数据集可以是计算机代码的形式,例如作为网表、用于配置可编程芯片的代码、作为在任何级别定义集成电路的硬件描述语言,包括作为寄存器传输级别(RTL)代码,作为高级电路表示,例如Verilog或VHDL,以及作为低级电路表示,例如OASIS(RTM)和GDSII。逻辑上定义集成电路(例如RTL)的更高级别表示可以在配置用于在软件环境的背景中生成集成电路的制造定义的计算机系统处处理,该软件环境包括电路元件的定义和用于将这些元件组合以便生成由表示定义的集成电路的制造定义的规则。与在计算机系统上执行以定义机器的软件的典型情况一样,可能需要一个或多个中间用户步骤(例如,提供命令、变量等),以便计算机系统被配置为生成集成电路的制造定义,以执行定义集成电路的代码,从而生成该集成电路的制造定义。
现在将关于图9描述在集成电路制造系统处处理集成电路定义数据集以便配置系统以制造计算机系统的实例。
图9示出了集成电路(IC)制造系统902的实例,其被配置为制造在本文的任何实例中描述的计算机系统。特别地,IC制造系统902包括布局处理系统904和集成电路生成系统906。IC制造系统902被配置为接收IC定义数据集(例如定义如本文任何实例中描述的计算机系统),处理IC定义数据集,并根据IC定义数据集生成IC(例如,其体现了如本文的任何实例中所述的计算机系统)。IC定义数据集的处理将IC制造系统902配置为制造体现如本文的任何实例中描述的计算机系统的集成电路。
布局处理系统904被配置为接收和处理IC定义数据集以确定电路布局。从IC定义数据集确定电路布局的方法在本领域中是已知的,并且例如可以涉及合成RTL代码以确定要生成的电路的门级表示,例如根据逻辑组件(例如NAND、NOR、AND、OR、MUX和FLIP-FLOP组件)。通过确定逻辑组件的位置信息,可以从电路的门级表示中确定电路布局。这可以自动完成或在用户参与的情况下完成,以优化电路布局。当布局处理系统904已经确定电路布局时,它可以将电路布局定义输出到IC生成系统906。例如,电路布局定义可以是电路布局描述。
IC生成系统906根据电路布局定义生成IC,如本领域已知的。例如,IC生成系统906可实施半导体器件制造工艺以生成IC,其可涉及光刻和化学处理步骤的多步骤序列,在此期间,在由半导体材料制成的晶片上逐渐创建电子电路。电路布局定义可以是掩膜的形式,该掩膜可以用于根据电路定义生成IC的光刻工艺。可选地,提供给IC生成系统906的电路布局定义可以是计算机可读代码的形式,IC生成系统906可以使用该代码来形成用于生成IC的合适掩模。
IC制造系统902执行的不同工艺可以全部在一个位置实施,例如由一方实施。可选地,IC制造系统902可以是分布式系统,使得一些过程可以在不同位置执行并且可以由不同方执行。例如,可以在不同位置和/或由不同方执行以下阶段中的一些:(i)合成表示IC定义数据集的RTL代码以形成要生成的电路的门级表示,(ii)基于门级表示生成电路布局,(iii)根据电路布局形成掩模,以及(iv)使用掩模制造集成电路。
在其他实例中,在集成电路制造系统处处理集成电路定义数据集可以将系统配置为制造计算机系统,而无需处理IC定义数据集以确定电路布局。例如,集成电路定义数据集可以定义可重构处理器(例如FPGA)的配置,并且该数据集的处理可以配置IC制造系统以生成具有该定义配置的可重构处理器(例如,通过将配置数据加载到FPGA)。
在一些实施例中,当在集成电路制造系统中处理集成电路制造定义数据集时,可以使集成电路制造系统生成如本文所述的器件。例如,以上面关于图9描述的方式的集成电路制造系统的配置,集成电路制造定义数据集可导致制造如本文所述的器件。
在一些实例中,集成电路定义数据集可以包括在数据集处定义的硬件上运行的或与数据集处定义的硬件结合运行的软件。在图10所示的实例中,IC生成系统906还可以由集成电路定义数据集配置以在制造集成电路时根据在集成电路定义数据集中定义的程序代码将固件加载到该集成电路上,或者以其他方式提供具有与集成电路一起使用的集成电路的程序代码。
与已知实现方式相比,在设备、装置、模块和/或系统(以及在本文实现的方法)中实现本申请中阐述的概念可以产生性能改进。性能改进可以包括增加的计算性能、减少的等待时间、增加的吞吐量和/或减少的功耗中的一项或多项。在制造此类设备、装置、模块和系统(例如在集成电路中)期间,性能改进可以与物理实现进行权衡,从而改进制造方法。例如,可以用布局面积来换取性能改进,从而匹配已知实现方式的性能但使用更少的硅片。这可以例如通过以串行方式重用功能块或在设备、装置、模块和/或系统的元件之间共享功能块来完成。相反,在本申请中提出的能够改进设备、装置、模块和系统的物理实现方式(例如减小的硅面积)的概念可以换来改进的性能。这可以例如通过在预定义的面积预算内制造模块的多个实例来完成。
申请人在此单独公开本文所述的每个单独的特征以及两个或多个这样的特征的任何组合,只要这样的特征或组合能够基于作为整体的本说明书,根据本领域技术人员的公知常识来实施,而不论这些特征或特征组合是否解决了本文公开的任何问题。鉴于前面的描述,对于本领域技术人员显而易见的是,可以在本发明的范围内进行各种修改。

Claims (26)

1.一种通过包括多个寄存器的处理器将数据从源存储器移动到目标存储器的方法,所述源存储器存储指令序列,其中所述指令序列包括一个或多个加载指令和一个或多个存储指令,所述方法包括:
将所述一个或多个加载指令从所述源存储器移动到所述目标存储器;
启动来自所述目标存储器的所述一个或多个加载指令的执行;
在执行所述一个或多个加载指令时,将数据从所述源存储器加载到所述处理器中的至少一个寄存器;
将执行返回到存储在所述源存储器中的所述指令序列;和
在执行来自所述源存储器的所述一个或多个存储指令时将数据从所述至少一个寄存器存储到所述目标存储器。
2.根据权利要求1所述的方法,其中将所述一个或多个加载指令从所述源存储器移动到所述目标存储器是通过执行所述处理器存储在所述源存储器中的所述指令序列中的一组数据传输指令来执行的。
3.根据权利要求1所述的方法,其中将所述一个或多个加载指令从所述源存储器移动到所述目标存储器是通过在执行所述指令序列之前执行一组预配置指令来执行的。
4.根据权利要求1、2或3所述的方法,其中移动所述一个或多个加载指令包括将所述一个或多个加载指令移动到所述目标存储器。
5.根据任一前述权利要求所述的方法,其中启动来自所述目标存储器的所述一个或多个加载指令的执行是在执行所述指令序列中的第一分支指令时执行的。
6.根据任一前述权利要求所述的方法,其中将执行返回到存储在所述源存储器中的所述指令序列是在执行存储在所述目标存储器中的所述一个或多个加载指令之后的第二分支指令或返回指令时执行的。
7.根据任一前述权利要求所述的方法,其中所述方法还包括通过以下方式执行每个加载指令:
在第一时钟周期内从所述目标存储器中获取加载指令,所述加载指令识别要从所述源存储器加载的数据的存储器地址;
在第二时钟周期内从所述目标存储器中获取后续加载指令;和
在第二时钟周期期间将数据从所述源存储器中的存储器地址加载到所述多个寄存器中的寄存器。
8.根据任一前述权利要求所述的方法,所述方法还包括通过以下方式执行每个存储指令:
在第一时钟周期内从所述源存储器中获取存储指令,所述存储指令识别所述目标存储器中用于存储数据的存储器地址;
在第二时钟周期内从所述源存储器中获取后续存储指令;和
在第二时钟周期内将来自所述多个寄存器中的寄存器的数据存储到所述目标存储器中的存储器地址。
9.根据任一前述权利要求所述的方法,其中所述一个或多个加载指令作为所述源存储器中的数据的一部分存储在所述源存储器中。
10.根据任一前述权利要求所述的方法,其中所述指令序列和所述数据作为机器可读代码存储在所述源存储器中。
11.根据任一前述权利要求所述的方法,其中所述方法还包括通过转换用户编写的源代码或汇编代码来生成所述指令序列。
12.根据任一前述权利要求所述的方法,其中所述一个或多个加载指令和所述一个或多个存储指令在用于将数据从所述源存储器移动到所述目标存储器的循环中执行。
13.一种配置用于移动数据的计算机系统,所述系统包括:
源存储器,其被配置为存储指令序列和所述数据,其中所述指令序列包括一个或多个加载指令和一个或多个存储指令;
目标存储器;和
处理器,其耦合到所述源存储器和所述目标存储器,被配置为执行所述指令序列,其中所述处理器被配置为:
将所述一个或多个加载指令从所述源存储器移动到所述目标存储器;
启动来自所述目标存储器的所述一个或多个加载指令的执行;
在执行所述一个或多个加载指令时,将数据从所述源存储器加载到所述处理器中的至少一个寄存器;
将执行返回到存储在所述源存储器中的所述指令序列;和
在执行来自所述源存储器的所述一个或多个存储指令时将数据从所述至少一个寄存器存储到所述目标存储器。
14.根据权利要求13所述的系统,其中所述处理器在执行所述指令序列中的一组数据传输指令时将所述一个或多个加载指令移动到所述目标存储器。
15.根据权利要求13所述的系统,其中所述处理器在执行所述指令序列之前在执行一组预配置指令时将所述一个或多个加载指令移动到所述目标存储器。
16.根据权利要求13、14或15所述的系统,其中所述处理器在执行所述指令序列中的第一分支指令时启动来自所述目标存储器的所述一个或多个加载指令的执行。
17.根据权利要求13至16中任一项所述的系统,其中所述处理器在执行存储在所述目标存储器中的所述一个或多个加载指令之后的第二分支指令或返回指令时将执行返回到所述指令序列。
18.根据权利要求13至17中任一项所述的系统,其中所述源存储器存储所述指令序列中的所述一个或多个加载指令或作为所述数据中的数据元素存储。
19.根据权利要求13至18中任一项所述的系统,其中所述目标存储器包括所述目标存储器的被配置为用于存储所述指令序列的堆栈存储器的一部分。
20.根据权利要求13至19中任一项所述的系统,其中所述处理器通过指令路径和数据路径耦合到所述源存储器和所述目标存储器。
21.根据权利要求20所述的系统,其中所述处理器通过所述指令路径从所述源存储器和所述目标存储器获取指令。
22.根据权利要求20或21所述的系统,其中所述处理器从所述源存储器访问数据并通过所述数据路径将数据移动到所述目标存储器。
23.根据权利要求13至22中任一项所述的系统,其中所述源存储器被配置为由配置所述计算机系统的用户或在所述计算机系统的制造期间存储所述指令序列和所述数据。
24.根据权利要求13至23中任一项所述的系统,其中所述处理器在用于将数据从所述源存储器移动到所述目标存储器的循环中执行所述一个或多个加载指令和所述一个或多个存储指令。
25.计算机可读代码,其被配置为在所述代码运行时使权利要求1至12中任一项所述的方法被执行。
26.一种计算机可读存储介质,其上编码有权利要求25所述的计算机可读代码。
CN202180024592.9A 2020-03-25 2021-03-25 用于优化从一个存储器到另一个存储器的数据传输的方法和系统 Pending CN115335802A (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2004348.5A GB2593513B (en) 2020-03-25 2020-03-25 Method and system for optimizing data transfer from one memory to another memory
GB2004348.5 2020-03-25
PCT/EP2021/057771 WO2021191361A1 (en) 2020-03-25 2021-03-25 Method and system for optimizing data transfer from one memory to another memory

Publications (1)

Publication Number Publication Date
CN115335802A true CN115335802A (zh) 2022-11-11

Family

ID=70457075

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202180024592.9A Pending CN115335802A (zh) 2020-03-25 2021-03-25 用于优化从一个存储器到另一个存储器的数据传输的方法和系统

Country Status (5)

Country Link
US (1) US11954497B2 (zh)
EP (1) EP4127907A1 (zh)
CN (1) CN115335802A (zh)
GB (1) GB2593513B (zh)
WO (1) WO2021191361A1 (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2593513B (en) * 2020-03-25 2022-09-21 Nordic Semiconductor Asa Method and system for optimizing data transfer from one memory to another memory

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7921275B2 (en) * 2008-02-01 2011-04-05 International Business Machines Corporation Method for enabling direct prefetching of data during asychronous memory move operation
US8327101B2 (en) * 2008-02-01 2012-12-04 International Business Machines Corporation Cache management during asynchronous memory move operations
US8543796B2 (en) 2008-11-05 2013-09-24 Intel Corporation Optimizing performance of instructions based on sequence detection or information associated with the instructions
US8464029B2 (en) * 2009-05-29 2013-06-11 Via Technologies, Inc. Out-of-order execution microprocessor with reduced store collision load replay reduction
US8719463B2 (en) 2010-11-16 2014-05-06 Taiwan Semiconductor Manufacturing Company, Ltd. Processor with tightly coupled smart memory unit
US9524162B2 (en) * 2012-04-25 2016-12-20 Freescale Semiconductor, Inc. Apparatus and method for memory copy at a processor
US8880829B2 (en) 2012-11-19 2014-11-04 Qualcomm Innovation Center, Inc. Method and apparatus for efficient, low-latency, streaming memory copies
JP6965523B2 (ja) 2017-02-08 2021-11-10 富士電機株式会社 マルチプロセッサシステム
US11086632B2 (en) 2017-02-10 2021-08-10 Alibaba Group Holding Limited Method and apparatus for providing accelerated access to a memory system
GB2593513B (en) * 2020-03-25 2022-09-21 Nordic Semiconductor Asa Method and system for optimizing data transfer from one memory to another memory
GB2593514B (en) * 2020-03-25 2022-04-27 Nordic Semiconductor Asa Method and system for optimizing data transfer from one memory to another memory

Also Published As

Publication number Publication date
GB2593513A (en) 2021-09-29
US20230120354A1 (en) 2023-04-20
US11954497B2 (en) 2024-04-09
GB202004348D0 (en) 2020-05-06
EP4127907A1 (en) 2023-02-08
WO2021191361A1 (en) 2021-09-30
GB2593513B (en) 2022-09-21

Similar Documents

Publication Publication Date Title
US10503547B2 (en) Task scheduling in a GPU
KR102496402B1 (ko) 사용자-레벨 포크 및 조인 프로세서, 방법, 시스템, 및 명령어
US11720399B2 (en) Task scheduling in a GPU using wakeup event state data
US20220261248A1 (en) Encoding and Decoding Variable Length Instructions
US7529917B2 (en) Method and apparatus for interrupt handling during loop processing in reconfigurable coarse grained array
CN108885586B (zh) 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令
TW201802668A (zh) 可中斷及可重啟矩陣乘法指令、處理器、方法和系統
US10168957B2 (en) Directed placemat of data in memory
CN113590126A (zh) 用于实现具有局部存储需求的循环流水线化的自动编译器数据流优化
CN115335802A (zh) 用于优化从一个存储器到另一个存储器的数据传输的方法和系统
US11960889B2 (en) Method and system for optimizing data transfer from one memory to another memory
US20150309800A1 (en) Instruction That Performs A Scatter Write
US10275217B2 (en) Memory load and arithmetic load unit (ALU) fusing
US10459725B2 (en) Execution of load instructions in a processor
US10387155B2 (en) Controlling register bank access between program and dedicated processors in a processing system
WO2018004372A1 (en) Vectorize store instructions method and apparatus
US20240184574A1 (en) Stateful Vector Group Permutation with Storage Reuse
GB2578223A (en) Task scheduling in a GPU
CN116266333A (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