CN107408036B - 用户级分叉与结合处理器、方法、系统和指令 - Google Patents

用户级分叉与结合处理器、方法、系统和指令 Download PDF

Info

Publication number
CN107408036B
CN107408036B CN201680012362.XA CN201680012362A CN107408036B CN 107408036 B CN107408036 B CN 107408036B CN 201680012362 A CN201680012362 A CN 201680012362A CN 107408036 B CN107408036 B CN 107408036B
Authority
CN
China
Prior art keywords
instruction
user
level
processor
fork
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.)
Expired - Fee Related
Application number
CN201680012362.XA
Other languages
English (en)
Other versions
CN107408036A (zh
Inventor
O·本-琪琪
I·帕多
A·D·罗宾森
J·H·康威尼
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 CN107408036A publication Critical patent/CN107408036A/zh
Application granted granted Critical
Publication of CN107408036B publication Critical patent/CN107408036B/zh
Expired - Fee Related 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/3818Decoding for concurrent execution
    • G06F9/3822Parallel decoding, e.g. parallel decode units
    • 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/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • 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/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • 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
    • 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/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control 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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • G06F9/3806Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3851Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution from multiple instruction streams, e.g. multistreaming
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/28Using a specific disk cache architecture
    • G06F2212/283Plural cache memories
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/6028Prefetching based on hints or prefetch instructions

Landscapes

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

Abstract

一方面的处理器包括多个处理器元件和第一处理器元件。第一处理器元件可以执行软件线程的用户级分叉指令。第一处理器元件可以包括用于解码用户级分叉指令的解码器。用户级分叉指令用于指示至少一个指令地址。第一处理器元件还可以包括用户级线程分叉模块。用户级分叉模块,响应于用户级分叉指令被解码,可以将多个处理器元件中的每一个配置为并行地执行指令。公开了其他处理器、方法、系统以及指令。

Description

用户级分叉与结合处理器、方法、系统和指令
背景
技术领域
本文中所描述的各实施例一般涉及处理器。具体而言,本文所述的实施例一般涉及处理器中的并行处理。
背景信息
已经用于在具有一个或多个处理器的计算机系统和其他电子设备中改善性能的一种技术是并行处理。并行处理一般是指同时使用多于一个硬件线程、核、中央处理单元、处理器或其他处理器元件以执行程序或多个线程。并行处理可以有助于允许程序更快地运行,因为有更多这种处理器元件在并行地运行该程序。
附图说明
通过参考用于说明实施例的以下描述和所附附图,可最佳地理解本发明。在附图中:
图1是处理器的实施例的框图。
图2是示出了使用用户级分叉指令的实施例和多个用户级同步与结束指令的实施例实现的分叉-结合构造的示例的示图。
图3是具有能操作以使线程在同步屏障处等待的用户级分叉指令的实施例的分叉-结合代码的框图。
图4是具有用户级分叉指令和能操作以使线程在同步屏障处等待的单独的用户级同步与结合指令的实施例的分叉-结合代码的框图。
图5是一对合适的同构处理器元件的示例实施例的框图。
图6是一对合适的异构处理器元件的示例实施例的框图。
图7是用于执行用户级分叉指令的实施例的处理器的示例实施例的框图。
图8是用于执行用户级同步与结束指令的实施例的处理器的示例实施例的框图。
图9A是示出有序流水线的实施例以及寄存器重命名的乱序发布/执行流水线的实施例的框图。
图9B是处理器核的实施例的框图,该处理器核包括耦合到执行引擎单元的前端单元,并且前端单元和执行引擎单元两者都耦合到存储器单元。
图10A是单个处理器核以及它与管芯上互连网络的连接及其第二级(L2)高速缓存的本地子集的实施例的框图。
图10B是图10A的处理器核的部分的展开图的实施例的框图。
图11是可具有多于一个的核、可具有集成存储器控制器并且可具有集成图形器件的处理器的实施例的框图。
图12是计算机架构的第一实施例的框图。
图13是计算机架构的第二实施例的框图。
图14是计算机架构的第三实施例的框图。
图15是计算机架构的第四实施例的框图。
图16是根据本发明的实施例的使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
本文中公开了用户级分叉(fork)指令(例如,用户级分叉、用户级分叉与同步结合(join)指令)、用户级同步与结束指令、用户级同步与结束指令、用于实现或执行指令的处理器、当实现或执行指令时由处理器执行的方法、以及包括用于实现或执行指令的一个或多个处理器的系统。在以下描述中,阐述多个特定细节(例如,特定的指令操作、处理器配置、微架构细节、操作序列等)。然而,在没有这些特定细节的情况下,也可实践实施例。在其他实例中,未详细示出公知的电路、结构和技术以避免混淆对本描述的理解。
图1是处理器100的实施例的框图。在一些实施例中,该处理器可以是通用处理器(例如,在台式计算机、膝上型计算机、智能电话或其他计算机中所使用类型的通用微处理器或中央处理单元(CPU))。替代地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于,图形处理器、协处理器、网络处理器、通信处理器、加密处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器)。该处理器可具有各种复杂指令集计算(CISC)架构、精简指令集计算(RISC)架构、超长指令字(VLIW)架构、混合架构、其他类型的架构中的任一者,或具有不同架构的组合。
处理器具有第一处理器元件102和多个附加处理器元件114。第一处理器元件和附加处理器元件可以通过一个或多个总线或其他互连112(例如,一个或多个环、三维环(torus)、网格等)连接或以其他方式耦合在一起。如所示,多个附加处理器元件可以包括第一附加处理器元件114-1到第N附加处理器元件114-N。附加处理器元件的数量可以表示适合于特定实现的任何所需的数量。作为示例,附加处理器元件的数量的范围可以是从两个到数百个,或者在一些情形中从十个到约两百个,或者在一些情形中从二十个到约两百个,或者在一些情形中多于十个、二十个或三十个,但本发明的范围不限于此。作为示例,可以存在约四十个到约两百个,但这不是必须的。在一些实施例中,第一处理器元件102和附加处理器元件114中的每一个可以全部置于单个集成电路管芯或其他半导体衬底上。替代地,附加处理器元件106中的一些或全部可以可选地与第一处理器元件置于不同的管芯或其他半导体衬底上,并且可选地与第一处理器元件包括在相同的集成电路封装中。在一些实施例中,附加处理器元件114可能不表示通常只能通过驱动程序、中间件等被访问的图形卡、GPGPU或其他此类分开的设备。
第一处理器元件102和附加处理器元件114中的每一个的合适的处理器元件的示例包括但不限于,核、硬件线程、线程单元、线程槽、能操作以存储上下文或架构状态和程序计数器的逻辑(在本领域中也被称为指令指针)、可用于存储状态并且独立地与代码相关联的逻辑、以及其他逻辑处理器。术语“核”常常用于指示能够维持独立架构状态(例如,执行状态)的位于集成电路上的逻辑,并且其中架构状态与专用执行和某些其他资源相关联。相反,术语“硬件线程”常常用于指示能够维持独立架构状态的位于集成电路上的逻辑,并且其中架构状态共享对执行和某些其他资源的访问。当一些执行或某些其他资源被两个或多个架构状态共享,并且其他执行或某些其他资源专用于架构状态时,对术语“核”与“硬件线程”的此类利用之间的线不太明显。然而,核、硬件线程和其他处理器元件常常被软件视为单独的逻辑处理器或处理器元件。一般而言,线程、处理器或工作负荷可以在核、硬件线程或其他处理器元件中的每一个上调度,并且与其独立地相关联。
第一处理器元件102具有指令集104。多个附加处理器元件114中的每一个也具有对应的指令集116。第一处理器元件的指令集104可以与附加处理器元件中的每一个的指令集116相同或者可以与其不同(例如,可以具有一些重叠的指令和一些非重叠的指令)。该指令集是相应的处理器元件的指令集架构(ISA)的部分,并且包括处理器元件能操作以执行的原生指令。该指令集的指令可以表示宏指令、机器级指令或汇编语言指令。
第一处理器元件的指令集104包括用户级分叉指令106。在一些实施例中,用户级分叉指令106可以省略同步与结合功能(例如,同步与结合功能可以由单独的用户级同步与结合指令或多个其他指令提供以实现此类功能)。在其他实施例中,指令106可以是用户级分叉与同步结合指令,其包括同步与结合功能。附加处理器元件中的每一个的指令集116包括用户级同步与结束指令118。用户级分叉指令和用户级同步与结束指令是可以在无特权级或用户级执行处执行的用户级指令。指令集中的每一个还可以可选地包括一个或多个非用户级或有特权的指令(未示出),其可以不在无特权级或用户级执行处执行。相反,非用户级或有特权的指令可以只在非用户级或至少部分有特权级的执行处执行(例如,在环0处),其可以为操作系统、管理程序、虚拟机管理器或其他有特权的或监督实体保留。
在一些实施例中,用户级分叉指令106和用户级同步与结束指令118可以允许用户在用户级应用或软件中实现分叉与结合构造。在分叉与结合构造中,软件的给定部分的执行(例如,给定的软件线程)可以分支或分叉为软件的多个并行执行(例如,多个数据并行工作负荷或并行软件线程),随后这些多个并行执行可以结束或产出以及合并或结合,并且软件的给定部分的执行(例如,给定的软件线程)可以恢复。在一些实施例中,用户级分叉指令106可以能操作以指定、划界或以其他方式指示会被并行地对多个附加处理器元件114中的每一个执行的软件的部分的开始,并且用户级同步与结束指令118可以能操作以指定、划界或以其他方式指示软件的部分的结束。
第一处理器元件可以具有第一解码单元108。可以将用户级分叉指令提供给第一解码单元108。第一解码单元可以能操作以解码用户级分叉指令。在一些实施例中,用户级分叉指令可以显式地指定或以其他方式指示至少一个指令地址。在一些实施例中,指令可以指定或以其他方式指示单个指令地址,单个指令地址表示会被并行地对附加处理器元件中的每一个执行的代码的部分的第一或开始指令,附加处理器元件中的每一个会在第一或开始指令处开始。在其他实施例中,指令可以指定多个潜在地/可选地不同的指令地址(例如,可以指定每个具有含有多个指令地址的向量的一个或多个向量寄存器),指令地址各自可被附加处理器元件中的不同的一个使用(例如,每个处理器元件可以在不同的指令地址处开始以并行地在数据并行工作负荷的不同部分上工作)。第一处理器元件还可以具有与解码单元耦合的用户级线程分叉模块110。用户级线程分叉模块可以表示用于执行或实现用户级分叉指令的一个或多个执行单元或其他执行逻辑。在一些实施例中,用户级线程分叉模块110可以响应于用户级分叉指令106(例如,响应于用户级分叉指令被解码和/或一个或多个控制信号被解码或以其他方式从用户级分叉指令生成)以在程序控制流中产生分支或分叉。在一些实施例中,响应于用户级分叉指令,用户级线程分叉模块110可以能操作以将多个附加处理器元件114中的每一个配置为或以其他方式使得多个附加处理器元件114中的每一个并行地执行一组指令或软件的部分。在一些实施例中,附加处理器元件中的每一个可以配置为或以其他方式使得在由用户级分叉指令106指示的至少一个指令地址中的一个处开始执行。如前所述,在一些实施例中,指令可以指示单个地址,而在其他实施例中,指令可以指示多个潜在地/可选地不同的地址(例如,含有多个地址的一个或多个向量)。在一些实施例中,用户级分叉指令可以隐式地指示静态或固定数量的附加处理器元件(例如,可以使用可用的附加处理器元件的全部)。替代地,用户级分叉指令可以显式地指定或以其他方式指示灵活数量的附加处理器元件,并且该数量可以被动态地分配(例如,附加处理器元件的总数中的一个或多个可能不能用于运行并行的软件)。
多个附加处理器元件114中的每一个可以能操作以执行用户级同步与结束指令118。在一些实施例中,附加处理器元件中的每一个可以具有对应的解码单元120以解码用户级同步与结束指令。在一些实施例中,附加处理器元件114中的每一个可以具有与对应的解码单元120耦合的对应的用户级同步线程结束模块122。每个用户级同步线程结束模块122可以表示一个或多个执行单元或其他执行逻辑以执行或实现用户级同步与结束指令118。在一些实施例中,响应于用户级同步与结束指令118(例如,响应于该指令被解码和/或一个或多个控制信号被解码或以其他方式从该指令生成),每个用户级同步线程结束模块122可以能操作以将其对应的处理器元件(用户级同步线程结束模块被包括在对应的处理器元件中)配置为或以其他方式使得其对应的处理器元件执行对应的线程的同步结束或准备程序控制流中的同步结合或合并的实现。在一些实施例中,当执行用户级同步与结束指令118时,每个处理器元件114可以实现同步屏障以及将同步控制流传送回在第一处理器元件上执行的软件线程或软件的其他部分。在一些实施例中,当执行用户级同步与结束指令时,每个处理器元件114可以停止执行附加指令,并且等待(例如,在同步屏障处)直到其他附加处理器元件114中的每一个已经执行了对应的用户级同步与结束指令(例如,到达了同步屏障)。然后,在一些实施例中,当附加处理器元件的全部已经执行了其对应的用户级同步与结束指令时,可以执行程序控制流中的结合或合并,并且控制流可以传送回在第一处理器元件102上执行的软件的部分中的合适的指令。在一个方面,在附加处理器元件上的并行执行的全部可以终止,并且执行可以只在第一处理器元件上继续。
有利地,用户级分叉与用户级同步与结束指令可以表示可以允许用户、编程者或编译者显式地在用户级应用中编程或实现分叉与结合构造或模型的用户级架构机制。分叉与结合构造不需要由对操作系统(或其他监督系统软件)管理的线程的软件运行时相关系统调用来定义,该软件运行时相关系统调用一般倾向于具有高开销(例如,由于消息收发等等),并且因此一般倾向于在实践中被限制到被并行地执行(例如,粗粒度的并行处理)的相对大的工作负荷或代码的部分。相反,通过使用这些用户级分叉和用户级同步与结束指令,可能不需要操作系统或其他监督系统软件的干预和/或不需要屈服于操作系统或其他监督系统软件以实现分叉与结合。
此外,在一些实施例中,在附加处理器元件上运行的并行执行(例如,并行软件线程)可能不能由操作系统或其他监督系统软件直接地管理。在一个方面,在附加处理器元件上运行的并行执行(例如,并行软件线程)可以可选地对于操作系统或其他监督系统软件是不可见的或至少基本上不可见的(例如,OS可能不知道这些并行执行正在附加处理器元件上运行)。相比之下,在一些实施例中,在具有了用户级分叉指令106的第一处理器元件上运行的线程或软件的部分可能已经被监督系统软件(例如,操作系统的线程调度器模块)调度到第一处理器元件102上,并且可以对于监督系统软件是可见的并且由监督系统软件管理。因此,用户级分叉和用户级同步与结束指令可有助于减少对此类并行执行一般预期的开销的量。在一个方面,用户级分叉和用户级同步与结束指令可以可选地/潜在地用于有效地并行地执行更小的工作负荷或代码的部分(例如,更细粒度的并行处理),其中工作负荷或代码的部分比如果替代地经由软件运行时间通过对操作系统(或其他监督系统软件)的调用来调度或管理线程而一般将是实际的情况更小。
已经示出和描述了处理器100的详细示例实施例,然而构想了各种替代实施例。在一些实施例中,处理器可以实现用户级分叉指令,但是可选地无需实现用户级同步与结束指令。例如,处理器可以可选地具有含有包括用户级分叉指令106的指令集的第一处理器元件102,但是附加处理器元件114可以具有省略所描述的用户级同步与结束指令118的指令集。在一些实施例中,处理器可以实现用户级同步与结束指令,但是可选地无需实现用户级分叉指令。例如,处理器可以可选地具有含有包括所描述的用户级同步与结束指令118的指令集的附加处理器元件114,但是第一处理器元件102可以具有可选地省略所描述的用户级分叉指令106的指令集。在一些实施例中,替代用户级同步与结束指令,可以可选地实现用户级结束指令而无需同步功能或能力。例如,单独的指令(例如,具有不同的操作码)可以用于实现同步功能,并且可以与省略同步能力的用户级结束指令结合使用。其它变型对于获得本公开的益处的本领域普通技术人员将是明显的。
为避免使描述模糊,已示出并描述了简化的处理器100。然而,处理器可以任选地包括其他组件。例如,各种不同的实施例可以包括针对图9-11中的任一个所示出和描述的各种不同的组件的组合和配置。处理器的所有组件可以连接或耦合在一起以允许它们操作。
图2是示出了使用用户级分叉指令206的实施例和多个用户级同步与结束指令218的实施例实现的分叉-结合构造230的示例的示图。分叉-结合构造包括主软件线程232,其可以在第一处理器元件(例如,第一处理器元件102)上执行。主软件线程包括用户级分叉指令206。在一些实施例中,用户级分叉指令可以显式地指定或以其他方式指示至少一个地址(例如,一组指令的开始指令的地址,其会在多个附加处理器元件中的每一个上并行地执行)。例如,在各实施例中,用户级分叉指令可以具有用于显式地指定具有显式地指定或以其他方式指示(例如,向其提供至少一个偏移或以其他方式指示)至少一个地址的至少一个值的寄存器(例如,架构通用寄存器)的字段、可以具有用于显式地指定具有显式地指定或以其他方式指示至少一个地址的至少一个值、隐式地指示具有显式地指定或以其他方式指示至少一个地址的至少一个值的寄存器的存储器位置的字段、或具有用于提供显式地指定或以其他方式指示至少一个地址的至少一个值的立即数。
当被(例如,第一处理器元件)执行时,用户级分叉指令206可以使得第一处理器元件繁衍、调度、以其他方式配置、或以其他方式在程序控制流中产生分支或分叉234,其可以启动多个协助器(helper)软件线程236的并行执行,每个协助器软件线程在多个附加处理器元件(例如,附加处理器元件114)中的不同的一个附加处理器元件上。多个协助器软件线程可以包括第一协助器软件线程236-1到第N协助器软件线程236-N,其中协助器软件线程的数量可以是适合于特定实现的任意所需的数量(例如,有时从两个到约一百个)。作为示例,协助器软件线程可以表示多个不同类型的过程或工作负荷,诸如例如,图形、音频、信号处理、科学计算、事务、数据库处理或各种其他过程或工作负荷。在一些实施例中,协助器软件线程中的每一个可以通过在由用户级分叉指令指示的单个指令地址处执行同一指令235的不同的对应实例而开始。例如,用户级分叉指令可以使得相同的指令地址存储在多个程序计数器(例如,寄存器)中的每一个中,多个程序计数器可以各自对应于用于执行对应的协助器软件线程236的多个附加处理器元件中的不同的一个。程序计数器在本领域中也被称为指令指针。替代地,不同的指令地址可以由指令指示,不同的指令地址可以存储在程序计数器中,并且不同的对应的指令最初可以由不同的处理器元件执行。在每个协助器软件线程执行其对应的开始指令235之后,它们可以可选地/潜在地执行指令的不同序列(例如,可以采取不同的分支、跳转或到处移动、作出不同的过程调用等等)。有利地,这些并行的协助器软件线程可有助于提高数据吞吐量和/或性能。例如,并行的协助器软件线程中的每一个可以在可并行化的或可线程化的工作负荷的不同部分上工作,诸如例如,图形工作负荷、科学计算工作负荷等等。不是主线程需要串行地执行与总工作负荷相关的所有任务,而是并行的协助器软件线程可以至少部分地并行地执行总工作负荷的不同部分。
在某些点,正在并行地执行协助器软件线程236中的一个的每个处理器元件可以执行用户级同步与结束指令218的对应实例。例如,第一协助器软件线程可以包括第一用户级同步与结束指令218-1,并且第N协助器软件线程可以包括第N用户级同步与结束指令218-N。这些用户级同步与结束指令可以在不同时间执行,部分地取决于不同的协助器软件线程执行的不同方式(例如,分支、跳转等等)。在一些实施例中,用户级同步与结束指令218可以能操作以配置或以其他方式产生同步屏障238。在一些实施例中,响应于执行对应的用户级同步与结束指令218,处理器元件中的每一个可以停止执行对应的协助器软件线程236的附加指令,并且可以在同步屏障238处等待(例如,对应的程序计数器可能不能前进),直到用于执行协助器软件线程236的所有其他处理器元件已经执行了它们对应的用户级同步与结束指令218。然后,当所有其他处理器元件已经执行了它们对应的用户级同步与结束指令218时,最后执行的用户级同步与结束指令218可以在控制流中产生同步合并或结合240,其可以使得并行的协助器软件线程236的执行终止并且利用在主线程232中的合适的结合地址处的指令242使得执行继续。
图3是分叉-结合代码330的框图,分叉-结合代码330包括能操作以配置或以其他方式使得主线程332停止执行并且在隐式的同步屏障338处等待的用户级分叉与同步结合指令306的实施例。主线程332可以在第一处理器元件(例如,处理器元件102)上运行。主线程包括用户级分叉与同步结合指令306。用户级分叉与同步结合指令在被执行时可以配置或以其他方式在控制流中产生分支或分叉334,其中多个并行的协助器软件线程336可以各自被启动以在多个附加处理器元件(例如,附加处理器元件114)中的不同的一个上运行。在该实施例中,用户级分叉与同步结合指令在被执行时还可以配置或以其他方式使得执行主软件线程332的处理器元件停止执行主软件线程332的附加指令,并且进一步使得执行在隐式的同步屏障338处等待,并且然后使得结合在由用户级分叉与同步结合指令(例如,在原始程序顺序中紧接着用户级分叉与同步结合指令306的指令350)确定的指令地址处发生。
在一些实施例中,用户级分叉与同步结合指令可以指示单个指令地址,并且并行的协助器软件线程336中的每一个可以在同一指令335的对应实例处开始执行,指令335的对应实例位于由用户级分叉指令306指定或以其他方式指示的单个指令地址处。并行的协助器软件线程中的每一个然后可以执行潜在地不同组的附加指令(例如,由于不同的分支操作、跳转操作、过程调用等等)。替代地,用户级分叉指令可以指示多个潜在地/可选地不同指令地址,并且并行的协助器软件线程中的每一个可以在可选地/潜在地不同指令地址处开始执行。最终,并行的协助器软件线程中的每一个通常在不同的时间可以执行用户级同步与结束指令318的对应实例。当处理器元件中的每一个执行对应的用户级同步与结束指令时,处理器元件中的每一个可以停止执行对应的协助器软件线程的附加指令,并且进一步的执行可以在被主软件线程332观察的同一隐式的同步屏障338处等待。当其他并行的协助器软件线程中的每一个和全部已经执行了其对应的用户级同步与结束指令时,最后执行其对应的用户级同步与结束指令的处理器元件可以配置或以其他方式在控制流中产生回到合适的结合地址(例如,由用户级分叉与同步结合指令确定的结合指令地址)的合并或结合340。并行的协助器软件线程中的每一个的执行可以终止。主软件线程332*的继续的执行可以利用主线程中的紧接着用户级分叉与同步结合指令的指令350来继续。在该实施例中,术语“隐式的”针对隐式的同步屏障使用,因为同步屏障对于用户级分叉与同步结合指令是隐式的或固有的,而不是用于创建显式的同步屏障的单独的指令。
图4是分叉-结合代码430的框图,分叉-结合代码430包括能操作以配置或以其他方式使得主线程432停止执行并且在显式的同步屏障438处等待的用户级分叉指令406和单独的用户级同步与结合指令452的实施例。
主线程432可以在第一处理器元件(例如,处理器元件102)上运行。主线程包括用户级分叉指令406。用户级分叉指令在被执行时可以配置或以其他方式在控制流中产生分支或分叉434,其中多个并行的协助器软件线程436可以各自被启动以在多个附加处理器元件(例如,附加处理器元件114)中的不同的一个上运行。在该实施例中,用户级分叉指令406在被执行时不会使得正在执行主软件线程432的处理器元件停止执行附加指令或在同步屏障处等待。相反,处理器元件可以继续执行主软件线程的一个或多个附加指令,包括在主线程中的在原始程序顺序中紧接着用户级分叉指令406的指令450。
主软件线程还可以包括用户级同步与结合指令452。用户级同步与结合指令在被执行时可以能操作以配置或以其他方式使得执行主软件线程的处理器元件停止执行主软件线程的附加指令并且使得继续的执行在显式的同步屏障438处等待。在一些实施例中,用户级同步与结合指令452可以具有与用户级分叉指令406不同的操作码。在一些实施例中,用户级同步与结合指令452可以具有与用户级同步与结束指令418相同的操作码。在其他实施例中,用户级同步与结合指令452可以具有与用户级同步与结束指令418不同的操作码。
在一些实施例中,用户级分叉指令可以可选地指示单个指令地址,并且并行的协助器软件线程436中的每一个可以在同一指令435的对应实例处开始执行,指令435的对应实例位于由用户级分叉指令406指定或以其他方式指示的单个指令地址处。并行的协助器软件线程中的每一个然后可以执行潜在地不同组的附加指令(例如,由于不同的分支操作、跳转操作、过程调用等等)。替代地,用户级分叉指令可以指示多个潜在地/可选地不同指令地址,并且并行的协助器软件线程中的每一个可以在可选地/潜在地不同指令地址处开始执行。最终,并行的协助器软件线程中的每一个通常在不同的时间可以执行用户级同步与结束指令418的对应实例。当处理器元件中的每一个执行对应的用户级同步与结束指令时,处理器元件中的每一个可以停止执行对应的协助器软件线程的附加指令,并且由于用户级同步与结合指令452,进一步的执行可以在被主软件线程432观察的同一显式的同步屏障438处等待。当其他并行的协助器软件线程中的每一个和全部已经执行了其对应的用户级同步与结束指令时,最后执行其对应的用户级同步与结束指令的处理器元件可以配置或以其他方式在控制流中产生同步合并或结合440。并行的协助器软件线程中的每一个的执行可以终止。主软件线程432*的继续的执行可以利用在由用户级同步与结合指令确定的合适的结合地址处的指令来继续,诸如例如,在主线程中的在原始程序顺序中紧接着用户级同步与结合指令452的指令454。
如上所述,第一处理器元件(例如,第一处理器元件102)可以执行用户级分叉指令的实施例(例如,用户级分叉指令106),并且多个附加处理器元件(例如,附加处理器元件114)中的每一个可以执行用户级同步与结束指令(例如,用户级同步与结束指令118)的实施例。在一些实施例中,同构处理器元件可以用于第一处理器元件和附加处理器元件中的每一个。在其他实施例中,第一处理器元件可以具有相对于附加处理器元件中的每一个异构的或不同的设计。
图5是一对同构处理器元件560的示例实施例的框图,同构处理器元件560包括适于执行包括用户级分叉指令的串行线程的第一处理器元件502,以及适于执行包括用户级同步与结束指令的多个并行的线程中的一个的附加处理器元件514。该对同构处理器元件可以基本相同。例如,同构处理器元件中的每一个可以是具有相同设计的核、硬件线程等等。在一些实施例中,第一和附加处理器元件两者可以具有相同的指令集504,第一和附加处理器元件两者可以具有相同的一组架构特征562(例如,架构寄存器、数据类型等等),并且第一和附加处理器元件两者可以具有相同的微架构564。
替代地,不是使用同构的处理器元件,而是使用异构的处理器元件可能是有利的。例如,设计或优化会不同地执行并行的线程的处理器元件比会执行串行线程的处理器元件可能是有利的。图6是一对异构处理器元件668的示例实施例的框图,异构处理器元件668包括适于执行包括用户级分叉指令的串行线程的第一处理器元件602,以及适于执行包括用户级同步与结束指令的多个并行的线程中的一个的附加处理器元件614。
异构处理器元件可以在不同实施例中以不同方式是不同的。如所示,在一些实施例中,第一处理器元件的指令集604可以可选地与附加处理器元件的指令集616不同。例如,指令集都可以包括一组重叠指令670,但第一处理器元件的指令集可以可选地包括未被包括在附加处理器元件的指令集616中的一个或多个非重叠指令671,并且/或者附加处理器元件的指令集可以可选地包括未被包括在第一处理器元件的指令集604中的一组一个或多个非重叠指令672。作为一个示例,在一些实施例中,附加处理器元件614(即,会执行并行的线程和用户级同步与结束指令)可以可选地排他地专用于用户级或无特权等级的执行特权。在此类实施例中,附加处理器元件可以可选地省略被包括在第一处理器元件的指令集中的所有有特权的或非用户级指令。在其他实施例中,指令集可以以不同方式而不同。例如,可以从附加处理器元件的指令集可选地省略执行旨在用于并行的线程的给定类型的代码所不需要的任何指令。
如所示,在一些实施例中,第一处理器元件的微架构664可以可选地与附加处理器元件的微架构674不同。例如,在一些实施例中,第一处理器元件的微架构可以可选地被设计为强调减少指令性能等待时间,而附加处理器元件的微架构可以可选地被设计为不如此地强调减少性能等待时间,而是强调增加的吞吐量。例如,为了减少等待时间,可以可选地采用乱序执行和/或其他复杂的机制。然而,乱序执行资源和其他此类复杂的资源可以倾向于对将处理器设计为实现最大的并行吞吐量的能力竞争。例如,当每个核相对较大以容纳乱序和/或其他复杂的资源时,这些较大的核中的与省略此类资源的较小核的数量相比较少的核可以能够适合相同尺寸的管芯。如果相反,较小核中的更多核被包括在管芯上了,则可以通过运行更多线程来实现较高吞吐量,即使这些线程中的每一个具有较高的等待时间。当存在许多此类线程时,使线程保持繁忙变得比减少各个线程的等待时间更重要。此外,乱序执行资源可能往往为相同的吞吐量消耗更多功率。
因此,在一些实施例中,第一处理器元件的微架构可以可选地是乱序执行微架构,而附加处理器元件的微架构可以可选地是有序微架构、基本有序微架构、或至少比第一处理器元件的微架构显著更有序的微架构。在一些实施例中,第一处理器元件的微架构可以包括一个或多个乱序执行资源675,而附加处理器元件的微架构可以可选地省略677此类乱序执行资源。此类乱序资源的示例包括但不限于,用于存储指令直到它们的输入操作数是可用的保留站、指令缓冲器、或其他指令队列、用于乱序地将指令发布到执行单元的乱序发布单元、用于将指令重排序并且将它们的结果重排序回到原始程序顺序的重排序缓冲器或其他指令缓冲器或队列、以及用于按原始程序顺序将被乱序地执行的指令的结果提交到架构状态的提交单元。在各实施例中,第一处理器元件(即,用于执行用户级分叉指令)可以具有提交单元,但是附加处理器元件(即,用于执行用户级同步与结束指令)可能不具有提交单元,并且/或者第一处理器元件可以具有重排序缓冲器,但是附加处理器元件可能不具有重排序缓冲器,并且/或者第一处理器元件可以具有保留站,但是附加处理器元件可能不具有保留站。在一些实施例中,第一处理器元件可以具有相对较低的平均指令性能等待时间,而附加处理器元件可以具有相对较高的平均指令性能等待时间。
作为另一示例,在一些实施例中,对于执行具有用户级分叉指令(例如,主线程)的一种类型的代码要么是需要的或者相对更有帮助的、但对于执行具有用户级同步与结束指令(例如,并行的协助器线程中的一个)的另一类型的代码要么是不需要的或者不够有帮助的一个或多个微架构资源可以可选地被包括在第一处理器元件602中,但是可选地被从附加处理器元件614省略。在一些实施例中,不同类型的代码或目标可以旨在针对第一处理器元件和附加处理器元件,并且它们的微架构可以相应地不同。在一些实施例中,附加处理器元件的微架构可以可选地包括简化的线程相互依赖关系和/或排序资源678,其可以可选地相对于第一处理器元件的微架构的简化的线程相互依赖关系和/或排序资源676是简化的。在一个方面,第一处理器元件和附加处理器元件两者可能需要遵循与访问共享存储器相关联的排序规则,然而,由于附加处理器元件可以是有序的,或者至少比乱序第一处理器元件有更多是有序的,所以可以简化用于实施此类共享存储器访问排序规则的附加处理器元件内的机制。换言之,可以可选地从有序或更有序附加处理器元件中省略在乱序第一处理器元件中经常需要的复杂度。例如,可以相对于第一处理器元件中的在附加处理器元件中可选地简化用于实现存储器访问栅栏指令(例如,存储栅栏指令、加载栅栏指令、存储器栅栏指令等等)的机制。在其他实施例中,如果并行的代码(例如,并行的协助器线程)要么不需要被包括在第一处理器元件的微架构中的其他微架构资源或者通过具有这些资源并不能极大地受益,则可以可选地从附加处理器元件的微架构中省略这些资源。
作为另一示例,在一些实施例中,附加处理器元件(例如,包括附加处理器元件614)可以共享第一处理器元件602不共享的资源,并且/或者附加处理器元件(例如,包括附加处理器元件614)可以在比第一处理器元件602更大的范围共享资源。作为一个示例,在一些实施例中,较大数量的附加处理器元件614可以共享解码器,而较小数量的第一处理器元件602可以共享解码器。例如,在各实施例中,第一处理器元件602的从一个到约十个、或从一个到约五个元件可以共享解码器,而附加处理器元件614的从十个到三百个、或从二十个到三百个、或从五十个到三百个元件可以共享解码器。在一些实施例中,附加处理器元件614可以利用经解码的指令的高速缓存,并且因为附加处理器元件在经解码的指令已经存在于高速缓存中的大多数情形下可以主要运行相同或相似指令,所以与对于执行更异构的代码的第一处理器元件通常是实际的情况相比,解码器可以被更大数量的附加处理器元件利用。
作为另一示例,在一些实施例中,与共享最低级或第一级(L1)高速缓存(其最接近执行单元)的第一处理器元件或元件602的数量相比,更大数量的附加处理器元件614可以共享最低级或第一级(L1)高速缓存。例如,在各实施例中,第一处理器元件602的从一个到八个、或从一个到四个元件可以共享L1高速缓存,而附加处理器元件的多于十个、或多于二十个元件可以共享L1高速缓存。
图7是用于执行用户级分叉指令706的实施例的处理器700的示例实施例的框图。处理器包括第一处理器元件702和包括第一附加处理器元件714-1到第N附加处理器元件714-N的多个附加处理器元件714。第一处理器元件具有指令取出单元781。取出单元可以例如基于下一指令的从第一处理器元件的程序计数器783取出的指示从存储器取出用户级分叉指令。用户级分叉指令可表示宏指令、汇编语言指令、机器代码指令、或第一处理器元件的指令集的其他指令或控制信号。在一些实施例中,用户级分叉指令可显式地指定(例如,通过一个或多个字段或一组位)或以其他方式指示(例如,隐式地指示)至少一个指令地址。指示先前所述的指令地址的不同方式是合适的。
取出单元可以将用户级分叉指令提供给解码单元708。解码单元可以解码用户级分叉指令。解码单元可输出反映、表示相对较高级的用户级分叉指令和/或从相对较高级的用户级分叉指令导出的一个或多个相对较低级的指令或控制信号(例如,一个或多个微指令、微操作、微代码进入点、经解码的指令或控制信号等)。在一些实施例中,解码单元可以包括用于接收用户级分叉指令的一个或多个输入结构(例如端口、互连、接口)、与输入结构耦合用于识别并解码用户级分叉指令的指令识别和解码逻辑、以及与指令识别和解码逻辑耦合用于输出较低级指令或控制信号的一个或多个输出结构(例如端口、互连、接口)。可使用各种不同机制来实现该解码单元,包括但不限于,微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)和适于实现解码单元的其他机制。
用户级线程分叉模块710与解码单元708耦合。用户级线程分叉模块可以表示用于执行或实现用户级分叉指令的一个或多个执行单元。用户级线程分叉模块可接收表示用户级分叉指令和/或从用户级分叉指令导出的一个或多个经解码或以其他方式变换的指令或控制信号。用户级线程分叉模块和/或处理器可包括能操作以执行用户级分叉指令(例如,响应于从用户级分叉指令解码的一个或多个指令或控制信号)的专用或特定逻辑(例如,潜在地与固件(例如,存储在非易失性存储器中的指令)和/或软件组合的晶体管、集成电路或其他硬件)。用户级线程分叉模块响应于用户级分叉指令和/或作为用户级分叉指令的结果(例如,响应于从该指令解码的一个或多个指令或控制信号)可以能操作以将多个附加处理器元件714中的每一个配置为从用户级分叉指令指示的一个或多个指令地址处开始并行地执行指令。
在一些实施例中,响应于该指令,用户级线程分叉模块可以将一个或多个指令地址786存储在第一处理器元件和附加处理器元件中的每一个都可访问的一个或多个存储位置785中。如所示,在一些实施例中,可以可选地为会用于并行处理的附加处理器元件714-1到714-N中的每一个存储指令地址786-1到786-N。如先前所述,在一些实施例中,可以为附加处理器元件中的每一个存储相同的单个地址,或者在一些实施例中,可以为附加处理器元件中的每一个存储潜在地/可选地不同的指令地址(例如,来自向量寄存器的不同的数据元素)。附加处理器元件中的每一个可以访问一个或多个指令地址786并且在该指令地址处开始并行处理。在一些实施例中,附加处理器元件中的每一个可以将该指令地址复制或存储到对应的程序计数器或指令指针中。替代地,响应于用户级分叉指令,用户级线程分叉模块可以能操作以将该地址直接存储在程序计数器或指令指针中的每一个中。
第一处理器元件还具有架构状态784。在一些实施例中,架构状态784可以包括一个或多个架构寄存器的内容或值,诸如例如,通用寄存器、紧缩数据寄存器、浮点寄存器、状态寄存器等等,潜在地与第一处理器元件的其他架构状态一起。在一些实施例中,响应于该指令,用户级线程分叉模块可以将架构状态784中的一些或全部的一个或多个副本作为架构状态787存储在一个或多个存储位置785中。如先前所述,在一个实施例中,架构状态可以包括处理器的一组或多组架构寄存器的值或内容。如所示,在一些实施例中,可以可选地为会用于并行处理的附加处理器元件714-1到714-N中的每一个存储架构状态787-1到787-N的不同的对应副本。随后,附加处理器元件中的每一个可以访问一组或多组架构状态并且在并行处理中使用该架构状态。在一些实施例中,附加处理器元件中的每一个可以可选地将该架构状态复制或存储在对应于附加处理器元件中的每一个的本地存储中,诸如例如,一组复制的架构寄存器、一个或多个高速缓存(例如,寄存器高速缓存)或其他本地存储设备。
不同类型的存储位置785适于不同实施例。合适的存储位置的示例包括但不限于,第一处理器元件的一个或多个寄存器、附加处理器元件的一个或多个寄存器、第一处理器元件和附加处理器元件中的每一个共享的存储器中的存储器位置等等、及其组合。在一些实施例中,存储位置可以表示由用于实现并行处理控制数据结构的第一处理器元件和附加处理器元件中的每一个共享的用户可寻址存储器空间中的一个或多个存储器位置。在一些实施例中,该并行处理控制数据结构与操作系统所使用的过程调用栈分开。在一些实施例中,该并行处理控制数据结构可以被第一处理器元件和附加处理器元件中的每一个访问并且可以用于在第一处理器元件与附加处理器元件中的每一个之间传递特定实现所需的各种不同类型的控制和数据。替代地,可以替代可选地使用各种其他类型的存储位置。
在一些实施例中,在已经存储了一个或多个指令地址和一组或多组架构状态之后,响应于该指令,用户级线程分叉模块可以发送一个或多个控制信号以激活或启动附加处理器元件中的每一个来进行并行处理。替代地,在其他实施例中,可以可选地省略该附加操作,因为可以基于其他标准(例如,被编程到程序计数器或存储位置785中的值、被编程到存储位置785中的架构状态等等)来推断该附加操作。在一些实施例中,为了启动这些附加处理器元件以执行并行处理,可能不需要来自操作系统的干预,并且可能不需要屈服于操作系统。
在一些实施例中,用户级分叉指令还可以可选地在第一处理器元件上执行的线程或其他代码上施加同步屏障,但这不是必须的(例如,可以可选地使用单独的用户级同步与结合指令)。如所示,在此类实施例中,第一处理器元件可以可选地包括同步结合模块782。同步结合模块可以与解码单元耦合。在一些实施例中,响应于用户级分叉指令,同步结合模块可以能操作以冻结程序计数器783或以其他方式使得程序计数器停止增加。这可以使得线程和/或第一处理器元件的进一步的指令的执行停止。如所示,同步结合模块可以与同步屏障788耦合。多个附加处理器元件还可以各自与同步屏障结构耦合。当附加处理器元件中的每一个执行用户级同步与结束指令时,其可以更新同步屏障结构中的对应的状态。作为一个示例,同步屏障结构可以是每当附加处理器元件中的一个执行其用户级同步与结束指令时要么递增要么递减的计数器。作为另一示例,同步屏障结构可以包括对于附加处理器元件中的每一个具有不同的对应位的寄存器,并且当附加处理器元件中的每一个执行其用户级同步与结束指令时,对应位可以被置位或清除,如特定实现所需的。同步结合模块782可以观察同步屏障结构中的状态,并且当状态指示所有附加处理器元件已经执行了它们对应的用户级同步与结束指令时,可以使得程序计数器783恢复增加。取出单元然后可以取出附加指令,当线程或代码的其他部分继续由第一处理器元件执行时,附加指令可以被解码或执行。
图8是用于执行用户级同步与结束指令818的实施例的处理器800的示例实施例的框图。处理器包括用于执行用户级同步与结束指令的附加处理器元件814。处理器还包括第一处理器元件802(例如,在没有限制的情况下其可能先前已经执行了用户级同步与结束指令(例如,指令706))。附加处理器元件具有可以基于下一指令的从附加处理器元件的程序计数器883取出的指示(例如,从存储器)取出用户级同步与结束指令的指令取出单元881。用户级同步与结束指令可表示宏指令、汇编语言指令、机器代码指令、或附加处理器元件的指令集的其他指令或控制信号。取出单元可以将用户级同步与结束指令提供给解码单元808。解码单元可以解码用户级同步与结束指令818。解码单元可输出反映、表示相对较高级的用户级同步与结束指令和/或从相对较高级的用户级同步与结束指令导出的一个或多个相对较低级的指令或控制信号(例如,一个或多个微指令、微操作、微代码进入点、经解码的指令或控制信号等)。可以使用与本文中所描述的其他解码器相同的方法来实现解码单元。
用户级同步线程结束单元或模块890与解码单元808的输出耦合。用户级同步线程结束模块可以表示用于执行或实现用户级同步与结束指令的一个或多个执行单元。用户级同步线程结束模块可接收表示用户级同步与结束指令和/或从用户级同步与结束指令导出的一个或多个经解码或以其他方式变换的指令或控制信号。用户级同步线程结束模块和/或处理器可包括能操作以执行用户级同步与结束指令(例如,响应于从用户级同步与结束指令解码的一个或多个指令或控制信号)的专用或特定逻辑(例如,潜在地与固件(例如,存储在非易失性存储器中的指令)和/或软件组合的晶体管、集成电路或其他硬件)。响应于用户级同步与结束指令和/或作为其结果(例如,响应于从该指令解码的一个或多个指令或控制信号),用户级同步线程结束模块可以能操作以配置、使得、或以其他方式导致附加处理器元件停止执行附加指令,并且在同步屏障处等待,直到所有其他附加处理器元件(例如,已经被相同的用户级分叉指令启动的那些附加处理器元件)已经执行了其对应的用户级同步与结束指令和/或已经到达了同步屏障。在一些实施例中,这可以包括同步线程结束模块传输或以其他方式将信号891提供给程序计数器883以冻结或停止程序计数器,从而附加指令不被取出或处理。在一些实施例中,这可以包括同步线程结束模块传输或以其他方式将信号892提供给可选的同步屏障结构888以指示附加处理器元件正在执行其用户级同步与结合指令和/或已经到达了同步屏障。如先前所述,实现屏障结构的不同方式是可能的,诸如例如,具有用于附加处理器元件中的不同的一个的不同位的寄存器、用于递增或递减的计数器等等。
在一些实施例中,如果附加处理器元件是已经被给定的用户级分叉指令激活的所有附加处理器元件中最后一个到达同步屏障的,则在附加处理器元件中的每一个已经执行了对应的用户级同步与结束指令之后,用户级同步线程结束模块可以能操作以将控制传送回第一处理器元件上的线程。例如,在一些实施例中,最后到达屏障的附加处理器元件的同步线程结束模块可以可选地传输或以其他方式将信号893提供给第一处理器元件以指示所有附加处理器元件已经到达了屏障并且结合会被完成并且在第一处理器元件上的线程的执行会恢复。在其他实施例中,当所有被激活的附加处理器元件已经到达了同步屏障时,第一处理器元件可以可选地观察同步屏障中的状态,或者接收来自同步屏障的信号。
附加处理器元件可以具有架构状态884。架构状态可以包括先前所述的架构状态的类型,诸如例如,通用寄存器、紧缩数据寄存器、浮点寄存器、状态寄存器、指令指针等等。如所示,在一些实施例中,架构状态可以包括一个或多个所谓的粘性标志(sticky flag)(例如,粘性错误标志)894。作为示例,这些粘性标志可以包括粘性浮点状态或错误标志,诸如例如,除以零标志、无效操作标志、非正规标志等等。作为一个特定示例,粘性标志可以包括x86处理器中的MXCSR寄存器中的粘性浮点错误标志。这些标志是相对粘性的,意味着一旦它们被置位,它们通常不会被清除,直到可能的错误状况被充分地研究和解决(如果合适)。粘性标志与诸如进位标志、溢出标志、零标志和其他算术标志的非粘性标志形成对比。
在一些实施例中,响应于用户级同步与结束指令,用户级同步线程结束模块可以能操作以将错误状况信息和/或对附加处理器元件所遇到的一个或多个错误状况的指示传递到第一处理器元件。在一些实施例中,错误状况信息可以与粘性标志894中的一个或多个相关联并且/或者可以包括或指示粘性标志894中的一个或多个。将此类粘性标志或错误状况信息传递或指示给第一处理器元件可以有助于允许第一处理器元件分析粘性标志或其他错误状况信息,并且适当地采取合适的动作。在不同实施例中可以以不同方式传递或指示该错误状况信息。在一些实施例中,附加处理器元件中的每一个可以将一组单独的此类信息传递到第一处理器元件。在其他实施例中,可以将一组合并的或组合的此类信息传递到第一处理器元件。作为一个示例,当附加处理器元件中的每一个执行其同步与结束指令时,其可以将该错误状况信息直接传递到第一处理器元件。典型地,第一处理器元件可以将该信息吸收进其对应的架构寄存器中,并且然后相应地处理错误状况信息。
作为另一示例,当附加处理器元件中的每一个执行其同步与结束指令时,其可以通知897或以其他方式将该错误状况信息传递到附加处理器元件和第一处理器元件可访问的存储位置885。不同类型的存储位置适于不同实施例。合适的存储位置的示例包括但不限于,附加处理器元件的一个或多个寄存器、第一处理器元件的一个或多个寄存器、第一处理器元件和附加处理器元件共享的存储器中的一个或多个存储器位置等等、及其组合。在一些实施例中,存储位置可以表示用户可寻址存储器空间中的一个或多个存储器位置,用户可寻址存储器空间由第一处理器元件和附加处理器元件中的每一个共享,并且用于实现并行处理控制数据结构。在一些实施例中,该并行处理控制数据结构可以与操作系统所使用的过程调用栈分开。在一些实施例中,该并行处理控制数据结构可以被第一处理器元件和附加处理器元件中的每一个访问,并且可以用于在第一处理器元件与附加处理器元件中的每一个之间传递特定实现所需的各种不同类型的控制和数据。替代地,可以替代可选地使用各种其他类型的存储位置。
要么在存储位置885中为附加处理器元件中的每一个存储该错误状况信息的不同的多个集合,要么在存储位置中维持和存储该错误状况信息单个组合的或合并的集合。例如,如果在附加处理器元件的任一个中的给定的粘性错误状况标志被置位,则错误状况信息的合并的或组合的集合可以置位给定的粘性错误状况标志。换言之,可以维持累积错误状况信息的单个集合,表示附加处理器元件的任一个中的任何错误状况,并且累积错误状况信息的该单个集合可以被传递到第一处理器元件。这些只是数个说明性示例。还构想了传递错误状况信息的其他方式。在一些实施例中,响应于用户级同步与结合指令,附加处理器元件还可以在存储位置885中(诸如例如,在共享用户存储器空间中)保留或存储执行的结果896。
示例性核架构、处理器和计算机架构
处理器核可以以不同方式、出于不同目的、在不同的处理器中实现。例如,这样的核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核的CPU;以及2)包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,这样的协处理器有时被称为诸如集成图形和/或科学(吞吐量)逻辑等的专用逻辑,或被称为专用核);以及4)可以将所描述的CPU(有时被称为应用核或应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上的芯片上系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图9A是示出根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图9B是示出根据本发明的各实施例的要被包括在处理器中的有序架构核的和示例性寄存器重命名的乱序发布/执行架构核的示例性实施例的框图。图9A-B中的实线框示出了有序流水线和有序核,而可选增加的虚线框示出了寄存器重命名的、乱序发布/执行流水线和核。给定有序方面是乱序方面的子集的情况下,将描述乱序方面。
在图9A中,处理器流水线900包括取出级902、长度解码级904、解码级906、分配级908、重命名级910、调度(也被称为分派或发布)级912、寄存器读取/存储器读取级914、执行级916、写回/存储器写入级918、异常处理级922和提交级924。
图9B示出了包括耦合到执行引擎单元950的前端单元930的处理器核990,且执行引擎单元和前端单元两者都耦合到存储器单元970。核990可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或混合或替代核类型。作为又一选项,核990可以是专用核,诸如例如网络或通信核、紧缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核、等等。
前端单元930包括耦合至指令高速缓存单元934的分支预测单元932,指令高速缓存单元934耦合至指令转换后备缓冲器(TLB)936,指令转换后备缓冲器936耦合至指令取出单元938,指令取出单元938耦合至解码单元940。解码单元940(或解码器)可解码指令,并生成从原始指令解码出的、或以其它方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其它指令、或其它控制信号作为输出。解码单元940可使用各种不同的机制来实现。合适的机制的示例包括但不仅限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。在一个实施例中,核990包括(例如,在解码单元940中或以其他方式在前端单元930内的)用于存储某些宏指令的微代码的微代码ROM或其他介质。解码单元940耦合至执行引擎单元950中的重命名/分配器单元952。
执行引擎单元950包括耦合至引退单元954的重命名/分配器单元952以及一组一个或多个调度器单元956。调度器单元956表示任何数目的不同调度器,包括预留站、中央指令窗等。调度器单元956耦合到物理寄存器堆单元958。每个物理寄存器堆单元958表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元958包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、和通用寄存器。物理寄存器堆单元958与引退单元954重叠以示出可以用来实现寄存器重命名和乱序执行的各种方式(例如,使用重排序缓冲器和引退寄存器堆;使用将来的文件、历史缓冲器和引退寄存器堆;使用寄存器映射和寄存器池等等)。引退单元954和物理寄存器堆单元958耦合到执行群集960。执行群集960包括一组一个或多个执行单元962和一组一个或多个存储器访问单元964。执行单元962可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能组的数个执行单元,但是其他实施例可以仅包括一个执行单元或全部都执行所有功能的多个执行单元。调度器单元956、物理寄存器堆单元958和执行群集960被示为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,各自具有其自身的调度器单元、物理寄存器堆单元和/或执行群集的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线——以及在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有存储器访问单元964的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行的,而其余的是有序的。
存储器访问单元964的集合耦合到存储器单元970,该存储器单元包括耦合到数据高速缓存单元974的数据TLB单元972,其中数据高速缓存单元耦合到第2级(L2)高速缓存单元976。在一个示例性实施例中,存储器访问单元964可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元970中的数据TLB单元972。指令高速缓存单元934进一步耦合到存储器单元970中的第2级(L2)高速缓存单元976。L2高速缓存单元976被耦合到一个或多个其他级的高速缓存,并最终被耦合到主存储器。
作为示例,示例性寄存器重命名的、乱序发布/执行核架构可以如下实现流水线900:1)指令取出938执行取出和长度解码级902和904;2)解码单元940执行解码级906;3)重命名/分配器单元952执行分配级908和重命名级910;4)调度器单元956执行调度级912;5)物理寄存器堆单元958和存储器单元970执行寄存器读取/存储器读取级914;执行群集960执行执行级916;6)存储器单元970和物理寄存器堆单元958执行写回/存储器写入级918;7)各单元可牵涉到异常处理级922;以及8)引退单元954和物理寄存器堆单元958执行提交级924。
核990可支持一个或多个指令集(例如,x86指令集(具有与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼州桑尼维尔市的ARM控股的ARM指令集(具有诸如NEON等可选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核990包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,进而允许由许多多媒体应用使用的操作通过使用紧缩数据来执行。
应当理解,核可以支持多线程操作(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程操作,各种方式包括时分多线程操作、同步多线程操作(其中,单个物理核为物理核正在同步进行多线程操作的多个线程中的每一个线程提供逻辑核)或其组合(例如,时分取出和解码以及此后诸如利用
Figure BDA0001389343460000261
超线程技术的同步多线程操作)。
尽管在乱序执行的上下文中描述了寄存器重命名,但是,应当理解,寄存器重命名可以用于有序架构中。尽管所示出的处理器的实施例还包括分开的指令和数据高速缓存单元934/974以及共享L2高速缓存单元976,但替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如第1级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及在核和/或处理器外部的外部高速缓存的组合。或者,全部高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图10A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核)。根据应用,这些逻辑块通过高带宽的互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信。
图10A是根据本发明的各实施例的单个处理器核以及它与管芯上互连网络1002的连接及其第2级(L2)高速缓存的本地子集1004的框图。在一个实施例中,指令解码器1000支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1006允许对进入标量和向量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1008和向量单元1010使用分开的寄存器集合(分别为标量寄存器11012和向量寄存器1014),并且在这些寄存器之间转移的数据被写入到存储器并随后从第一级(L1)高速缓存1006读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1004是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存的本地子集1004的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集1004中,并且可以与其它处理器核访问其自己的本地L2高速缓存子集并行地被快速访问。被处理器核写入的数据被存储在其自己的L2高速缓存子集1004中,并在必要的情况下从其它子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图10B是根据本发明的实施例的图10A中的处理器核的一部分的展开图。图10B包括L1高速缓存1004的L1数据高速缓存1006A部分,以及关于向量单元1010和向量寄存器1014的更多细节。具体地说,向量单元1010是16宽向量处理单元(VPU)(见16宽ALU 1028),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1020支持对寄存器输入的混合、通过数值转换单元1022A-B支持数值转换、并通过复制单元1024支持对存储器输入的复制。写掩码寄存器1026允许断言所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图11是根据本发明的多个实施例可能具有多于一个的核、可能具有集成存储器控制器以及可能具有集成图形器件的处理器1100的框图。图11中的实线框示出具有单一核1102A、系统代理1100、一组一个或多个总线控制器单元1116的处理器1110,而任选增加的虚线框示出具有多个核1102A-N、系统代理单元1100中的一组一个或多个集成存储器控制器单元1114、以及专用逻辑1108的替换处理器1100。
因此,处理器1100的不同实现可包括:1)CPU,其中专用逻辑1108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1102A-N是一个或多个通用核(例如,通用的有序核、通用的乱序核、这两者的组合);2)协处理器,其中核1102A-N是旨在主要用于图形和/或科学(吞吐量)的多个专用核;以及3)协处理器,其中核1102A-N是多个通用有序核。因此,处理器1100可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、紧缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器1100可以是一个或多个衬底的一部分,和/或可以使用诸如例如BiCMOS、CMOS或NMOS等的多个工艺技术中的任何一个技术将该处理器实现在一个或多个衬底上。
存储器层次结构包括核内的一个或多个层级的高速缓存、一组或一个或多个共享高速缓存单元1106以及耦合到集成存储器控制器单元1114的集合的外部存储器(未示出)。共享高速缓存单元1106的集合可以包括一个或多个中级高速缓存,诸如,第2级(L2)、第3级(L3)、第4级(L4),或其他层级的高速缓存,末级高速缓存(LLC),和/或上述各项的组合。尽管在一个实施例中,基于环的互连单元1112将集成图形逻辑1108、共享高速缓存单元1106的集合以及系统代理单元1110/集成存储器控制器单元1114互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,可以维护一个或多个高速缓存单元1106和核1102-A-N之间的一致性。
在一些实施例中,核1102A-N中的一个或多个能够实现多线程操作。系统代理1110包括协调并操作核1102A-N的那些组件。系统代理单元1110可包括例如功率控制单元(PCU)和显示单元。PCU可以是或可包括用于调节核1102A-N和集成图形逻辑1108的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个从外部连接的显示器。
核1102A-N在架构指令集方面可以是同构的或异构的;即,这些核1102A-N中的两个或更多个核可能能够执行相同的指令集,而其它核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图12-21是示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其它电子设备的其它系统设计和配置也是合适的。一般地,能够包含本文中所公开的处理器和/或其它执行逻辑的多个系统或电子设备一般都是合适的。
现在参考图12,所示出的是根据本发明一个实施例的系统1200的框图。系统1200可以包括一个或多个处理器1210、1215,这些处理器耦合到控制器中枢1220。在一个实施例中,控制器中枢1220包括图形存储器控制器中枢(GMCH)1290和输入/输出中枢(IOH)1250(其可以在分开的芯片上);GMCH 1290包括存储器和图形控制器,存储器1240和协处理器1245耦合到该存储器和图形控制器;IOH 1250将输入/输出(I/O)设备1260耦合到GMCH1290。可替代地,存储器和图形控制器中的一个或两个集成在处理器内(如本文中所描述的),存储器1240和协处理器1245直接耦合到处理器1210、以及在单一芯片中具有IOH 1250的控制器中枢1220。
在图12中以虚线表示附加的处理器1215的可选的性质。每一个处理器1210、1215可包括本文中描述的处理核中的一个或多个,并且可以是处理器1100的某一版本。
存储器1240可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1220经由诸如前端总线(FSB)之类的多分支总线、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1295与处理器1210、1215进行通信。
在一个实施例中,协处理器1245是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1220可以包括集成图形加速器。
在物理资源1210、1215之间会存在包括架构、微架构、热、功耗特性等的一系列品质度量方面的各种差异。
在一个实施例中,处理器1210执行控制一般类型的数据处理操作的指令。协处理器指令可嵌入在这些指令中。处理器1210将这些协处理器指令识别为应当由附连的协处理器1245执行的类型。因此,处理器1210在协处理器总线或者其它互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1245。协处理器1245接受并执行所接收的协处理器指令。
现在参考图13,所示为根据本发明的实施例的更具体的第一示例性系统1300的框图。如图13所示,多处理器系统1300是点对点互连系统,并且包括经由点对点互连1350耦合的第一处理器1370和第二处理器1380。处理器1370和1380中的每一个都可以是处理器1100的某一版本。在本发明的一个实施例中,处理器1370和1380分别是处理器1210和1215,而协处理器1338是协处理器1245。在另一实施例中,处理器1370和1380分别是处理器1210和协处理器1245。
处理器1370和1380被示为分别包括集成存储器控制器(IMC)单元1372和1382。处理器1370还包括点对点(P-P)接口1376和1378作为其总线控制器单元的部分;类似地,第二处理器1380包括P-P接口1386和1388。处理器1370、1380可以经由使用点对点(P-P)接口电路1378、1388的P-P接口1350来交换信息。如图13所示,IMC 1372和1382将处理器耦合至相应的存储器,即,存储器1332和存储器1334,它们可以是本地连接到相应的处理器的主存储器的部分。
处理器1370、1380可各自使用点对点接口电路1376、1394、1386、1398经由各个P-P接口1352、1354与芯片组1390交换信息。芯片组1390可任选地经由高性能接口1339与协处理器1338交换信息。在一个实施例中,协处理器1338是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在两个处理器的外部但经由P-P互连与这些处理器连接,从而如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在该共享的高速缓存中。
芯片组1390可经由接口1396耦合至第一总线1316。在一个实施例中,第一总线1316可以是外围组件互连(PCI)总线,或诸如PCI Express总线或其它第三代I/O互连总线之类的总线,但本发明的范围并不受此限制。
如图13所示,各种I/O设备1314可以连同总线桥1318被耦合至第一总线1316,总线桥1318将第一总线1316耦合至第二总线1320。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器之类的一个或多个附加处理器1315耦合到第一总线1316。在一个实施例中,第二总线1320可以是低引脚数(LPC)总线。在一个实施例中,各种设备可以耦合到第二总线1320,各种设备包括例如,键盘和/或鼠标1322、通信设备1327以及存储单元1328,存储单元1328诸如,可包括指令/代码和数据1330的磁盘驱动器或其他大容量存储设备。此外,音频I/O 1324可以被耦合至第二总线1320。注意,其他架构是可能的。例如,代替图13的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图14,所示为根据本发明的实施例的更具体的第二示例性系统1400的框图。图13和14中的类似元件使用类似附图标记,且在图14中省略了图13的某些方面以避免混淆图14的其它方面。
图14示出处理器1370、1380可分别包括集成存储器和I/O控制逻辑(“CL”)1372和1382。因此,CL 1372、1382包括集成存储器控制器单元并包括I/O控制逻辑。图14示出不仅存储器1332、1334耦合到CL 1372、1382,而且I/O设备1414也耦合到控制逻辑1372、1382。传统I/O设备1415被耦合至芯片组1390。
现在参照图15,所示出的是根据本发明实施例的SoC 1500的框图。图11中相似的部件具有同样的附图标记。另外,虚线框是更先进的SoC的可选特征。在图15中,互连单元1502被耦合至:应用处理器1510,该应用处理器包括一个或多个核142A-N的集合以及共享高速缓存单元1106;系统代理单元1110;总线控制器单元1116;集成存储器控制器单元1114;一组或一个或多个协处理器1520,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1530;直接存储器存取(DMA)单元1532;以及用于耦合至一个或多个外部显示器的显示单元1540。在一个实施例中,协处理器1520包括专用处理器,诸如例如网络或通信处理器、紧缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如图13中示出的代码1330)应用于输入指令,以执行本文描述的各功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。在需要时,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定编程语言的范围。在任一情形下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,指令表示处理器中的各种逻辑,指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。可将被称为“IP核”的此类表示存储在有形的机器可读介质上,并将其提供给各种客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态的有形安排,其包括存储介质,诸如,硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)之类的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的各实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情形下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图16是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图16示出可以使用x86编译器1604来编译高级语言1602形式的程序以生成可由具有至少一个x86指令集核的处理器1616原生地执行的x86二进制代码1606。具有至少一个x86指令集核的处理器1616表示能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能的任何处理器:(1)英特尔x86指令集核的指令集的本质部分,或(2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1604表示用于生成x86二进制代码1606(例如,目标代码)的编译器,该x86二进制代码1606可利用或不利用附加的链接处理而在具有至少一个x86指令集核的处理器1616上执行。类似地,图16示出可以使用替代的指令集编译器1608来编译高级语言1602的程序以生成可由不具有至少一个x86指令集核的处理器1614(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集和/或执行加利福尼州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生地执行的替代的指令集二进制代码1610。指令转换器1612用于将x86二进制代码1606转换成可以由不具有x86指令集核的处理器1614原生地执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1610相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成通用操作,并且将由来自替代指令集的指令构成。因此,指令转换器1612表示软件、固件、硬件或它们的组合,这些软件、固件、硬件或它们的组合通过仿真、模拟或任何其他过程允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1606。
也可以可选地将针对图2-6中任意一个所描述的组件、特征和细节应用于图1、7和8中的任意一个。此外,针对任一装置所描述的组件、特征、以及细节还可任选地应用于在实施例中可由这种装置和/或使用这种装置执行的任一方法中。可将本文所述的处理器中的任意一个包括在本文所公开的计算机系统中的任意一个中(例如,图12-15)。在一些实施例中,计算机系统可以包括互连、与该互连耦合的处理器,以及与该互连耦合的动态随机存取存储器(DRAM)。或者,替代DRAM,可使用不需要被刷新的其他类型的易失性存储器,或者可使用闪存。
在说明书和权利要求中,可能使用了术语“耦合的”和/或“连接的”及其派生词。这些术语不旨在互为同义词。相反,在多个实施例中,“连接的”可以用于指示两个或更多元件彼此直接物理和/或电接触。“耦合的”可意味着两个或更多个元件彼此直接物理和/或电接触。然而,“耦合的”也可意味着两个或更多个元件并未彼此直接接触,但是仍然彼此协作或彼此作用。例如,解码单元可以通过一个或多个中间单元、模块或其他组件与线程调度器模块和/或同步模块耦合。在附图中,箭头用于示出连接和耦合。
在说明书和/或权利要求书中,可能已使用了术语“逻辑”、“单元”、“模块”或“组件”。可将这些术语中的每一个用于指代硬件、固件、软件或它们的各种组合。在示例实施例中,这些术语中的每一个可以指集成电路、专用集成电路、模拟电路、数字电路、可编程逻辑器件、包括指令的存储器设备等,以及它们的各种组合。在一些实施例中,它们可包括至少某个硬件(例如,晶体管、门、其他电路组件等)。
可能已使用了术语“和/或”。如本文中所使用的那样,术语“和/或”意思是一个或另一个或两者(例如,A和/或B意思是:A或B,或者A和B两者)。
在以上描述中,为了提供对实施例的透彻理解,已阐述了特定的细节。然而,可以在没有这些特定细节中的一些的情况下来实践其他实施例。本发明的范围不是由以上所提供的具体示例来确定的,而仅由所附权利要求确定。在其他实例中,已经以框图形式和/或没有细节的形式示出了公知的电路、结构、设备和操作,以避免使对说明书的理解变得模糊。在认为合适的地方,已在诸附图之间重复了附图标记或附图标记的结尾部分以指示可能可选地具有类似或相同特性的对应或类似的元件,除非另外指定或是显而易见的。
某些操作可由硬件组件执行,或者能以机器可执行或电路可执行指令来具体化,这些机器可执行指令或电路可执行指令可用于使得和/或者导致机器、电路、或硬件组件(例如,处理器、处理器的部分、电路等)利用执行这些操作的指令来编程。这些操作还可任选地由硬件和软件的组合执行。处理器、机器、电路或硬件可包括专用或特定电路或其他逻辑(例如,可能与固件和/或软件组合的硬件),该专用或特定电路或其他逻辑用于执行和/或处理指令,并且响应于该指令而存储结果。
一些实施例包括制品(例如,计算机程序产品),所述制品包括机器可读介质。该介质可包括以机器可读形式提供(例如,存储)信息的机制。机器可读介质可提供或在其上存储有指令或指令序列,如果和/或当由机器执行所述指令或指令序列时,所述指令或指令序列可用于使所述机器执行和/或导致所述机器执行本文中所公开的一种或多种操作、方法或技术。
在一些实施例中,机器可读介质可包括非暂态机器可读存储介质。例如,非暂态机器可读存储介质可包括,软盘、光存储介质、光盘、光学数据存储设备、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储设备、非暂态存储器、或非暂态数据存储设备等。非暂态机器可读存储介质不由暂态传播的信号组成。在一些实施例中,存储介质可包括:包含固态物质的有形介质。
合适机器的示例包括但不限于,通用处理器、专用处理器、数字逻辑电路、集成电路等。合适的机器的另一些示例包括,包含处理器、数字逻辑电路或集成电路的计算机系统或其他电子设备。此类计算机系统或电子设备的示例包括但不限于,台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络设备(例如,路由器和交换机)、移动互联网设备(MID)、媒体播放器、智能电视、上网机、机顶盒和视频游戏控制器。
例如,贯穿本说明书对“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”的引用指示特定特征可被包括在本发明的实施中,但是不一定需要这样。类似地,在该描述中,为了使本公开流畅并辅助对各个发明性方面的理解,有时将各种特征一起归组在单个实施例、附图或对它们的描述中。然而,不应当将该公开方法解释为反映本发明需要比每项权利要求中所明确记载的更多特征的意图。相反,如所附权利要求所反映,发明性方面在于少于单个的公开实施例的所有特征。因此,将遵循具体实施方式的各项权利要求明确地结合进该具体实施方式,每一项权利要求独立地作为本发明单独的实施例而存在。
示例实施例
以下示例关于进一步的实施例。这些示例中的细节可以在一个或多个实施例中的任何地方被使用。
示例1是处理器或其他装置,包括多个处理器元件和用于执行软件线程的用户级分叉指令的第一处理器元件。第一处理器元件包括用于解码用户级分叉指令的解码器。用户级分叉指令用于指示至少一个指令地址。第一处理器元件还包括用于响应于用户级分叉指令被解码将多个处理器元件中的每一个配置为并行地执行指令的用户级线程分叉模块。
示例2包括示例1的处理器,其中解码器用于解码可选地用于指示单个指令地址的用户级分叉指令,并且其中用户级线程分叉模块用于响应于用户级分叉指令被解码,将可选的单个指令地址存储在各自对应于多个处理器元件中的不同的一个的多个程序计数器中的每一个中。
示例3包括示例1的处理器,其中解码器用于解码可选地用于指示多个不同指令地址的用户级分叉指令,并且其中用户级线程分叉模块用于响应于用户级分叉指令被解码,可选地将多个不同指令地址中的不同的一个存储在各自对应于多个处理器元件中的不同的一个的多个程序计数器中的每一个中。
示例4包括示例1至3中的任一项的处理器,其中用户级线程分叉模块用于响应于用户级分叉指令被解码,可选地将第一处理器元件的架构状态的副本提供给多个处理器元件中的每一个。
示例5包括示例4的处理器,其中用于将架构状态的副本提供给多个处理器元件中的每一个可选地包括用于将架构状态的副本存储在各自用来对应于多个处理器元件中的不同的一个的多个存储器位置中的每一个中。
示例6包括示例1至5中的任一项的处理器,其中用户级线程分叉模块用于响应于用户级分叉指令被解码,将多个处理器元件中的每一个配置为并行地执行指令而可选地无需来自监督系统软件的干预。
示例7包括示例1至6中的任一项的处理器,其中用户级线程分叉模块用于响应于用户级分叉指令被解码,可选地使得第一处理器元件停止执行软件线程的指令,并且可选地在同步屏障处等待。
示例8包括示例1至6中的任一项的处理器,其中用户级线程分叉模块响应于用户级分叉指令被解码,可选地不会使得第一处理器元件停止执行软件线程的指令。
示例9包括示例1至8中的任一项的处理器,其中多个处理器元件中的每一个用于执行对应的用户级同步与结束指令,并且其中多个处理器元件中的每一个包括:解码器,用于解码对应的用户级同步与结束指令;以及用户级同步线程结束模块,用于响应于对应的用户级同步与结束指令被解码,使得用户级同步线程结束模块被包括在其中的对应的处理器元件停止执行附加指令、等待直到多个处理器元件中的每一个已经执行了对应的用户级同步与结束指令、并且在多个处理器元件中的每一个已经执行了对应的用户级同步与结束指令之后将控制传送到会在第一处理器元件上执行的软件线程的第二指令。
示例10包括示例9的处理器,其中每个用户级同步线程结束模块用于响应于对应的用户级同步与结束指令被解码,可选地将对与一个或多个标志相关联的一个或多个错误状况的指示传递到第一处理器元件。
示例11包括示例1至10中的任一项的处理器,其中第一处理器元件可选地具有包括也被包括在多个处理器元件中的每一个的指令集中的指令的指令集。
示例12包括示例1至11中的任一项的处理器,其中第一处理器元件可选地具有比多个处理器元件中的每一个低的平均指令性能等待时间。
示例13包括示例1至11中的任一项的处理器,其中第一处理器元件可选地具有其中指令执行比多个处理器元件中的每一个的微架构的指令执行是更乱序的微架构。
示例14包括示例1至11中的任一项的处理器,其中第一处理器元件可选地具有用于按原始程序顺序将会被乱序地执行的指令的结果提交到架构状态的提交单元,并且其中多个处理器元件中的每一个不具有提交单元。
示例15包括示例1至11中的任一项的处理器,其中用户级线程分叉模块用于响应于用户级分叉指令被解码,将多个处理器元件的可选地至少二十个中的每一个配置为并行地执行指令,并且其中多个处理器元件的至少二十个全部共享单个解码器。
示例16包括示例1至11中的任一项的处理器,进一步包括:用于预测分支的分支预测单元;与分支预测单元耦合的指令预取单元,指令预取单元用于预取包括用户级分叉指令的指令;与指令预取单元耦合的第1级(L1)指令高速缓存,L1指令高速缓存用于存储指令;用于存储数据的L1数据高速缓存;用于存储数据和指令的第2级(L2)高速缓存;与解码单元、L1指令高速缓存以及L2高速缓存耦合的指令取出单元,用于从L1指令高速缓存与L2高速缓存中的一个取出用户级分叉指令,并且将用户级分叉指令提供给解码单元;用于重命名寄存器的寄存器重命名单元;用于调度已经从用户级分叉指令解码的一个或多个操作以供执行的调度器;以及提交单元。
示例17是处理器中的方法,包括在第一处理器元件处接收软件线程的用户级分叉指令。用户级分叉指令指示至少一个指令地址。该方法还包括利用第一处理器元件将多个附加处理器元件中的每一个配置为响应于用户级分叉指令而并行地执行指令。多个附加处理器元件中的每一个用于在由用户级分叉指令指示的至少一个指令地址的指令地址处开始执行指令。
示例18包括示例17的方法,其中接收包括接收指示单个指令地址的用户级分叉指令,并且其中配置包括将单个指令地址存储在各自对应于多个附加处理器元件中的不同的一个的多个程序计数器中的每一个中。
示例19包括示例17的方法,其中接收包括接收指示多个指令地址的用户级分叉指令,并且其中配置包括将多个指令地址中的每一个存储在各自对应于多个附加处理器元件中的不同的一个的多个程序计数器中的不同的一个中。
示例20包括示例17至19中的任一项的方法,其中配置包括为多个附加处理器元件中的每一个存储第一处理器元件的架构状态的副本。
示例21包括示例17至20中的任一项的方法,其中配置包括第一处理器元件将多个附加处理器元件中的每一个配置为并行地执行指令而无需来自监督系统软件的干预。
示例22包括示例17至21中的任一项的方法,进一步包括,第一处理器元件响应于执行用户级分叉指令,停止执行软件线程的指令并且在同步屏障处等待。
示例23包括示例17至22中的任一项的方法,进一步包括,多个附加处理器元件中的每一个响应于执行对应的用户级同步与结束指令,停止执行附加指令、等待直到多个附加处理器元件中的每一个已经执行了对应的用户级同步与结束指令、并且在多个附加处理器元件中的每一个已经执行了对应的用户级同步与结束指令之后将控制传送到软件线程的第二指令。
示例24包括示例23的方法,进一步包括,多个附加处理器元件中的每一个响应于执行对应的用户级同步与结束指令,将错误状况信息传递到第一处理器元件。
示例25包括示例17至24中的任一项的方法,进一步包括,多个附加处理器元件中的每一个解码被包括在第一处理器元件的指令集中的指令。
示例26包括示例17至25中的任一项的方法,进一步包括在第一处理器元件中乱序地执行指令,并且在多个附加处理器元件中的每一个中有序地执行指令。
示例27是用于处理指令的计算机系统或其他系统,包括:互连;与互连耦合的处理器,处理器包括用于执行软件线程的用户级分叉指令的多个处理器元件和第一处理器元件,用户级分叉指令用于指示至少一个指令地址,第一处理器元件用于响应于用户级分叉指令将多个处理器元件中的每一个配置为并行地执行指令;以及与互连耦合的动态随机存取存储器(DRAM),DRAM存储包括至少一个用户级分叉指令的代码。
示例28包括示例27的系统,其中第一处理器元件具有其中指令执行比多个处理器元件中的每一个的微架构的指令执行是更乱序的微架构,并且其中第一处理器用于响应于用户级分叉指令被解码,将多个处理器元件的至少二十个中的每一个配置为并行地执行指令。
示例29:制品包括非瞬态机器可读存储介质,非瞬态机器可读存储介质存储用户级分叉指令,用户级分叉指令用于指示至少一个指令地址,并且用户级分叉指令如果被处理器的第一处理器元件执行,用于使得第一处理器元件执行操作,包括响应于用户级分叉指令将处理器的多个附加处理器元件中的每一个配置为并行地执行指令,其中多个附加处理器元件中的每一个用于在由用户级分叉指令指示的至少一个指令地址的指令地址处开始执行指令,并且其中多个附加处理器元件中的每一个具有比第一处理器元件的乱序指令执行流水线更有序的指令执行流水线。
示例30包括示例29的制品,进一步包括用户级同步与结束指令,如果被多个附加处理器元件的一个附加处理器元件执行,用于使得该附加处理器元件执行操作,包括停止执行附加指令以及在同步屏障处等待直到多个附加处理器元件中的每一个已经到达了同步屏障。
示例31是处理器或其他装置,用于执行或能操作以执行示例17至26中的任一项的方法。
示例32是处理器或其他设备,其包括用于执行示例17至26中的任一项的方法的装置。
示例33是处理器,其包括用于执行示例17至26中的任一项所述的方法的模块和/或单元和/或逻辑和/或电路和/或装置的任何组合。
示例34是制品,其包括可选地非瞬态机器可读介质,该非瞬态机器可读介质可选地存储或以其他方式提供指令,如果和/或当由处理器、计算机系统、电子设备或其他机器执行该指令时,该指令能操作以使该机器执行示例17至21中的任一项的方法。
示例35是计算机系统或其他电子设备,包括总线或其他互连,示例1至16中的任一项的处理器与互连耦合,并且一个或多个组件与互连耦合,一个或多个组件从以下选出:可选的动态随机存取存储器(DRAM),可选的静态RAM,可选的闪存,可选的图形控制器或芯片,可选的视频卡,可选的无线通信芯片,可选的无线收发机,可选的全球移动通信系统(GSM)天线,可选的协处理器(例如,CISC协处理器),可选的音频设备,可选的音频输入设备,可选的音频输出设备,可选的视频输入设备(例如,视频相机),可选的网络接口,可选的通信接口,可选的持续存储器(例如,可选的相变存储器、忆阻器等等),及其组合。
示例36是处理器或其他装置,用于执行(例如,具有组件以执行或能操作以执行)基本上如本文中所述的任何用户级分叉指令。
示例37是处理器或其他装置,用于基本上如本文中所描述的执行(例如,具有组件以执行或能操作以执行)任何用户级同步与结束指令。
示例38是计算机系统或其他电子设备,其包括具有用于对第一指令集中的指令进行解码的解码单元的处理器。处理器还具有一个或多个执行单元。电子设备还包括与处理器耦合的存储设备。该存储设备用于存储第一指令,其可以是基本上如本文中所公开的指令中的任何指令(例如,用户级分叉指令或用户级同步与结合指令),并且会是第二指令集中的指令。该存储设备还用于存储指令,以便将第一指令转换为第一指令集中的一条或多条指令。当由处理器执行第一指令集中的该一条或多条指令时,这些指令用来使该处理器执行由第一指令指定的操作。
示例39是基本上如本文中所述的处理器或其他装置。
示例40是能操作以执行基本上如本文中所述的任意方法的处理器或其他装置。

Claims (24)

1.一种处理器,包括:
多个处理器元件;以及
第一处理器元件,用于执行软件线程的用户级分叉指令,所述第一处理器元件包括:
解码器,用于解码所述用户级分叉指令,其中所述用户级分叉指令用于指示至少一个指令地址;以及
用户级线程分叉模块,用于响应于所述用户级分叉指令被解码,将所述多个处理器元件中的每一个配置为并行地执行指令,其中,所述多个处理器元件中的每一个用于执行对应的用户级同步与结束指令,并且其中所述多个处理器元件中的每一个包括:
解码器,用于解码所述对应的用户级同步与结束指令;以及
用户级同步线程结束模块,用于响应于所述对应的用户级同步与结束指令被解码,使得所述用户级同步线程结束模块被包括在其中的对应的处理器元件:
停止执行附加指令;
等待直到所述多个处理器元件中的每一个已经执行了所述对应的用户级同步与结束指令;以及
在所述多个处理器元件中的每一个已经执行了所述对应的用户级同步与结束指令之后,将控制传送到会在所述第一处理器元件上执行的所述软件线程的第二指令。
2.如权利要求1所述的处理器,其特征在于,所述解码器用于解码用于指示单个指令地址的所述用户级分叉指令,并且其中所述用户级线程分叉模块用于响应于所述用户级分叉指令被解码,将所述单个指令地址存储在各自对应于所述多个处理器元件中的不同的一个的多个程序计数器中的每一个中。
3.如权利要求1所述的处理器,其特征在于,所述解码器用于解码用于指示多个不同指令地址的所述用户级分叉指令,并且其中所述用户级线程分叉模块用于响应于所述用户级分叉指令被解码,将所述多个不同指令地址中的不同的一个存储在各自对应于所述多个处理器元件中的不同的一个的多个程序计数器中的每一个中。
4.如权利要求1所述的处理器,其特征在于,所述用户级线程分叉模块用于响应于所述用户级分叉指令被解码,将所述第一处理器元件的架构状态的副本提供给所述多个处理器元件中的每一个。
5.如权利要求4所述的处理器,其特征在于,用于将所述架构状态的所述副本提供给所述多个处理器元件中的每一个包括用于将所述架构状态的副本存储在各自用来对应于所述多个处理器元件中的不同的一个的多个存储器位置中的每一个中。
6.如权利要求1所述的处理器,其特征在于,所述用户级线程分叉模块用于响应于所述用户级分叉指令被解码,将所述多个处理器元件中的每一个配置为并行地执行指令而无需来自监督系统软件的干预。
7.如权利要求1所述的处理器,其特征在于,所述用户级线程分叉模块用于响应于所述用户级分叉指令被解码,使得所述第一处理器元件:
停止执行所述软件线程的指令;以及
在同步屏障处等待。
8.如权利要求1所述的处理器,其特征在于,所述用户级线程分叉模块响应于所述用户级分叉指令被解码,不会使得所述第一处理器元件停止执行所述软件线程的指令。
9.如权利要求1所述的处理器,其特征在于,每个用户级同步线程结束模块用于响应于所述对应的用户级同步与结束指令被解码,将对与一个或多个标志相关联的一个或多个错误状况的指示传递到所述第一处理器元件。
10.如权利要求1至9中的任一项所述的处理器,其特征在于,所述第一处理器元件具有比所述多个处理器元件中的每一个低的平均指令性能等待时间。
11.如权利要求1至9中的任一项所述的处理器,其特征在于,所述第一处理器元件具有其中指令执行比所述多个处理器元件中的每一个的微架构的指令执行是更乱序的微架构。
12.如权利要求1至9中的任一项所述的处理器,其特征在于,所述第一处理器元件具有提交单元,用于按原始程序顺序将已被乱序地执行的指令的结果提交到架构状态,并且其中所述多个处理器元件中的每一个不具有提交单元。
13.如权利要求1至9中的任一项所述的处理器,其特征在于,所述用户级线程分叉模块用于响应于所述用户级分叉指令被解码,将所述多个处理器元件的至少二十个中的每一个配置为并行地执行指令,并且其中所述多个处理器元件的所述至少二十个全部共享单个解码器。
14.一种处理器中的方法,包括:
在第一处理器元件处接收软件线程的用户级分叉指令,其中所述用户级分叉指令指示至少一个指令地址;以及
响应于所述用户级分叉指令,利用所述第一处理器元件将多个附加处理器元件中的每一个配置为并行地执行指令,其中所述多个附加处理器元件中的每一个用于在由所述用户级分叉指令指示的所述至少一个指令地址的指令地址处开始执行指令,其中,所述多个附加处理器元件中的每一个响应于执行对应的用户级同步与结束指令:
停止执行附加指令;
等待直到所述多个附加处理器元件中的每一个已经执行了所述对应的用户级同步与结束指令;以及
在所述多个附加处理器元件中的每一个已经执行了所述对应的用户级同步与结束指令之后,将控制传送到所述软件线程的第二指令。
15.如权利要求14所述的方法,其特征在于,接收包括接收指示单个指令地址的所述用户级分叉指令,并且其中配置包括将所述单个指令地址存储在各自对应于所述多个附加处理器元件中的不同的一个的多个程序计数器中的每一个中。
16.如权利要求14所述的方法,其特征在于,接收包括接收指示多个指令地址的所述用户级分叉指令,并且其中配置包括将所述多个指令地址中的每一个存储在各自对应于所述多个附加处理器元件中的不同的一个的多个程序计数器中的不同的一个中。
17.如权利要求14所述的方法,其特征在于,配置包括为所述多个附加处理器元件中的每一个存储所述第一处理器元件的架构状态的副本。
18.如权利要求14所述的方法,其特征在于,配置包括所述第一处理器元件将所述多个附加处理器元件中的每一个配置为并行地执行指令而无需来自监督系统软件的干预,并且进一步包括:
在所述第一处理器元件中乱序地执行指令;以及
在所述多个附加处理器元件中的每一个中有序地执行指令。
19.一种用于指令执行的装置,能操作以执行如权利要求14-18中的任一项所述的方法。
20.一种用于指令执行的设备,包括用于执行如权利要求14-18中的任一项所述的方法的装置。
21.一种非瞬态机器可读介质,所述非瞬态机器可读介质可选地提供指令,所述指令如果被机器执行,能操作以使所述机器执行如权利要求14-18中的任一项所述的方法。
22.一种电子设备,包括:互连、与所述互连耦合的如权利要求1至13中的任一项所述的处理器、以及与所述互连耦合的动态随机存取存储器(DRAM)。
23.一种计算设备,包括:
多个处理装置;以及
第一处理装置,用于执行软件线程的用户级分叉指令,所述第一处理装置包括:
用于解码所述用户级分叉指令的装置,其中所述用户级分叉指令用于指示至少一个指令地址;以及
用于响应于所述用户级分叉指令被解码将所述多个处理装置中的每一个配置为并行地执行指令的装置,其中,所述多个处理装置中的每一个用于执行对应的用户级同步与结束指令,并且其中所述多个处理装置中的每一个包括:
用于解码所述对应的用户级同步与结束指令的装置;以及
用于响应于所述对应的用户级同步与结束指令被解码使得对应的处理装置进行以下操作的装置:
停止执行附加指令;
等待直到所述多个处理装置中的每一个已经执行了所述对应的用户级同步与结束指令;以及
在所述多个处理装置中的每一个已经执行了所述对应的用户级同步与结束指令之后,将控制传送到会在所述第一处理装置上执行的所述软件线程的第二指令。
24.一种机器可读存储介质,所述机器可读存储介质包括代码,所述代码在被执行时使机器执行如权利要求14-18中的任一项所述的方法。
CN201680012362.XA 2015-03-27 2016-02-05 用户级分叉与结合处理器、方法、系统和指令 Expired - Fee Related CN107408036B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/671,475 US9747108B2 (en) 2015-03-27 2015-03-27 User-level fork and join processors, methods, systems, and instructions
US14/671,475 2015-03-27
PCT/US2016/016700 WO2016160125A1 (en) 2015-03-27 2016-02-05 User-level fork and join processors, methods, systems, and instructions

Publications (2)

Publication Number Publication Date
CN107408036A CN107408036A (zh) 2017-11-28
CN107408036B true CN107408036B (zh) 2021-08-31

Family

ID=56975369

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680012362.XA Expired - Fee Related CN107408036B (zh) 2015-03-27 2016-02-05 用户级分叉与结合处理器、方法、系统和指令

Country Status (7)

Country Link
US (1) US9747108B2 (zh)
EP (1) EP3274816B1 (zh)
JP (1) JP6708335B2 (zh)
KR (2) KR20230020590A (zh)
CN (1) CN107408036B (zh)
TW (1) TWI628594B (zh)
WO (1) WO2016160125A1 (zh)

Families Citing this family (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA2974394C (en) * 2015-01-20 2023-09-05 Ultrata, Llc Distributed index for fault tolerant object memory fabric
EP4012548B1 (en) 2015-01-20 2024-05-01 Ultrata LLC Object memory data flow instruction execution
US10698628B2 (en) 2015-06-09 2020-06-30 Ultrata, Llc Infinite memory fabric hardware implementation with memory
US9886210B2 (en) 2015-06-09 2018-02-06 Ultrata, Llc Infinite memory fabric hardware implementation with router
US9971542B2 (en) 2015-06-09 2018-05-15 Ultrata, Llc Infinite memory fabric streams and APIs
US10248337B2 (en) 2015-12-08 2019-04-02 Ultrata, Llc Object memory interfaces across shared links
US10241676B2 (en) 2015-12-08 2019-03-26 Ultrata, Llc Memory fabric software implementation
CA3006776A1 (en) 2015-12-08 2017-06-15 Ultrata, Llc. Memory fabric operations and coherency using fault tolerant objects
CA3006773A1 (en) 2015-12-08 2017-06-15 Ultrata, Llc Memory fabric software implementation
US10387154B2 (en) * 2016-03-14 2019-08-20 International Business Machines Corporation Thread migration using a microcode engine of a multi-slice processor
US10318356B2 (en) * 2016-03-31 2019-06-11 International Business Machines Corporation Operation of a multi-slice processor implementing a hardware level transfer of an execution thread
US10387152B2 (en) * 2017-07-06 2019-08-20 Arm Limited Selecting branch instruction execution paths based on previous branch path performance
GB2569269B (en) * 2017-10-20 2020-07-15 Graphcore Ltd Synchronization in a multi-tile processing arrangement
GB2569273B (en) 2017-10-20 2020-01-01 Graphcore Ltd Synchronization in a multi-tile processing arrangement
GB2569274B (en) 2017-10-20 2020-07-15 Graphcore Ltd Synchronization amongst processor tiles
CN109117260B (zh) * 2018-08-30 2021-01-01 百度在线网络技术(北京)有限公司 一种任务调度方法、装置、设备和介质
EP3674939A1 (en) * 2018-12-31 2020-07-01 SafeNet, Inc. Method, system and device for managing an execution of a program relating to part or all of a first application
US11157283B2 (en) * 2019-01-09 2021-10-26 Intel Corporation Instruction prefetch based on thread dispatch commands
KR20210003370A (ko) 2019-07-02 2021-01-12 삼성전자주식회사 하드웨어 로직을 이용하여 통신 오버헤드를 감소시킨 스토리지 장치
GB2595303B (en) * 2020-05-22 2024-04-17 Advanced Risc Mach Ltd Profiling of sampled operations processed by processing circuitry
FR3121249B1 (fr) * 2021-03-29 2024-03-08 Vitesco Technologies Procédé d’implémentation d’un module logiciel défini par un graphe orienté non cyclique non imbriqué en environnement multi-cœur
US11704860B2 (en) 2021-05-14 2023-07-18 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11875444B2 (en) 2021-05-14 2024-01-16 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11853764B2 (en) 2021-05-14 2023-12-26 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11830123B2 (en) 2021-05-14 2023-11-28 Nvidia Corporation Accelerated processing via a physically based rendering engine
US11908064B2 (en) * 2021-05-14 2024-02-20 Nvidia Corporation Accelerated processing via a physically based rendering engine
US20220391264A1 (en) * 2021-06-03 2022-12-08 Nvidia Corporation Techniques for efficiently synchronizing multiple program threads

Citations (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5499349A (en) * 1989-05-26 1996-03-12 Massachusetts Institute Of Technology Pipelined processor with fork, join, and start instructions using tokens to indicate the next instruction for each of multiple threads of execution
JPH08249183A (ja) * 1995-02-03 1996-09-27 Internatl Business Mach Corp <Ibm> 推論並列命令スレッドの実行
US6687812B1 (en) * 1999-04-20 2004-02-03 Nec Corporation Parallel processing apparatus
CN1842769A (zh) * 2003-08-28 2006-10-04 美普思科技有限公司 用于在多线程微处理器中对并行指令流进行初始化的指令
CN101344843A (zh) * 2007-07-10 2009-01-14 北京简约纳电子有限公司 一种指令级并行处理方法
CN101546255A (zh) * 2005-04-12 2009-09-30 松下电器产业株式会社 处理器
CN102053819A (zh) * 2009-10-26 2011-05-11 索尼公司 信息处理设备和信息处理设备的指令解码器
WO2012093488A1 (ja) * 2011-01-07 2012-07-12 富士通株式会社 スケジューリング方法、およびマルチコアプロセッサシステム
CN102779024A (zh) * 2004-03-31 2012-11-14 英特尔公司 提供用户级多线程操作的方法和系统

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6651163B1 (en) * 2000-03-08 2003-11-18 Advanced Micro Devices, Inc. Exception handling with reduced overhead in a multithreaded multiprocessing system
JP3702814B2 (ja) * 2001-07-12 2005-10-05 日本電気株式会社 マルチスレッド実行方法及び並列プロセッサシステム
EP1660993B1 (en) 2003-08-28 2008-11-19 MIPS Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US8719819B2 (en) * 2005-06-30 2014-05-06 Intel Corporation Mechanism for instruction set based thread execution on a plurality of instruction sequencers
CN101103581B (zh) 2005-01-19 2012-05-30 英特尔公司 数据通信方法和装置
US8010969B2 (en) 2005-06-13 2011-08-30 Intel Corporation Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers
DE102007025397B4 (de) * 2007-05-31 2010-07-15 Advanced Micro Devices, Inc., Sunnyvale System mit mehreren Prozessoren und Verfahren zu seinem Betrieb
US8769207B2 (en) * 2008-01-16 2014-07-01 Via Technologies, Inc. Caching method and apparatus for a vertex shader and geometry shader
EP2314072B1 (en) * 2008-07-16 2014-08-27 SISVEL International S.A. Track and track-subset grouping for multi view video decoding.
US8667253B2 (en) * 2010-08-04 2014-03-04 International Business Machines Corporation Initiating assist thread upon asynchronous event for processing simultaneously with controlling thread and updating its running status in status register
US8561070B2 (en) * 2010-12-02 2013-10-15 International Business Machines Corporation Creating a thread of execution in a computer processor without operating system intervention
US9213551B2 (en) * 2011-03-11 2015-12-15 Oracle International Corporation Return address prediction in multithreaded processors
US9582287B2 (en) 2012-09-27 2017-02-28 Intel Corporation Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US9361116B2 (en) 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US10140129B2 (en) 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US9053025B2 (en) 2012-12-28 2015-06-09 Intel Corporation Apparatus and method for fast failure handling of instructions
US9417873B2 (en) 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US20140189333A1 (en) 2012-12-28 2014-07-03 Oren Ben-Kiki Apparatus and method for task-switchable synchronous hardware accelerators
US9542193B2 (en) * 2012-12-28 2017-01-10 Intel Corporation Memory address collision detection of ordered parallel threads with bloom filters
US10346195B2 (en) 2012-12-29 2019-07-09 Intel Corporation Apparatus and method for invocation of a multi threaded accelerator
JP2016526220A (ja) * 2013-05-24 2016-09-01 コーヒレント・ロジックス・インコーポレーテッド プログラム可能な最適化を有するメモリネットワークプロセッサ
US20150007196A1 (en) 2013-06-28 2015-01-01 Intel Corporation Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores

Patent Citations (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5499349A (en) * 1989-05-26 1996-03-12 Massachusetts Institute Of Technology Pipelined processor with fork, join, and start instructions using tokens to indicate the next instruction for each of multiple threads of execution
JPH08249183A (ja) * 1995-02-03 1996-09-27 Internatl Business Mach Corp <Ibm> 推論並列命令スレッドの実行
US6687812B1 (en) * 1999-04-20 2004-02-03 Nec Corporation Parallel processing apparatus
CN1842769A (zh) * 2003-08-28 2006-10-04 美普思科技有限公司 用于在多线程微处理器中对并行指令流进行初始化的指令
CN100538640C (zh) * 2003-08-28 2009-09-09 美普思科技有限公司 动态配置虚拟处理器资源的装置
CN102779024A (zh) * 2004-03-31 2012-11-14 英特尔公司 提供用户级多线程操作的方法和系统
CN101546255A (zh) * 2005-04-12 2009-09-30 松下电器产业株式会社 处理器
CN101344843A (zh) * 2007-07-10 2009-01-14 北京简约纳电子有限公司 一种指令级并行处理方法
CN102053819A (zh) * 2009-10-26 2011-05-11 索尼公司 信息处理设备和信息处理设备的指令解码器
WO2012093488A1 (ja) * 2011-01-07 2012-07-12 富士通株式会社 スケジューリング方法、およびマルチコアプロセッサシステム

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
MIPS MT Principles of Dperation,Document Number:MD00452, Revision 1.02;Anon ET AL;《https://s3-eu-west-1.amazonaws.com/downloads-mips/documents/MD00452-2B-MIPSMT-WHP-O1.02.pdf》;20130909;第2.2,5,6章 *

Also Published As

Publication number Publication date
US20160283245A1 (en) 2016-09-29
TW201702866A (zh) 2017-01-16
WO2016160125A1 (en) 2016-10-06
CN107408036A (zh) 2017-11-28
EP3274816B1 (en) 2020-03-25
JP2018509687A (ja) 2018-04-05
KR20170130383A (ko) 2017-11-28
EP3274816A1 (en) 2018-01-31
KR20230020590A (ko) 2023-02-10
KR102496402B1 (ko) 2023-02-06
EP3274816A4 (en) 2018-11-07
TWI628594B (zh) 2018-07-01
JP6708335B2 (ja) 2020-06-10
US9747108B2 (en) 2017-08-29

Similar Documents

Publication Publication Date Title
CN107408036B (zh) 用户级分叉与结合处理器、方法、系统和指令
US20220004391A1 (en) Processor having multiple cores, shared core extension logic, and shared core extension utilization instructions
US10235175B2 (en) Processors, methods, and systems to relax synchronization of accesses to shared memory
CN106708753B (zh) 在使用共享虚拟存储器的处理器中加速操作的装置和方法
CN108885586B (zh) 用于以有保证的完成将数据取出到所指示的高速缓存层级的处理器、方法、系统和指令
JP2015191657A (ja) 一方のアーキテクチャのコードモジュールが他方のアーキテクチャのライブラリモジュールを用いることを可能にするインターアーキテクチャ互換性モジュール
EP3391195A1 (en) Instructions and logic for lane-based strided store operations
US20200097291A1 (en) Apparatus and method for tile gather and tile scatter
CN108701101B (zh) 处理器系统管理中断事件的基于仲裁器的串行化
CN110659129A (zh) 用于数据表示之间的一致、加速的转换的装置和方法
JP5985526B2 (ja) システムコールのためのロバスト且つ高性能な命令
US11016556B2 (en) Instruction and logic for parallel multi-step power management flow
US9323535B2 (en) Instruction order enforcement pairs of instructions, processors, methods, and systems
EP3391235A1 (en) Instructions and logic for even and odd vector get operations
CN114253607A (zh) 用于由集群化解码流水线对共享微代码定序器的乱序访问的方法、系统和装置
US10133582B2 (en) Instruction and logic for identifying instructions for retirement in a multi-strand out-of-order processor
US20180164870A1 (en) Instruction and logic for parallel multi-step power management flow

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20210831

Termination date: 20220205