CN107810480B - 根据性能度量的指令块分配 - Google Patents

根据性能度量的指令块分配 Download PDF

Info

Publication number
CN107810480B
CN107810480B CN201680036587.9A CN201680036587A CN107810480B CN 107810480 B CN107810480 B CN 107810480B CN 201680036587 A CN201680036587 A CN 201680036587A CN 107810480 B CN107810480 B CN 107810480B
Authority
CN
China
Prior art keywords
instruction
instructions
processor
block
execution
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
CN201680036587.9A
Other languages
English (en)
Other versions
CN107810480A (zh
Inventor
J·S·格雷
D·C·伯格
A·L·史密斯
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.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN107810480A publication Critical patent/CN107810480A/zh
Application granted granted Critical
Publication of CN107810480B publication Critical patent/CN107810480B/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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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/0815Cache consistency protocols
    • G06F12/0831Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
    • G06F12/0833Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means in combination with broadcast means (e.g. for invalidation or updating)
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3433Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment for load management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • 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/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/128Replacement control using replacement algorithms adapted to multidimensional cache systems, e.g. set-associative, multicache, multiset or multilevel
    • 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30047Prefetch instructions; cache 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/3802Instruction prefetching
    • G06F9/3808Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
    • G06F9/381Loop buffering
    • 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/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • G06F9/3828Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage with global bypass, e.g. between pipelines, between clusters
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • 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/3842Speculative 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/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/3842Speculative instruction execution
    • G06F9/3846Speculative instruction execution using static prediction, e.g. branch taken strategy
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory
    • 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/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3869Implementation aspects, e.g. pipeline latches; pipeline synchronisation and clocking
    • 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/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • G06F9/3891Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute organised in groups of units sharing resources, e.g. clusters
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3089Monitoring arrangements determined by the means or processing involved in sensing the monitored data, e.g. interfaces, connectors, sensors, probes, agents
    • G06F11/3093Configuration details thereof, e.g. installation, enabling, spatial arrangement of the probes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3452Performance evaluation by statistical analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements
    • G06F2212/621Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Multimedia (AREA)
  • Computing Systems (AREA)
  • Computer Hardware Design (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

公开了用于节制基于块的处理器架构中的处理器操作的装置和方法。在所公开的技术的一个示例中,基于块的指令集架构处理器包括被配置为提取和执行指令块的序列的多个处理内核。每个处理内核包括用于执行由指令块指定的操作的功能资源。处理器还包括被配置为分配功能资源用于执行操作的内核调度器。功能资源至少部分地基于性能度量被分配用于执行指令块。性能度量可以动态地或静态地基于分支预测准确度、能量使用容限和其他合适的度量而被生成。

Description

根据性能度量的指令块分配
背景技术
由于摩尔定律所预测的晶体管规模变化继续,微处理器已经从晶体管数、集成电路成本、制造资本、时钟频率和能量效率的持续增益中受益,其中在相关联的处理器指令集架构(ISA)上变化很少。然而,过去40年来推动半导体产业发展的光刻缩放带来的益处正在放缓甚至扭转。多年来,精简指令集计算(RISC)架构一直是处理器设计的主要范例。无序超标量实现在面积或性能方面没有表现出持续改进。因此,在处理器ISA方面有针对改进的充分的机会,以扩展改善性能。
发明内容
公开了用于在基于块的处理器指令集架构(BBISA)中节制(throttle)处理器执行的方法、装置和计算机可读存储设备。在所公开技术的某些示例中,基于块的处理器执行若干的两个或更多个指令作为原子块。基于块的指令可以用于以更加显式的方式来表达程序数据流和/或指令流的语义,从而允许经改善的编译器和处理器的性能。在所公开的技术的某些示例中,基于块的处理器包括多个基于块的处理器内核。基于块的处理器内核内的功能资源可以基于可以动态地或静态地确定的性能度量而被分配给不同的指令块。在所公开技术的某些示例中,显式数据图执行指令集架构(EDGE ISA)包括关于程序控制流的信息,其可以被利用以便有效地节制指令块的执行,从而提高性能并且节省能量。
所描述的用于改善处理器性能的解决方案的技术和手段可以分开实现,或者以彼此的各种组合实现。如将在下面更充分地描述的,所描述的技术和手段可以在信号处理器、微处理器、专用集成电路(ASIC)、软处理器(例如,在现场可编程门阵列(FPGA)中实现的微处理器)、可编程逻辑或其他合适的逻辑电路。对本领域普通技术人员将明显的是,所公开的技术可以在各种计算平台中实现,包括但不限于服务器、大型机、蜂窝电话、智能电话、PDA、手持设备、手持式计算机、PDA、触摸屏平板设备、平板计算机、可穿戴计算机和膝上型计算机。
提供本发明内容以便以简化的形式介绍将在以下详细描述中进一步描述的概念的选择。本发明内容不旨在标识所要求保护的主题的关键特征或基本特征,也不旨在用于限制所要求保护的主题的范围。从下面参考附图进行的详细描述中,所公开的主题的前述和其他目的、特征和优点将变得更加明显。
附图说明
图1示出了可以在所公开的技术的一些示例中使用的基于块的处理器。
图2示出了可以在所公开的技术的一些示例中使用的基于块的处理器内核。
图3示出了根据所公开的技术的某些示例的多个指令块。
图4示出了可以在所公开的技术的一些示例中使用的源代码和指令块的部分。
图5示出了可以在所公开的技术的一些示例中使用的基于块的处理器头部和指令。
图6示出了可以在所公开的技术的一些示例中使用的指令块的状态图。
图7是示出可以在所公开的技术的一些示例中使用的基于块的处理器和存储器的图。
图8是可以在所公开技术的一些示例中使用的用于指令块序列的控制流程图。
图9是示出可以在所公开的技术的一些示例中执行的根据性能度量来分配功能资源的示例方法的流程图。
图10是示出可以在所公开的技术的一些示例中执行的调节对处理器内核和/或功能资源的分配的示例方法的流程图。
图11A-11F示出了可以在所提出的技术的一些示例中执行的在基于块的处理器中分配处理器内核的功能资源的调度器的示例。
图12是示出可以在所公开的技术的一些示例中执行的针对基于块的处理器生成包括性能量度数据的目标代码的示例方法的流程图。
图13是示出用于实现所公开的技术的一些实施例的合适的计算环境的框图。
具体实施方式
I.一般考虑
在不旨在以任何方式进行限制的代表性实施例的上下文中阐述本公开。
如本申请中使用的,单数形式“一个(a)”、“一个(an)”和“该(the)”包括复数形式,除非上下文另有明确说明。另外,术语“包括(includes)”表示“包括(comprises)”。此外,术语“耦合”涵盖将项目耦合或链接在一起的机械的、电的、磁性的、光学的以及其他实际的方式,并且不排除在耦合项目之间存在中间元件。此外,如本文中使用的,术语“和/或”表示短语中的任何一个项目或项目的组合。
本文中描述的系统、方法和装置不应当被解释为以任何方式进行限制。相反,本公开涉及各种公开的实施例的所有新颖的和非显而易见的特征和方面,以单独地以及彼此的各种组合和子组合的方式。所公开的系统、方法和装置不限于任何特定方面或特征或其组合,所公开的内容和方法也不要求存在任何一个或多个特定优点或解决任何一个或多个特定问题。此外,所公开的实施例的任何特征或方面可以以彼此的各种组合和子组合来使用。
尽管为了便于表达而以特定的相继顺序描述了所公开的一些方法的操作,但是应当理解,除非下面阐述的特定语言要求特定的排序,否则这种描述方式包括重新排列。例如,顺序描述的操作在一些情况下可以被重新排列或同时执行。而且,为了简单起见,附图可能并且未示出所公开的事物和方法可以与其他事物和方法结合使用的各种方式。另外,该描述有时使用诸如“产生”、“生成”、“显示”、“接收”、“发出(emit)”、“验证”、“执行”和“发起”等术语来描述所公开的方法。这些术语是对所执行的实际操作的高级描述。对应于这些术语的实际操作将根据具体实现而变化,并且容易被本领域的普通技术人员辨别。
为了更好理解的目的,已经提供了本文中参考本公开的装置或方法呈现的操作理论、科学原理或其他理论描述,并且其不旨在限制范围。所附权利要求书中的装置和方法不限于以这种操作理论描述的方式起作用的那些装置和方法。
所公开的方法中的任一个可以实现为存储在一个或多个计算机可读介质(例如,计算机可读介质,诸如一个或多个光学介质盘、易失性存储器组件(诸如DRAM或SRAM)或非易失性存储器组件(诸如硬盘驱动器))上并且在计算机(例如,任何市售计算机,包括智能电话或包括计算硬件的其他移动设备)上执行的计算机可执行指令。用于实现所公开的技术的任何计算机可执行指令以及在实现所公开的实施例期间创建和使用的任何数据可以存储在一个或多个计算机可读介质(例如,计算机可读存储介质)上。计算机可执行指令可以是例如经由网页浏览器或其他软件应用(诸如远程计算应用)访问或下载的专用软件应用或软件应用的一部分。这样的软件可以例如在单个本地计算机上(例如,作为在任何合适的市售计算机上执行的代理)或者使用一个或多个网络计算机在网络环境中(例如,经由因特网、广域网、局域网、客户端服务器网络(诸如云计算网络)或其他这样的网络)执行。
为了清楚起见,仅描述了基于软件的实施方式的某些所选择的方面。本领域公知的其他细节被省略。例如,应当理解,所公开的技术不限于任何特定的计算机语言或程序。例如,所公开的技术可以通过用C、C++、Java或任何其他合适的编程语言编写的软件来实现。同样,所公开的技术不限于任何特定的计算机或硬件类型。合适的计算机和硬件的某些细节是众所周知的,因而不需要在本公开中详细阐述。
此外,任何基于软件的实施例(包括例如用于引起计算机执行所公开的任何方法的计算机可执行指令)可以通过合适的通信手段来上载、下载或远程访问。这种合适的通信手段包括例如因特网、万维网、内联网、软件应用、电缆(包括光纤电缆)、磁通信、电磁通信(包括RF、微波和红外通信)、电子通信、或其他这样的通信手段。
II.所公开的技术的简介
超标量无序微架构采用大量的电路资源来重新命名寄存器,以数据流顺序调度指令,在未命中推测(miss-speculation)之后进行清理,并且为了精确的例外而退出(retire)结果。这包括昂贵的电路,诸如深度多端口寄存器文件、用于数据流指令调度唤醒的多端口内容可访问存储器(CAM)、以及多宽总线多路复用器和旁路网络,所有这些都是资源密集型的。例如,在FPGA实现中,多读、多写RAM可能需要混合复制、多周期操作、时钟倍频、存储体交错、实时值表和其他昂贵的技术。
所公开的技术可以通过应用包括高指令级并行(ILP)、无序(OoO)、超标量执行在内的技术来实现性能增强,同时避免处理器硬件和相关联的软件两者根本的复杂度和开销。在所公开的技术的一些示例中,基于块的处理器使用被设计用于面积和能量高效率且高ILP执行的EDGE ISA。在一些示例中,EDGE架构和相关联的编译器的使用巧妙处理寄存器重命名、CAM和复杂度。
在所公开的技术的一些示例中,一种装置包括基于块的指令集架构处理器,该处理器具有被配置为提取和执行指令块的序列的一个或多个处理内核。每个处理内核包括用于执行操作的功能资源,操作由指令块内的指令头部和指令指定。处理器包括一个或多个内核调度器,一个或多个内核调度器被配置为分配处理内核的功能资源以用于执行由指令块指定的操作中的至少一些操作。功能资源至少部分基于性能度量被分配用于在指令块中执行。
性能度量可以基于多个不同的参数。例如,性能度量可以基于分支预测准确度、指令高速缓存未命中、指令高速缓存混叠(aliasing)、数据高速缓存未命中、数据高速缓存混叠、存储器负载冲突、存储器存储区清除、或由指令块处理的数据的数据熵。在一些示例中,性能度量可以基于处理器的能量使用的容限水平。在一些示例中,处理器内的性能计数器用于收集关于指令块使用的数据,该数据又可以用于监测处理器的性能,以及用于调节被用来调节功能资源的分配的性能度量。
所公开的技术可以与或不与推测性执行一起使用。在一些示例中,调度器被配置为在推测性地分配的块被明确地知道执行之前,针对该推测性地分配的块推测性地发起指令提取、解码和/或执行。在一些示例中,可以刷新处理器内核,从而避免需要刷新在那些处理器内核上的指令块。在一些示例中,调度器被配置为向具有较高置信度水平的那些指令块分配更多功能资源。
在所公开的技术的一些示例中,一种方法包括:利用基于块的处理器来执行第一指令块,并且在完成第一指令块的执行之前,至少部分基于针对该基于块的处理器的性能度量来发起第二指令块到一个或多个处理器内核的分配。
在所公开的技术的一些示例中,一种处理器执行一种方法,该方法包括:分析针对基于块的处理器的指令以确定针对使用基于块的指令而执行的控制流操作的概率,并且发出包括性能度量数据的指令块的目标代码,该性能度量数据指示所确定的概率中的至少一个概率。性能度量数据可以以多种方式编码,包括在指令块的指令头部内,在目标代码内的表中,在指令块中的未使用的指令时隙内,或者在指令字段内。
在所公开的技术的一些示例中,在指令块内组织的指令以原子方式被提取、执行和提交(commit)。块内部的指令以数据流顺序执行,这减少或消除了使用寄存器重命名并且提供功率高效的OoO执行。可以使用编译器通过ISA显式地编码数据依赖关系,从而减少或消除处理器内核控制逻辑在运行时重新发现依赖关系的负担。使用谓词执行(predicated execution),可以将块内分支转换为数据流指令,并且除了存储器依赖关系之外的依赖关系可以被限制为直接数据依赖关系。所公开的目标形式编码技术允许块内的指令经由操作数缓冲器直接传送它们的操作数,减少了对耗电的多端口物理寄存器文件的访问。
在指令块之间,指令可以使用存储器和寄存器进行通信。因此,通过利用混合数据流执行模型,EDGE架构仍然可以支持命令式编程语言和顺序存储器语义,但是有利地还享受具有近乎按顺序的功率效率和复杂度的无序执行的益处。
如相关领域的普通技术人员将容易理解的,所公开的技术的一系列实施方式可能具有在面积和性能上的各种折衷。
III.示例性的基于块的处理器
图1是可以在所公开技术的一些示例中实现的基于块的处理器100的框图10。处理器100被配置为根据描述处理器操作的多个方面的指令集架构(ISA)来执行原子指令块,该指令集架构包括寄存器模型、由基于块的指令执行的多个定义的操作、存储器模型、中断、以及其他架构特征。基于块的处理器包括多个处理内核110,包括处理器内核111。
如图1所示,处理器内核经由内核互连120彼此连接。内核互连120承载内核110中的各个内核、存储器接口140和输入/输出(I/O)接口145之间的数据和控制信号。内核互连120可以使用电、光、磁或其他合适的通信技术传输和接收信号,并且可以取决于特定的期望配置来提供根据多个不同拓扑所布置的通信连接。例如,内核互连120可以具有交叉开关、总线、点对点总线链路或其他合适的拓扑结构。在一些示例中,内核110中的任何一个可以连接到任何其他内核,而在其他示例中,一些内核仅连接到其他内核的子集。例如,每个内核只能连接到最近的4、8或20个相邻内核。内核互连120可以用于传输去往和来自内核的输入/输出数据,以及传输去往和来自内核的控制信号和其他信息信号。例如,内核110中的每个内核可以接收和传输指示各个内核当前正在执行的指令的执行状态的信号。在一些示例中,内核互连120被实现为连接内核110、寄存器文件和存储器系统的导线,而在其他示例中,内核互连可以包括用于在互连导线上复用数据信号的电路、开关和/或路由组件,包括有源信号驱动器和中继器、流水线寄存器或其他合适的电路。在所公开的技术的一些示例中,在处理器100内部和去往/来自处理器100传输的信号不限于全摆幅电数字信号,而是处理器可以被配置为包括用于传输数据和控制信号的差分信号、脉冲信号或其他合适的信号。
在图1的示例中,处理器的存储器接口140包括接口逻辑,其用于连接到附加存储器,例如位于除了处理器100之外的另一集成电路上的存储器。如图1所示,外部存储器系统150包括L2高速缓存152和主存储器155。在一些示例中,L2高速缓存可以使用静态RAM(SRAM)来实现,并且主存储器155可以使用动态RAM(DRAM)来实现。在一些示例中,存储器系统150被包括在与处理器100的其他组件相同的集成电路上。在一些示例中,存储器接口140包括允许传输存储器中的数据块而不使用寄存器文件和/或处理器100的直接存储器访问(DMA)控制器。在一些示例中,存储器接口管理虚拟存储器的分配,以扩展可用的主存储器155。
I/O接口145包括用于接收和发送输入和输出信号给其他组件的电路,诸如硬件中断、系统控制信号、外围接口、协处理器控制和/或数据信号(例如,用于图形处理单元、浮点协处理器、神经网络协处理器、机器学习模型评估器协处理器、物理处理单元、数字信号处理器或其他协处理组件的信号)、时钟信号、信号量或其他合适的I/O信号。I/O信号可以是同步的也可以是异步的。在一些示例中,I/O接口的全部或部分使用存储器映射I/O技术结合存储器接口140来实现。
基于块的处理器100还可以包括控制单元160。控制单元160监管处理器100的操作。可以由控制单元160执行的操作可以包括分配和解除分配内核以用于执行指令处理,控制任何内核、寄存器文件、存储器接口140和/或I/O接口145之间的输入数据和输出数据。控制单元160还可以处理硬件中断,并且控制读取和写入特殊的系统寄存器,例如存储在一个或多个寄存器文件中的程序计数器。在所公开的技术的一些示例中,控制单元160至少部分使用一个或多个处理内核110来实现,而在其他示例中,控制单元160使用非基于块的处理内核(例如,通用的RISC处理内核)来实现。在一些示例中,控制单元160至少部分地使用以下一项或多项来实现:硬连线有限状态机、可编程微码、可编程门阵列或其他合适的控制电路。在替代示例中,控制单元功能可以由内核110中的一个或多个来执行。
控制单元160包括165用于向处理器内核110分配指令块的内核调度器165。内核调度器165可以使用控制单元160的资源或者使用不同的或附加的资源来实现。在一些示例中,内核调度器165使用耦合到存储器的通用处理器来实现,该存储器被配置为存储用于调度指令块的数据。在一些示例中,内核调度器165使用专用处理器或者使用耦合到存储器的基于块的处理器内核来实现。在一些示例中,内核调度器165被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或基于块的处理器内核)上执行的操作系统生成可以至少部分用于利用内核调度器165来调度指令块的优先级、预测和其他数据。如相关领域的普通技术人员将容易明白的,可以使用以集成电路、可编程逻辑或其他合适的逻辑实现的其他电路结构来实现用于内核调度器165的硬件。
如本文中使用的,调度器分配涉及引导指令块的操作,包括发起指令块映射、提取、解码、执行、提交、中止、空闲和刷新指令块。指令操作的上述阶段是出于说明的目的,并且在所公开的技术的一些示例中,某些操作可以被组合、省略、分离成多个操作,或者添加附加的操作。控制单元160还包括性能监测器167,其监测处理器内核110上的指令块的操作。例如,性能监测器167可以统计或者以其他方式收集影响性能的指令操作的度量的统计,包括但不限于分支预测准确度、分支错误预测的数目、指令高速缓存未命中、指令高速缓存混叠、数据高速缓存未命中、数据高速缓存混叠、存储器负载冲突、存储器存储区清除、能量使用、或其他这样的度量。性能监测器167收集的度量可以用于例如通过增加或减少分配给特定指令块或指令块序列的内核和/或功能资源的数目来指引指令块的分配。
内核调度器165可以用于管理多个软件线程之间的资源的合作和/或竞争,包括来自不同进程的多个软件线程,这些软件线程被调度给相同处理器的不同内核。在一些示例中,多个线程竞争内核资源,并且调度器处理资源在线程之间的分配。
在一些示例中,所有线程以相同的优先级在处理器100上执行。在其他示例中,取决于所分配的优先级,处理器可以被配置(例如,通过在处理器上执行的操作系统或并行运行时间)为指令执行线程的硬件消耗更多或更少的资源。在一些示例中,调度器对特定线程的块的性能度量进行加权,包括执行线程对其他线程的相对优先级,以便确定处理器资源到每个相应线程的分配。
基于块的处理器100还包括时钟发生器170,其将一个或多个时钟信号分发给处理器内的各种组件(例如,内核110、互连120、存储器接口140和I/O接口145)。在所公开的技术的一些示例中,所有组件共享公共时钟,而在其他示例中,不同组件使用不同的时钟,例如具有不同时钟频率的时钟信号。在一些示例中,时钟的部分被门控,以当处理器组件中的一些未被使用时实现功率节省。在一些示例中,时钟信号使用锁相环(PLL)来生成,以生成固定的恒定频率和占空比的信号。接收时钟信号的电路可以在单边(例如,上升沿)被触发,而在其他示例中,接收电路中的至少一些被上升和下降时钟边触发。在一些示例中,时钟信号可以光学地或无线地传输。IV.示例性的基于块的处理器内核
图2是进一步详细描述可以在所公开的技术的某些示例中使用的用于基于块的处理器100的示例微架构、并且具体地是基于块的处理器内核之一的实例的框图200。为了便于解释,示例性的基于块的处理器内核被图示为具有五个阶段:指令提取(IF)、解码(DC)、操作数提取、执行(EX)和存储器/数据访问(LS)。在一些示例中,对于某些指令(诸如浮点运算),各种等待时间(latency)的各种流水线化功能单元可能引起附加的流水线阶段。然而,相关领域的普通技术人员将容易理解,可以修改所示的微架构(诸如添加/移除阶段、添加/移除执行操作的单元以及其他实现细节)以适应基于块的处理器的特定应用。
如图2所示,处理器内核111包括控制单元205,该控制单元205生成用于调节内核操作的控制信号,并且使用内核级指令内核调度器206来调度内核内的指令流。内核级指令内核调度器206可以用于补充或替代处理器级指令内核调度器165。内核调度器206可以用于根据与上文关于处理器级内核调度器165所描述的那些类似的技术来控制处理器内核111内的指令块的操作。例如,内核调度器206可以使用控制单元205的资源或者使用不同的或附加的资源来实现。在一些示例中,内核调度器206使用通用处理器内核和被配置为存储用于调度指令块的数据的存储器来实现。在一些示例中,内核调度器206被实现为耦合到存储器的有限状态机。在一些示例中,在处理器(例如,通用处理器或基于块的处理器内核)上执行的操作系统生成可以至少部分用于利用内核调度器206来调度指令块的优先级、预测和其他数据。如相关领域的普通技术人员将容易明白的,以集成电路、可编程逻辑或其他合适的逻辑实现的其他电路结构可以用于实现用于内核调度器206的硬件。
控制单元205还包括性能监测器207,性能监测器207可以统计或者收集关于影响利用处理器内核111执行的指令块的性能的指令操作的度量的统计。
示例性处理器内核111包括两个指令窗口210和211,每个指令窗口可以被配置为执行指令块。在所公开的技术的一些示例中,指令块是基于块的处理器指令的原子集合,其包括指令块头部和若干的一个或多个指令。如将在下面进一步讨论的,指令块头部包括可以用于进一步定义指令块内的多个指令中的一个或多个指令的语义的信息。取决于所使用的特定的ISA和处理器硬件,指令块头部还可以在指令的执行期间使用,并且用于通过例如允许指令和/或数据的早和/或晚提取、改进的分支预测、推测性执行、提高的能量效率和改进的代码紧凑性来提高执行指令块的性能。在其他示例中,不同数目的指令窗口是可能的,诸如一个、四个、八个或其他数目的指令窗口。
指令窗口210和211中的每个指令窗口可以从连接到互连总线和指令高速缓存227的输入端口220、221和222中的一个或多个接收指令和数据,互连总线和指令高速缓存227又连接到指令解码器228和229。附加的控制信号也可以在附加的输入端口225上被接收。指令解码器228和229中的每个指令解码器解码指令块的指令块头部和/或指令,并且将解码的指令存储在位于每个相应的指令窗口210和211中的存储器存储215和216中。
处理器内核111还包括耦合到L1(一级)高速缓存235的寄存器文件230。寄存器文件230存储在基于块的处理器架构中定义的寄存器的数据,并且可以具有一个或多个读取端口以及一个或多个写入端口。例如,寄存器文件可以包括用于将数据存储在寄存器文件中的两个或更多个写入端口,以及具有用于从寄存器文件内的各个寄存器读取数据的多个读取端口。在一些示例中,单个指令窗口(例如,指令窗口210)可以一次只访问寄存器文件的一个端口,而在其他示例中,指令窗口210可以访问一个读取端口和一个写入端口,或者可以同时访问两个或更多个读取端口和/或写入端口。在一些示例中,寄存器文件230可以包括64个寄存器,每个寄存器保持32位数据的字。(除非另有说明,否则本申请将32位数据称为字)。在一些示例中,寄存器文件230内的一些寄存器可以被分配给特殊目的。例如,一些寄存器可以专用作系统寄存器,其示例包括存储恒定值(例如,全零字)的寄存器、指示被执行的程序线程的当前地址的程序计数器(PC)、物理内核号码、逻辑内核号码、内核分配拓扑、内核控制标志、处理器拓扑或其他合适的专用目的。在一些示例中,一个或每个程序计数器存在多个程序计数器寄存器,以允许在一个或多个处理器内核和/或处理器上并行执行多个执行线程。在一些示例中,程序计数器被实现为指定的存储器位置而不是寄存器文件中的寄存器。在一些示例中,系统寄存器的使用可以受操作系统或其他监管计算机指令的限制。在一些示例中,寄存器文件230被实现为触发器(flip-flop)阵列,而在其他示例中,寄存器文件可以使用锁存器、SRAM或其他形式的存储器存储装置来实现。给定处理器(例如,处理器100)的ISA规范规定如何定义和使用寄存器文件230内的寄存器。
在一些示例中,处理器100包括由多个处理器内核共享的全局寄存器文件。在一些示例中,取决于处理器ISA和配置,与处理器内核相关联的各个寄存器文件可以被静态地或动态地组合以形成更大的文件。
如图2所示,指令窗口210的存储器存储215包括多个解码的指令241、左操作数(LOP)缓冲器242、右操作数(ROP)缓冲器243以及指令记分板245。在所公开的技术的一些示例中,指令块的每个指令被分解成一行解码的指令、左操作数和右操作数以及记分板数据,如图2所示。解码的指令241可以包括作为比特级控制信号存储的指令的部分解码或完全解码的版本。操作数缓冲器242和243存储操作数(例如,从寄存器文件230接收的寄存器值、从存储器接收的数据、在指令内编码的立即操作数、由较早发布的指令所计算的操作数、或其他操作数值),直到它们各自的解码的指令已准备好执行。在所示示例中,指令操作数从操作数缓冲器242和243而不是寄存器文件中读取。在其他示例中,指令操作数可以从寄存器文件230中读取。
第二指令窗口211的存储器存储216存储与存储器存储215相似的指令信息(解码的指令、操作数和记分板),但是在图2中为简单起见而未示出。指令块可以由第二指令窗口211关于第一指令窗口同时或顺序地执行,这受ISA限制并且由控制单元205指引。
在所公开的技术的一些示例中,前端流水线阶段IF和DC可以从后端流水线阶段(IS、EX、LS)解耦。控制单元可以每个时钟周期提取两个指令并且将其解码到指令窗口210和211中的每个指令窗口中。控制单元205提供指令窗口数据流调度逻辑,以监测每个解码的指令的输入的就绪状态(例如,使用计分板245的每个相应指令的谓词和操作数)。当特定解码指令的所有输入准备就绪时,该指令准备好发布。控制逻辑205然后每个周期发起一个或多个下一指令(例如,编号最小的就绪指令)的执行,并且其解码的指令和输入操作数被发送到一个或多个功能单元260以用于执行。解码的指令也可以编码多个就绪事件。控制逻辑205中的调度器接受这些和/或来自其他来源的事件,并且更新窗口中的其他指令的就绪状态。因此,从处理器内核111准备好的零输入指令开始、零输入指令所针对的指令、等等,执行继续。
解码的指令241不需要以它们被布置在指令窗口210的存储器存储215内的相同顺序来执行。而是,指令记分板245用于跟踪解码的指令的依赖关系,并且当依赖关系已经被满足时,相关联的单个解码的指令被调度用于执行。例如,当针对相应指令的依赖关系已经满足时,可以将对相应指令的引用推送到就绪队列上,并且可以从就绪队列中以先进先出(FIFO)顺序调度指令。存储在记分板245中的信息可以包括但不限于相关联的指令的执行谓词(诸如指令是否正在等待谓词位以被计算以及指令是否在谓词位为真或假时执行)、对指令的操作数的可用性、流水线化的功能单元发布资源的可用性、结果回写资源的可用性、或在发布和执行相关联的单独指令之前所需要的其他先决条件。
在一个实施例中,记分板245可以包括由指令解码器231初始化的解码的就绪状态、和在指令执行期间由控制单元205初始化的有效就绪状态。例如,解码的就绪状态可以对相应的指令是否已经被解码、可能经由广播信道等待谓词和/或某个操作数、或者立即准备发布进行编码。有效就绪状态可以对相应的指令是否等待谓词和/或某个(些)操作数、准备好发布、还是已经发布进行编码。解码的就绪状态可以在块复位或块刷新时被清除。在分支到新的指令块时,解码的就绪状态和解码的有效状态被清除(块或内核复位)。然而,当指令块在内核上被重新执行时,诸如当其分支回到自己时(块刷新),只有有效就绪状态被清除。块刷新可以立即发生(当指令块分支到自己时)或者在执行一些其他介入指令块之后发生。因此可以保留指令块的解码就绪状态,从而不需要重新提取以及解码块的指令。因此,块刷新可以用来在循环和其他重复程序结构中节省时间和能量。
存储在每个指令窗口中的指令的数目通常对应于指令块内的指令的数目。在一些示例中,指令块内的指令的数目可以是32、64、128、1024或另外的指令数目。在所公开的技术的一些示例中,在处理器内核内跨多个指令窗口分配指令块。
可以使用位于处理器内核111内的控制单元205来分配和调度指令。控制单元205协调从存储器提取指令、解码指令、一旦指令被加载到相应的指令窗口中就执行指令、数据流入/流出处理器内核111、以及由处理器内核输入和输出的控制信号。例如,控制单元250可以包括以在调度指令中使用的就绪队列,如上所描述。存储在位于每个相应的指令窗口210和211中的存储器存储215和216中的指令可以以原子方式执行。因此,对被执行的指令影响的可见架构状态(诸如寄存器文件230和存储器)的更新可以被本地缓冲在内核200内,直到指令被提交。控制单元205可以确定指令何时准备好提交,对提交逻辑进行排序,并且发布提交信号。例如,指令块的提交阶段可以在所有寄存器写入被缓冲时开始,所有对存储器的写入都被缓冲,并且分支目标被计算。指令块可以在对可见架构状态的更新完成时提交。例如,当寄存器写入作为寄存器文件被写入时,可以提交指令块,存储被发送到加载/存储单元或存储器控制器,并且提交信号被生成。控制单元205还至少部分控制功能单元260到各个指令窗口中的每个指令窗口的分配。
如图2所示,具有多个执行流水线寄存器255的第一路由器250用于将来自指令窗口210和211中的任一个指令窗口的数据发送到一个或多个功能单元260,功能单元260可以包括但不限于整数ALU(算术逻辑单元)(例如,整数ALU 264和265)、浮点单元(例如,浮点ALU 267)、移位/旋转逻辑(例如,桶形移位器268)或其他合适的执行单元,其可以包括图形功能、物理功能和其他数学运算。然后,来自功能单元260的数据可以通过第二路由器270被路由到输出290、291和292,被路由回到操作数缓冲器(例如,LOP缓冲器242和/或ROP缓冲器243),到寄存器文件230,和/或反馈到另一功能单元,这取决于正在执行的特定指令的要求。第二路由器270包括可以用于缓冲存储器指令的加载/存储队列275、将输入到内核或从内核输出的数据存储到存储器的数据高速缓存277、以及加载/存储流水线寄存器278。因此,路由器270和加载/存储队列275可以用于避免危害通过确保如下项:任何存储的原子的、全有或全无的提交(写入到存储器);已经从内核以无序方式发布的存储最终以如被按顺序处理一样而被写入到存储器;以及从内核以无序方式发布的负载返回数据,对于每个负载,反映在逻辑上在负载之前的存储,并且不反映在逻辑上跟随负载的存储,即使这样的存储先前以无序方式执行。
内核还包括控制输出295,其用于指示例如何时对一个或多个指令窗口215或216的所有指令的执行已经完成。当指令块的执行完成时,指令块被指定为“提交”,并且来自控制输出295的信号进而可以由基于块的处理器100内的其他内核和/或由控制单元160使用以发起其他指令块的调度、提取和执行。第一路由器250和第二路由器270都可以将数据发送回指令(例如,作为用于指令块内的其他指令的操作数)。
如相关领域的普通技术人员将容易理解的,单个内核200内的组件不限于图2中所示的那些,而是可以根据特定应用的要求而改变。例如,内核可以具有更少或更多的指令窗口,单个指令解码器可以被两个或更多个指令窗口共享,并且所使用的功能单元的数目和类型可以变化,这取决于基于块的处理器的特定目标应用。在利用指令内核来选择和分配资源中应用的其他考虑包括性能要求、能量使用要求、集成电路芯片、工艺技术和/或成本。
相关领域的普通技术人员将容易明白,通过在处理器内核110的指令窗口(例如,指令窗口210)和控制逻辑205内的资源的设计和分配,可以在处理器性能方面做出权衡。面积、时钟周期、能力和限制基本上决定了单个内核110的实现性能和基于块的处理器110的吞吐量。
内核调度器206可以具有不同的功能。在某些更高性能的示例中,指令调度器是高度并发的。例如,每个周期,解码器将指令的解码的就绪状态和解码的指令写入一个或多个指令窗口中,选择要发布的下一指令或接下来的指令,并且作为响应,后端发送就绪事件——针对特定指令的输入时隙(谓词、左操作数、右操作数等)的目标就绪事件、或针对所有指令的广播就绪事件。每指令就绪状态位与解码的就绪状态一起可以用于确定指令已经准备好发布。
在一些情况下,内核调度器206接受针对还没有被解码的目标指令的事件,并且还必须抑制重新发布已经发布的就绪指令。在一些示例中,指令可以是非谓词的,或者是谓词的(基于真假条件)。谓词指令不变为准备好直到它被另一指令的谓词结果作为目标并且该结果与谓词条件相匹配。如果相关联的谓词不匹配,则指令不会发布。在一些示例中,谓词预测器单元使得谓词指令能够在对确定谓词结果值的指令的执行之前发布。在一些示例中,处理器可以随后检查推测性地发布和执行的指令被正确地推测。在一些示例中,可以重新执行错误推测的发布的指令以及消耗其输出的块中的指令的特定传递闭包,或者取消错误推测的副作用。在一些示例中,发现错误推测的指令导致完整回滚和重新执行整个指令块。
在分支到尚未驻留在(被解码到)块的指令窗口中的新的指令块时,相应的指令窗口就绪状态被清除(块复位)。但是,当指令块分支回自己(块刷新)时,只有有效就绪状态被清除。因此,可以保留针对指令块的解码的就绪状态,从而不需要重新提取和解码块的指令。因此,可以使用块刷新来在循环中节省时间和能量。
V.示例性的指令块流
现在转到图3的图300,示出了包括多个可变长度指令块311-314的基于块的指令流的一部分310。指令流可以用于实现用户应用、系统服务、或任何其他合适的用途。在图3所示的示例中,每个指令块以指令头部开始,然后是变化数目的指令。例如,指令块311包括头部320、18个指令321和两个性能度量数据字322。所示的特定指令头部320包括多个数据字段,这些数据字段部分地控制指令块内的指令的执行,并且还实现了改进的性能增强技术,包括例如分支预测、推测性执行、惰性评估和/或其他技术。指令头部320还包括ID位,其指示该头部是指令头部而不是指令。指令头部320还包括指令块大小的指示。指令块大小可以是以大于1的更大的指令组块(chunk),例如指令块内所包含的4指令组块的数目。换言之,块的大小除以4(例如,右移两位),以便压缩分配给指定块大小的头部空间。因此,0的大小值表示最小尺寸的指令块,该指令块是随后四个指令的块头部。在一些示例中,指令块大小被表示为字节数、字数、n字组块数、地址、地址偏移,或者使用描述指令块大小的其他合适的表达来表示。在一些示例中,指令块大小由指令块头部和/或尾脚(footer)中的终止位模式指示。
指令块头部320还可以包括执行标志,其指示特殊指令执行要求。例如,取决于特定的应用,对于某些指令块可以抑制分支预测或存储器依赖关系预测。
在所公开的技术的一些示例中,指令头部320包括指示编码数据是指令头部的一个或多个标识位。例如,在一些基于块的处理器ISA中,最低有效位空间中的单个ID位总是被设置为二进制值1以指示有效指令块的开始。在其他示例中,不同的比特编码可以用于标识位。在一些示例中,指令头部320包括指示相关联的指令块针对其被编码的ISA的特定版本的信息。
块指令头部320也可以包括多个块出口类型,以供例如分支预测、控制流确定和/或不良跳转检测使用。出口类型可以指示分支指令的类型,例如:顺序分支指令,其指向存储器中的下一连续指令块;偏移指令,其为到在相对于偏移计算的存储器地址处的另一指令块的分支;子例程调用或子例程返回。通过编码指令头部中的分支出口类型,分支预测器可以至少部分地在相同指令块内的分支指令已经被提取和/或解码之前开始操作。
指令块头部320还包括存储掩码,其标识被分配给存储操作的负载存储队列标识符。指令块头部还可以包括写入掩码,其标识相关联的指令块将写入哪个(些)全局寄存器。在指令块能够完成之前,相关联的寄存器文件必须接收对每个条目的写入。在一些示例中,基于块的处理器架构不仅可以包括标量指令,而且还可以包括单指令多数据(SIMD)指令,SIMD指令允许在单个指令内具有大量数据操作数的操作。
在一些示例中,性能度量数据321包括可以用于计算置信度值的信息,置信度值进而可以用于将相关联的指令块分配给一个或多个处理器内核的功能资源。例如,性能度量数据322可以包括基于相关联的指令块311的操作的动态和/或静态分析而对指令块中更可能执行的分支指令的指示。例如,与针对迭代的大立即值而执行的for循环相关联的分支指令可以被指定为具有很高的可能性被采用。也可以在性能度量数据322中指定具有低概率的分支指令。在指令块中编码的性能度量数据也可以使用性能计数器来生成,以收集关于指令块的实际执行的统计。在一些示例中,性能度量数据随时间被保留在高速缓存中或在分支预测器历史记录表中。
指令块头部320还可以包括与上述性能度量数据321类似但适于被包括在头部内的信息。
VI.示例块指令目标编码
图4是描绘C语言源代码的两个部分410和415及其各自的指令块420和425的示例的示图400,示出了基于块的指令如何可以显式地编码其目标。在这个示例中,前两个READ指令430和431分别以ADD指令432的右(T[2R])操作数和左(T[2L])操作数为目标。在所示的ISA中,读取指令是从全局寄存器文件(例如,寄存器文件160)读取的唯一指令;但是任何指令都可以以全局寄存器文件为目标。当ADD指令432接收到两个寄存器读取的结果时,它将变为就绪并且执行。
当TLEI(测试小于等于立即(test-less-than-equal-immediate))指令433从ADD接收到其单个输入操作数时,其将变为就绪并且执行。测试接着产生被广播的谓词操作数(B[1P]),该谓词操作数在信道一上向在该广播信道上监听的所有指令广播,这些指令在本示例中为两个谓词分支指令(BRO_T 434和BRO_F 435)。接收到匹配谓词的分支将被触发。
还示出了用于指令块420的依赖关系图440,作为指令节点及其相应的操作数目标455和456的阵列450。这示出了块指令420、相应的指令窗口条目和由指令表示的底层数据流图之间的对应关系。这里解码的指令READ 430和READ 431已经准备好发布,因为它们没有输入依赖关系。当它们发布并且执行时,从寄存器R6和R7读取的值被写入到ADD 432的右和左操作数缓冲器中,以将ADD 432的左和右操作数标记为“就绪”。结果,ADD 432指令变为就绪,发布给ALU,执行,并且总和被写入TLEI 433的左操作数。
VII.示例性的基于块的指令格式
图5是示出指令头部510、通用指令520和分支指令530的指令格式的通用示例的图。指令头部或指令中的每个均根据位数来标记。例如,指令头部510包括四个32位字并且从其最低有效位(lsb)(位0)直到其最高有效位(msb)(位127)被标记。如所示出的,指令头部包括写入掩码字段、存储掩码字段、性能度量字段515、多个出口类型字段、多个执行标志字段、指令块大小字段以及指令头部ID位(指令头部的最低有效位)。性能度量字段515包括可以由处理器内核调度器使用以更好地分配用于执行指令块的操作的数据。例如,性能度量字段515可以指示具有与指令头部510相关联的指令块的分支指令是否可能被采用和/或其中的哪些可能被采用,或者与正被采用的一个或更多个分支指令相关联的置信度水平。
所示的通用块指令520被存储为一个32位字并且包括操作码字段、谓词字段、广播ID字段(BID)、第一目标字段(T1)和第二目标字段(T2)。对于消费方多于目标字段的指令,编译器可以使用移动指令构建扇出树,也可以将高扇出指令分配给广播。广播支持通过轻量级网络将操作数发送给内核中的任意数目的消费方指令。广播标识符可以在通用块指令520中被编码。
虽然由通用指令520概述的通用指令格式可以表示由基于块的处理器处理的一些或全部指令,但是本领域技术人员将容易理解,即使对于ISA的特定示例,一个或多个指令字段可以偏离特定指令的通用格式。操作码字段指定由指令520执行的操作,诸如存储器读取/写入、寄存器加载/存储、加、减、乘、除、移位、旋转、系统操作或其他合适的指令。谓词字段指定指令执行的条件。例如,谓词字段可以指定值“真”,并且只有当相应的条件标志与指定的谓词值匹配时才执行该指令。因此,谓词字段至少部分指定与由于执行计算谓词结果并且以指令为目标的第二指令而导致的谓词结果相比较的真假条件,以确定第一指令是否应当发布。在一些示例中,谓词字段可以指定指令将总是或永远不会被执行。因此,使用谓词字段可以通过减少分支指令的数目,来实现更密集的目标代码、改进的能量效率和改进的处理器性能。
目标字段T1和T2指定向其发送基于块的指令的结果的指令。例如,指令时隙5处的ADD指令可以指定其计算结果将被发送到时隙3和10处的指令。在一些示例中,结果将被发送到时隙3和10的特定左操作数或右操作数。取决于具体的指令和ISA,所示的目标字段中的一个或两个可以被替换为其他信息,例如,第一目标字段T1可以被替换为立即操作数、附加操作码,指定两个目标等。
分支指令530包括操作码字段、谓词字段、广播ID字段(BID)、性能度量字段535和偏移字段。操作码和谓词字段在格式和功能上与关于通用指令所描述的类似。在一些示例中,偏移可以用四个指令块表示,从而扩展了可以在其上执行分支的存储器地址范围。利用通用指令520和分支指令530所示出的谓词可以用于避免指令块内的附加分支。例如,可以根据先前指令的结果(例如,两个操作数的比较)预测特定指令的执行。如果谓词为假,则指令将不提交由特定指令计算的值。性能度量字段535包括可以由处理器内核调度器使用以更好地分配用于执行指令块的操作的数据。例如,性能度量字段535可以指示是否可能采取分支指令530、或者与正在采取的分支指令相关联的置信度水平。
应当容易理解,如本文中使用的,术语“分支指令”不限于将程序执行改变为相对存储器位置,而是还包括跳转到绝对或符号存储器位置、子例程调用和返回、以及可以修改执行流程的其他指令。在一些示例中,执行流程通过改变系统寄存器(例如,程序计数器PC或指令指针)的值而被修改,而在其他示例中,执行流程可以通过修改存储在存储器中的指定位置处的值来改变。在一些示例中,跳转寄存器分支指令被用于跳转到存储在寄存器中的存储器位置。在一些示例中,子例程调用和返回分别使用跳转和链接以及跳转寄存器指令来实现。
应当容易理解,虽然编码的性能度量数据被描绘为在多个位置(例如,在指令块头部中,在基于块的处理器的指令时隙中,在特定指令内,等等)中被编码,但是在很多示例中,如果性能度量完全存储在目标代码中,其将只存储在一个位置。
VIII.示例处理器状态图
图6是说明在映射、执行和退出时分配给指令块的多个状态的状态图600。应当容易理解,图6所示的状态是所公开的技术的一个示例,但是在其他示例中,指令块可以具有附加的或更少的状态,并且具有与状态图600中描绘的状态不同的状态。在状态605处,指令块未被映射。指令块可以驻留在耦合到基于块的处理器的存储器中,被存储在诸如硬盘驱动器或闪速存储器驱动器等计算机可读存储设备上,并且可以位于处理器本地或者位于远程服务器处且可以使用计算机网络来访问。未映射的指令也可以至少部分驻留在耦合到基于块的处理器的高速缓冲存储器中。
在指令块映射状态610处,基于块的处理器的控制逻辑(诸如指令调度器)可以用于监测基于块的处理器的处理内核资源,并且将指令块映射到一个或多个处理内核。
控制单元可以将指令块中的一个或多个映射到处理器内核和/或特定处理器内核的指令窗口。在一些示例中,控制单元监测先前已经执行特定指令块的处理器内核,并且可以针对仍然驻留在“预热”处理器内核上的指令块重新使用解码的指令。一旦一个或多个指令块已经被映射到处理器内核,则指令块可以前进到过程框620。
当指令块处于提取状态620(例如,指令提取)时,映射的处理器内核从基于块的处理器的存储器系统提取计算机可读块指令,并且将其加载到与特定处理器内核相关联的存储器中。例如,提取的指令块的指令可以被提取并且存储在处理器内核内的指令高速缓存中。可以使用内核互连将指令传送到处理器内核。一旦提取了指令块的至少一个指令,指令块就可以进入指令解码状态630。
在指令解码状态630期间,提取的指令的各个位被解码成可以由处理器内核用来控制特定指令的执行的信号。例如,解码的指令可以被存储以上在图2中示出的存储器241中。解码包括生成用于解码的指令的依赖关系、用于解码的指令的操作数信息、以及用于解码的指令的目标。一旦指令块的至少一个指令被解码,指令块就可以进入执行状态640。
在执行状态640期间,使用例如以上关于图2讨论的功能单元260来执行与该指令相关联的操作。如上所述,所执行的功能可以包括算术功能、逻辑功能、分支指令、存储器操作和寄存器操作。与处理器内核相关联的控制逻辑监测指令块的执行,并且一旦确定指令块可以被提交或者指令块将被中止,则指令块状态被设置为提交/中止650。
在提交/中止状态650处,处理器内核控制单元确定可以完成由指令块执行的操作。例如,存储器加载存储操作、寄存器读取/写入、分支指令以及根据指令块的控制流将被明确地执行的其他指令。或者,如果指令块将被中止,例如,由于指令的依赖关系中的一个或多个不满足,或者在不满足的指令块的谓词上推测性地执行了指令,则指令块被中止,使得不会影响存储器或寄存器文件中的指令序列的状态。无论指令块被提交还是中止,指令块进入状态660以确定是否应当刷新指令块。如果指令块被刷新,则处理器内核通常使用新的数据值,特别是块的刚刚提交的执行所更新的寄存器和存储器,来重新执行指令块,并且直接进入执行状态640。因此,可以避免在映射、提取和解码指令块上花费的时间和精力。或者,如果指令块将不被刷新,则指令块进入空闲状态670。
在空闲状态670中,执行指令块的处理器内核可以通过例如在保持指令块的解码指令的至少部分的同时断电在处理器内核中的硬件而被空闲。在某一时刻,控制单元确定处理器内核上的空闲指令块是否要被刷新。如果空闲指令块要被刷新,则指令块可以在执行状态640处继续执行。或者,如果指令块将不被刷新,则指令块不被映射,并且处理器内核可以被刷新,并且随后的指令块可以被映射到冲刷后的处理器内核。
虽然为了便于解释,状态图600示出在单个处理器内核上执行的指令块的状态,但是相关领域的普通技术人员应当容易理解,在某些示例中,多个处理器内核可以用于同时执行给定指令块的多个实例。
IX.示例性的基于块的处理器和存储器
图7是示出包括基于块的处理器710的装置的图700,该处理器710具有控制处理器的操作的控制单元720,控制单元720包括内核调度器725,内核调度器725可以用来映射、分配和发起提取、解码、以及执行基于块的处理器710的内核的指令。所示出的基于块的处理器710具有8个内核,但是在其他示例中,可以有1、2、4、16、64、512、1024或者任何其他合适的数目的基于块的处理器内核(730、731、732、733、734、735、736、737)。处理器内核730-737被配置为提取、执行和退出指令块序列。每个处理内核包括用于执行由存储在指令块中的指令头部和块指令指定的操作的功能资源。内核调度器725被配置为分配功能资源以用于根据指令和相关联的指令头部来执行处理器内核操作。内核调度器可以至少部分基于性能度量来分配处理器内核和/或处理器内核的功能资源,以用于执行指令块序列。
基于块的处理器710耦合到存储多个指令块750-754的目标代码的存储器740。在所公开的技术的一些示例中,指令块地址表760可以存储在存储器中,或者在运行时动态地构建,以指示执行指令块的开始的合法地址,除了或代替使用指令块头部来在指令块750-754的开始处指示有效的分支目标位置。在所公开的技术的一些示例中,存储器740还可以存储性能度量数据。例如,性能度量数据可以包括关于指令块750-754内的特定分支指令将被采用还是不被采用的概率的统计和/或概率。在一些示例中,用于发出指令块的目标代码的编译器分析指令序列的控制流,并且生成针对特定分支目标被采用或不采用的可能性的预测,并且将该数据编码为性能度量数据的一部分。在一些示例中,使用分析器应用来执行指令块并且收集指示指令块内的特定控制流指令将被执行的可能性的统计数据。在一些示例中,可以使用从位于基于块的处理器710内的性能监测器727获取的数据来生成统计。
虽然控制单元720被示出为用于整个基于块的处理器的中央控制单元,但是在其他示例中,控制单元的全部或部分可以以分布在一个或多个处理内核730-737上的逻辑来实现。性能度量也可以使用控制单元720内的硬件来确定,而不是或者以补充存储在存储器740中的性能度量数据770。可以用来配置功能资源的分配的性能度量的示例包括但不限于:分支指令的分支预测准确度、指令高速缓存未命中、指令高速缓存混叠、数据高速缓存未命中、数据高速缓存混叠、存储器负载冲突、存储器存储冲刷或数据熵。度量可以通过多种方式表达,包括绝对计数或比率。合适的性能度量的另一示例是处理器的能量使用的容限水平。例如,处理器可以被分配以例如毫瓦数或时钟周期表示的能量使用预算,并且内核调度器725进而基于所分配的能量预算来调节功能资源的分配。在一些示例中,能量使用的容限水平基于处理器是正由电池供电还是由诸如AC电源适配器等固定电源供电来调节。
内核调度器725可以以多种方式分配功能资源。例如,可以调节用于执行特定指令块序列的处理器内核的数目。作为另一示例,内核调度器725可以节制特定处理器内核的执行以推测性地或急切地继续执行直到指令块的部分达到特定指令块状态。例如,内核可以被引导来提取并且解码指令块,但是不执行指令块,直到稍后的时间点。例如,内核调度器725可以压制指令块的执行,直到指令块将被明确地被执行的概率超过预定门限。内核调度器725可以被实现为处理器级内核调度器(例如,类似于内核调度器165)或者被实现为内核级内核调度器(例如,类似于内核调度器206)。
如本文中使用的,术语“分支指令”不限于相对分支(例如,其中目标位置被指定为与当前程序计数器值的偏移),除非另有说明。例如,分支指令包括:与偏移值相关的分支、到存储器地址的绝对分支(跳转)、子例程调用、子例程返回、或改变基于块的处理器内的指令序列的执行流的其他合适形式。
X.示例指令块序列的示例控制流图
图8是表示根据所公开的技术的可以使用基于块的处理器执行的指令块序列的控制流程的控制流图800。每个指令块由字母A到H或J表示。每个指令块被描述为具有从指令块延伸到其相应的目标位置指令块之一的一个或多个控制流边。针对指令块内的一个或多个分支指令创建控制流边。例如,指令块A 810具有两个可能的目标位置:由控制流边815访问的指令块B和由控制边816访问的指令块C。控制流图800中的每个控制流边具有与边相关联的相关置信度,该置信度表示在指令块被执行时父指令块将采取特定分支的可能性。例如,P_AB表示用于控制流边815的概率,并且P_AC表示与控制流边816相关联的概率。在一些示例中,控制流边及其相应的置信度或概率水平的表格可以被表示为表格,如下表1所示。
Figure BDA0001518333120000271
Figure BDA0001518333120000281
表1
如以上表1所示,概率边P_AB具有0.95的置信度,而控制流边P_AC具有0.05的置信度。例如,如下情况正是这样:由于控制流边AB处于具有很多迭代的循环内,或者基于通过先前执行包括指令块A、B和C在内的指令序列而收集的性能数据,生成指令块的编译器确定控制流边AB更有可能被采用。或者,可以在运行时动态地确定用于控制流边的置信度,例如通过使用性能计数器来测量控制流数据,诸如分支预测准确度,或者计数分支错误预测的数目。某些指令块只具有一个控制流边,因为只有一个目标位置可以退出该特定指令块。例如,控制流边EJ具有1.0的概率,因为指令块E只具有一个目标位置,即指令块J。
在所公开的技术的一些示例中,表格数据被部分地填充,或者存在选择的“不确定的”条目。在一些示例中,计算到不具有分配的优先级的不同块的间接分支。在一些示例中,计算到具有优先级的不同块的间接分支。在一些示例中,块之间的概率可以是上下文敏感的。例如,概率P_AC_CD(在A→C之后的C→D的分配的概率)可以是0.8,而P_BC_CD(在B→C之后的C→D的分配的概率)可以是0.2。
如本文所述,可以使用与控制流边相关联的概率。此外,指令块的指令头部可以对在运行时为指令序列构建控制流图有用的信息进行编码。此外,至少一些块指令具有隐式地或显式地表示的控制流和/或操作数流,并且在块指令内编码的该信息也可以用于生成控制流图,并且进而确定用于控制流边的置信度水平。
XI.分配功能资源的示例方法
图9是示出可以在所公开的技术的某些示例中使用的分配功能资源的方法的流程图900。流程图900中描绘的示例方法可以使用例如执行指令块的基于块的处理器(例如,基于块的处理器100)来实现。
在处理框910处,针对序列中的一个或多个指令块确定性能度量。性能度量可以基于一个或多个参数,例如:分支预测准确度、分支误预测的数目、指令高速缓存未命中、指令高速缓存混叠、数据高速缓存未命中、数据高速缓存混叠、存储器负载冲突、存储器存储冲刷或数据熵。在一些示例中,性能度量至少部分基于处理器的能量使用的容限水平。在一些示例中,性能度量在运行时动态地确定。在一些示例中,性能度量至少部分基于对指令块序列的控制流的分析来确定。在一些示例中,性能度量至少部分基于由提供指令块的程序员所提供的数据或规范。在一些示例中,性能度量被编码在指令块的指令头部和/或其一个或多个组成指令中。在一些示例中,使用性能计数器来得到性能度量。在一些示例中,在由基于块的处理器执行指令序列时,可以周期性地、间歇性地或者持续地更新性能度量。在其中调度软件与调度器硬件协作以提供性能度量的一些示例(例如,并行运行时间库)中,调度提示和/或覆盖、指令计算性能度量并且将其传送给调度器。一旦性能度量已经被确定,该方法进行到处理框920。
在处理框920处,至少部分基于在处理框910处确定的性能度量来分配一个或多个基于块的处理器内核的功能资源。例如,功能资源可以由内核调度器分配,该内核调度器集中式地(例如,使用处理器级内核调度器165)或者通过位于处理器内核内的分布式调度器(例如,使用内核级内核调度器206)控制资源到所有内核的分配。
在一些示例中,通过调节被分配用于执行一个或多个指令块的处理器内核的数目来分配功能资源。在其他示例中,根据性能度量的调度可以更细粒度化。调度器可以被配置为在块的所有依赖关系可用于处理器内核之前发起用于推测性分配的块的指令提取和/或指令解码操作。在一些示例中,在发起指令提取和解码之后,调度器被配置为抑制推测性分配的块的执行,直到其依赖关系可用于处理器内核。在一些示例中,调度器被配置为相对于相同处理器内核内的一个指令窗口,将单个处理器内核的更多功能资源分配给该处理器内核的另一指令窗口。例如,如果使用第一指令窗口执行的指令块具有低分支误预测率或高置信度水平,则可以调度大部分或全部可用功能资源用于由第一指令窗口执行。相应地,高误预测率/低置信度水平的第二指令窗口在处理器内核内仅被分配空闲功能资源或功能资源的有限预算。调度器不限于对当前正在执行的指令块的立即目标指令块进行提取、解码和执行,而且还可以预见从属的孙辈和曾孙的指令块,特别是在分支到那些特定的指令块的概率非常高或具有概率1.0的情况下。在一些示例中,当例如分支错误预测、负载依赖关系推测错误预测、高速缓存未命中或加载存储冲突变得越来越普遍时,可以减少分配给指令块的功能资源的数目。这样可以避免在这样的依赖指令块的推测执行上浪费能量,直到指令块将明确地执行存在非常高或绝对的确定性。
XII.分配基于块的处理器资源的示例方法
图10是概述可以在所公开的技术的某些示例中实践的分配基于块的处理器资源的方法的框图1000。例如,图1的基于块的处理器可以用来执行在流程图1000中概述的方法。
在处理框1010处,针对一个或多个指令块评估性能度量。如前所述,性能度量可以静态地和/或动态地确定,并且可以基于指令序列的概率和统计、使用诸如性能计数器、编程器或编译器指令等性能监测器收集的数据、或基于块的处理器的当前操作环境。例如,由调度器用来分配处理器资源的性能度量可以被调节,以便获得更高的性能,和/或减少基于块的处理器的能量使用。一旦性能度量已经被评估,该方法进行到处理框1020。
在处理框1020处,基于在处理框1010处评估的性能度量来调节基于块的处理器内核和/或基于块的处理器的功能资源和/或处理器内核的分配。例如,可以调节内核的数目、指令窗口的数目、指令块进行的允许状态、或功能资源的其他分配。在基于块的处理器的很多实现中,从指令块提取并且解码指令头部和块指令可能更有效率,但是然后等待确定特定指令块是否将在允许处理器内核发起处理器内核的执行状态之前明确地执行。基于块的处理器内核的控制单元在进行到处理框1030之前调节分配。
在处理框1030,发起对一个或多个指令块的一个或多个指令头部的提取。例如,基于与用于当前正在执行的指令块的分支指令相关联的置信度水平,一个或多个目标位置指令块可以发起由映射的处理器内核提取。由于指令头部可以包括关于数据依赖关系和分支类型的信息,所以在提取指令头部之后,性能度量的附加评估可以是可用的,在这种情况下,可以执行诸如以上关于处理框1010所描述的性能度量的附加评估。在发起提取一个或多个指令头部之后,该方法继续进行到处理框1030。
在处理框1040处,发起一个或多个指令块内的指令的提取和解码。可以在处理框1040处执行的操作包括但不限于:在处理器内核处接收I/O,将指令加载到指令高速缓存(例如,指令高速缓存227)中,使用解码器(例如,解码器230)解码来自指令高速缓存的指令,以及将指令和可用数据加载到指令窗口(例如,指令窗口210)中。例如,在处理框1040期间,可以根据基于块的处理器调度器的特定配置将解码的指令、操作数、谓词和依赖关系加载到指令窗口存储器存储中。本领域普通技术人员将容易理解,与提取和解码指令块相关联的精确操作可以取决于具体实施方式而变化。在一些示例中,调度器向处理器内核发信号通知以在提取和解码之后等待,直到指令块的依赖关系指示指令块极有可能或绝对可能执行。在其他示例中,处理器内核调度器可以发信号通知进程内核以推测性地开始执行所提取和解码的指令块。一旦控制单元调度器已经指示将要发起执行,则方法进行到处理框1050以开始执行。
在处理框1050处,发起所提取和解码的指令块的执行,并且将执行指令块的相关联指令直到可用指令被耗尽,和/或指令块执行到不同指令块目标位置的分支指令。
控制单元还包括用于确保指令块应当明确地执行的逻辑,并且响应于确定指令块应当明确地执行,将“提交”指令块。在这种情况下,方法进行到处理框1060。相反,如果不满足所有指令块依赖关系,或者否则指令块不应当执行,则方法前进到处理框1070。
在处理框1060处,通过完成由指令块指定的任何未决的外部操作来提交指令块。例如,可以执行到存储器的存储操作和/或到处理器寄存器的写入操作,作为提交指令块的部分。在一些示例中,在提交后,在加载/存储队列中排队的存储操作被写回到存储器层级。在一些示例中,在提交后,更新事务寄存器文件的提交视图,以包括由指令块写入寄存器的值。
在处理框1070处,控制单元发布中止信号,并且由处理器内核计算的结果将不被写入处理器寄存器和/或存储器,同时伴有用于将处理器返回到可见状态就像指令块从未执行的任何其他操作。
无论指令块是在处理框1060提交还是在处理框1070中止,方法都可以根据处理器的特定配置回到处理框1010、1020、1030、1040或1050中的任何一个。例如,处理器可以不评估每个指令块执行的性能度量,而是以周期性间隔或其他时间段评估,以接收中断。在一些示例中,方法可以跳过指令提取,而是继续进行到处理框1040以执行用于“热”指令块的指令。
相应地,基于调节处理器内核和/或内核和/或处理器的功能资源的分配,可以容易地调节处理器的性能和能量使用,以根据处理器的当前配置实现性能、能量和其他目标。如本文中使用的,分配功能资源不仅包括分配内核和/或处理器内的特定的标识的内核和/或资源,而且还包括调度由指令块指定的操作的执行,例如发起提取,发起执行和/或提交一个或多个指令块。此外,功能资源的分配可以推测性地或非推测性地执行。
XIII.示例处理器内核分配方案
图11A-11F描绘了可以根据所公开的技术来实践的基于多个不同方案来分配功能资源的基于块的处理器的操作。调度器分配资源的每个方案被设计为实现总体处理器功能的不同目标。
A.第一示例处理器内核分配方案
图11A是示出包括八个基于块的处理器内核1110-1117的基于块的处理器1105的图1100。插图突出显示了示出处理器内核0(附图标记1110)内的功能资源的指定的扩展描述1120。如图所示,处理器内核0(1110)的扩展描绘1120包括指令提取和解码阶段、执行和提交阶段、以及空闲阶段。每个阶段包括可以在根据特定的基于块的指令集架构在针对指令块指定的各种状态期间使用的处理器内核的硬件。虽然为了便于解释,图11A-11F中描绘的处理器内核被示出为具有三个阶段,但是应当容易理解,可以采用不同数目的阶段。例如,图6中所示的示例性处理器状态可以对应于处理器内核中的执行阶段。此外,取决于具体的实现,“指令提取和解码状态”或“执行和提交”阶段均可以被实现为两个或更多个处理器状态。
图11A中的基于块的处理器1105根据“均衡”功率方案操作,其中调度器将尝试提取并且解码根据性能度量被确定为很可能执行的指令块。在图8的控制流图中示出了与分支到特定孩子指令块的处理块相关联的可能性,置信度水平根据上表1分配。如表1所示,分支到指令块B的指令块A的置信度水平为很高可能(0.95)。因此,内核调度器继续提取、解码并且发起指令块B的执行。然而,指令块B可能不能开始执行,直到其一个或多个依赖关系可用。例如,指令块A可以产生指令块B消耗的存储器存储或者寄存器写入,在这种情况下,指令块B可以发起执行,但是实际上不执行依赖指令,直到相关联的操作数可用。然而,指令块B的依赖关系可以不依赖于指令块A,在这种情况下,指令块B内的至少部分指令可以开始执行。
此外,根据表1,图11A中示出的具体方案,指令块D和指令块E具有相应的指令块将执行的相同的置信度水平(P_BD=P_BE=0.5)(例如,一旦指令块B被确定为明确地执行)。因此,取决于指令块D和E的各自依赖关系可用于执行,指令块D和E已经被提取、解码以及执行已经被发起。此外,给定指令块E实际执行的指令块J执行的置信度水平(P_EJ=1.0)表示指令块J也被提取、解码以及执行也被发起。相关领域的普通技术人员将容易明白,置信度水平可以不仅基于控制流图中的通向特定指令块的特定边的置信度,而且基于多个指令块边的聚合可能性,其可以被分析并且用于确定孩子指令块的提取和/或执行应当被发起。相应地,如果执行指令块E、F和G的置信度水平特别高,则可以基于三个父指令块E、F和G的聚合概率提取指令块J。或者,一旦指令块J已经被加载到处理器内核上,内核调度器可以根据指令块序列的依赖关系来降低似乎将频繁执行的处理器内核的冲刷优先级。
B.第二示例处理器内核分配方案
图11B示出了基于块的处理器1105,当其调度器已经被配置为使用具有推测性执行的平衡功率方案时。处理器可以被调度为基于调度器本身的配置和/或通过使用性能度量数据来为任何特定的方案配置调度器来执行该方案。如图11B所示,指令块A已经完成执行并且提交其寄存器写入和存储器存储,并且现在处于空闲状态。由于指令块A已经完成执行,所以知道从指令块A到指令块B的分支已经被采用,并且因此指令块B的执行已经被发起。如表1所示,从指令块B到指令块D的分支概率(P_BD)是0.5,或者与从指令块B分支到指令块E(的概率P_BE)相同。因此,在推测性执行方案下,基于块的处理器内核1105被指令通过其调度器来提取、解码和发起指令块D和指令块E的执行。因为只有一个指令块实际提交,所以该方案可以实现更高的性能,但是以通过执行未提交的指令块(例如,指令块B或D)而浪费能源为代价。此外,当从指令块E到指令块J的分支概率是1.0时,调度器继续将指令块J分配给处理器内核4,并且然后提取、解码和发起指令块J的执行。由于对这三个块发起执行,所以指令块D、E或J中的任何一个将在其关联依赖关系可用时即开始实际执行。因此,在一些情况下,指令块J可以在指令块E之前开始执行,这取决于各个指令块的依赖关系。
C.第三示例处理器内核分配方案
图11C示出了根据其处理器内核调度器的方案略微不同于图11A或11B所示的方案的基于块的处理器。在图11C的示例中的处理器调度器已经确定了一组不同的置信度值,如表2所示:
Figure BDA0001518333120000351
Figure BDA0001518333120000361
表2
如以上表2所示,某些分支被采用的概率与表1中的相比已经改变,并且特别地,A分支到B(P_AB)的置信度水平现在与A分支到C(P_AC)的概率相同,或者为0.5。因此,在执行指令块A时,如图11C所示执行,指令块B和指令块C由它们各自的处理器内核1和5提取和解码。然而,该方案还根据调度器的配置和/或与当前执行的指令块序列相关联的性能度量数据来调节,使得依赖指令块被提取并且被解码,但是尚未被发起用于执行。此外,指令块B和C的一些依赖指令块也被提取和解码。例如,取决于构造块B的指令块D和E、作为来自指令块C的最可能的分支(置信值为0.9)的指令块F被提取和解码。此外,指令块J已经由处理器内核4提取和执行。指令块J依赖于指令块E和指令块F两者。因此,即使指令块J距控制流图中的指令块A更远,与在控制流图中更接近当前正在执行的指令块A的其他指令块中的一些相比,其实际执行的可能性更高。通过发起对某些指令块的提取和解码,但不发起执行,通过不推测地执行相应的指令块直到特定指令块的置信度水平足够高以保证根据当前调度方案执行指令块,可以节省大量的能量。
D.第四示例处理器内核分配方案
图11D示出了根据示例性主动性能方案对其处理器内核进行调度的基于块的处理器1105。再次地,控制流图800和表1中列出的置信度水平用于该特定示例。如图11D所示,即使指令块A仍然在处理器内核0上执行,因为具有可用的处理器内核,内核调度器还映射、提取和解码,并且发起执行尽可能多的指令块。因此,如图所示,孩子指令块B和C、它们各自的孩子块D、E、F和G以及曾孙指令块J全部被提取和解码,并且执行已经被发起。因此,图11D中的处理器内核1-7中的任何一个将在它们各自的指令块依赖关系可用时即开始执行。因此,执行所示出的指令序列所花费的时间量可以减少,但是以执行但不提交的指令块浪费的能量为代价,因为指令序列实际上并不分支到那些指令块。应当注意,根据表1中列出的控制流图800的示例置信度值,由于实际执行指令块J的聚合概率(P_AB×P_BE×P_EJ=0.95×0.5×1.0=0.0475)高于实际执行指令块H的聚合概率(P_AC×P_CH=0.05×0.05=0.0025),因此甚至在指令块H之前,指令块J也被提取并且发起执行。
然而,应当注意,在图11D示的所示示例中,指令块J具有单个实例,其被调度指令块E、F或G中的一个但不是全部三个提前运行(run ahead)。换言之,指令块J可以从块E、F或G之一访问更新后的寄存器和存储器。例如,如果预测执行路径E→J,但是当分支预测解析时,确定执行F→J实际上被采用,基于路径E→J被采用的假设,当前提前运行块J被中止,并且基于(现在确认了)路径F→J被采用的假设,重新运行块J。
在其他示例中,指令块J的三个实例可以同时执行,使得每个实例可以访问来自块E、F或G之一的更新后的寄存器和存储器。因此,在先前的段落中的错误预测示例中,第一内核执行假设E→J,第二内核同时执行假设F→J,第三内核同时执行假设G→J。一旦做出路径的确定,则执行E→J和G→J的块被中止,而F→J继续执行。
E.第五示例处理器内核分配方案
图11E示出了基于块的处理器1105,而其处理器内核根据不同的调度方案进行调度。所示的调度方案旨在降低功耗;因此指令块C的提取、解码和执行不开始,直到指令块A已经提交并且开始进入其空闲状态。值得注意的是,即使相关联的概率(P_AB=0.95)比分支到指令块C的概率(P_AC=0.05)是更可能的,指令块B也不会被提取并且加载到处理器内核中。这是因为调度器延迟了提取和解码,直到指令块A的分支目标被明确地知道。此外,可以注意到,指令块C的依赖指令块F、G和H还没有被提取或解码,因为调度器被配置为等待直到分支目标被明确地知道(或者在一些示例中,已知有足够高的可能性)。在一些示例中,根据所采用的分支的相关联的概率以及调度器所使用的特定性能度量,提取和解码可以在控制流图往下延伸几个级别。
F.第六示例处理器内核分配示例
图11F示出了在以与以上关于图11E所讨论的相似的方式来执行附加指令块之后的基于块的处理器1105。如图11F所示,指令块A已经执行,提交并且处于空闲。指令块C已经执行,提交并且空闲。从指令块C到指令块F的分支指令被采用,并且处理器内核2上的指令块F的提取和解码被发起。调度器确定指令块F只有一个分支目标,并且相应地,从指令块F到指令块J的分支将总是被采用。相应地,指令块J可以以高的置信度被提取和解码,而不浪费能量。
对于本领域的普通技术人员而言明显的是,在图11A-11F中描绘的示例、相关联的控制流图、指令块、调度方案和置信度值仅是说明性的,并且可以由本领域普通技术人员在实现适的基于块的处理器中根据特定性能、能量和其他设计目标来调节。
XIV.生成目标代码的示例方法
图12是概述根据所公开的技术的针对基于块的处理器生成目标代码的示例方法的流程图1200。图12的方法例如可以利用在通用处理器上执行的编译器或者在基于块的处理器上执行的编译器来实现。
在处理框1210处,分析用于基于块的处理器的指令以确定与指令的控制流操作相关联的概率。例如,可以使用由编译器生成的控制流图的静态分析来确定来自指令块的特定分支将被采用的概率。在一些示例中,可以使用基于块的处理器的硬件资源和性能监测器(诸如程序计数器)来分析指令。在一些示例中,程序员可以指定一些分支的概率。例如,如果程序员知道源代码的特定部分与高熵数据(例如,高度压缩或加密的数据)相关联,则程序员可以相应地指示较低的置信度水平。在一些示例中,在一组代表性工作负载上运行的应用工作负载分析器收集并且准备以供编译器使用的概率数据。类似地,编译器或用户可以确定源代码的特定部分与可能执行很多次的循环相关联,并且因此其相关联的分支指令也将具有高概率被采用。此外,可以静态或动态地分析分支错误预测、高速缓存未命中、高速缓存混叠、存储器负载冲突、存储器存储冲刷和其他度量,以确定相关联的概率。在确定了用于指令块序列的相关联概率之后,方法继续进行到处理框1220。
在处理框1220处,发出用于基于块的处理器的指令块的目标代码,其包括指示所确定的概率中的至少一个概率的性能度量数据。在一些示例中,目标代码将性能度量数据的至少部分包括在指令头部(例如,性能度量数据515)中或者在指令块的未使用的时隙(例如,性能度量数据322)中,或者被编码在指令块的单独指令内(例如,性能度量数据535)。在其他示例中,性能度量数据可以存储在目标代码的另一部分中,例如作为表格。一旦在目标代码中至少发出在处理框1210处确定的性能度量数据的性能,方法前进到处理框1230。
在处理框1230处,将来自处理框1220的发出的目标代码存储在计算机可读存储器或存储设备中。目标代码可以使用例如诸如软盘驱动器、闪速存储器驱动器、CD读/写驱动器或其他可移除介质等可移除介质来存储和分发,或者通过计算机网络来传输,例如从用于分发所发出的目标代码的网站或其他服务器下载。
XV.示例计算环境
图13示出了其中可以实现所描述的实施例、技术和工艺(包括在基于块的处理器中的调节处理器执行)的合适的计算环境1300的一般化示例。例如,计算环境1300可以实现根据本文中公开的任何方案来用于由处理器内核执行的指令块的节制和调度。
计算环境1300不旨在对本技术的使用范围或功能提出任何限制,因为技术可以在不同的通用或专用计算环境中实现。例如,所公开的技术可以用包括手持设备、多处理器系统、可编程消费电子产品、网络PC、小型计算机、大型计算机等其他计算机系统配置来实现。所公开的技术也可以在分布式计算环境中实践,其中任务由通过通信网络链接的远程处理设备执行。在分布式计算环境中,程序模块(包括用于基于块的指令块的可执行指令)可以位于本地和远程存储器存储设备中。
参考图13,计算环境1300包括至少一个基于块的处理单元1310和存储器1320。在图13中,这个最基本的配置1330被包括在虚线内。基于块的处理单元1310执行计算机可执行指令并且可以是真实或虚拟处理器。在多处理系统中,多个处理单元执行计算机可执行指令以增加处理能力,并且因此多个处理器可以同时运行。存储器1320可以是易失性存储器(例如,寄存器、高速缓冲存储器、RAM)、非易失性存储器(例如,ROM、EEPROM、闪速存储器等)或这两者的某种组合。存储器1320存储可以例如实现本文中描述的技术的软件1380、图像和视频。计算环境可以具有其他功能。例如,计算环境1300包括存储装置1340、一个或多个输入设备1350、一个或多个输出设备1360以及一个或多个通信连接1370。诸如总线、控制器或网络等互连机构(未示出)互连计算环境1300的组件。通常,操作系统软件(未示出)为在计算环境1300中执行的其他软件提供操作环境,并且协调计算环境1300的组件的活动。
存储装置1340可以是可移除的或不可移除的,并且包括磁盘、磁带或磁带盒、CD-ROM、CD-RW、DVD或可以用于存储信息并且可以在计算环境300内被访问的任何其他介质。存储装置1340存储用于软件1380、插件数据和消息的指令,其可以用于实现本文中描述的技术。
输入设备1350可以是触摸输入设备(诸如键盘、小键盘、鼠标、触摸屏显示器、笔或轨迹球)、语音输入设备、扫描设备或向计算环境1300提供输入的另一设备。对于音频,输入设备1350可以是接受模拟或数字形式的音频输入的声卡或类似设备、或者将音频样本提供给计算环境1300的CD-ROM读取器。输出设备1360可以是显示器、打印机、扬声器、CD写入器或提供来自计算环境1300的输出的另一设备。
通信连接1370允许通过到另一计算实体的通信介质(例如,连接网络)来进行通信。通信介质以调制的数据信号传送诸如计算机可执行指令、压缩图形信息、视频或其他数据等信息。通信连接1370不限于有线连接(例如,兆比特或千兆比特以太网、无线宽带技术、电连接或光纤连接上的光纤通道),还包括无线技术(例如,经由蓝牙、WiFi(IEEE 802.11a/b/n)、WiMax、蜂窝、卫星、激光、红外的RF连接)、以及用于为所公开的代理、网桥和代理数据消费方提供网络连接的其他合适的通信连接。在虚拟主机环境中,通信连接可以是由虚拟主机提供的虚拟化网络连接。
所公开的方法的一些实施例可以使用在计算云1390中实现所公开的技术的全部或部分的计算机可执行指令来执行。例如,所公开的编译器和/或基于块的处理器服务器位于计算环境1330中,或者所公开的编译器可以在位于计算云1390中的服务器上执行。在一些示例中,所公开的编译器在传统的中央处理单元(例如,RISC或CISC处理器)上执行。
计算机可读介质是可以在计算环境1300内被访问的任何可用介质。作为示例而非限制,利用计算环境1300,计算机可读介质包括存储器1320和/或存储装置1340。应当容易理解,术语“计算机可读存储介质”包括用于诸如存储器1320和存储装置1340等数据存储装置的介质,而不是诸如调制数据信号等传输介质。
XVI.所公开的技术的附加示例
本文中根据上面讨论的示例来讨论所公开的主题的另外的示例。
在所公开的技术的一些示例中,一种基于块的指令集架构处理器包括:被配置为获取和执行指令块的序列的一个或多个处理内核,每个处理内核包括用于执行由指令块指定的操作的功能资源;以及被配置为分配用于执行操作的至少一部分的功能资源的一个或多个内核调度器,功能资源至少部分地基于性能度量被分配用于执行指令块的序列。
在处理器的一些示例中,性能度量至少部分地基于分配的指令块的一个或多个分支指令的分支预测准确度。在一些示例中,性能度量至少部分地基于针对指令块的序列确定的以下度量中的一个或多个度量:指令高速缓存未命中、指令高速缓存混叠、数据高速缓存未命中、数据高速缓存混叠、存储器负载冲突、存储器存储冲刷或数据熵。在一些示例中,性能度量至少部分地基于针对处理器的能量使用的容限水平。在一些示例中,处理器还包括被配置为监测处理器的性能的一个或多个性能计数器,并且性能度量至少部分地基于从性能计数器接收的数据而被确定。
在一些示例中,内核调度器被配置为在用于推测性地被分配的块的依赖关系可用之前,针对推测性地被分配的块推测性地发起指令提取操作和/或指令解码操作,并且内核调度器被配置为抑制推测性地被分配的块的执行直到用于推测性地被分配的块的依赖关系可用。在一些示例中,内核调度器被配置为至少部分地基于性能度量,推测性地发起对同时被提取、解码或执行的指令块的一个或多个分支的目标块的指令操作的提取、解码和执行。在一些示例中,内核调度器被配置为当性能度量的置信度分量增加时,分支到并且执行处理器内核上的指令,该处理器内核包括先前提取或先前提取并且先前解码的指令块。在一些示例中,内核调度器被配置为基于置信度等级与一个或多个预定值相比较来调节被分配给执行指令序列的处理器内核的数目和/或处理器内核的功能资源的数目。在一些示例中,至少一个处理器内核包括两个或更多个指令窗口,并且内核调度器被配置为将至少一个处理器内核的更多功能资源分配给指令窗口中具有较高置信度水平的一个指令窗口。在一些示例中,内核调度器被配置为基于将置信度等级与一个或多个预定值相比较来调节被预提取、解码和/或执行的指令块的数目。在一些示例中,内核调度器被实现为控制单元内的处理器级内核调度器。在其他示例中,内核调度器使用一个或多个基于块的处理器内核来实现。在一些示例中,至少一个处理器内核被配置为预提取和/或解码当前正在执行的指令块的一个或多个目标指令块的一个或多个指令头部。
在所公开的技术的其他示例中,一种方法包括:利用基于块的处理器来执行第一指令块,并且在完成第一指令块的执行之前,至少部分地基于块的处理器的性能度量来发起第二指令块到基于块的处理器的一个或多个处理器内核的分配。在该方法的一些示例中,发起分配包括发起对第二指令块的提取和解码,但是不发起对第二指令块的执行,直到基于块的处理器的控制逻辑确定第二指令块将明确地执行。在一些示例中,该方法还包括:在完成第一指令块的执行之前,至少部分地基于第三指令块被执行的概率与预定门限值相比较来发起第三指令块到基于块的处理器的一个或多个处理器内核的分配。在一些示例中,性能度量至少部分地基于指示针对第一指令块、第二指令块、或第一指令块和第二指令块的操作概率的目标代码数据。
在所公开的技术的其他示例中,一个或多个计算机可读存储设备或存储器存储计算机可读指令,计算机可读指令在由处理器执行时引起处理器执行方法,计算机可读指令包括:用于分析用于基于块的处理器的指令以确定针对使用基于块的处理器指令执行的控制流操作的概率的指令,以及用于发出用于基于块的处理器的指令块的目标代码的指令,发出的目标代码包括指示确定的概率中的至少一个概率的性能度量数据。在一些示例中,性能度量数据被编码在发出的指令块目标代码的指令头部内。在一些示例中,性能度量数据至少部分对基于指令块中的指令的静态分析。在一些示例中,一个或多个计算机可读存储设备或存储器,存储通过执行方法而产生的发出的指令块,该方法在执行存储在一个或多个计算机可读存储设备或存储器上的计算机可读指令时被执行。
鉴于可以应用所公开的主题的原理的很多可能的实施例,应当认识到,所说明的实施例仅是优选示例,而不应当被视为将权利要求的范围限制于那些优选的示例。相反,所要求保护的主题的范围由随附权利要求限定。因此要求保护在这些权利要求范围内的所有发明。

Claims (16)

1.一种用于分配的装置,包括处理器,所述处理器包括:
一个或多个处理内核,被配置为提取和执行指令组的序列,所述处理内核中的每个处理内核包括用于执行由所述指令组指定的操作的功能资源;以及
一个或多个内核调度器,被配置为:
通过聚合针对子指令组的两个或更多个父指令组的相应置信度等级,分配处理内核以用于执行所述操作的至少一部分,所述操作的所述至少一部分由所述序列的所述子指令组指定;以及
当所述子指令组的经聚合的所述置信度等级高于所述两个或更多个父指令组中的至少一个父指令组的相应置信度等级时,在发起所述两个或更多个父指令组中的所述至少一个父指令组的执行之前,发起所述子指令组的执行。
2.根据权利要求1所述的装置,其中经聚合的所述置信度等级至少部分地基于用于所述指令组的一个或多个分支指令的分支预测准确度。
3.根据权利要求1所述的装置,其中所述处理器还包括被配置为监测所述处理器的性能的一个或多个性能计数器,并且其中经聚合的所述置信度等级至少部分地基于从所述性能计数器接收的数据而被确定。
4.根据权利要求1所述的装置,其中所述内核调度器还被配置为基于将所述置信度等级与一个或多个预定值进行比较,来调节被预提取、解码和/或执行的指令组的数目。
5.根据权利要求1所述的装置,其中:
所述一个或多个内核调度器被配置为:在用于所述子指令组的依赖关系可用之前,针对所述子指令组推测性地发起指令提取操作、指令解码操作,或者指令提取操作和指令解码操作;以及
所述一个或多个内核调度器被配置为抑制所述子指令组的执行直到用于所述子指令组的依赖关系可用。
6.根据权利要求1所述的装置,其中所述一个或多个内核调度器被配置为至少部分地基于经聚合的所述置信度等级,推测性地发起对同时被提取、解码或执行的指令组的一个或多个分支的目标组的指令操作的提取、解码和执行。
7.根据权利要求1所述的装置,其中所述一个或多个内核调度器被配置为:至少部分地基于置信度等级增加,将指令分支到处理器内核并且执行所述处理器内核上的指令,所述处理器内核包括先前提取的指令组、或者先前提取并且先前解码的指令组。
8.根据权利要求1所述的装置,其中所述一个或多个内核调度器被配置为:基于将经聚合的置信度等级与一个或多个预定值进行比较,调节被分配给执行所述指令组的序列的处理器内核的数目、处理器内核的功能资源的数目,或者处理器内核的数目和处理器内核的功能资源的数目。
9.根据权利要求8所述的装置,其中所述处理器内核中的至少一个处理器内核包括两个或更多个指令窗口,并且其中所述一个或多个内核调度器被配置为向所述指令窗口中具有较高置信度水平的一个指令窗口分配所述至少一个处理器内核的更多功能资源。
10.根据权利要求1所述的装置,其中至少一个处理器内核被配置为预提取、解码或者预提取和解码针对当前正在执行的指令组的一个或多个目标指令组的一个或多个指令头部。
11.一种执行指令的方法,包括:
在处理器的第一内核上提取第一组指令;
利用所述处理器的所述第一内核执行所述第一组指令;以及
将分支到所述第一组指令的置信度值与分支到第二组指令的置信度值进行比较,在指令窗口中所述第二组指令被排在所述第一组指令之后;以及
在开始执行所述第一组指令之前,基于所述比较,在所述第一组指令分支到所述第二组指令的置信度水平超过预定门限值时,在到所述处理器的第二内核的指令流中开始执行在所述第一组指令之后的第二组指令,
基于所述置信度水平,确定延迟所述第二组指令的执行,直到用于所述处理器的控制逻辑确定所述第二组指令将明确地执行为止,所述置信度水平随着指令的序列由所述处理器执行而被更新。
12.根据权利要求11所述的方法,其中所述确定包括:
基于所述置信度水平,等待以发起所述第二组指令的执行,直到用于所述处理器的所述控制逻辑确定所述第二组指令将明确地执行为止;所述方法包括:
在所述确定之后,执行所述第二组指令。
13.根据权利要求11所述的方法,其中所述开始执行包括:发起对所述第二组指令的提取和解码,但是不开始对所述第二组指令的执行,直到用于所述处理器的所述控制逻辑确定所述第二组指令将明确地执行。
14.根据权利要求11所述的方法,进一步包括:
在完成所述第一组指令的执行之前,发起第三组指令到所述处理器的一个或多个处理器内核的分配,所述第三组指令的分配的所述发起至少部分地基于将所述第三组指令被执行的概率与预定门限值进行比较。
15.根据权利要求11所述的方法,其中所述置信度水平至少部分地基于指示针对所述第一组指令、所述第二组指令、或者所述第一组指令和所述第二组指令的操作概率的目标代码数据。
16.根据权利要求11所述的方法,其中所述确定包括:基于所述置信度水平,在所述控制逻辑确定所述第二组指令将明确地执行之前,发起所述第二组指令的执行。
CN201680036587.9A 2015-06-26 2016-06-23 根据性能度量的指令块分配 Active CN107810480B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/752,418 US11755484B2 (en) 2015-06-26 2015-06-26 Instruction block allocation
US14/752,418 2015-06-26
PCT/US2016/038855 WO2016210032A1 (en) 2015-06-26 2016-06-23 Instruction block allocation according to performance metric

Publications (2)

Publication Number Publication Date
CN107810480A CN107810480A (zh) 2018-03-16
CN107810480B true CN107810480B (zh) 2022-01-25

Family

ID=56413844

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201680036587.9A Active CN107810480B (zh) 2015-06-26 2016-06-23 根据性能度量的指令块分配

Country Status (4)

Country Link
US (1) US11755484B2 (zh)
EP (1) EP3314403B1 (zh)
CN (1) CN107810480B (zh)
WO (1) WO2016210032A1 (zh)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10191747B2 (en) 2015-06-26 2019-01-29 Microsoft Technology Licensing, Llc Locking operand values for groups of instructions executed atomically
US9946548B2 (en) 2015-06-26 2018-04-17 Microsoft Technology Licensing, Llc Age-based management of instruction blocks in a processor instruction window
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10409599B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Decoding information about a group of instructions including a size of the group of instructions
US10169044B2 (en) 2015-06-26 2019-01-01 Microsoft Technology Licensing, Llc Processing an encoding format field to interpret header information regarding a group of instructions
US10635307B2 (en) * 2015-06-30 2020-04-28 International Business Machines Corporation Memory state indicator
US10884945B2 (en) 2015-06-30 2021-01-05 International Business Machines Corporation Memory state indicator check operations
US10198263B2 (en) 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US10180840B2 (en) 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US10108530B2 (en) * 2016-02-24 2018-10-23 Stmicroelectronics (Rousset) Sas Method and tool for generating a program code configured to perform control flow checking on another program code containing instructions for indirect branching
US10459817B2 (en) * 2017-01-18 2019-10-29 International Business Machines Corporation Evaluating performance improvement of executing instructions in a first processor over execution on a second processor
US11531552B2 (en) * 2017-02-06 2022-12-20 Microsoft Technology Licensing, Llc Executing multiple programs simultaneously on a processor core
US11157801B2 (en) 2017-02-28 2021-10-26 Microsoft Technology Licensing, Llc Neural network processing with the neural network model pinned to on-chip memories of hardware nodes
US20180341488A1 (en) * 2017-05-26 2018-11-29 Microsoft Technology Licensing, Llc Microprocessor instruction predispatch before block commit
CN107832844A (zh) * 2017-10-30 2018-03-23 上海寒武纪信息科技有限公司 一种信息处理方法及相关产品
CN110728364A (zh) * 2018-07-17 2020-01-24 上海寒武纪信息科技有限公司 一种运算装置和运算方法
US10901743B2 (en) * 2018-07-19 2021-01-26 International Business Machines Corporation Speculative execution of both paths of a weakly predicted branch instruction
CN110825530B (zh) * 2018-08-10 2022-12-23 昆仑芯(北京)科技有限公司 用于人工智能芯片的指令执行方法和装置
US11996105B2 (en) 2018-09-13 2024-05-28 Shanghai Cambricon Information Technology Co., Ltd. Information processing method and terminal device
CN109299610B (zh) * 2018-10-02 2021-03-30 复旦大学 安卓系统中不安全敏感输入验证识别方法
US11042381B2 (en) * 2018-12-08 2021-06-22 Microsoft Technology Licensing, Llc Register renaming-based techniques for block-based processors
US11126537B2 (en) * 2019-05-02 2021-09-21 Microsoft Technology Licensing, Llc Coprocessor-based logging for time travel debugging
US11169812B2 (en) * 2019-09-26 2021-11-09 Advanced Micro Devices, Inc. Throttling while managing upstream resources
US10776089B1 (en) * 2019-10-25 2020-09-15 Capital One Services, Llc Computer architecture based on program / workload profiling
CN110889147B (zh) * 2019-11-14 2022-02-08 中国人民解放军国防科技大学 一种利用填充缓存抵御Cache边信道攻击的方法
US11726544B2 (en) * 2020-07-03 2023-08-15 Mediatek Inc. Dynamic agent for multiple operators optimization
CN113238852B (zh) * 2021-06-02 2023-11-03 杭州海康威视数字技术股份有限公司 一种任务分配方法、装置、电子设备及存储介质
CN113238853B (zh) * 2021-06-15 2021-11-12 上海交通大学 基于函数中间表达的无服务器计算调度系统及方法
CN114510271B (zh) * 2022-02-09 2023-08-15 海飞科(南京)信息技术有限公司 用于在单指令多线程计算系统中加载数据的方法和装置
US11947462B1 (en) 2022-03-03 2024-04-02 Apple Inc. Cache footprint management
US11847457B1 (en) * 2022-05-31 2023-12-19 Ceremorphic, Inc. System for error detection and correction in a multi-thread processor
CN115033434B (zh) * 2022-06-07 2023-05-26 海光信息技术股份有限公司 一种内核性能理论值计算方法、装置及存储介质
US11915001B1 (en) * 2022-12-26 2024-02-27 Rebellions Inc. Neural processor and method for fetching instructions thereof
CN115934171B (zh) * 2023-01-16 2023-05-16 北京微核芯科技有限公司 为多指令调度分支预测器的方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101452378A (zh) * 2007-12-05 2009-06-10 国际商业机器公司 阻止指令提取调节的方法、处理器和装置
CN103547993A (zh) * 2011-03-25 2014-01-29 索夫特机械公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
CN104011705A (zh) * 2011-12-01 2014-08-27 新加坡国立大学 多形异构性多核架构
CN104049941A (zh) * 2013-03-15 2014-09-17 英特尔公司 跟踪指令的控制流程
CN104102474A (zh) * 2013-04-03 2014-10-15 瑞萨电子株式会社 信息处理装置和信息处理方法

Family Cites Families (184)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5446904A (en) 1991-05-17 1995-08-29 Zenith Data Systems Corporation Suspend/resume capability for a protected mode microprocessor
EP0583089B1 (en) 1992-08-12 2000-01-26 Advanced Micro Devices, Inc. Instruction decoder
JPH06259262A (ja) * 1993-03-08 1994-09-16 Fujitsu Ltd 分岐確率を設定するコンパイラの処理方法および処理装置
US5666506A (en) 1994-10-24 1997-09-09 International Business Machines Corporation Apparatus to dynamically control the out-of-order execution of load/store instructions in a processor capable of dispatchng, issuing and executing multiple instructions in a single processor cycle
US5655122A (en) * 1995-04-05 1997-08-05 Sequent Computer Systems, Inc. Optimizing compiler with static prediction of branch probability, branch frequency and function frequency
US5832297A (en) 1995-04-12 1998-11-03 Advanced Micro Devices, Inc. Superscalar microprocessor load/store unit employing a unified buffer and separate pointers for load and store operations
US5790822A (en) 1996-03-21 1998-08-04 Intel Corporation Method and apparatus for providing a re-ordered instruction cache in a pipelined microprocessor
US5920724A (en) 1996-03-28 1999-07-06 Intel Corporation Software pipelining a hyperblock loop
US5796997A (en) 1996-05-15 1998-08-18 Hewlett-Packard Company Fast nullify system and method for transforming a nullify function into a select function
US6067572A (en) * 1996-11-07 2000-05-23 Novell, Inc. Extrinsically influenced near-optimal path apparatus and method
US6542998B1 (en) 1997-02-08 2003-04-01 Pact Gmbh Method of self-synchronization of configurable elements of a programmable module
US5845103A (en) 1997-06-13 1998-12-01 Wisconsin Alumni Research Foundation Computer with dynamic instruction reuse
US6044222A (en) 1997-06-23 2000-03-28 International Business Machines Corporation System, method, and program product for loop instruction scheduling hardware lookahead
US5943501A (en) 1997-06-27 1999-08-24 Wisconsin Alumni Research Foundation Multiple processor, distributed memory computer with out-of-order processing
US5930158A (en) 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
US5923892A (en) 1997-10-27 1999-07-13 Levy; Paul S. Host processor and coprocessor arrangement for processing platform-independent code
US6182210B1 (en) 1997-12-16 2001-01-30 Intel Corporation Processor having multiple program counters and trace buffers outside an execution pipeline
US6164841A (en) 1998-05-04 2000-12-26 Hewlett-Packard Company Method, apparatus, and product for dynamic software code translation system
JPH11327879A (ja) * 1998-05-15 1999-11-30 Fujitsu Ltd 変数検索装置及び方法並びに変数検索プログラムを記録したコンピュータ読取り可能な記録媒体
US6988183B1 (en) 1998-06-26 2006-01-17 Derek Chi-Lan Wong Methods for increasing instruction-level parallelism in microprocessors and digital system
EP0992894A1 (en) 1998-10-06 2000-04-12 Texas Instruments Inc. Apparatus and method for loop execution
US6275919B1 (en) 1998-10-15 2001-08-14 Creative Technology Ltd. Memory storage and retrieval with multiple hashing functions
JP3565314B2 (ja) 1998-12-17 2004-09-15 富士通株式会社 分岐命令実行制御装置
GB2348305A (en) 1999-03-24 2000-09-27 Int Computers Ltd Instruction execution mechanism
US6453344B1 (en) 1999-03-31 2002-09-17 Amdahl Corporation Multiprocessor servers with controlled numbered of CPUs
US6438671B1 (en) 1999-07-01 2002-08-20 International Business Machines Corporation Generating partition corresponding real address in partitioned mode supporting system
SE516171C2 (sv) 1999-07-21 2001-11-26 Ericsson Telefon Ab L M Processorarkitektur anpassas för programspråk med sekventiellt instruktionsflöde
US6513109B1 (en) 1999-08-31 2003-01-28 International Business Machines Corporation Method and apparatus for implementing execution predicates in a computer processing system
US6651125B2 (en) 1999-09-28 2003-11-18 International Business Machines Corporation Processing channel subsystem pending I/O work queues based on priorities
US6986137B1 (en) 1999-09-28 2006-01-10 International Business Machines Corporation Method, system and program products for managing logical processors of a computing environment
US7051188B1 (en) 1999-09-28 2006-05-23 International Business Machines Corporation Dynamically redistributing shareable resources of a computing environment to manage the workload of that environment
US6446197B1 (en) * 1999-10-01 2002-09-03 Hitachi, Ltd. Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions
US6732203B2 (en) 2000-01-31 2004-05-04 Intel Corporation Selectively multiplexing memory coupling global bus data bits to narrower functional unit coupling local bus
US6725335B2 (en) 2000-02-09 2004-04-20 Hewlett-Packard Development Company, L.P. Method and system for fast unlinking of a linked branch in a caching dynamic translator
US6732260B1 (en) 2000-03-06 2004-05-04 Intel Corporation Presbyopic branch target prefetch method and apparatus
US6918032B1 (en) 2000-07-06 2005-07-12 Intel Corporation Hardware predication for conditional instruction path branching
US6654860B1 (en) 2000-07-27 2003-11-25 Advanced Micro Devices, Inc. Method and apparatus for removing speculative memory accesses from a memory access queue for issuance to memory or discarding
US6934254B2 (en) 2001-01-18 2005-08-23 Motorola, Inc. Method and apparatus for dynamically allocating resources in a communication system
US7032217B2 (en) 2001-03-26 2006-04-18 Intel Corporation Method and system for collaborative profiling for continuous detection of profile phase transitions
US6957435B2 (en) 2001-04-19 2005-10-18 International Business Machines Corporation Method and apparatus for allocating processor resources in a logically partitioned computer system
US7002956B2 (en) 2001-07-05 2006-02-21 International Business Machines Corporation Network addressing method and system for localizing access to network resources in a computer network
WO2003038645A2 (en) 2001-10-31 2003-05-08 University Of Texas A scalable processing architecture
EP1313012A1 (en) 2001-11-15 2003-05-21 Texas Instruments France Java DSP acceleration by byte-code optimization
US6804632B2 (en) 2001-12-06 2004-10-12 Intel Corporation Distribution of processing activity across processing hardware based on power consumption considerations
US7228402B2 (en) 2002-01-02 2007-06-05 Intel Corporation Predicate register file write by an instruction with a pending instruction having data dependency
US7032101B2 (en) 2002-02-26 2006-04-18 International Business Machines Corporation Method and apparatus for prioritized instruction issue queue in a processor
US6877059B2 (en) 2002-03-29 2005-04-05 Emc Corporation Communications architecture for a high throughput storage processor
EP1495407A1 (en) 2002-04-08 2005-01-12 The University Of Texas System Non-uniform cache apparatus, systems, and methods
US7065759B2 (en) * 2002-06-18 2006-06-20 Hewlett-Packard Development Company, L.P. System and method for assigning basic blocks to computer control flow paths
WO2004001584A2 (en) 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
JP3804941B2 (ja) 2002-06-28 2006-08-02 富士通株式会社 命令フェッチ制御装置
JP4243463B2 (ja) 2002-08-19 2009-03-25 株式会社半導体理工学研究センター 命令スケジューリングのシミュレーション方法とシミュレーションシステム
GB2393274B (en) 2002-09-20 2006-03-15 Advanced Risc Mach Ltd Data processing system having an external instruction set and an internal instruction set
US7299458B2 (en) 2002-10-31 2007-11-20 Src Computers, Inc. System and method for converting control flow graph representations to control-dataflow graph representations
US20040154010A1 (en) * 2003-01-31 2004-08-05 Pedro Marcuello Control-quasi-independent-points guided speculative multithreading
US7210127B1 (en) 2003-04-03 2007-04-24 Sun Microsystems Methods and apparatus for executing instructions in parallel
US7284100B2 (en) 2003-05-12 2007-10-16 International Business Machines Corporation Invalidating storage, clearing buffer entries, and an instruction therefor
US6996698B2 (en) 2003-05-12 2006-02-07 International Business Machines Corporation Blocking processing restrictions based on addresses
US7539974B2 (en) 2003-10-24 2009-05-26 Microsoft Corporation Scalable synchronous and asynchronous processing of monitoring rules
US7500087B2 (en) 2004-03-09 2009-03-03 Intel Corporation Synchronization of parallel processes using speculative execution of synchronization instructions
KR100877138B1 (ko) 2004-03-29 2009-01-09 고쿠리츠 다이가쿠 호진 교토 다이가쿠 데이터 처리장치, 데이터 처리 프로그램, 및 데이터 처리프로그램을 기록한 기록매체
US7392524B2 (en) 2004-04-06 2008-06-24 International Business Machines Corporation Method, system, and storage medium for managing computer processing functions
US7334143B2 (en) 2004-04-19 2008-02-19 Hewlett-Packard Development Company, L.P. Computer power conservation apparatus and method that enables less speculative execution during light processor load based on a branch confidence threshold value
US7873776B2 (en) 2004-06-30 2011-01-18 Oracle America, Inc. Multiple-core processor with support for multiple virtual processors
US7685354B1 (en) 2004-06-30 2010-03-23 Sun Microsystems, Inc. Multiple-core processor with flexible mapping of processor cores to cache banks
US8111770B1 (en) * 2004-07-01 2012-02-07 Regents Of The University Of Minnesota High-bandwidth over-the-air signal processing
US8230252B2 (en) 2004-07-20 2012-07-24 Hewlett-Packard Development Company, L.P. Time of day response
US8166282B2 (en) 2004-07-21 2012-04-24 Intel Corporation Multi-version register file for multithreading processors with live-in precomputation
US7606995B2 (en) 2004-07-23 2009-10-20 Hewlett-Packard Development Company, L.P. Allocating resources to partitions in a partitionable computer
US7747992B2 (en) 2004-08-23 2010-06-29 Intel Corporation Methods and apparatus for creating software basic block layouts
JP4345630B2 (ja) 2004-09-29 2009-10-14 ソニー株式会社 情報処理装置、割り込み処理制御方法、並びにコンピュータ・プログラム
US8015392B2 (en) 2004-09-29 2011-09-06 Intel Corporation Updating instructions to free core in multi-core processor with core sequence table indicating linking of thread sequences for processing queued packets
JP4982971B2 (ja) 2004-09-29 2012-07-25 ソニー株式会社 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US7552318B2 (en) 2004-12-17 2009-06-23 International Business Machines Corporation Branch lookahead prefetch for microprocessors
US7853777B2 (en) 2005-02-04 2010-12-14 Mips Technologies, Inc. Instruction/skid buffers in a multithreading microprocessor that store dispatched instructions to avoid re-fetching flushed instructions
US7380038B2 (en) 2005-02-04 2008-05-27 Microsoft Corporation Priority registers for biasing access to shared resources
US7447882B2 (en) 2005-04-20 2008-11-04 Arm Limited Context switching within a data processing system having a branch prediction mechanism
JP4322232B2 (ja) 2005-06-14 2009-08-26 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、プロセス制御方法、並びにコンピュータ・プログラム
US7882339B2 (en) 2005-06-23 2011-02-01 Intel Corporation Primitives to enhance thread-level speculation
US7779213B2 (en) * 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
US7437518B2 (en) 2005-09-07 2008-10-14 Intel Corporation Hiding conflict, coherence completion and transaction ID elements of a coherence protocol
US7412353B2 (en) 2005-09-28 2008-08-12 Intel Corporation Reliable computing with a many-core processor
JP4720436B2 (ja) 2005-11-01 2011-07-13 株式会社日立製作所 リコンフィギュラブルプロセッサまたは装置
US7475225B2 (en) 2005-12-30 2009-01-06 Intel Corporation Method and apparatus for microarchitecture partitioning of execution clusters
US7565654B2 (en) 2006-01-10 2009-07-21 National Instruments Corporation Programmatic control of tasks in a programmable logic controller
US8510596B1 (en) 2006-02-09 2013-08-13 Virsec Systems, Inc. System and methods for run time detection and correction of memory corruption
US7350027B2 (en) 2006-02-10 2008-03-25 International Business Machines Corporation Architectural support for thread level speculative execution
US7802073B1 (en) 2006-03-29 2010-09-21 Oracle America, Inc. Virtual core management
US20070239965A1 (en) 2006-03-31 2007-10-11 Saul Lewites Inter-partition communication
CN103646009B (zh) 2006-04-12 2016-08-17 索夫特机械公司 对载明并行和依赖运算的指令矩阵进行处理的装置和方法
JP4849606B2 (ja) 2006-04-28 2012-01-11 株式会社日立製作所 制御フロー誤り検出方法、データ処理装置、及びコンパイラ
US7958396B2 (en) 2006-05-19 2011-06-07 Microsoft Corporation Watchdog processors in multicore systems
US7383401B2 (en) * 2006-06-05 2008-06-03 Sun Microsystems, Inc. Method and system for identifying multi-block indirect memory access chains
US7461241B2 (en) 2006-07-31 2008-12-02 International Business Machines Corporation Concurrent physical processor reassignment method
CN101627365B (zh) 2006-11-14 2017-03-29 索夫特机械公司 多线程架构
US8250556B1 (en) 2007-02-07 2012-08-21 Tilera Corporation Distributing parallelism for parallel processing architectures
JP4339371B2 (ja) 2007-03-22 2009-10-07 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理方法
US7853950B2 (en) 2007-04-05 2010-12-14 International Business Machines Corporarion Executing multiple threads in a processor
US7627742B2 (en) * 2007-04-10 2009-12-01 International Business Machines Corporation Method and apparatus for conserving power by throttling instruction fetching when a processor encounters low confidence branches in an information handling system
US8161476B2 (en) 2007-07-04 2012-04-17 International Business Machines Corporation Processor exclusivity in a partitioned system
US8180997B2 (en) 2007-07-05 2012-05-15 Board Of Regents, University Of Texas System Dynamically composing processor cores to form logical processors
US8447911B2 (en) 2007-07-05 2013-05-21 Board Of Regents, University Of Texas System Unordered load/store queue
CN101344843B (zh) 2007-07-10 2012-11-21 北京简约纳电子有限公司 一种指令级并行处理方法
JP2009026106A (ja) 2007-07-20 2009-02-05 Oki Electric Ind Co Ltd 命令コード圧縮方法と命令フェッチ回路
US7797512B1 (en) 2007-07-23 2010-09-14 Oracle America, Inc. Virtual core management
US9710384B2 (en) 2008-01-04 2017-07-18 Micron Technology, Inc. Microprocessor architecture having alternative memory access paths
US7882338B2 (en) 2008-02-20 2011-02-01 International Business Machines Corporation Method, system and computer program product for an implicit predicted return from a predicted subroutine
US7991973B2 (en) 2008-05-05 2011-08-02 Panasas, Inc. Data storage systems, methods and networks having a snapshot efficient block map
US8321850B2 (en) 2008-06-06 2012-11-27 Vmware, Inc. Sharing and persisting code caches
US8565065B2 (en) 2008-06-23 2013-10-22 Qualcomm Incorporated Methods and systems for utilizing a multicast/broadcast CID scheduling MAC management message
US8205068B2 (en) * 2008-07-29 2012-06-19 Freescale Semiconductor, Inc. Branch target buffer allocation
US8127119B2 (en) 2008-12-05 2012-02-28 The Board Of Regents Of The University Of Texas System Control-flow prediction using multiple independent predictors
US20100146209A1 (en) 2008-12-05 2010-06-10 Intellectual Ventures Management, Llc Method and apparatus for combining independent data caches
US8214831B2 (en) 2009-05-05 2012-07-03 International Business Machines Corporation Runtime dependence-aware scheduling using assist thread
US20100325395A1 (en) 2009-06-19 2010-12-23 Doug Burger Dependence prediction in a memory system
US8433885B2 (en) 2009-09-09 2013-04-30 Board Of Regents Of The University Of Texas System Method, system and computer-accessible medium for providing a distributed predicate prediction
US10698859B2 (en) 2009-09-18 2020-06-30 The Board Of Regents Of The University Of Texas System Data multicasting with router replication and target instruction identification in a distributed multi-core processing architecture
US20110078424A1 (en) 2009-09-30 2011-03-31 International Business Machines Corporation Optimizing program code using branch elimination
US8464002B2 (en) 2009-10-14 2013-06-11 Board Of Regents Of The University Of Texas System Burst-based cache dead block prediction
WO2011067896A1 (en) 2009-12-02 2011-06-09 Mush-A Co., Ltd. Data processing apparatus, data processing system, packet, recording medium, storage device, and data processing method
JP5057256B2 (ja) 2009-12-02 2012-10-24 株式会社Mush−A データ処理装置、データ処理システムおよびデータ処理方法
US8515975B1 (en) * 2009-12-07 2013-08-20 Google Inc. Search entity transition matrix and applications of the transition matrix
CN102096579B (zh) 2009-12-11 2013-10-16 陈罡 一种嵌入式自适应模糊微处理器的组成与结构
EP2519876A1 (en) 2009-12-28 2012-11-07 Hyperion Core, Inc. Optimisation of loops and data flow sections
GB201001621D0 (en) 2010-02-01 2010-03-17 Univ Catholique Louvain A tile-based processor architecture model for high efficiency embedded homogenous multicore platforms
US8667260B2 (en) 2010-03-05 2014-03-04 International Business Machines Corporation Building approximate data dependences with a moving window
JP2011209774A (ja) * 2010-03-26 2011-10-20 Fujitsu Ltd 分岐予測方法及びその方法を実行する分岐予測回路
JP2011209904A (ja) 2010-03-29 2011-10-20 Sony Corp 命令フェッチ装置、および、プロセッサ
US8201024B2 (en) 2010-05-17 2012-06-12 Microsoft Corporation Managing memory faults
US8555040B2 (en) * 2010-05-24 2013-10-08 Apple Inc. Indirect branch target predictor that prevents speculation if mispredict is expected
KR101731742B1 (ko) 2010-06-18 2017-04-28 보드 오브 리전츠 더 유니버시티 오브 텍사스 시스템 결합된 분기 타깃 및 프레디킷 예측
US10241799B2 (en) 2010-07-16 2019-03-26 Qualcomm Incorporated Out-of-order command execution with sliding windows to maintain completion statuses
US9052890B2 (en) 2010-09-25 2015-06-09 Intel Corporation Execute at commit state update instructions, apparatus, methods, and systems
US8904115B2 (en) 2010-09-28 2014-12-02 Texas Instruments Incorporated Cache with multiple access pipelines
US9836304B2 (en) * 2010-11-15 2017-12-05 Advanced Micro Devices, Inc. Cumulative confidence fetch throttling
US8612726B2 (en) 2010-12-07 2013-12-17 King Fahd University Of Petroleum And Minerals Multi-cycle programmable processor with FSM implemented controller selectively altering functional units datapaths based on instruction type
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
TWI518504B (zh) 2011-03-25 2016-01-21 軟體機器公司 使用可分割引擎實體化的虛擬核心以支援程式碼區塊執行的暫存器檔案節段
US9619301B2 (en) 2011-04-06 2017-04-11 Telefonaktiebolaget L M Ericsson (Publ) Multi-core memory model and speculative mode processor management
US9652243B2 (en) 2011-06-29 2017-05-16 International Business Machines Corporation Predicting out-of-order instruction level parallelism of threads in a multi-threaded processor
US20130024676A1 (en) 2011-07-19 2013-01-24 Glew Andrew F Control flow integrity
CN102306094B (zh) 2011-08-16 2014-03-26 北京北大众志微系统科技有限责任公司 实现现代处理器间接转移预测的装置及方法
WO2013095401A1 (en) 2011-12-20 2013-06-27 Intel Corporation System and method for out-of-order prefetch instructions in an in-order pipeline
US9304776B2 (en) 2012-01-31 2016-04-05 Oracle International Corporation System and method for mitigating the impact of branch misprediction when exiting spin loops
US9348775B2 (en) 2012-03-16 2016-05-24 Analog Devices, Inc. Out-of-order execution of bus transactions
WO2013156825A1 (en) 2012-04-20 2013-10-24 Freescale Semiconductor, Inc. A computer system and a method for generating an optimized program code
US8880638B2 (en) 2012-06-18 2014-11-04 International Business Machines Corporation Distributed image cache for servicing virtual resource requests in the cloud
GB2505884B (en) 2012-09-12 2015-06-03 Imagination Tech Ltd Dynamically resizable circular buffers
US9063721B2 (en) 2012-09-14 2015-06-23 The Research Foundation For The State University Of New York Continuous run-time validation of program execution: a practical approach
US9400650B2 (en) 2012-09-28 2016-07-26 Intel Corporation Read and write masks update instruction for vectorization of recursive computations over interdependent data
US9389868B2 (en) * 2012-11-01 2016-07-12 International Business Machines Corporation Confidence-driven selective predication of processor instructions
US9710276B2 (en) 2012-11-09 2017-07-18 Advanced Micro Devices, Inc. Execution of instruction loops using an instruction buffer
US9619229B2 (en) 2012-12-27 2017-04-11 Intel Corporation Collapsing of multiple nested loops, methods and instructions
US9182986B2 (en) 2012-12-29 2015-11-10 Intel Corporation Copy-on-write buffer for restoring program code from a speculative region to a non-speculative region
US10223124B2 (en) * 2013-01-11 2019-03-05 Advanced Micro Devices, Inc. Thread selection at a processor based on branch prediction confidence
US9348599B2 (en) * 2013-01-15 2016-05-24 International Business Machines Corporation Confidence threshold-based opposing branch path execution for branch prediction
GB2514956B (en) 2013-01-21 2015-04-01 Imagination Tech Ltd Allocating resources to threads based on speculation metric
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
US9886277B2 (en) 2013-03-15 2018-02-06 Intel Corporation Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources
JP6086230B2 (ja) 2013-04-01 2017-03-01 日本電気株式会社 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法
US9594700B2 (en) 2013-04-17 2017-03-14 Nvidia Corporation Speculative memory controller
WO2014189510A1 (en) 2013-05-23 2014-11-27 Intel Corporation Techniques for detecting return-oriented programming
US9792252B2 (en) 2013-05-31 2017-10-17 Microsoft Technology Licensing, Llc Incorporating a spatial array into one or more programmable processor cores
GB2515076B (en) 2013-06-13 2020-07-15 Advanced Risc Mach Ltd A data processing apparatus and method for handling retrieval of instructions from an instruction cache
GB2510655B (en) 2013-07-31 2015-02-25 Imagination Tech Ltd Prioritizing instructions based on type
US9575541B2 (en) 2013-08-28 2017-02-21 Via Technologies, Inc. Propagation of updates to per-core-instantiated architecturally-visible storage resource
CN103473508B (zh) 2013-09-17 2016-07-27 肖楠 操作系统内核运行时安全验证方法
US9448909B2 (en) * 2013-10-15 2016-09-20 Advanced Micro Devices, Inc. Randomly branching using performance counters
US9547496B2 (en) 2013-11-07 2017-01-17 Microsoft Technology Licensing, Llc Energy efficient multi-modal instruction issue
CN103744644B (zh) 2014-01-13 2017-03-01 上海交通大学 采用四核结构搭建的四核处理器系统及数据交换方法
CN104310225A (zh) 2014-08-19 2015-01-28 中国十七冶集团有限公司 建筑起重机械安全控制装置
US20160055004A1 (en) 2014-08-21 2016-02-25 Edward T. Grochowski Method and apparatus for non-speculative fetch and execution of control-dependent blocks
US9569613B2 (en) 2014-12-23 2017-02-14 Intel Corporation Techniques for enforcing control flow integrity using binary translation
US9940136B2 (en) 2015-06-26 2018-04-10 Microsoft Technology Licensing, Llc Reuse of decoded instructions
US9720693B2 (en) 2015-06-26 2017-08-01 Microsoft Technology Licensing, Llc Bulk allocation of instruction blocks to a processor instruction window
US10409606B2 (en) 2015-06-26 2019-09-10 Microsoft Technology Licensing, Llc Verifying branch targets
US20160378491A1 (en) 2015-06-26 2016-12-29 Microsoft Technology Licensing, Llc Determination of target location for transfer of processor control
US20160378488A1 (en) 2015-06-26 2016-12-29 Microsoft Technology Licensing, Llc Access to target address
US10346168B2 (en) 2015-06-26 2019-07-09 Microsoft Technology Licensing, Llc Decoupled processor instruction window and operand buffer
US9952867B2 (en) 2015-06-26 2018-04-24 Microsoft Technology Licensing, Llc Mapping instruction blocks based on block size
US10175988B2 (en) 2015-06-26 2019-01-08 Microsoft Technology Licensing, Llc Explicit instruction scheduler state information for a processor
US10095519B2 (en) 2015-09-19 2018-10-09 Microsoft Technology Licensing, Llc Instruction block address register
US9830152B2 (en) 2015-12-22 2017-11-28 Qualcomm Incorporated Selective storing of previously decoded instructions of frequently-called instruction sequences in an instruction sequence buffer to be executed by a processor
US10223118B2 (en) 2016-03-24 2019-03-05 Qualcomm Incorporated Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101452378A (zh) * 2007-12-05 2009-06-10 国际商业机器公司 阻止指令提取调节的方法、处理器和装置
CN103547993A (zh) * 2011-03-25 2014-01-29 索夫特机械公司 通过使用由可分割引擎实例化的虚拟核来执行指令序列代码块
CN104011705A (zh) * 2011-12-01 2014-08-27 新加坡国立大学 多形异构性多核架构
CN104049941A (zh) * 2013-03-15 2014-09-17 英特尔公司 跟踪指令的控制流程
CN104102474A (zh) * 2013-04-03 2014-10-15 瑞萨电子株式会社 信息处理装置和信息处理方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
trips:A polymorphous architecture for exploiting ILP,TLP and DLP;SANKARALINGAM K et al.;《ACM Transactions on Architecture and Code Optimization》;20040331;第1卷(第1期);第62-93页 *

Also Published As

Publication number Publication date
US11755484B2 (en) 2023-09-12
EP3314403A1 (en) 2018-05-02
EP3314403B1 (en) 2021-11-24
CN107810480A (zh) 2018-03-16
WO2016210032A1 (en) 2016-12-29
US20160378661A1 (en) 2016-12-29

Similar Documents

Publication Publication Date Title
CN107810480B (zh) 根据性能度量的指令块分配
EP3314398B1 (en) Reuse of decoded instruction blocks in a block based architecture
EP3314401B1 (en) Block-based architecture with parallel execution of successive blocks
CN108027770B (zh) 用于数据流isa的密集读取编码
US11681531B2 (en) Generation and use of memory access instruction order encodings
US20170083319A1 (en) Generation and use of block branch metadata
US10452399B2 (en) Broadcast channel architectures for block-based processors
US20170083320A1 (en) Predicated read instructions
US20160378491A1 (en) Determination of target location for transfer of processor control
US10445097B2 (en) Multimodal targets in a block-based processor
US10095519B2 (en) Instruction block address register
CN108027734B (zh) 空指令的动态生成
CN108027733B (zh) 在目标字段中存储无效
CN108027735B (zh) 用于操作处理器的装置、方法和计算机可读存储介质
WO2017048645A1 (en) Multimodal targets in a block-based processor

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