CN108351784B - 用于在乱序处理器中进行有序处理的指令和逻辑 - Google Patents

用于在乱序处理器中进行有序处理的指令和逻辑 Download PDF

Info

Publication number
CN108351784B
CN108351784B CN201680064117.3A CN201680064117A CN108351784B CN 108351784 B CN108351784 B CN 108351784B CN 201680064117 A CN201680064117 A CN 201680064117A CN 108351784 B CN108351784 B CN 108351784B
Authority
CN
China
Prior art keywords
instruction
instructions
processor
memory
order
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
CN201680064117.3A
Other languages
English (en)
Other versions
CN108351784A (zh
Inventor
J·马修
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.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of CN108351784A publication Critical patent/CN108351784A/zh
Application granted granted Critical
Publication of CN108351784B publication Critical patent/CN108351784B/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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3856Reordering of instructions, e.g. using queues or age tags
    • 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
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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
    • 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
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

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

Abstract

在一个实施例中,处理器包括解码逻辑、用于发布经解码指令的发布逻辑、以及用于执行程序的所发布指令的至少一个执行逻辑。所述至少一个执行逻辑用于乱序执行所述程序的至少一些指令,并且所述解码逻辑用于对所述程序的第一有序存储器指令进行解码并将其提供给所述发布逻辑。进而,所述发布逻辑用于将所述第一有序存储器指令排序在所述程序的第二有序存储器指令之前。描述并要求保护了其他实施例。

Description

用于在乱序处理器中进行有序处理的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器以及相关联的指令集架构领域,当由处理器或其他处理逻辑执行该指令集架构时,该指令集架构执行逻辑、数学或其他功能性操作。
背景技术
针对像信号处理等某些计算密集型任务而发生在处理器内对指令进行乱序执行。然而,需要对存储器映射输入/输出(MMIO)存取进行有序执行,以便确保在嵌入式控制应用中的正确执行。为了实现这样的操作,程序员引入特殊(即栅栏/屏障)指令以便确保有序执行。然而,这种技术容易出错,并且使得高级代码跨指令集架构的可移植性较低、可读性较低、以及可重新启用性较低。
历史上,诸如在工业、汽车和其他特定环境中所包含的小型控制单元等嵌入式系统是采用有序处理器架构进行架构的。随着在嵌入式应用中执行越来越多的计算复杂活动,乱序处理架构正在被引入,这增大了复杂性并且存在与现有代码库的向后兼容性问题。
发明内容
根据本发明的一个实施例,提供一种用于排序指令的处理器,其包括:包括乱序流水线的核,所述乱序流水线包括解码电路、用于发布经解码指令的发布电路、以及用于执行程序的所发布指令的至少一个执行电路,其中,所述至少一个执行电路用于乱序执行所述程序的至少一些指令;所述解码电路用于对所述程序的第一有序存储器指令进行解码并且将经解码的第一有序存储器指令提供给所述发布电路;所述发布电路用于将所述第一有序存储器指令排序在所述程序的第二有序存储器指令之前;所述第一有序存储器指令是所述程序的源版本中的无序存储器指令。
根据本发明的另一实施例,提供一种用于排序指令的系统,其包括:处理器,所述处理器包括第一核,所述第一核具有:用于对指令进行解码的解码电路;用于发布经解码指令的发布电路,所述发布电路包括用于存储有序存储器存取指令的第一队列和用于存储无序指令的第二存储装置;以及用于执行程序的所发布指令的至少一个执行电路,其中,所述发布电路用于将所述程序的经解码的第一有序存储器存取指令和所述程序的经解码的第二有序存储器存取指令存储在所述第一队列中并且将所述程序的一个或多个无序指令存储在所述第二存储装置中,并且在所述程序的所述经解码的第二有序存储器存取指令之前、并且相对于所述一个或多个无序指令中的一个或多个而言无序地将所述经解码的第一有序存储器存取指令提供给所述至少一个执行电路;以及动态随机存取存储器,耦合至所述处理器。
附图说明
图1A是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为具有可以包括用于执行指令的执行单元的处理器。
图1B示出了根据本公开的实施例的数据处理系统。
图1C示出了根据本公开的实施例的用于执行操作的数据处理系统的另一实施例。
图2是根据本公开的实施例的处理器的微架构的框图,处理器可以包括用于执行指令的逻辑电路。
图3A示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。
图3B示出了根据本公开的实施例的可能的寄存器内数据存储格式。
图3C示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示。
图3D示出了操作编码格式的实施例。
图3E示出了根据本公开的实施例的具有四十位或更多位的另一可能的操作编码格式。
图3F示出了根据本公开的实施例的又一可能的操作编码格式。
图4A是示出根据本公开的实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。
图4B是示出根据本公开的实施例的、要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图。
图5A是根据本公开的实施例的处理器的框图。
图5B是根据本公开的实施例的核的示例实现的框图。
图6是根据本公开的实施例的系统的框图。
图7是根据本公开的实施例的第二系统的框图。
图8是根据本公开的实施例的第三系统的框图。
图9是根据本公开的实施例的芯片上系统的框图。
图10示出了根据本公开的实施例的处理器,包括中央处理单元和图形处理单元,该处理器可执行至少一条指令。
图11是示出根据本公开的实施例的IP核开发的框图。
图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令。
图13示出了根据本公开的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
图14是根据本公开的实施例的处理器的指令集架构的框图。
图15是根据本公开的实施例的处理器的指令集架构的更具体的框图。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图。
图17是根据本公开的实施例的用于利用处理器的电子设备的框图。
图18是根据本发明的实施例的方法的流程图。
图19是根据本发明的另一实施例的方法的流程图。
图20是根据实施例的一种用于编译器执行的方法的流程图。
图21是根据本发明的实施例的一种用于对指令进行解码的方法的流程图。
图22是根据本发明的实施例的方法的流程图。
图23是根据实施例的处理器的一部分的框图。
具体实施方式
实施例提供了要严格有序执行的经扩展的一组加载和存储指令。这样的指令可以被编码成与这种加载/存储指令的乱序对应物不同的机器语言编码。在实施例中,处理器保证仅有序地执行和提交两个这样的控制指令。注意,同一程序的其他指令可能会被乱序执行。
为了在程序中创建这样的指令,编译器可以被配置成识别适合有序执行的适当的加载/存储指令(如进行正确程序操作可能需要的)。作为一个示例,程序(如装置驱动程序)中所使用的存储器映射输入/输出(MMIO)变量可以利用编译器指示(例如,变量声明中的前缀)来识别,所述编译器指示命令编译器使用有序指令来进行对这些变量的读/写存取。在实施例中,当从处理器的准备执行队列中进行选择时,调度实体可以给予有序加载/存储指令、例如控制指令以更高的优先级。
实施例可以提供比诸如由程序员手动插入的栅栏/屏障指令之类的指令更有效的操作和编程。使用如本文所描述的指令的操作也可以比提供用于控制任务和计算任务的单独核、和/或单独的有序模式更为有效。
面向控制的代码(如装置驱动程序)涉及很多MMIO事务。MMIO事务可以以严格的程序顺序来执行,因为两个不同寄存器中的位域可能必须以特定顺序写入以便启用特定的硬件功能。通过提供如本文所述的有序指令,例如,用于MMIO事务,仅在这些MMIO事务之间才有加载-加载、存储-存储、或加载-存储依赖性。通过使有序指令的编译器插入代替利用乱序指令所编写的代码,可实现源代码的可读性、鲁棒性和可移植性。
实施例可以用于各种计算环境中,包括但不限于嵌入式系统。可以使用接口来指定要严格有序存取的地址块,以便确保正确性。这样,实施例能够使用乱序处理器用于嵌入式控制域。
现在参考表1,示出了以C语言的、根据实施例的MMIO变量的样本高级声明。
表1
volatile mmio struct_sUart Uart_attribute_((section(“UART_REG”)))
如表1所展示的,此声明提供编译器前缀(被称为MMIO)作为关键字,以便指定此变量是MMIO映射变量,并且因此如本文所描述的那样被有序处理。在上面的特定示例中,应理解的是所述声明用于定义与映射至给定范围的地址的特定装置驱动程序(这里是通用异步接收机/发射机(UART))有关的所有寄存器将被相应地处理。
作为示例,可以使用文本编辑器为编译器指定关键字,或者可以命令高级代码生成工具将地址块视为外围装置的一部分。结果,这进而生成了类似于程序员引用的代码的代码。注意,此MMIO前缀在这里被用作示例;还可以基于编译器属性/应用属性中的关键字可用性来使用其他术语。
假设代码序列是向给定寄存器写入信息,例如接收机寄存器(uart.data(uart.数据)寄存器和uart.trigger(uart.触发)寄存器,并且然后在uart.status(uart.状态)寄存器上进行轮询。表2展示了这种操作的高级源代码。
表2
#define UART_TX_TRIGGER(1<<4)
#define UART_TX_COMPLETE 1
void uart_send_data(char data)
{
int c;
Uart.data=(unsigned int)data;/*写入有待发射的数据*/
Uart.trigger=Uart.trigger|UART_TX_TRIGGER;
while(Uart.status!=UART_TX_COMPLETE);
return;
}
如所看到的,此源代码将待发射的数据写入数据寄存器(Uart_data)中,利用触发寄存器执行逻辑操作并且发射所述数据直到触发条件满足。更具体地,代码使得能够向Uart.data寄存器写入待发射的数据,接着是通过向Uart.trigger寄存器进行写入来命令Uart开始发射。然后,流程等待直到Uart经由单行While循环完成数据发送。注意,只有在发射操作完成后,硬件才会设置Uart status==UART_TX_COMPLETE。注意,与Uartdefinition(Uart.data,Uart.trigger和Uart.status)相关联的各种变量因此与编译器指示相关联,并且这样,编译器用于针对参考这些源代码变量作为操作数的指令生成有序加载/存储指令。此源代码在给定机器上编译时可以被转换为机器代码,例如转换为汇编语言。
下面表3在没有提供如本文所描述的有序指令的情况下示出了经转换的代码。
表3
Figure GDA0003993455370000061
乱序处理器可以在此代码中看到独立的执行线程,因为它们之间没有数据依赖性。并且因此从处理器的角度来看不存在数据危险。但实际上,由于Uart硬件所强加的顺序要求,所述代码并不是独立的。
实施例提供指令集架构指令以便执行有序加载/存储操作。示例指令编码包括所谓的emov指令。在一个实施例中,此指令可以是由程序员用来指定对加载/存储指令的有序执行的用户级指令。在其他实施例中,所述指令可以是响应于源代码的无序用户级加载/存储指令而生成的编译器生成指令(诸如机器代码指令)。更一般地,这些指令可以被称为控制指令以便表示对这些指令的有序控制。所述实施方式可以在基于微代码的系统中利用微代码来完成,也可以在具有硬件解码的处理器中利用专用硬件来完成。
实施例因此提供了具有指令集的乱序处理器,所述指令集中的一组指令具有ISA级保证以便按顺序进行执行和提交。注意,程序的源版本可能会按顺序提供指令。在传统的乱序处理器中,指令解码器(以及发布逻辑)可能忽略这种排序。但是使用根据实施例的处理器,解码器(以及发布逻辑)将不会忽略针对本文所描述的有序指令的这种信息。
在一个示例中,根据实施例的控制移动指令具有助记符,emove。针对此指令的指令编码示例为:emov EAX,[address]。利用此编码,所述指令可以引起移动操作以便将所识别的地址处的信息移动至EAX寄存器。注意,此指令可以相对于前一emov指令以及某些先前的加载/存储(例如,无序移动)来进行排序。也就是说,根据本发明实施例的控制指令将继承其标准对应物的所有排序规则。此外,它将相对于前一控制指令施加排序。在这种情况下,emov指令继承了mov指令的所有排序规则。此外,它相对于先前的控制指令进行严格排序。例如,假设mov AX,0xa5a5,后跟emov[0xE5010000],AX。在根据本发明实施例的处理器中,由于AX寄存器是公共资源,因此可以对这两个指令进行排序。这是从mov指令处所继承的排序规则。
现在参考表4,示出了根据提供有序指令的实施例的所生成汇编代码。现在,先前独立的执行线程不再独立于处理器视点,因为emov指令确保其他emov指令之间的有序执行。
表4
Figure GDA0003993455370000071
Figure GDA0003993455370000081
虽然参照处理器来描述下列各实施例,但是,其他实施例也适用于其他类型的集成电路和逻辑器件。本公开的实施例的类似技术和教导可应用于可受益于更高的流水线吞吐量和改善的性能的其他类型的电路或半导体器件。本公开的诸个实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并可以应用于其中可以执行对数据的操纵或管理的任何处理器和机器。另外,下列描述提供了示例,并且为了进行说明,所附附图示出各种示例。然而,这些示例不应当以限制性意义来解释,因为它们仅仅旨在提供本公开的诸个实施例的示例,而并非对本公开的实施例的所有可能实现方式进行穷举。
虽然下述的示例是在执行单元和逻辑电路情境下描述指令处理和分配,但本公开的其他实施例也可通过存储在机器可读有形介质上的数据和/或指令来完成,这些数据和/或指令在被机器执行时使得机器执行与本公开至少一个实施例相一致的功能。在一个实施例中,与本公开的实施例相关联的功能被具体化在机器可执行指令中。这些指令可用来使可以通过这些指令而被编程的通用处理器或专用处理器执行本公开的步骤。本公开的诸个实施例也可以作为计算机程序产品或软件来提供,该计算机程序产品或软件可包括其上存储有指令的机器或计算机可读介质,这些指令可被用来对计算机(或其他电子设备)进行编程来执行根据本公开的实施例的一个或多个操作。此外,本公开的多个实施例的多个步骤可由包含用于执行这些步骤的固定功能逻辑的专用硬件组件来执行,或由经编程的计算机组件以及固定功能硬件组件的任何组合来执行。
被用于对逻辑进行编程以执行本公开的诸个实施例的指令可被存储在系统的存储器(诸如,DRAM、高速缓存、闪存、或其他存储器)中。此外,指令可经由网络或通过其他计算机可读介质来分配。因此,机器可读介质可包括用于以机器(诸如,计算机)可读形式存储或发送信息的任何机制,但不限于:软盘、光盘、紧凑盘只读存储器(CD-ROM)、磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或在经由互联网通过电、光、声、或其他形式的传播信号(诸如,载波、红外信号、数字信号等)发送信息中所用的有形机器可读存储器。因此,计算机可读介质可以包括适用于以机器(例如,计算机)可读形式存储或发送电子指令或信息的任何类型的有形的机器可读介质。
设计会经历多个阶段,从创造到仿真到制造。表示设计的数据可用多种方式来表示该设计。首先,像仿真中可以有用的那样,可以使用硬件描述语言或另一功能性描述语言来表示硬件。此外,可在设计过程的某些阶段产生具有逻辑和/或晶体管门电路的电路级模型。此外,设计在某个阶段可以达到表示硬件模型中各种设备的物理布置的数据的层级。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指定在用于制造集成电路的掩模的不同掩模层上存在或不存在各种特征的数据。在任何设计表示中,数据可以被存储在任何形式的机器可读介质中。存储器或者磁或光存储设备(诸如,盘)可以是存储经由光或电波发送的信息的机器可读介质,调制或以其他方式生成这些光或电波以发送这些信息。当发送指示或承载代码或设计的电载波达到实现该电信号的复制、缓冲或重新发送的程度时,可以产生新的副本。因此,通信提供商或网络提供商会在有形机器可读介质上至少临时地存储具体化本公开的诸个实施例的技术的物品(诸如,编码在载波中的信息)。
在现代处理器中,可以将多个不同的执行单元用于处理和执行各种代码和指令。一些指令可以更快地完成,而其他指令可能需要多个时钟周期来完成。指令的吞吐量越快,则处理器的总体性能越好。因此,使尽可能多的指令尽可能快地执行将会是有利的。然而,可能存在具有较大的复杂度并且在执行时间和处理器资源方面要求更多的某些指令,诸如浮点指令、加载/存储操作、数据移动等等。
因为更多的计算机系统被用于互联网、文本以及多媒体应用,所以已逐渐地引进了附加的处理器支持。在一个实施例中,指令集可与一个或多个计算机架构相关联,一个或多个计算机架构包括:数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构来实现,微架构可包括用于实现一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的多个处理器可共享公共指令集的至少一部分。例如,
Figure GDA0003993455370000101
奔腾四(Pentium 4)处理器、
Figure GDA0003993455370000102
酷睿(CoreTM)处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(Advanced Micro Devices,Inc.)的多个处理器执行几乎相同版本的x86指令集(在更新的版本中加入了一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如,ARM控股有限公司、MIPS或它们的授权方或兼容方)设计的多个处理器可共享至少一部分公共指令集,但可包括不同的处理器设计。例如,ISA的相同寄存器架构在不同的微架构中可使用新的或公知的技术以不同方法来实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可包括:可由软件编程者寻址或不可由软件编程者寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器集合。
指令可以包括一个或多个指令格式。在一个实施例中,指令格式可指示多个字段(位的数量、位的位置等)以指定将要被执行的操作以及将要对其执行操作的操作数等。在进一步的实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定指令格式的指令模板可被定义为具有指令格式字段的不同的子集,和/或被定义为具有以不同方式进行解释的给定字段。在一个实施例中,可以使用指令格式(并且,如果定义过,则以该指令格式的指令模板中的给定的一个)来表示指令,并且该指令指定或指示操作以及该操作将操作的操作数。
科学应用、金融应用、自动向量化通用应用、RMS(识别、挖掘和合成)应用以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(SIMD)指的是使得处理器对多个数据元素执行一个操作的指令类型。可将SIMD技术用于可将寄存器中的多个位逻辑地划分为多个固定尺寸或可变尺寸的数据元素(每个数据元素表示单独的值)的处理器中。例如,在一个实施例中,可将64位寄存器中的多个位组织为包含四个单独的16位数据元素的源操作数,每个数据元素表示单独的16位的值。该数据类型可被称为‘紧缩’数据类型或‘向量’数据类型,并且该数据类型的操作数可被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器中的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是SIMD指令(或“紧缩数据指令”或“向量指令”)的源操作数或目的地操作数。在一个实施例中,SIMD指令指定了将要对两个源向量操作数执行以生成具有相同或不同尺寸的、具有相同或不同数量的数据元素的、具有相同或不同数据元素顺序的目的地向量操作数(也被称为结果向量操作数)的单个向量操作。
诸如由
Figure GDA0003993455370000111
酷睿(CoreTM)处理器(具有包括x86、MMXTM、流SIMD扩展(SSE)、SSE2、SSE3、SSE4.1、SSE4.2指令的指令集)、ARM处理器(诸如,ARM
Figure GDA0003993455370000112
处理器族,具有包括向量浮点(VFP)和/或NEON指令的指令集)和MIPS处理器(诸如,中国科学院计算机技术研究所(ICT)开发的龙芯处理器族)所采用的SIMD技术之类的SIMD技术在应用性能上带来了极大的提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉市的英特尔公司的注册商标或商标)。
在一个实施例中,目的地寄存器/数据和源寄存器/数据可以是表示对应数据或操作的源和目的地的通用术语。在一些实施例中,它们可由寄存器、存储器或具有与所描绘的那些名称或功能不同的名称或功能的其他存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其他存储区域,等等。在其他实施例中,SRC和DEST存储区域中的两个或更多可对应于相同存储区域中的不同数据存储元素(例如,SIMD寄存器)。在一个实施例中,通过例如将对第一和第二源数据执行的操作的结果写回至两个源寄存器中作为目的地寄存器的那个寄存器,源寄存器中的一个也可以作为目的地寄存器。
图1A是根据本公开的实施例的示例性计算机系统的框图,该计算机系统被形成为可以包括用于执行指令的执行单元的处理器。根据本公开,诸如在本文中所描述的实施例中,系统100可以包括诸如处理器102之类的组件,该处理器102用于使用包括逻辑的执行单元以执行算法来处理数据。系统100可以代表基于可从美国加利福尼亚州圣克拉拉市的英特尔公司获得的PENTIUMTMIII、PENTIUMTM4、XeonTM、ItaniumTM、XScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWSTM操作系统的一个版本,不过也可使用其它操作系统(例如UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本公开的各实施例不限于硬件电路和软件的任何特定组合。
诸实施例不限于计算机系统。本公开的实施例可用于其他设备,诸如手持式设备和嵌入式应用。手持式设备的某些示例包括蜂窝电话、网际协议设备、数码相机、个人数字助理(PDA)以及手持式PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、芯片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机、或可执行根据至少一个实施例的一条或多条指令的任何其他系统。
计算机系统100可包括处理器102,处理器102可包括一个或多个执行单元108,用于执行算法以执行根据本公开的一个实施例的至少一个指令。可在单处理器桌面或服务器系统的情境中描述一个实施例,但是可将其他实施例包括在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可以包括处理器102以用于处理数据信号。处理器102可以包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现多个指令集组合的处理器或任意其他处理器设备(例如,数字信号处理器)。在一个实施例中,处理器102可以耦合至处理器总线110,处理器总线110可以在处理器102与系统100中的其他组件之间传输数据信号。系统100的多个要素可以执行为熟悉本领域的人员所公知的它们的常规功能。
在一个实施例中,处理器102可以包括第一级(L1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在另一个实施例中,高速缓存存储器可驻留在处理器102的外部。其他实施例也可包括内部高速缓存和外部高速缓存的组合,这取决于特定实现和需求。寄存器堆106可将不同类型的数据存储在各种寄存器(包括整数寄存器、浮点寄存器、状态寄存器、指令指针寄存器)中。
执行单元108(包括用于执行整数和浮点操作的逻辑)也驻留在处理器102中。处理器102还可包括存储用于某些宏指令的微代码的微代码(ucode)ROM。在一个实施例中,执行单元108可以包括用于处置紧缩指令集109的逻辑。通过将紧缩指令集109包括在通用处理器102以及用于执行指令的相关联的电路的指令集中,可以使用通用处理器102中的紧缩数据来执行由许多多媒体应用使用的操作。因此,通过将处理器数据总线的完整宽度用于对紧缩数据执行操作,可加速并更高效地执行许多多媒体应用。这可减少在处理器数据总线上传输更小数据单元以在一个时间对一个数据元素执行一个或多个操作的需要。
执行单元108的实施例也可以用于微控制器、嵌入式处理器、图形设备、DSP及其他类型的逻辑电路。系统100可以包括存储器120。存储器120可以实现为动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其他存储器设备。存储器120可存储由可由处理器102执行的数据信号来表示的指令和/或数据。
系统逻辑芯片116可以耦合至处理器总线110和存储器120。系统逻辑芯片116可以包括存储器控制器中枢(MCH)。处理器102可以经由处理器总线110与MCH 116通信。MCH 116可以提供至存储器120的高带宽存储器路径118,用于指令和数据存储,并且用于图形命令、数据和纹理的存储。MCH 116可以引导处理器102、存储器120以及系统100内的其他组件之间的数据信号,并用于在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合至图形控制器112的图形端口。MCH 116可通过存储器接口118耦合至存储器120。图形卡112可通过加速图形端口(AGP)互连114耦合至MCH 116。
系统100可使用专有中枢接口总线122以将MCH 116耦合至I/O控制器中枢(ICH)130。在一个实施例中,ICH 130可经由本地I/O总线来提供到某些I/O设备的直接连接。本地I/O总线可包括用于将外围设备连接到存储器120、芯片组以及处理器102的高速I/O总线。示例可包括音频控制器、固件中枢(闪存BIOS)128、无线收发机126、数据存储设备124、包括用户输入和键盘接口的传统I/O控制器、串行扩展端口(诸如,通用串行总线(USB))以及网络控制器134。数据存储设备124可以包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或其他大容量存储设备。
对于系统的另一个实施例,根据一个实施例的指令可以与芯片上系统一起使用。芯片上系统的一个实施例包括处理器和存储器。用于一个这样的系统的存储器可以包括闪存。闪存可位于与处理器和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可位于芯片上系统上。
图1B示出数据处理系统140,该数据处理系统140实现本公开的实施例的原理。本领域的技术人员将容易理解,本文描述的多个实施例可利用替代的处理系统来操作,而不背离本公开的多个实施例的范围。
计算机系统140包括用于执行根据一个实施例的至少一条指令的处理核159。在一个实施例中,处理核159表示任何类型的架构(包括但不限于,CISC、RISC或VLIW类型架构)的处理单元。处理核159也可适于以一种或多种处理技术来制造,并且通过足够详细地表示在机器可读介质上可适用于促进所述制造。
处理核159包括执行单元142、一组寄存器堆145以及解码器144。处理核159也可以包括对于理解本公开的实施例不是必需的附加电路(未示出)。执行单元142可以执行处理核159接收到的指令。除了执行典型的处理器指令外,执行单元142也可执行紧缩指令集143中的指令,以便对紧缩数据格式执行操作。紧缩指令集143可包括用于执行本公开的多个实施例的指令以及其他紧缩指令。执行单元142可通过内部总线耦合至寄存器堆145。寄存器堆145可表示处理核159上用于存储包括数据的信息的存储区域。如前文所述,可以理解,该存储区域可以存储紧缩数据并不是关键的。执行单元142可以耦合至解码器144。解码器144可以将处理核159接收到的指令解码为控制信号和/或微代码进入点。响应于这些控制信号和/或微代码进入点,执行单元142执行合适的操作。在一个实施例中,解码器可以解释指令的操作码,该操作码将指示应当对该指令内所指示的对应数据执行什么操作。
处理核159可以与总线141耦合,用于与各种其他系统设备进行通信,其他系统设备可包括但不限于:例如,同步动态随机存取存储器(SDRAM)控制器146、静态随机存取存储器(SRAM)控制器147、猝发闪存接口148、个人计算机存储卡国际协会(PCMCIA)/紧致闪存(CF)卡控制器149、液晶显示器(LCD)控制器150、直接存储器存取(DMA)控制器151、以及替代的总线主接口152。在一个实施例中,数据处理系统140也可包括I/O桥154,用于经由I/O总线153与各种I/O设备进行通信。此类I/O设备可包括但不限于:例如,通用异步接收机/发射机(UART)155、通用串行总线(USB)156、蓝牙无线UART 157、以及I/O扩展接口158。
数据处理系统140的一个实施例提供了移动通信、网络通信和/或无线通信,并提供了可执行包括文本串比较操作的SIMD操作的处理核159。可利用各种音频、视频、成像和通信算法对处理核159进行编程,这些算法包括:离散变换(诸如Walsh-Hadamard变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)以及它们相应的逆变换);压缩/解压缩技术(例如,色彩空间变换、视频编码运动估计或视频解码运动补偿);以及调制/解调(MODEM)功能(例如,脉冲编码调制(PCM))。
图1C示出了根据本公开的实施例的用于执行操作的数据处理系统的另一实施例。在一个实施例中,数据处理系统160可包括主处理器166、SIMD协处理器161、高速缓存存储器167以及输入/输出系统168。输入/输出系统168可以可选地耦合至无线接口169。SIMD协处理器161可以执行包括根据一个实施例的指令的操作。在一个实施例中,处理核170可适用于以一种或多种处理技术来制造,并且通过足够详细地表示在机器可读介质上,可适用于促进包括处理核170的数据处理系统160的全部或部分的制造。
在一个实施例中,SIMD协处理器161包括执行单元162以及一组寄存器堆164。主处理器165的一个实施例包括解码器165,该解码器165用于识别包括根据一个实施例的、用于由执行单元162执行的指令的指令集163中的多条指令。在其他实施例中,SIMD协处理器161也包括用于对指令集163中的多条指令进行解码的解码器165的至少部分。处理核170也可以包括对于理解本公开的实施例不是必需的附加电路(未示出)。
在操作中,主处理器166执行控制通用类型的数据处理操作(包括与高速缓存存储器167和输入/输出系统168之间的交互)的数据处理指令流。SIMD协处理器指令可以被嵌入到该数据处理指令流中。主处理器166的解码器165将这些SIMD协处理器指令识别为应当由附连的SIMD协处理器161来执行的类型。因此,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。可以由任何附连的SIMD协处理器从协处理器总线166接收这些指令。在这种情况下,SIMD协处理器161可以接受并执行任何接收到的针对该SIMD协处理器的SIMD协处理器指令。
可经由无线接口169接收数据以通过SIMD协处理器指令进行处理。对于一个示例,能以数字信号的形式接收到语音通信,可由SIMD协处理器指令处理该数字信号以便重新生成表示该语音通信的数字音频样本。对于另一个示例,能以数字位流的形式接收到被压缩的音频和/或视频,可由SIMD协处理器指令处理该数字位流以便重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可被集成在单个处理核170中,该单个处理核170包括执行单元162、一组寄存器堆164以及用于识别包括根据一个实施例的多条指令的指令集163中的多条指令的解码器165。
图2是根据本公开的实施例的处理器200的微架构的框图,处理器200可以包括用于执行指令的逻辑电路。在一些实施例中,可将根据一个实施例的指令实现为对具有字节尺寸、字尺寸、双字尺寸、四字尺寸等并具有诸多数据类型(例如,单精度和双精度整数和浮点数据类型)的数据元素进行操作。在一个实施例中,有序前端201可以实现处理器200的部分,该部分可以取出要被执行的指令,并准备这些指令以便稍后在处理器流水线中使用。前端201可以包括若干单元。在一个实施例中,指令预取器226从存储器中取出指令,并将这些指令馈送至指令解码器228,指令解码器228进而解码或解释这些指令。例如,在一个实施例中,解码器将所接收到的指令解码为机器可执行的被称为“微指令”或“微操作”(也称为微op或uop)的一个或多个操作。在其他实施例中,该解码器将指令解析为可由微架构用于执行根据一个实施例的多个操作的操作码以及对应的数据和控制字段。在一个实施例中,追踪高速缓存230可以在uop队列234中将经解码的uop组合为程序排序的序列或踪迹,以用于执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成操作所需的uop。
一些指令可以被转换为单个微op,而其他指令需要若干个微op以完成完整的操作。在一个实施例中,如果需要多于四个微op来完成指令,则解码器228可以访问微代码ROM232以执行该指令。在一个实施例中,可将指令解码为少量的微op,以便在指令解码器228处进行处理。在另一实施例中,如果需要许多微op来完成操作,则可将指令存储在微代码ROM232中。追踪高速缓存230参考进入点可编程逻辑阵列(PLA)来确定正确的微指令指针,以从微代码ROM 232中读取微代码序列来完成根据一个实施例的一条或多条指令。在微代码ROM 232完成对指令的微op进行的序列化操作之后,该机器的前端201可以恢复从追踪高速缓存230中取出微op。
乱序执行引擎203可以准备指令以供执行。乱序执行逻辑具有若干个缓冲器,用于将指令流平滑并且重排序,以优化指令流进入流水线后的性能,并调度指令流以供执行。分配器逻辑分配每个微操作需要的机器缓冲器和资源,以用于执行。寄存器重命名逻辑将诸个逻辑寄存器重命名为寄存器堆中的条目。在指令调度器(存储器调度器、快速调度器202、慢速/通用浮点调度器204、简单浮点调度器206)之前,分配器也将每个微操作的条目分配在两个微操作队列中的一个之中,一个微操作队列用于存储器操作,另一个微操作队列用于非存储器操作。uop调度器202、204、206基于它们的从属输入寄存器操作数源的准备就绪以及uop完成它们的操作所需的执行资源的可用性来确定uop何时准备好用于执行。一个实施例的快速调度器202可以在主时钟周期的每半个时钟周期上进行调度,而其他调度器在每个主处理器时钟周期上仅可调度一次。调度器对分配端口进行仲裁以调度微操作以便执行。
寄存器堆208、210可以设置在调度器202、204、206与执行块211中的执行单元212、214、216、218、220、222、224之间。寄存器堆208、210中的每一个分别执行整数和浮点操作。每个寄存器堆208、210可以包括旁路网络,该旁路网络可以绕开还未被写入到寄存器堆中的、刚完成的结果或者将这些结果转发到新的从属uop中。整数寄存器堆208和浮点寄存器堆210可以彼此传递数据。在一个实施例中,可以将整数寄存器堆208划分为两个单独的寄存器堆,一个寄存器堆用于数据的低阶32位,第二个寄存器堆用于数据的高阶32位。浮点寄存器堆210可以包括128位宽的条目,因为浮点指令通常具有从64至128位宽度的操作数。
执行块211可以包括执行单元212、214、216、218、220、222和224。执行单元212、214、216、218、220、222和224可以执行指令。执行块211可以包括存储微指令执行所需的整数和浮点数据操作数值的寄存器堆208和210。在一个实施例中,处理器200可以包括许多执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一个实施例中,浮点执行块222和224可以执行浮点、MMX、SIMD、SSE以及其他操作。在又一个实施例中,浮点ALU 222可以包括用于执行除法、平方根和余数微op的64位除64位的浮点除法器。在各实施例中,可利用浮点硬件来处置涉及浮点值的指令。在一个实施例中,可以将ALU操作传递到高速ALU执行单元216和218。高速ALU216和218可以执行有效等待时间为半个时钟周期的快速操作。在一个实施例中,大多数复杂的整数操作去往慢速ALU 220,因为慢速ALU 220可以包括用于长等待时间类型操作的整数执行硬件,例如,乘法器、移位器、标志逻辑和分支处理设备。存储器加载/存储操作可以由AGU 212和214来执行。在一个实施例中,整数ALU 216、218和220可以对64位数据操作数执行整数操作。在其他实施例中,ALU 216、218和220可实现为支持包括16、32、128以及256等的各种数据位尺寸。类似地,浮点单元222和224可实现为支持具有各种宽度的位的一系列操作数。在一个实施例中,浮点单元222和224可结合SIMD和多媒体指令来对128位宽的紧缩数据操作数进行操作。
在一个实施例中,在父加载完成执行之前,uop调度器202、204和206就分派从属操作。由于可以在处理器200中推测性地调度并执行uop,因此处理器200也可以包括用于处置存储器未命中的逻辑。如果数据加载在数据高速缓存中未命中,则在流水线中会存在已带着临时错误的数据离开调度器的运行中的依赖性操作。重放机制跟踪使用错误数据的指令,并重新执行这些指令。仅仅依赖性操作可能需要被重放,而可以允许独立操作完成。也可将处理器的一个实施例的调度器和重放机制设计成用于捕捉指令序列,以用于文本串比较操作。
术语“寄存器”可以是指可以被用作标识操作数的指令的部分的板上处理器存储器位置。换句话说,寄存器可以是从处理器外部(从编程者的角度来看)可用的那些处理器存储位置。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可以存储数据、提供数据以及执行本文中所描述的功能。本文所描述的寄存器可利用任何数量的不同技术,由处理器中的电路来实现,这些不同技术诸如,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含八个多媒体SIMD寄存器,用于紧缩数据。对于以下讨论,寄存器可以被理解为设计成保存紧缩数据的数据寄存器,诸如来自美国加利福尼亚州圣克拉拉市的英特尔公司的启用了MMX技术的微处理器的64位宽MMXTM寄存器(在一些实例中也称为“mm”寄存器)。这些MMX寄存器(在整数和浮点形式两者中是可用的)可与伴随SIMD和SSE指令的紧缩数据元素一起操作。类似地,涉及SSE2、SSE3、SSE4或以外的(统称为“SSEx”)技术的128位宽的XMM寄存器可以保存这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要区分这两类数据类型。在一个实施例中,整数和浮点可被包括在相同的寄存器堆中,或被包括在不同的寄存器堆中。进一步地,在一个实施例中,浮点和整数数据可被存储在不同的寄存器中,或被存储在相同的寄存器中。
在下述附图的示例中,可以描述多个数据操作数。图3A示出了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。图3A示出用于128位宽操作数的紧缩字节310、紧缩字320以及紧缩双字(dword)330的数据类型。本示例的紧缩字节格式310可以是128位长,并且包含十六个紧缩字节数据元素。字节可以被定义为,例如,数据的八位。每一个字节数据元素的信息可以被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,可以在该寄存器中使用所有可用的位。该存储配置提高了处理器的存储效率。同样,因为访问了十六个数据元素,所以现在可并行地对十六个数据元素执行一个操作。
通常,数据元素可以包括与具有相同长度的其他数据元素一起被存储在单个寄存器或存储器位置中的单独的数据片。在涉及SSEx技术的紧缩数据序列中,存储在XMM寄存器中的数据元素的数目可以是128位除以单独的数据元素的位长。类似地,在涉及MMX和SSE技术的紧缩数据序列中,存储在MMX寄存器中的数据元素的数目可以是64位除以单独的数据元素的位长。虽然图3A中示出的数据类型可以是128位长,但是本公开的实施例还可以利用64位宽或其他尺寸的操作数来操作。本示例中的紧缩字格式320可以是128位长,并且包含八个紧缩字数据元素。每个紧缩字包含十六位的信息。图3A的紧缩双字格式330可以是128位长,并且包含四个紧缩双字数据元素。每个紧缩双字数据元素包含三十二位的信息。紧缩四字可以是128位长,并包含两个紧缩四字数据元素。
图3B示出了根据本公开的实施例的可能的寄存器内数据存储格式。每个紧缩数据可包括多于一个的独立数据元素。示出了三种紧缩数据格式:紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343。紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343的一个实施例包含固定点数据元素。对于另一个实施例,紧缩半数据元素341、紧缩单数据元素342和紧缩双数据元素343中的一个或多个可包含浮点数据元素。紧缩半数据元素341的一个实施例可以是128位长,包含八个16位数据元素。紧缩单数据元素342的一个实施例可以是128位长,并且包含四个32位数据元素。紧缩双数据元素343的一个实施例可以是128位长,并且包含两个64位数据元素。将会理解,可进一步将此类紧缩数据格式扩展至其他寄存器长度,例如,96位、160位、192位、224位、256位或更长。
图3C示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示。无符号紧缩字节表示344示出将无符号紧缩字节存储在SIMD寄存器中。每一个字节数据元素的信息可以被存储为:对于字节0存储在位7到位0,对于字节1存储在位15到位8,对于字节2存储在位23到位16,最后对于字节15存储在位120到位127。因此,可以在该寄存器中使用所有可用的位。该存储配置可提高处理器的存储效率。同样,因为访问了十六个数据元素,所以现在可以并行方式对十六个数据元素执行一个操作。有符号紧缩字节表示345示出了有符号紧缩字节的存储。注意,每个字节数据元素的第八位可以是符号指示符。无符号紧缩字表示346示出了如何可以将字7到字0存储在SIMD寄存器中。有符号紧缩字表示347可以类似于无符号紧缩字寄存器内表示346。注意,每个字数据元素的第十六位可以是符号指示符。无符号紧缩双字表示348示出了如何存储双字数据元素。有符号紧缩双字表示349可以类似于无符号紧缩双字寄存器内表示348。注意,必要的符号位可以是每个双字数据元素的第三十二位。
图3D示出了操作编码(操作码)的实施例。此外,格式360可以包括与可从美国加利福尼亚州圣克拉拉市的英特尔公司的万维网(www)intel.com/design/litcentr上获得的“IA-32英特尔架构软件开发者手册卷2:指令集参考(IA-32Intel Architecture SoftwareDeveloper's Manual Volume 2:Instruction Set Reference)”中描述的操作码格式类型相对应的寄存器/存储器操作数寻址模式。在一个实施例中,可通过字段361和362中的一个或多个对指令进行编码。可以对于每条指令标识多至两个操作数位置,包括多至两个源操作数标识符364和365。在一个实施例中,目的地操作数标识符366可以与源操作数标识符364相同,而在其他实施例中它们可以不相同。在另一个实施例中,目的地操作数标识符366可以与源操作数标识符365相同,而在其他实施例中它们可以不相同。在一个实施例中,由源操作数标识符364和365标识的源操作数中的一个可以被文本串比较操作的结果覆写,而在其他实施例中,标识符364对应于源寄存器元件,而标识符365对应于目的地寄存器元件。在一个实施例中,操作数标识符364和365可以标识32位或64位的源和目的地操作数。
图3E示出了根据本公开的实施例的具有四十位或更多位的另一可能的操作编码(操作码)格式370。操作码格式370对应于操作码格式360,并包括可选的前缀字节378。根据一个实施例的指令可通过字段378、371和372中的一个或多个来编码。通过源操作数标识符374和375以及通过前缀字节378,可对每条指令标识多至两个操作数位置。在一个实施例中,前缀字节378可被用于标识32位或64位的源和目的地操作数。在一个实施例中,目的地操作数标识符376可以与源操作数标识符374相同,而在其他实施例中它们可以不相同。对于另一个实施例,目的地操作数标识符376可以与源操作数标识符375相同,而在其他实施例中它们可以不相同。在一个实施例中,指令对由操作数标识符374和375所标识的操作数中的一个或多个进行操作,并且可以通过该指令的结果覆写由操作数标识符374和375所标识的一个或多个操作数,而在其他实施例中,可以将由标识符374和375标识的操作数写入另一寄存器中的另一数据元素中。操作码格式360和370允许由MOD字段363和373以及由可选的比例-索引-基址(scale-index-base)和位移(displacement)字节部分地指定的寄存器到寄存器寻址、存储器到寄存器寻址、由存储器对寄存器寻址、由寄存器对寄存器寻址、由立即数对寄存器寻址、寄存器到存储器寻址。
图3F示出了根据本公开的实施例的又一可能的操作编码(操作码)格式。可以通过协处理器数据处理(CDP)指令来执行64位单指令多数据(SIMD)算术操作。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一条此类CDP指令。对于另一实施例,可由字段383、384、387和388中的一个或多个对CDP指令操作的这种类型进行编码。可以对每个指令标识多至三个操作数位置,包括多至两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对8位、16位、32位和64位的值进行操作。在一个实施例中,可以对整数数据元素执行指令。在一些实施例中,可使用条件字段381,有条件地执行指令。对于一些实施例,可通过字段383来对源数据尺寸进行编码。在一些实施例中,可对SIMD字段执行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,可通过字段384对饱和类型进行编码。
图4A是示出根据本公开的实施例的有序流水线以及寄存器重命名级、乱序发布/执行流水线的框图。图4B是示出根据本公开的实施例的、要被包括在处理器中的有序架构核以及寄存器重命名逻辑、乱序发布/执行逻辑的框图。图4A中的实线框示出了有序流水线,而虚线框示出了寄存器重命名的、乱序发布/执行流水线。类似地,图4B中的实线框示出了有序架构逻辑,而虚线框示出了寄存器重命名逻辑以及乱序发布/执行逻辑。
在图4A中,处理器流水线400可以包括取出级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为分派或发布)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写入级418、异常处理级422和提交级424。
在图4B中,箭头指示两个或更多个单元之间的耦合,且箭头的方向指示那些单元之间的数据流的方向。图4B示出了包括耦合到执行引擎单元450的前端单元430的处理器核490,且执行引擎单元和前端单元两者都可以耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或其他核类型。在一个实施例中,核490可以是专用核,诸如例如,网络或通信核、压缩引擎、图形核等。
前端单元430可以包括耦合至指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可以耦合至指令转换后备缓冲器(TLB)436。TLB 436可以耦合至指令取出单元438,指令取出单元耦合至解码单元440。解码单元440可解码指令,并生成可从原始指令中解码出的、或以其他方式反映原始指令的、或可从原始指令中导出的一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号作为输出。可使用各种不同的机制来实现解码器。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,指令高速缓存单元434可以进一步耦合到存储器单元470中的第2级(L2)高速缓存单元476。解码单元440可以耦合至执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可以包括耦合至引退单元454的重命名/分配器单元452以及一组一个或多个调度器单元456。调度器单元456表示任意数量的不同调度器,包括预留站、中央指令窗等。调度器单元456可以耦合到物理寄存器堆单元458。每个物理寄存器堆单元458表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型(诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,等等)、状态(诸如,作为要被执行的下一条指令的地址的指令指针)等等。物理寄存器堆单元458可以被引退单元154所覆盖,以示出可实现寄存器重命名和乱序执行的多种方式(诸如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆、使用一个或多个未来文件(future file)、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等等)。通常,架构寄存器从处理器外部或从编程者的视角来看可以是可见的。寄存器可能不限于任何已知特定类型的电路。各种不同类型的寄存器可适用,只要它们存储并提供本文中所述的数据。合适寄存器的示例包括但可能不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及专用物理寄存器和动态分配的物理寄存器的组合,等等。引退单元454和物理寄存器堆单元458可以耦合至执行群集460。执行群集460可以包括一组一个或多个执行单元162和一组一个或多个存储器访问单元464。执行单元462可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有功能的仅一个执行单元或多个执行单元。调度器单元456、物理寄存器堆单元458和执行群集460被示出为可能是复数个,因为某些实施例为某些数据/操作类型创建了多个单独流水线(例如,均具有各自调度器单元、物理寄存器堆单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线;以及在单独的存储器访问流水线的情况下,某些实施例可以被实现为仅仅该流水线的执行群集具有存储器访问单元464)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以为乱序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元464的集合可以耦合到存储器单元470,该存储器单元可以包括耦合到数据高速缓存单元474的数据TLB单元472,其中数据高速缓存单元耦合到第2级(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可包括加载单元、存储地址单元和存储数据单元,其中的每一个均可以耦合至存储器单元470中的数据TLB单元472。L2高速缓存单元476可以耦合至一个或多个其他等级的高速缓存,并最终耦合至主存储器。
作为示例,示例性寄存器重命名的、乱序发布/执行核架构可以如下实现流水线400:1)指令取出438可以执行取出和长度解码级402和404;2)解码单元440可以执行解码级406;3)重命名/分配器单元452可以执行分配级408和重命名级410;4)调度器单元456可以执行调度级412;5)物理寄存器堆单元458和存储器单元470可以执行寄存器读取/存储器读取级414;执行群集460可以执行执行级416;6)存储器单元470和物理寄存器堆单元458可以执行写回/存储器写入级418;7)各单元可牵涉到异常处理级422的性能;以及8)引退单元454和物理寄存器堆单元458可以执行提交级424。
核490可支持一个或多个指令集(诸如,x86指令集(具有增加有更新版本的一些扩展)、加利福尼亚州桑尼威尔的MIPS技术公司的MIPS指令集、加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集(具有可选附加扩展,诸如NEON))。
应当理解,核可以按各种方式来支持多线程操作(执行两个或更多个并行的操作或线程的集合)。可以由例如包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合来执行多线程操作支持。此类组合可以包括,例如,时分取出和解码以及此后诸如利用
Figure GDA0003993455370000261
超线程技术的同步多线程操作。
尽管可以在乱序执行的上下文中描述寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。虽然处理器的所示出的实施例也可以包括单独的指令和数据高速缓存单元434/474以及共享的L2高速缓存单元476,但其他实施例可具有用于指令和数据两者的单个的内部高速缓存,诸如例如,第1级(L1)内部高速缓存或多个层级的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及可以在核和/或处理器外部的外部高速缓存的组合。在其他实施例中,全部高速缓存都可以在核和/或处理器的外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可以包括多核处理器。处理器500可以包括通信地耦合至一个或多个核502的系统代理510。此外,核502和系统代理510可以通信地耦合至一个或多个高速缓存506。核502、系统代理510和高速缓存506可以经由一个或多个存储器控制单元552通信地耦合。此外,核502、系统代理510和高速缓存506可以经由存储器控制单元552通信地耦合至图形模块560。
处理器500可以包括用于将核502、系统代理510、以及高速缓存506、以及图形模块560互连的任何合适的机制。在一个实施例中,处理器500可以包括基于环的互连单元508以用于将核502、系统代理510、以及高速缓存506、以及图形模块560互连。在其他实施例中,处理器500可以包括任何数量的公知技术来将这些单元互连。基于环的互连单元508可以利用存储器控制单元552来促进互连。
处理器500可以包括存储器层级结构,该存储器层级结构包括核内的一个或多个层级的高速缓存、一个或多个共享高速缓存单元(例如高速缓存506)、或耦合到集成存储器控制器单元552的集合的外部存储器(未示出)。高速缓存506可以包括任何合适的高速缓存。在一个实施例中,高速缓存506可以包括一个或多个中级高速缓存,诸如,第2级(L2)、第3级(L3)、第4级(L4),或其他层级的高速缓存,末级高速缓存(LLC),和/或上述各项的组合。
在各实施例中,核502中的一个或多个可以执行多线程操作。系统代理510可以包括用于协调和操作核502的组件。系统代理单元510可以包括例如功率控制单元(PCU)。PCU可以是或可以包括用于调节核502的功率状态所需的逻辑和组件。系统代理510可以包括显示引擎512,用于驱动一个或多个外部连接的显示器或图形模块560。系统代理510可以包括用于通信总线的接口1214以用于图形。在一个实施例中,接口1214可以由PCI快速(PCIe)实现。在进一步的实施例中,接口1214可以由PCI快速图形(PEG)实现。系统代理510可以包括直接媒体接口(DMI)516。DMI 516可以提供母板上的或计算机系统的其他部分上的不同桥之间的链路。系统代理510可以包括PCIe桥1218以用于将PCIe链路提供到计算系统的其他元件。可以使用存储器控制器1220和一致性逻辑1222来实现PCIe桥1218。
核502可以以任何合适的方式来实现。核502可以是在架构和/或指令集上同构的或异构的。在一个实施例中,核502中的一些可以是有序的,而另一些可以是乱序的。在另一实施例中,核502中的两个或更多可以执行相同的指令集,而其他核仅可执行该指令集的子集或不同的指令集。
处理器500可以包括通用处理器,诸如酷睿(CoreTM)i3、i5、i7、2Duo和Quad、至强(XeonTM)、安腾(ItaniumTM)、XScaleTM或StrongARMTM处理器,这些均可以从加利福尼亚圣克拉拉市的英特尔公司获得。处理器500可以提供自另一个公司,诸如,来自ARM控股公司、MIPS等。处理器500可以是专用处理器,诸如,例如,网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器、等等。处理器500可以被实现在一个或多个芯片上。处理器500可以是一个或多个衬底的一部分,和/或可以使用多种处理技术中的任何一种(诸如,例如,BiCMOS、CMOS或NMOS)实现在一个或多个衬底上。
在一个实施例中,高速缓存506中的给定的一个可以被核502中的多个核共享。在另一实施例中,高速缓存506中的给定的一个可以专用于核502中的一个核。将高速缓存506分配到核502可以由高速缓存控制器或其他合适的机制处置。高速缓存506中的给定的一个可以通过实现给定高速缓存506的时分而被两个或更多核502共享。
图形模块560可以实现集成图形处理子系统。在一个实施例中,图形模块560可以包括图形处理器。此外,图形模块560可以包括媒体引擎565。媒体引擎565可以提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例实现的框图。核502可以包括通信地耦合至乱序引擎580的前端570。核502可以通过高速缓存层级结构503通信地耦合至处理器500的其他部分。
前端570可以以任何合适的方式实现,例如全部或部分地由如上所述的前端201。在一个实施例中,前端570可以通过高速缓存层级结构503与处理器500的其他部分通信。在进一步的实施例中,前端570可以从处理器500的部分取出指令并将这些指令准备好以供稍后当这些指令被传递到乱序执行引擎580时在处理器流水线中使用。
乱序执行引擎580可以以任何合适的方式实现,例如全部或部分地由如上所述的乱序执行引擎203。乱序执行引擎580可以将接收自前端570的指令准备好以供执行。乱序执行引擎580可以包括分配模块582。在一个实施例中,分配模块582可以分配处理器500的资源或其他资源(诸如寄存器或缓冲器)以执行给定的指令。分配模块582可以在调度器(诸如存储器调度器、快速调度器或浮点调度器)中进行分配。此类调度器在图5B中可以由资源调度器584表示。分配模块582可以全部或部分地由结合图2所描述的分配逻辑实现。资源调度器584可以基于给定资源的源的准备就绪以及执行指令所需的执行资源的可用性来确定指令何时准备好用于执行。资源调度器584可以由例如上文所讨论的调度器202、204和206实现。资源调度器584可以将指令的执行调度到一个或多个资源上。在一个实施例中,此类资源可以在核502的内部,并且可以示出为例如资源586。在另一实施例中,此类资源可以在核502的外部,并且可由例如高速缓存层级结构503访问。资源可以包括,例如,存储器、高速缓存、寄存器堆或寄存器。核502内部的资源可以表示为图5B中的资源586。如果需要,被写入资源586或从资源586读出的值可以通过例如高速缓存层级结构503与处理器500的其他部分协调。当指令被分配有资源时,它们可以被放置在重排序缓冲器588中。当指令被执行时,重排序缓冲器588可以跟踪指令,并且可以选择性地基于处理器500的任何合适的标准将指令的执行重排序。在一个实施例中,重排序缓冲器588可以标识可以被独立地执行的指令或一系列指令。可以与其他此类指令并行地执行此类指令或一系列指令。核502中的并行执行可以由任何合适数量的单独的执行块或虚拟处理器执行。在一个实施例中,共享资源(诸如存储器、寄存器和高速缓存)可以被给定核502内的多个虚拟处理器访问。在其他实施例中,共享资源可以被处理器500内的多个处理实体访问。
高速缓存层级结构503可以以任何合适的方式来实现。例如,高速缓存层级结构503可以包括一个或多个较低级或中级高速缓存,诸如高速缓存572和574。在一个实施例中,高速缓存层级结构503可以包括通信地耦合至高速缓存572和574的LLC 595。在另一实施例中,LLC 595可以实现在可被处理器500的所有处理实体访问的模块590中。在进一步的实施例中,模块590可以实现在来自英特尔公司的处理器的非核模块中。模块590可以包括对于核502的执行有必要的处理器500的部分或子系统中,但是可能不实现在核502内。除了LLC 595之外,模块590可以包括,例如,硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。可以通过模块590并且更具体地LLC 595使处理器500可访问RAM599。此外,核502的其他实例可以类似地访问模块590。可以通过模块590部分地促进核502的实例的协调。
图6-8可以示出适于包括处理器500的示例性系统,而图9可以示出可包括核502中的一个或多个的示例性芯片上系统(SoC)。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和实现也可以是合适的。一般地,包含本文中所公开的处理器和/或其它执行逻辑的多个系统或电子设备一般可以是合适的。
图6示出了根据本公开的实施例的系统600的框图。系统600可以包括可以耦合至图形存储器控制器中枢(GMCH)620的一个或多个处理器610、615。附加的处理器615的可选性质在图6中通过虚线来表示。
每个处理器610、615可以是处理器500的某个版本。然而,应当注意,集成图形逻辑和集成存储器控制单元可能不会出现在处理器610和615中。图6示出了GMCH 620可以耦合至存储器640,该存储器640可以是例如动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片组或芯片组的部分。GMCH 620可以与处理器610、615进行通信,并控制处理器610、615与存储器640之间的交互。GMCH 620还可充当处理器610、615和系统600的其他元件之间的加速总线接口。在一个实施例中,GMCH 620经由诸如前端总线(FSB)695之类的多点总线与处理器610、615进行通信。
此外,GMCH 620可以耦合至显示器645(诸如平板显示器)。在一个实施例中,GMCH620可以包括集成图形加速器。GMCH 620可以进一步耦合至输入/输出(I/O)控制器中枢(ICH)650,该输入/输出(I/O)控制器中枢(ICH)650可用于将各种外围设备耦合至系统600。外部图形设备660可以包括与另一外围设备670一起耦合至ICH 650的分立图形设备。
在其他实施例中,附加的或不同的处理器也可存在于系统600中。例如,附加的处理器610、615可以包括可以与处理器610相同的附加的处理器、可以与处理器610异构的或不对称的附加的处理器、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器。在物理资源610和615之间可以存在包括架构、微架构、热和功耗特征等的一系列品质度量方面的各种差异。这些差异可以有效显示为处理器610和615之间的不对称性和异构性。对于至少一个实施例,各种处理器610和615可驻留在同一管芯封装中。
图7示出了根据本公开的实施例的第二系统700的框图。如图7所示,多处理器系统700可以包括点对点互连系统,并且可以包括经由点对点互连750而被耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某个版本(如处理器610、615中的一个或多个)。
虽然图7可以示出两个处理器770、780,但是应当理解本公开的范围不限于此。在其他实施例中,在给定处理器中可存在一个或多个附加处理器。
处理器770和780被示为分别包括集成存储器控制器单元772和782。处理器770还可以包括点对点(P-P)接口776和778作为其总线控制器单元的部分;类似地,第二处理器780可以包括P-P接口786和788。处理器770、780可以经由使用点对点(P-P)接口电路778、788的P-P接口750来交换信息。如图7所示,IMC 772和782可以将处理器耦合至相应的存储器,即,存储器732和存储器734,它们在一个实施例中可以是本地连接到相应的处理器的主存储器的部分。
处理器770、780可各自经由使用点对点接口电路776、794、786、798的各个P-P接口752、754与芯片组790交换信息。在一个实施例中,芯片组790还可以经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器的外部但经由P-P互连与这些处理器连接,从而如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。
芯片组790可以经由接口796耦合至第一总线716。在一个实施例中,第一总线716可以是外围组件互连(PCI)总线或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是本公开的范围不限于此。
如图7所示,各种I/O设备714可连同总线桥718一起耦合到第一总线716,总线桥718将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合至第二总线720,包括例如,键盘和/或鼠标722、通信设备727以及可包括指令/代码和数据730的存储单元728(诸如,盘驱动器或其他大容量存储设备)。此外,音频I/O 724可以被耦合到第二总线720。注意,其他架构是可能的。例如,代替图7的点对点架构,系统可以实现多分支总线或其他此类架构。
图8示出了根据本公开的实施例的第三系统700的框图。图7和8中的类似元件使用类似附图标记,且在图8中省略了图7的某些方面以避免使图8的其他方面模糊。
图8示出处理器770、780可分别包括集成存储器和I/O控制逻辑(“CL”)772和782。对于至少一个实施例,CL 772和782可包括诸如以上结合图5和7所描述的集成存储器控制器单元。此外,CL 772、782还可包括I/O控制逻辑。图8示出了不仅存储器732、734可以被耦合到CL 872、882,而且I/O设备814也可以被耦合到控制逻辑772、782。传统I/O设备815可以被耦合至芯片组790。
图9示出了根据本公开的实施例的SoC 900的框图。在图5中,相似的部件具有同样的附图标记。另外,虚线框可以表示更先进的SoC的可选特征。互连单元902可耦合至:应用处理器910,其可包括一个或多个核的集合502A-N和共享高速缓存单元506;系统代理单元912;总线控制器单元916;集成存储器控制器单元914;一个或多个媒体处理器的集合920,其可包括集成图形逻辑908、用于提供静止和/或视频相机功能的图像处理器924、用于提供硬件音频加速的音频处理器926、以及用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及显示单元940,其用于耦合至一个或多个外部显示器。
图10示出了根据本公开的实施例的处理器,包括中央处理单元(CPU)和图形处理单元(GPU),该处理器可执行至少一条指令。在一个实施例中,执行根据至少一个实施例的操作的指令可由CPU来执行。在另一实施例中,指令可以由GPU来执行。在又一实施例中,指令可以由GPU和CPU所执行的操作的组合来执行。例如,在一个实施例中,根据一个实施例的指令可被接收,并被解码,以便在GPU上执行。然而,经解码的指令中的一个或多个操作可由CPU来执行,并且结果被返回到GPU,以便进行指令的最终引退。相反,在一些实施例中,CPU可作为主处理器,而GPU作为协处理器。
在一些实施例中,受益于高度并行化的吞吐量处理器的指令可由GPU来执行,而受益于处理器(这些处理器受益于深度流水线架构)性能的指令可由CPU来执行。例如,图形、科学应用、金融应用以及其他并行工作负荷可受益于GPU的性能并相应地被执行,而更多的序列化应用(例如,操作系统内核或应用代码)可更适于CPU。
在图10中,处理器1000包括,CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示设备1040、存储器接口控制器1045、MIPI控制器1050、闪存控制器1055、双数据率(DDR)控制器1060、安全引擎1065、I2S/I2C控制器1070。其他逻辑和电路(包括更多的CPU或GPU以及其他外围设备接口控制器)可被包括在图10的处理器中。
至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的表示性数据来实现,当机器读取该表示性数据时,该表示性数据使得该机器用于制造执行本文所述的技术的逻辑。可将此类表示(称为“IP核”)存储在有形的机器可读介质(“磁带”)上,并将其提供给各种顾客或生产设施,以便加载到实际制作该逻辑或处理器的制造机器中。例如,IP核(诸如由ARM控股公司所开发的CortexTM处理器族以及由中国科学院计算机技术研究所(ICT)所开发的龙芯IP核)可被授权或销售给各种客户或受许可方,诸如德州仪器、高通、苹果、或三星,并被实现在由这些客户或受许可方生产的处理器中。
图11示出根据本公开的实施例的示出IP核开发的框图。存储设备1130可以包括仿真软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160而被提供给存储设备1130。由仿真工具和模型所生成的IP核信息可随后被发送到生产设施,可由第三方在该生产设施中制造该IP核以执行根据至少一个实施例的至少一条指令。
在一些实施例中,一条或多条指令可以对应于第一类型或架构(例如,x86),并且可在不同类型或架构(例如,ARM)的处理器上被转换或仿真。根据一个实施例,因此可在任何处理器或处理器类型(包括ARM、x86、MIPS、GPU或其他处理器类型或架构)上执行指令。
图12示出了根据本公开的实施例的不同类型的处理器可以如何仿真第一类型的指令。在图12中,程序1205包含可执行与根据一个实施例的指令相同或基本相同的功能的一些指令。然而,程序1205的指令可以是与处理器1215不同或不兼容的类型和/或格式,这意味着不能够由处理器1215原生地执行程序1205中的类型的指令。然而,借助于仿真逻辑1210,可以将程序1205的指令转换成可以由处理器1215原生执行的指令。在一个实施例中,仿真逻辑可以被具体化在硬件中。在另一实施例中,可以将仿真逻辑具体化在有形的机器可读介质中,该机器可读介质包含用于将程序1205中的该类指令转换为可由处理器1215原生地执行的类型的软件。在其他实施例中,仿真逻辑可以是固定功能或可编程硬件和存储在有形的机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其他实施例中,仿真逻辑在处理器之外,并且可以由第三方提供。在一个实施例中,通过执行被包括在处理器中或者与该处理器相关联的微代码或固件,处理器可以加载被具体化在包含软件的有形的机器可读介质中的仿真逻辑。
图13是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图13示出可使用x86编译器1304来编译利用高级语言1302的程序,以生成可由具有至少一个x86指令集核的处理器1316原生执行的x86二进制代码1306。具有至少一个x86指令集核的处理器1316表示任何处理器,这些处理器能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其他程序的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1304表示用于生成x86二进制代码1306(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器1316上执行。类似地,图13示出可以使用替代的指令集编译器1308来编译利用高级语言1302的程序,以生成可以由不具有至少一个x86指令集核的处理器1314(例如具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代指令集二进制代码1310。
指令转换器1312被用来将x86二进制代码1306转换成可以由不具有x86指令集核的处理器1314原生执行的替代性指令集二进制代码1311。该转换后的代码可能与源自替代性指令集编译器1308的替代性指令集二进制代码1310相同或不相同;然而,转换后的代码将完成相同的一般操作并由来自替代指令集的指令构成。因此,指令转换器1312通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1306的软件、固件、硬件或其组合。
图14是根据本公开的实施例的处理器的指令集架构1400的框图。指令集架构1400可以包括任何合适数量或种类的组件。
例如,指令集架构1400可以包括处理实体,诸如一个或多个核1406、1407以及图形处理单元1415。核1406、1407可以通过任何合适的机制(诸如通过总线或高速缓存)通信地耦合至指令集架构1400的剩余部分。在一个实施例中,核1406、1407可以通过L2高速缓存控制1408通信地耦合,L2高速缓存控制1408可以包括总线接口单元1409和L2高速缓存1410。核1406、1407和图形处理单元1415可以通过互连1410彼此通信地耦合并且耦合至指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可以使用视频编解码器1420,视频编解码器定义其中特定视频信号将被编码和解码以作为输出的方式。
指令集架构1400还可以包括任何数量或种类的接口、控制器或用于与电子设备或系统的其他部分相接或通信的其他机制。此类机制可以促进与例如外围设备、通信设备、其他处理器或存储器的交互。在图14的示例中,指令集架构1400可以包括液晶显示器(LCD)视频接口1425、用户接口模块(SIM)接口1430、引导ROM接口1435、同步动态随机存取存储器(SDRAM)控制器1440、闪存控制器1445、以及串行外围接口(SPI)主单元1450。LCD视频接口1425可以提供将视频信号从例如GPU 1415并且通过例如移动产业处理器接口(MIPI)1490或高清晰度多媒体接口(HDMI)1495输出到显示器。此类显示器可以包括例如LCD。SIM接口1430可以提供到SIM卡或设备的访问或来自SIM卡或设备的访问。SDRAM控制器1440可以提供到存储器的访问或来自存储器的访问,存储器诸如SDRAM芯片或模块。闪存控制器1445可以提供到存储器的访问或来自存储器的访问,存储器诸如闪存或RAM的其他实例。SPI主单元1450可以提供到通信模块的访问或来自通信模块的访问,通信模块诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实现诸如802.11的通信标准的无线模块1485。
图15是根据本公开的实施例的处理器的指令集架构1500的更具体的框图。指令架构1500可以实现指令集架构1400的一个或多个方面。此外,指令集架构1500可以示出用于在处理器内的指令的执行的模块和机制。
指令架构1500可以包括通信地耦合至一个或多个执行实体1565的存储器系统1540。此外,指令架构1500可以包括高速缓存和总线接口单元,诸如通信地耦合至执行实体1565和存储器系统1540的单元1510。在一个实施例中,可以由一级或多级执行来执行将指令加载到执行实体1564中。此类级可以包括,例如,指令预取级1530、双指令解码级1550、寄存器重命名级155、发布级1560、以及写回级1570。
在另一实施例中,存储器系统1540可以包括引退指针1582。引退指针1582可以存储标识上一引退的指令的程序顺序(PO)的值。引退指针1582可以由例如引退单元454设置。如果还未引退指令,则引退指针1582可以包括空值。
执行实体1565可以包括任何合适数量和种类的机制,处理器可以通过该机制执行指令。在图15的示例中,执行实体1565可以包括ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,此类实体可以利用包含在给定地址1569内的信息。执行实体1565与级1530、1550、1555、1560和1570相结合可以共同地形成执行单元。
单元1510可以以任何合适的方式来实现。在一个实施例中,单元1510可以执行高速缓存控制。在此类实施例中,单元1510可以因此包括高速缓存1525。在进一步的实施例中,高速缓存1525可以实现为具有任何合适尺寸的L2统一高速缓存,诸如存储器的零、128k、256k、512k、1M或2M字节。在另一进一步的实施例中,高速缓存1525可以实现在纠错码存储器中。在另一实施例中,单元1510可以执行总线与处理器或电子设备的其他部分相接。在此类实施例中,单元1510可以因此包括总线接口单元1520以用于通过互连、处理器内总线、处理器间总线或其他通信总线、端口或线通信。总线接口单元1520可以提供相接以执行例如生成存储器和输入/输出地址以用于在执行实体1565与在指令架构1500外部的系统的部分之间的数据传输。
为了进一步促进其功能,总线接口单元1520可以包括中断控制和分配单元1511以用于生成中断和其他通信到处理器或电子设备的其他部分。在一个实施例中,总线接口单元1520可以包括监听控制单元1512,其为多个处理核处置高速缓存访问和一致性。在进一步的实施例中,为了提供此类功能,监听控制单元1512可以包括高速缓存到高速缓存传输单元,其处置不同高速缓存之间的信息交换。在另一进一步的实施例中,监听控制单元1512可以包括一个或多个监听过滤器1514,其监视其他高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不必直接执行此类监视。单元1510可以包括任何合适数量的计时器1515以用于使指令架构1500的动作同步。此外,单元1510可以包括AC端口1516。
存储器系统1540可以包括任何合适数量和种类的机制以用于为指令架构1500的处理需要存储信息。在一个实施例中,存储器系统1504可以包括加载存储单元1530以用于存储信息,诸如写入存储器或寄存器或从存储器或寄存器读回的缓冲器。在另一实施例中,存储器系统1504可以包括转换后备缓冲器(TLB)1545,其提供在物理地址与虚拟地址之间查找地址值。在又一实施例中,总线接口单元1520可以包括存储器管理单元(MMU)1544以用于促进对虚拟存储器的访问。在再一实施例中,存储器系统1504可以包括预取器1543以用于在实际需要执行指令之前从存储器请求这些指令以减少等待时间。
指令架构1500执行指令的操作可以通过不同级来实现。例如,通过使用单元1510,指令预取级1530可以通过预取器1543访问指令。可以将被检索的指令存储在指令高速缓存1532中。预取级1530可以为快速循环模式实现选项1531,其中执行形成足够小以装入给定高速缓存的循环的一系列指令。在一个实施例中,可以实现此类执行而无需访问来自例如指令高速缓存1532的附加指令。对预取哪些指令的确定可以由例如分支预测单元1535作出,其可以访问全局历史1536中对执行的指示、对目标地址1537的指示、或返回栈1538的内容以确定接下来将执行代码的分支1557中的哪些指令。可能预取此类分支作为结果。分支1557可以通过如下所述的其他级的操作而产生。指令预取级1530可以将指令以及关于未来指令的任何预测提供到双指令解码级。
双指令解码级1550可以将所接收的指令转换成可以被执行的基于微代码的指令。双指令解码级1550可以在每个时钟周期同时解码两个指令。此外,双指令解码级1550可以将其结果传递到寄存器重命名级1555。此外,双指令解码级1550可以从其对微代码的解码和最终执行确定任何所得的分支。可以将此类结果输入到分支1557中。
寄存器重命名级1555可以将对虚拟寄存器或其他资源的引用转换成对物理寄存器或资源的引用。寄存器重命名级1555可以包括对寄存器池1556中的此类映射的指示。寄存器重命名级1555可以改变所接收的指令并且将结果发送到发布级1560。
发布级1560可以将命令发布或分派到执行实体1565。可以以乱序方式执行此类发布。在一个实施例中,可以在多个指令被执行之前在发布级1560处保存该多个指令。发布级1560可以包括指令队列1561以用于保存此类多个命令。可以由发布级1560基于任何可接受的标准(诸如资源对于给定指令的执行的可用性或合适性)将指令发布到特定处理实体1565。在一个实施例中,发布级1560可以将指令队列1561内的指令重排序,从而第一接收的指令可能不是第一执行的指令。基于指令队列1561的排序,可以将附加分支信息提供到分支1557。发布级1560可以将指令传递到执行实体1565以供执行。
一旦执行,写回级1570可以将数据写入寄存器、队列、或指令集架构1500的其他结构以传递给定命令的完成。取决于布置在发布级1560中的指令的顺序,写回级1570的操作可以使得附加指令能被执行。可以由跟踪单元1575监视或调试指令集架构1500的性能。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600可以示出例如图15的指令架构1500的操作。
执行流水线1600可以包括步骤或操作的任何合适组合。在1605中,可以作出对接下来会执行的分支的预测。在一个实施例中,此类预测可以基于指令的先前执行及其结果。在1610中,可以将对应于执行所预测的分支的指令加载到指令高速缓存中。在1615中,可以取出指令高速缓存中的一个或多个此类指令以供执行。在1620中,可以将已经被取出的指令解码为微代码或更具体的机器语言。在一个实施例中,可以同时解码多个指令。在1625中,可以重新分配对经解码的指令内的寄存器或其他资源的引用。例如,可以将对虚拟寄存器的引用替换为对相应的物理寄存器的引用。在1630中,可以将指令分派到队列以供执行。在1640中,可以执行指令。此类执行可以以任何合适的方式来实现。在1650中,可以将指令发布到合适的执行实体。执行指令的方式可以取决于执行指令的特定实体。例如,在1655处,ALU可以执行算术功能。ALU可以利用单个时钟周期以及两个移位器以用于其操作。在一个实施例中,可以采用两个ALU,并且因此在1655处可以执行两个指令。在1660处,可以作出对所得分支的确定。程序计数器可以用于指示将作出分支的目的地。可以在单个时钟周期内执行1660。在1665处,可以由一个或多个FPU执行浮点算术。浮点操作可以要求多个时钟周期(诸如两个到十个周期)来执行。在1670处,可以执行乘法和除法操作。可以在四个时钟周期中执行此类操作。在1675处,可以执行将操作加载和存储到寄存器或流水线1600的其他部分。操作可以包括加载和存储地址。可以在四个时钟周期中执行此类操作。在1680处,可以根据1655-1675的所得操作的需要执行写回操作。
图17是根据本公开的实施例的用于利用处理器1710的电子设备1700的框图。电子设备1700可以包括例如笔记本、超级本、计算机、塔服务器、机架服务器、刀片服务器、膝上型计算机、台式机、平板、移动设备、电话、嵌入式计算机、或任何其他合适的电子设备。
电子设备1700可以包括通信地耦合至任何合适数量或种类的组件、外围设备、模块或设备的处理器1710。此类耦合可以通过任何合适种类的总线或接口完成,例如I2C总线、系统管理总线(SMBus)、低引脚数(LPC)总线、SPI、高清晰度音频(HDA)总线、串行先进技术附接(SATA)总线、USB总线(版本1、2、3)或通用异步接收机/发射机(UART)总线。
此类组件可以包括,例如,显示器1724、触摸屏1725、触板1730、近场通信(NFC)单元1745、传感器中枢1740、热传感器1746、快速芯片组(EC)1735、受信任平台模块(TPM)1738、BIOS/固件/闪存1722、数字信号处理器1760、诸如固态硬盘(SSD)或硬盘驱动器(HDD)的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)、诸如USB 3.0相机的相机1754、或以例如LPDDR3标准实现的低功率双数据率(LPDDR)存储器单元1715。这些组件可以各自以任何合适的方式来实现。
此外,在各实施例中,其他组件可以通过上文讨论的组件通信地耦合至处理器1710。例如,加速度计1741、环境光传感器(ALS)1742、罗盘1743以及陀螺仪1744可以通信地耦合至传感器中枢1740。热传感器1739、风扇1737、键盘1746以及触板1730可以通信地耦合至EC 1735。扬声器1763、头戴式耳机1764以及话筒1765可以通信地耦合至音频单元1764,音频单元可以进而通信地耦合至DSP 1760。音频单元1764可以包括,例如,音频编解码器和D类放大器。SIM卡1757可以通信地耦合至WWAN单元1756。诸如WLAN单元1750、蓝牙单元1752以及WWAN单元1756的组件可以以下一代形状因数(NGFF)实现。
现在参考图18,所示是根据本发明的实施例的方法的流程图。更具体地,图18中所示出的方法1800可以由编译器逻辑所进行以便在处理器上执行,诸如根据传入源代码生成机器代码的静态编译器或动态编译器。如所展示,方法1800通过识别具有用于有序处理的编译器指示的至少一个变量来开始(框1810)。如本文所描述的,代码内的一个或多个变量可以被识别为要按顺序处理的特定数据类型。这样,此标识可以基于例如变量的定义语句的前导码,所述变量向编译器识别所述变量将以有序的方式被处理。
接下来,控制转到框1820,在所述框中,源代码中的一个或多个加载/存储指令可以被识别为与这些有序变量(如果有的话)中的一个或多个相关联。例如,可以识别源代码内的各种加载/存储指令。根据这些所识别的指令,编译器可以判定这些指令中的任何一条是否涉及要以有序方式处理的变量。在这种情况下,控制转到框1830,在所述框中,可以利用用于这些所识别指令的有序加载/存储操作来生成机器代码。在本文所描述的实施例中,可以利用对这种有序操作进行编码的特殊操作码类型来实施此机器代码。最后,在框1840处,经编译机器代码可以是从编译器处发射的。在实施例中可以采用底层处理器架构(例如,x86处理器)的汇编语言的这种经编译机器代码可以被存储在给定的存储装置中。例如,这种经编译程序可以存储在数据库中。从那里,可以对数据库进行存取以便获得与程序相对应的代码,所述代码然后可以被提供给远程源,诸如寻求从远程数据库下载给定应用的消费者。当然,在其他情况下,编译器可以在待存储并稍后执行机器代码的系统上本地执行。应理解的是,尽管在图18的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
现在参考图19,示出的是根据本发明的另一个实施例的方法的流程图。在图19的实施例中,方法1900可以通过硬件、软件和/或固件的组合来执行,包括诸如处理器内逻辑之类的硬件电路系统,包括诸如指令解码器、发布逻辑等的前端单元以及诸如处理器内的一个或多个加载/存储执行单元等一个或多个执行单元。如所展示,方法1900通过在解码器中接收和解码有序加载/存储指令来开始(框1910)。此后,将此经解码指令提供给调度器(框1920)。在实施例中,此调度器可以在处理器的前端部分的一个或多个逻辑或单元中实施,诸如调度逻辑、发布逻辑、顺序逻辑等等。
接下来,判定在调度块中是否有之前的有序加载/存储指令(菱形1930)。在实施例中,这样的调度块可以包含在指令调度窗口或块内一起调度的给定数量的指令。如果确定存在一个或多个之前的有序加载/存储指令,则控制转到框1940,在所述框中,所述经解码有序加载/存储指令可以被排序在这样的之前有序加载/存储指令之后。
否则,如果在菱形1930处确定在调度块内不存在这样的之前指令,则控制转到菱形1950以便判定在调度块内是否存在后续的有序加载/存储指令。若是,则控制转到框1960,在所述框中,所述经解码有序加载/存储指令被排序在随后的有序加载/存储指令之前。
仍然参考图19,控制从框1940和1960以及菱形1950两者转到框1970。在块1970处,经解码的有序加载/存储指令可以被存储在具有优先级指示符的就绪队列中。在提供和使用这种优先级指示符的实施例中,指示符可以向调度逻辑指示:有序加载/存储指令将具有优于其他的非有序指令的优先级。
仍然参考图19,接下来在框1980处,可以按顺序调度在调度块内的任何有序加载/存储指令。此外,这些指令(其如以上所讨论的可以具有优先级指示符)可以被优先调度,例如在非有序指令之前。最后,在框1990处,这些指令可以在给定的执行单元(例如,给定的加载/存储单元)内执行,并且引退。应理解的是,尽管在图19的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
如以上所描述的,许多指令生成、识别和执行变体是可能的。现在参考图20,示出的是根据实施例的一种用于编译器执行的方法的流程图。如图20中所展示的,方法2000可以由编译器逻辑进行以便在处理器上执行,诸如给定的静态编译器或运行时编译器。如所看到的,方法2000通过判定在指令流(例如,静态或动态编译的源代码程序)内所接收到的指令是否是加载/存储操作(菱形2010)来开始。若否,则给定的操作可以被转换为机器代码(框2050)。例如,给定的源代码操作可以被转换为可以被实施为一个或多个汇编指令的机器代码。
仍然参考图20,如果相反地在菱形2010处确定所接收到的指令是加载/存储操作,则控制转到菱形2020以便判定是否利用关键字对与加载/存储操作相关联的任何操作数进行了标记。在实施例中,此关键字可以是用于向编译器提供表明这种操作数(或地址范围)将被按顺序处理的指示的前缀代码或符号。如果在所述加载/存储操作内识别出这种操作数/地址范围,则控制转到框2040,在所述框中,可以使用有序加载/存储指令来表示此加载/存储操作。如以上所讨论的,控制接下来转到框2050。否则,控制从菱形2020转到框2030,在所述框中,可以使用标准加载/存储指令来表示所述操作(并且此后控制转到框2050)。尽管在图20的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
现在参考图21,示出的是根据本发明的实施例的用于对指令进行解码的方法的流程图。如在图21中所看到的,方法2100可以至少部分地由诸如处理器的前端单元的解码逻辑之类的硬件电路系统来执行。如所展示,方法2100通过对给定指令进行解码并标记所述指令的属性和依赖性来开始(框2110)。
接下来,判定所述指令是否是有序指令(菱形2120)。若否,则控制转到框2130,在所述框中,此经解码指令可以被添加至处理器数据结构,诸如在耦合于解码逻辑下游的处理器的发布逻辑内的存储装置、或者其他类似数据结构的列表(例如,取决于微架构,重新排序缓冲器)。
注意,如果相反地确定所述经解码指令是有序指令(如在菱形2120处所确定的),则控制转到框2140。在框2140处,可以将所述指令添加至可能是先入先出(FIFO)队列的有序经解码指令队列。存储在此队列中确保了控制指令之间的排序。也就是说,程序顺序中的第一条指令将位于队列的前面,第二条位于第二位,依此类推。如上所述,此队列可以存在于处理器的发布逻辑中。注意,方法2100可以针对传入指令迭代地执行,从而识别并且特别地处理包括无序指令(以及也可能是有序指令)的指令流内的有序指令并且将在乱序处理器中执行。
现在参考图22,所示是根据本发明的实施例的方法的流程图。更具体地,方法2200可以由诸如处理器的发布逻辑之类的硬件电路系统来执行,以便向一个或多个执行单元发布指令。如所看到的,方法2200通过判定是否存在有序的在途中指令(意味着所述指令存在于处理器内,包括回写缓冲器中)(菱形2210)来开始。若是,则控制转到框2250,在所述框中,处理器的发布逻辑可以从标准问题数据结构中可用的标准/乱序指令池处执行指令发布。在标准的指令发布中,除非两条指令共享同一处理器资源,否则给定指令被发布至用于执行的执行逻辑。如果这两个指令的延时不同(例如,指令的寻址模式不同),则这些指令可以乱序执行;或者处理器使用流水线与总线接口单元之间的写缓冲器。
否则,如果没有有序指令在途中,则控制转到菱形2220。在菱形2220处,可以判定在就绪队列内是否有任何可用的有序指令。如以上所讨论的,若否,则控制转到框2250。如果相反地存在可用的有序指令,则控制转到菱形2230,在所述菱形中,可以判定所述指令是否可以被发布。此判定可以基于例如先前的有序指令是否已经被执行。作为示例,假设有序指令所需的操作数之一正在由执行阶段中由前一乱序指令所计算,或者先决条件乱序指令尚未被放置在执行阶段中。一般而言,在菱形2230处,对乱序指令执行检查。如果在菱形2230处确定指令不能被发布,则控制转到以上所讨论的框2250。如果在菱形2230处确定所述指令可以被发布,则控制转到框2240,在所述框中,所述指令被发布至选定执行单元或逻辑。应理解的是,尽管在图22的实施例中以这种较高层次示出,但许多变体和替代方案是可能的。
现在参考图23,示出了根据实施例的处理器的一部分的方框图。在图23的实施例中,示出了作为乱序处理器的处理器2300的流水线的部分。如所展示,解码单元2310被配置成接收传入指令(例如,从取出单元处所接收的宏指令)并且在微编码情况下将这些指令解码成一个或多个微操作(μops)。对于硬件解码的情况,这个阶段的输出是控制信号序列。取决于指令类型,解码单元2310将经解码指令提供给发布单元2320内的多个位置中的一个。
更具体地,如图23中所看到的,发布单元2320包括用于存储有序指令的第一队列2322和用于存储其他指令的第二存储装置2324。一般而言,这些存储装置用于存储经解码指令和关于操作数位置的操作数/信息。第一队列2322用于存储经解码的有序指令,并且可以实施为FIFO队列。第二存储装置2324用于存储其他经解码指令。这样,有序指令严格地按解码顺序进行发布。在另一实施例中,可以通过以下方式将队列2322作为处理器数据结构2324(其可以是某些x86架构中的重新排序缓冲器(ROB))的一部分来实施:添加用于指示所述队列是(或不是)有序指令的指示符以及表示来自解码单元2310的到达顺序的另一个例如3-4位令牌号。
当给定指令被选择用于执行时,从存储装置2322和2324中的一个将所述给定指令提供至给定的多个执行单元2330中的一个。取决于指令的类型,可以将所述操作提供给特定的执行单元。尽管本发明的范围在这方面不受限制,但是执行单元2330可以包括整数执行单元、浮点数执行单元、向量执行单元、加载/存储执行单元以及潜在的其他这种执行单元。虽然为了便于说明而用这些有限的流水线部分示出,但应理解的是,处理器的完整流水线可以包括额外的流水线单元和其他逻辑。
下面的示例涉及进一步的实施例。
在一个示例中,一种处理器包括:包括乱序流水线的核,所述乱序流水线包括解码逻辑、用于发布经解码指令的发布逻辑、以及用于执行程序的所发布指令的至少一个执行逻辑,其中,所述至少一个执行逻辑用于乱序执行所述程序的至少一些指令;所述解码逻辑用于对所述程序的第一有序存储器指令进行解码并且将经解码的第一有序存储器指令提供给所述发布逻辑;所述发布逻辑用于将所述第一有序存储器指令排序在所述程序的第二有序存储器指令之前;所述第一有序存储器指令是所述程序的源版本中的无序指令。
在示例中,所述第一有序存储器指令用于启用针对所述程序的存储器映射输入/输出存取,其中,所述程序包括嵌入式控制应用。
在示例中,所述第一有序存储器指令和所述第二有序存储器指令包括存储器映射输入/输出操作。
在示例中,所述发布逻辑用于以比所述第二有序存储器指令更高的优先级来向所述执行逻辑发布所述第一有序存储器指令。
在示例中,编译器逻辑用于至少部分地基于与所述无序存储器指令的至少一个操作数相关联的标识符来根据所述程序的所述无序存储器指令处生成所述第一有序存储器指令。
在示例中,所述编译器逻辑用于生成具有与所述无序存储器指令的机器代码不同的机器代码的所述第一有序存储器指令。
在示例中,所述编译器逻辑用于响应于变量声明的指示指示符(directiveindicator)而生成所述第一有序存储器指令,其中,所述无序存储器指令的操作数对应于所述变量声明的变量。
在示例中,所述发布逻辑包括:第一存储装置,用于存储待处理的有序存储器指令;以及第二存储装置,用于存储待处理的无序指令。
在示例中,所述解码逻辑用于将所述第一有序存储器指令提供给所述发布逻辑的所述第一存储装置,所述第一存储装置包括先入先出队列。
在示例中,所述执行逻辑包括用于执行所述第一有序存储器指令的至少一个加载/存储执行单元。
注意,可以使用各种手段来实施以上处理器。
在示例中,所述处理器包括结合在用户装置触摸使能装置中的SoC。
在另一示例中,一种系统包括显示器和存储器,并且包括以上示例的一个或多个中的所述处理器。
在另一示例中,一种方法包括:识别具有用于指示有序处理的指示指示符的第一变量;识别与所述第一变量相关联的代码块的加载/存储指令的操作数;将所述加载/存储指令转换为由第一机器代码所编码的有序加载/存储指令,以便使得能够通过处理器的执行逻辑来执行所述第一机器代码;以及将所述第一机器代码存储在目的地存储装置中。
在示例中,所述方法进一步包括:将第二加载/存储指令转换为由第二机器代码所编码的无序加载/存储指令,所述第二加载/存储指令不具有与利用指示指示符所标记的变量相关联的操作数。
在示例中,所述指示指示符包括用于所述操作数的变量声明中的变量指示。
在示例中,所述指示指示符包括所述变量声明的前缀。
在示例中,所述方法进一步包括:将所述有序加载/存储指令排序在与所述操作数相关联的第二有序加载/存储指令之前,所述第二有序加载/存储指令在程序顺序上在所述加载/存储指令之后。
在示例中,所述有序加载/存储指令包括对装置触发寄存器的写,并且所述第二有序加载/存储指令包括针对装置状态寄存器的读或写。
在示例中,所述方法进一步包括:将一个或多个无序加载/存储指令排序在所述有序加载/存储指令之前。
在示例中,所述操作数包括存储器映射输入/输出位置。
在示例中,所述方法进一步包括:将所述代码块的第三有序加载/存储指令排序在所述有序加载/存储指令之前,所述第三有序加载/存储指令在程序顺序上在所述有序加载/存储指令之后并且与同所述有序加载/存储指令的所述操作数不同的操作数相关联。
在另一示例中,一种包括指令的计算机可读介质用于执行以上示例中任一项所述的方法。
在另一个示例中,一种包括数据的计算机可读介质用于由至少一台机器用来制造用于执行以上示例中任一项所述的方法的至少一个集成电路。
在另一示例中,一种设备,包括用于执行以上示例中任一项所述的方法的装置。
在另一示例中,一种系统包括:处理器,所述处理器包括第一核,所述第一核具有:用于对指令进行解码的解码逻辑;用于发布经解码指令的发布逻辑,所述发布逻辑包括用于存储有序存储器存取指令的第一队列和用于存储无序指令的第二存储装置;以及用于执行程序的所发布指令的至少一个执行逻辑,其中,所述发布逻辑用于将所述程序的经解码的第一有序存储器存取指令和所述程序的经解码的第二有序存储器存取指令存储在所述第一队列中并且将所述程序的一个或多个无序指令存储在所述第二存储装置中,并且在所述程序的所述经解码的第二有序存储器存取指令之前、并且相对于所述一个或多个无序指令中的一个或多个而言无序地将所述经解码的第一有序存储器存取指令提供给所述至少一个执行逻辑。所述系统可以进一步包括:动态随机存取存储器,耦合至所述处理器。
在示例中,编译器逻辑用于至少部分地基于与无序存储器存取指令的至少一个操作数相关联的标识符来根据所述无序存储器存取指令生成所述第一有序存储器存取指令,所述第一有序存储器存取指令具有与用于所述无序存储器存取指令的机器代码不同的机器代码。
在示例中,所述至少一个操作数包括有待在所述程序期间存取的存储器映射输入/输出位置,所述程序包括用于嵌入式控制器的装置驱动程序,其中,所述第一核包括乱序流水线。
在另一示例中,一种设备包括:用于识别具有用于指示有序处理的指示指示符的第一变量的装置;用于识别与所述第一变量相关联的代码块的加载/存储指令的操作数的装置;用于将所述加载/存储指令转换为由第一机器代码所编码的有序加载/存储指令以便使得能够通过所述设备的执行装置来执行所述第一机器代码的装置;以及用于将所述第一机器代码存储在目的地存储装置中的装置。
在示例中,所述设备进一步包括:用于将第二加载/存储指令转换为由第二机器代码所编码的无序加载/存储指令的装置,所述第二加载/存储指令不具有与利用指示指示符所标记的变量相关联的操作数。
实施例可以被用于许多不同类型的系统中。例如,在一个实施例中,可以将通信设备布置为用于执行本文所述的各种方法与技术。当然,本发明的范围不限于通信设备,相反,其他实施例可以涉及用于处理指令的其他类型的装置,或一个或多个机器可读介质,该机器可读介质包括指令,响应于在计算设备上执行这些指令,这些指令使该设备执行本文所述的方法与技术中的一个或多个。
实施例可以实现在代码中,并且可以存储在非暂态存储介质上,该非暂态存储介质具有存储于其上的指令,该指令可以被用来对系统编程以执行指令。各实施例还可以在数据中实现,并且可以存储在非暂态存储介质上,该非暂态存储介质如果被至少一个机器使用,使得该至少一个机器制造至少一个集成电路以执行一个或多个操作。更进一步的实施例可实现在计算机可读存储介质中,该计算机可读存储介质包括信息,该信息当被制造到SoC或其他处理器中时,用于配置该SoC或其他处理器以执行一个或多个操作。存储介质可以包括但不限于,任何类型的盘,包括软盘、光盘、固态驱动器(SSD)、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)与静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或适用于存储电子指令的任何其他类型的介质。
虽然已参照有限数量的实施例描述了本发明,但是本领域技术人员将从中领会很多修改和变型。所附权利要求旨在涵盖落入本发明的真实精神与范围的所有此类修改与变型。

Claims (13)

1.一种用于排序指令的处理器,包括:
包括乱序流水线的核,所述乱序流水线包括解码电路、用于发布经解码指令的发布电路、以及用于执行程序的所发布指令的至少一个执行电路,其中,所述至少一个执行电路用于乱序执行所述程序的至少一些指令;所述解码电路用于对所述程序的第一有序存储器指令进行解码并且将经解码的第一有序存储器指令提供给所述发布电路;所述发布电路用于将所述第一有序存储器指令排序在所述程序的第二有序存储器指令之前;所述第一有序存储器指令是所述程序的源版本中的无序存储器指令。
2.如权利要求1所述的处理器,其特征在于,所述第一有序存储器指令用于启用针对所述程序的存储器映射输入/输出存取,其中,所述程序包括嵌入式控制应用。
3.如权利要求1所述的处理器,其特征在于,所述第一有序存储器指令和所述第二有序存储器指令包括存储器映射输入/输出操作。
4.如权利要求1所述的处理器,其特征在于,所述发布电路用于以比所述第二有序存储器指令更高的优先级来向所述执行电路发布所述第一有序存储器指令。
5.如权利要求1所述的处理器,其特征在于,编译器电路用于至少部分地基于与所述无序存储器指令的至少一个操作数相关联的标识符来根据所述程序的所述无序存储器指令生成所述第一有序存储器指令。
6.如权利要求5所述的处理器,其特征在于,所述编译器电路用于生成具有与所述无序存储器指令的机器代码不同的机器代码的所述第一有序存储器指令。
7.如权利要求5所述的处理器,其特征在于,所述编译器电路用于响应于变量声明的指示性指示符而生成所述第一有序存储器指令,其中,所述无序存储器指令的操作数对应于所述变量声明的变量。
8.如权利要求1所述的处理器,其特征在于,所述发布电路包括:
第一存储装置,用于存储待处理的有序存储器指令;以及
第二存储装置,用于存储待处理的无序存储器指令。
9.如权利要求8所述的处理器,其特征在于,所述解码电路用于将所述第一有序存储器指令提供给所述发布电路的所述第一存储装置,所述第一存储装置包括先入先出队列。
10.如权利要求1所述的处理器,其特征在于,所述执行电路包括用于执行所述第一有序存储器指令的至少一个加载/存储执行单元。
11.一种用于排序指令的系统,包括:
处理器,所述处理器包括第一核,所述第一核具有:
用于对指令进行解码的解码电路;
用于发布经解码指令的发布电路,所述发布电路包括用于存储有序存储器存取指令的第一队列和用于存储无序指令的第二存储装置;以及
用于执行程序的所发布指令的至少一个执行电路,其中,所述发布电路用于将所述程序的经解码的第一有序存储器存取指令和所述程序的经解码的第二有序存储器存取指令存储在所述第一队列中并且将所述程序的一个或多个无序指令存储在所述第二存储装置中,并且在所述程序的所述经解码的第二有序存储器存取指令之前、并且相对于所述一个或多个无序指令中的一个或多个而言无序地将所述经解码的第一有序存储器存取指令提供给所述至少一个执行电路;以及
动态随机存取存储器,耦合至所述处理器。
12.如权利要求11所述的系统,其特征在于,编译器电路用于至少部分地基于与无序存储器存取指令的至少一个操作数相关联的标识符来根据所述无序存储器存取指令生成所述第一有序存储器存取指令,所述第一有序存储器存取指令具有与用于所述无序存储器存取指令的机器代码不同的机器代码。
13.如权利要求12所述的系统,其特征在于,所述至少一个操作数包括有待在所述程序期间存取的存储器映射输入/输出位置,所述程序包括用于嵌入式控制器的装置驱动程序,其中,所述第一核包括乱序流水线。
CN201680064117.3A 2015-11-30 2016-09-28 用于在乱序处理器中进行有序处理的指令和逻辑 Active CN108351784B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/953,644 2015-11-30
US14/953,644 US10191748B2 (en) 2015-11-30 2015-11-30 Instruction and logic for in-order handling in an out-of-order processor
PCT/US2016/054072 WO2017095515A1 (en) 2015-11-30 2016-09-28 Instruction and logic for in-order handling in an out-of-order processor

Publications (2)

Publication Number Publication Date
CN108351784A CN108351784A (zh) 2018-07-31
CN108351784B true CN108351784B (zh) 2023-04-11

Family

ID=58777588

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680064117.3A Active CN108351784B (zh) 2015-11-30 2016-09-28 用于在乱序处理器中进行有序处理的指令和逻辑

Country Status (5)

Country Link
US (2) US10191748B2 (zh)
EP (1) EP3384378B1 (zh)
CN (1) CN108351784B (zh)
TW (1) TW201723856A (zh)
WO (1) WO2017095515A1 (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2514618B (en) * 2013-05-31 2020-11-11 Advanced Risc Mach Ltd Data processing systems
US11061742B2 (en) 2018-06-27 2021-07-13 Intel Corporation System, apparatus and method for barrier synchronization in a multi-threaded processor
US10936321B2 (en) * 2019-02-01 2021-03-02 International Business Machines Corporation Instruction chaining
US10956160B2 (en) * 2019-03-27 2021-03-23 Intel Corporation Method and apparatus for a multi-level reservation station with instruction recirculation
TWI743611B (zh) * 2019-12-04 2021-10-21 新唐科技股份有限公司 處理裝置與其資料存取方法
US20210389979A1 (en) * 2020-06-15 2021-12-16 Andes Technology Corporation Microprocessor with functional unit having an execution queue with priority scheduling
CN111966406B (zh) * 2020-08-06 2021-03-23 北京微核芯科技有限公司 乱序处理器中乱序执行队列的调度方法和装置
CN111930427B (zh) * 2020-08-17 2022-06-21 北京百度网讯科技有限公司 指令发射方法、装置、电子设备以及存储介质
US20220197719A1 (en) * 2020-12-21 2022-06-23 Intel Corporation Thread synchronization mechanism
US20220374237A1 (en) * 2021-05-21 2022-11-24 Telefonaktiebolaget Lm Ericsson (Publ) Apparatus and method for identifying and prioritizing certain instructions in a microprocessor instruction pipeline

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6192465B1 (en) * 1998-09-21 2001-02-20 Advanced Micro Devices, Inc. Using multiple decoders and a reorder queue to decode instructions out of order
US20120124586A1 (en) * 2010-11-16 2012-05-17 Daniel Hopper Scheduling scheme for load/store operations
US20150127928A1 (en) * 2013-11-07 2015-05-07 Microsoft Corporation Energy Efficient Multi-Modal Instruction Issue
CN104937539A (zh) * 2012-11-28 2015-09-23 英特尔公司 用于提供推入缓冲器复制和存储功能的指令和逻辑

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0663083B1 (en) * 1992-09-29 2000-12-20 Seiko Epson Corporation System and method for handling load and/or store operations in a superscalar microprocessor
US5467473A (en) 1993-01-08 1995-11-14 International Business Machines Corporation Out of order instruction load and store comparison
JPH07302200A (ja) * 1994-04-28 1995-11-14 Hewlett Packard Co <Hp> 順次付けロード動作および順序付け記憶動作を強制する命令を有するコンピュータのロード命令方法。
US7932911B2 (en) * 1998-08-24 2011-04-26 Microunity Systems Engineering, Inc. Processor for executing switch and translate instructions requiring wide operands
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
US9164772B2 (en) * 2011-02-04 2015-10-20 Qualcomm Incorporated Hybrid queue for storing instructions from fetch queue directly in out-of-order queue or temporarily in in-order queue until space is available
US9110656B2 (en) 2011-08-16 2015-08-18 Freescale Semiconductor, Inc. Systems and methods for handling instructions of in-order and out-of-order execution queues
US9582276B2 (en) * 2012-09-27 2017-02-28 Apple Inc. Processor and method for implementing barrier operation using speculative and architectural color values
US9354884B2 (en) * 2013-03-13 2016-05-31 International Business Machines Corporation Processor with hybrid pipeline capable of operating in out-of-order and in-order modes
GB2510655B (en) * 2013-07-31 2015-02-25 Imagination Tech Ltd Prioritizing instructions based on type

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6192465B1 (en) * 1998-09-21 2001-02-20 Advanced Micro Devices, Inc. Using multiple decoders and a reorder queue to decode instructions out of order
US20120124586A1 (en) * 2010-11-16 2012-05-17 Daniel Hopper Scheduling scheme for load/store operations
CN104937539A (zh) * 2012-11-28 2015-09-23 英特尔公司 用于提供推入缓冲器复制和存储功能的指令和逻辑
US20150127928A1 (en) * 2013-11-07 2015-05-07 Microsoft Corporation Energy Efficient Multi-Modal Instruction Issue

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
支持预取的微程序控制器的一种优化设计;靖朝鹏等;《微电子学与计算机》;20060320(第02期);全文 *

Also Published As

Publication number Publication date
US20170153896A1 (en) 2017-06-01
US20190121645A1 (en) 2019-04-25
TW201723856A (zh) 2017-07-01
EP3384378B1 (en) 2022-02-09
WO2017095515A1 (en) 2017-06-08
EP3384378A1 (en) 2018-10-10
CN108351784A (zh) 2018-07-31
US10191748B2 (en) 2019-01-29
EP3384378A4 (en) 2019-07-31

Similar Documents

Publication Publication Date Title
CN108351863B (zh) 用于可编程结构层级结构和高速缓存的指令和逻辑
CN109791513B (zh) 用于检测数值累加误差的指令和逻辑
CN108351784B (zh) 用于在乱序处理器中进行有序处理的指令和逻辑
TWI739772B (zh) 處理器、用於安全指令執行管線之方法、及運算系統
CN108292229B (zh) 用于重新出现的相邻聚集的指令和逻辑
CN108351835B (zh) 用于高速缓存控制操作的指令和逻辑
US9823925B2 (en) Instruction and logic for a logical move in an out-of-order processor
US10346170B2 (en) Performing partial register write operations in a processor
CN106575219B (zh) 针对用于处理运算的向量格式的指令和逻辑技术领域
CN108292271B (zh) 用于向量置换的指令和逻辑
US20170168819A1 (en) Instruction and logic for partial reduction operations
US10705845B2 (en) Instructions and logic for vector bit field compression and expansion
TWI738681B (zh) 處理器、用於檢測消抵效應之方法及消抵效應檢測單元
US9851976B2 (en) Instruction and logic for a matrix scheduler
KR20160113677A (ko) 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법
US10133582B2 (en) Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor
US20170123799A1 (en) Performing folding of immediate data in a processor
US20170177348A1 (en) Instruction and Logic for Compression and Rotation
US20160378472A1 (en) Instruction and Logic for Predication and Implicit Destination
TWI773654B (zh) 處理器、運算系統及用於執行以向量為基礎的位元操控之方法
CN107408035B (zh) 用于缕程间通信的装置和方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
TA01 Transfer of patent application right
TA01 Transfer of patent application right

Effective date of registration: 20210630

Address after: California, USA

Applicant after: INTEL Corp.

Address before: California, USA

Applicant before: INTEL IP Corp.

GR01 Patent grant
GR01 Patent grant