CN114265592A - 填充指令字的系统和方法 - Google Patents

填充指令字的系统和方法 Download PDF

Info

Publication number
CN114265592A
CN114265592A CN202111316274.8A CN202111316274A CN114265592A CN 114265592 A CN114265592 A CN 114265592A CN 202111316274 A CN202111316274 A CN 202111316274A CN 114265592 A CN114265592 A CN 114265592A
Authority
CN
China
Prior art keywords
instruction
alu
node
allocation
word
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111316274.8A
Other languages
English (en)
Inventor
拉多斯拉夫·达尼拉克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tachim Ltd
Original Assignee
Tachim Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tachim Ltd filed Critical Tachim Ltd
Publication of CN114265592A publication Critical patent/CN114265592A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • G06F16/9024Graphs; Linked lists
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/38Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
    • G06F7/48Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation using non-contact-making devices, e.g. tube, solid state device; using unspecified devices
    • G06F7/57Arithmetic logic units [ALU], i.e. arrangements or devices for performing two or more of the operations covered by groups G06F7/483 – G06F7/556 or for performing logical operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/45Exploiting coarse grain parallelism in compilation, i.e. parallelism between groups of instructions
    • G06F8/451Code distribution
    • 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/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/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/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/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
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3893Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled in tandem, e.g. multiplier-accumulator

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computational Mathematics (AREA)
  • Computing Systems (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

提供了一种用于准备用于由多个算术逻辑单元(ALU)执行的一系列指令操作的方法。该方法包括:将第一指令操作第一分配给第一ALU;对于具有直接依赖于第一指令操作的输出的输入的第二指令操作,第一确定用于第二指令操作的所有输入是否在距第一ALU的局部预定义范围内可用;响应于至少第一确定的肯定结果,将第二指令操作第二分配给第二ALU;响应于第一确定的否定结果:确保在第一指令操作与第二指令操作的执行之间将发生至少一个时钟周期的暂停;以及将第二指令操作第三分配给多个ALU中的ALU。

Description

填充指令字的系统和方法
分案申请声明
本申请是国际申请日为2019年08月15日、国际申请号为PCT/US2019/046630的PCT国际申请,于2021年04月13日进入中国国家阶段的、发明名称为“用于位置感知处理的系统和方法”、申请号为201980067592.X的中国发明专利申请的分案申请。
相关申请的交叉引用
本申请要求2019年8月14日提交的申请号为16/540328、名称为“SYSTEM ANDMETHOD FOR LOCATION AWARE PROCESSING”的美国专利申请以及2018年8月16日提交的申请号为62/764,767、名称为“SYSTEM AND METHOD FOR LOCATION AWARE PROCESSING”的美国临时专利申请的优先权,这两件申请的整体内容通过引用明确地并入本文。
技术领域
本文描述的各种实施例一般地涉及具有高时钟频率的处理器。更具体地,本申请的实施例涉及利用位置感知处理的处理架构和相关方法,位置感知处理基于针对先前指令操作的处理器中的算术逻辑单元(Arithmetic Logic Units,ALU)的先前分配,将ALU分配给指令操作。这样的实施例将内部传输延迟对处理器中的ALU之间的导线的影响最小化,同时相应显著地增大时钟频率、减小功耗和减小尺寸。
背景技术
近年来,现代计算中的处理器的时钟频率已经基本上达到稳定。现在参考图1,对数图100示出了从1975至2015年的晶体管尺寸、时钟频率和性能的演变(数据改编自“40Years of Microprocessor Trend Data”,Karl Rupp,2015年6月25日)。晶体管的尺寸已经沿着相当线性的路径102继续减小;由于较小的晶体管比较大的晶体管更快,所以晶体管尺寸的减小已经使晶体管的开关速度大约每九年相应增加八倍,尽管这在近年来变得更加缓慢。晶体管组成了执行操作的处理器内部的ALU。
在2000年之前,CPU时钟频率和性能的主要因素是晶体管速度。因此,从1975至2000年,随着晶体管尺寸沿路径102减小,时钟频率曲线104在几乎对应的线性路径处改善,并且性能曲线106类似地沿相当线性的路径保持。
在2000年代初期,时钟频率开始达到峰值,并且性能改进随着每一代产品趋于平缓。尽管晶体管尺寸和速度持续改进,但是从2010至2015年,时钟频率几乎没有改进。处理器技术完全不再能够充分利用晶体管尺寸的减小来提高时钟频率。性能在那时间段里继续保持着轻微的改进,尽管它是相对适度的并且主要归因于处理器技术的其他改进。
时钟频率达到峰值的原因是晶体管速度以外的因素的影响增加。在2000年之前,这些因素的影响与晶体管速度的影响相比很小,使得这些其他因素实际上是无关紧要的;因此,时钟频率和性能的改进跟踪了晶体管速度的改进。然而,最终晶体管变得如此小和快速,使得这些其他因素的影响不再是可忽略的,并且随着时间的推移发展成为显著的限制因素。这些因素之一是传输时间,传输时间部分地由信号完成其在导线上从产生信号的任何源到将消耗该信号的ALU的行进所花费的时间量来设定(其包括在这种时间中的技术考虑,包括但不限于充电和感应效应、泄漏等)。
晶体管速度和导线延迟(传输时间)的因素均影响支持系统的时钟频率。现代计算基于在单个时钟周期内发生的两个事件的保证。首先,算术逻辑单元(“ALU”)将从核内生成作为ALU的输入的任何源接收和选择输入;这涉及输入从源行进到ALU的传输时间。其次,ALU将对接收/选择的输入执行处理步骤;这涉及处理时间。
在这种情况下,晶体管和导线的尺寸的减小具有抵消效果——晶体管尺寸的减小减少了处理时间,而导线尺寸的减小增加了传输时间,因为较细的导线(在高度和宽度上)更能抵抗信号流。
虽然效果是抵消的,但是从历史上看,它们不是可比较的。在2000年之前,处理时间比传输时间大得多(例如,大大约100倍的量级),使得传输时间(甚至当其增加时)对于时钟频率的建立是可忽略的。这反映在图100的2000年前时间范围内,其中,时钟频率和性能的改进跟踪了晶体管尺寸的改进。
随着晶体管和导线的尺寸继续减小,处理时间继续减少,但传输时间持续以高得多的速度增加。最终,两者之间的差距缩小至与处理时间相比传输时间不再可忽略的程度,正因如此,传输时间的增加称为处理时间越来越重要的抵消因素。
这在上下文中通过核内的ALU的布局来理解。现在参考图2A和2B,如本领域已知的,处理器250的核205包括具有执行程序指令的4至8个ALU 202的数据路径207。数据路径207可以包括至少一个简单ALU(执行包括例如整数算术(加、减)、布尔逻辑(和、或、补)和移位(向左、向右、旋转)的函数)和至少一个复杂ALU(执行包括例如整数运算(乘和除)、浮点运算(加、减、乘、除)以及甚至数学函数(平方根、正弦、余弦、对数等)的函数)。
图2B示出了沿着数据路径216具有六个ALU 202(204、206、208、210、212和214)的现有技术数据路径,其中四个(208、210、212、214)是简单ALU并且两个(204、206)是复杂ALU。数据路径216包括用于每个ALU的操作数选择单元215,以共同定义操作数选择网络,并选择输入到其对应ALU的数据路径216上可用的特定输入。寄存器217呈现供ALU 202使用的值,并且可以由ALU的先前活动更早地提供这种值。
图2C针对包括ALU 204、206、208和210的多个ALU 202的布局,提供了对图2B的布局的更详细的讨论。每个ALU执行单元202由加法器262和逻辑单元263组成。加法器262可以用于计算由加载指令描述的存储器读取和由存储指令描述的存储器写入的地址。此外,加法器262可以用于执行条件分支。基于ALU是简单的还是复杂的,逻辑单元可以包括按位逻辑单元、移位器、符号扩展、逻辑和许多其他操作。每个ALU 202通过输入261和262a接收操作数。输入261和262a耦合到加法器262和逻辑单元263以提供用于操作执行的操作数。加法器262的结果通过耦合264耦合到多路复用器266,逻辑单元263的结果通过耦合265耦合到多路复用器266。多路复用器根据所请求的操作来选择来自加法器264或逻辑单元263的结果。多路复用器266的结果经由耦合267传送到输出寄存器268。
多个操作数选择单元215被示出为220、230、240、245,用于为ALU 204、206、208、210选择操作数。每个操作数选择单元215通过经由耦合261耦合到加法器262和逻辑263的多路复用器221为ALU 260选择操作数261。多路复用器221从存储器端口252或254、使用耦合258从寄存器256、经由耦合269从ALU 204、经由耦合279从ALU 206、经由耦合289从ALU208或经由耦合299从ALU 210选择操作数。类似地,操作数选择单元220通过经由耦合262耦合到加法器和逻辑单元的多路复用器222为ALU 260选择操作数262。复用器222可类似地从此类可用输入或从立即操作数常数223选择。
由存储器端口252和254提供的数据以及ALU 220的结果可以被写入寄存器217中并且使其可用于后续计算。
连接多个ALU 202的导线的传输时间对现有技术的处理器方法具有特定影响。为了保持在单个时钟周期内完成信号接收和处理的保证,必须将时钟频率设定为允许通信和处理事件两者的最坏情况场景的组合。在处理方面,最坏情况场景是ALU将在单个时钟周期内处理的最耗时的操作(不包括预期在一个时钟周期内不会完成的处理)。在传输方面,最坏情况场景是输入信号到达执行操作的ALU所必须进行的最远距离。总体最坏情况场景是当ALU被承担着最耗时的处理操作(其需要离最远距离的输入)时。
通过图2B中的示例,出于解释的目的,在单个时钟周期中可以由ALU完成的最复杂的操作是通过复杂ALU 204或206中的一者的“移位”。最复杂的传输距离是数据路径216的一端上的ALU 204从数据路径的相反侧上的最远的ALU 214选择输入。就时间而言,最坏情况场景是当ALU 204需要基于来自ALU 214的输入执行移位时。用于ALU 202的芯片的时钟周期必须大于最坏情况场景以保证可以执行操作。
不管对于特定芯片而言最坏情况场景是什么,当时钟周期被设定为允许最坏情况场景发生在单个时钟周期内时,则该时钟周期将足够长以保证任何其他(单个时钟周期)操作可以利用该时钟周期来执行,因为其他操作在总的传输和处理方面将减少负担,并且可以在单个时钟周期内执行。
相反,将时钟周期设定为比最坏情况场景将违反那个保证的时间更短,因为正确的结果可能不会在时钟周期内产生,并且被指示使用该过程的结果的其他ALU将接收到不正确的信息并且自身产生不正确的结果。例如,在图2B中,如果时钟周期的长度不足以使ALU 204从ALU 214接收输入,则ALU 204将产生不正确的输出,该不正确的输出将传播到依赖于ALU 204的输出的其他ALU。
因此,现有技术时钟周期可以由以下等式来定义:
最小时钟周期时间=tmaxglobalcomm+tmaxop+toh;并且
最大时钟频率=(1/最小时钟周期时间)
其中:
tmaxglobalcomm是一个ALU从数据路径内的另一个ALU接收并选择内容将花费的最大时间量;
tmaxop是一个ALU在单个时钟周期内完成处理步骤将花费的最大时间量;并且
toh是分配给如本领域已知的“开销(overhead)”参数的时间,包括但不限于以下各项中的一项或多项:时钟偏斜和时钟抖动、处理变化、温度或电压、接地跳动、同步切换、信号完整性、米勒效应、保护带和/或老化。
返回参考图1,在1990年代,与处理时间(即,晶体管开关速度)相比,通信时间(即,线延迟)是可忽略的。该时间段的近似值的典型示例可以是tmaxop=9.5纳秒(ns),tmaxglobalcommm=200皮秒(ps)和toh=300ps。因此,在大概1990年代的示例中:
最小时钟周期时间=9.5ns+200ps+300ps
=10ns
最大时钟频率=1/10ns=100MHz
这是1997年左右家用计算机的常见速度。处理时间在所得等式中如此占主导(在此示例中为95%),使得其他因素的影响最小(在此示例中为5%)。
图1中2005之后的时钟频率曲线104的平缓化反映了时间因素的影响的差距的缩小。给定2018年左右的部件尺寸,最坏情况操作的处理时间类似于最坏情况从核的一个角传输到另一角的通信时间。举例来说,对于当前处理器(晶体管开关速度比20年前快得多,并且导线延迟/传输时间明显更长),近似值可以是tmaxop=120ps、tmaxglobalcomm=120ps和toh=20ps。因此,在2018年的示例中:
最小时钟周期时间=120ps+120ps+20ps
=260ps
最大时钟频率=(1/260ps)=3.85Ghz。
这是2018年左右的家用计算机的常见速度。而对于1997年左右的技术,处理时间在等式中占95%,而对于2018年左右的技术,处理时间的影响与传输时间的影响相似。
以上示例可以示出进一步减小晶体管尺寸以及相应的处理时间的实际限制。如果假设晶体管在速度上有所提高,以使得处理时间比上述2018年左右的数字减少85%,则tmaxop可能下降到大约20ps。这将导致导线尺寸的相应减小,伴随着最坏情况传输时间的相应增加。假定由于导线尺寸(对于相应的大约140ps的Tmaxglobalcomm)导致一毫米长的导线的传输时间保守地增加20%并且为了说明的目的保持其他因素相同,该假设的晶体管的参数是:
最小时钟周期时间=20ps+140ps+20ps=180ps
最大时钟频率=5.55Ghz
相对于当前水平,处理时间(120ps至20ps)的85%减少代表时间和费用的巨大投资。然而,它将仅将时钟频率提高约44%(3.85Ghz至5.55Ghz),这是相对于潜在投资而言较差的回报。在晶体管尺寸与时钟周期时间之间缺乏可比较的改进的原因是处理时间的影响变得可忽略不计,而传输时间的影响(其自身曾经是可忽略的因素)现在已经占主导地位。
已经进行了通过减少传输时间来提高时钟频率的努力。曾经的努力类型是将导线的成分变成具有较低电阻的物质,例如从铝基化合物变成铜基化合物。另一努力类型是优化芯片ALU的布局以最小化信号必须遍历的距离。另一努力类型是冷却芯片,因为较冷的导线将具有关于信号传输的较低电阻。
2.指令执行
任何特定处理器设计有指令集架构(instruction set architecture,ISA)。ISA的常见类型是复杂指令集计算(Complex Instruction Set Computing,CISC),其中单个指令可以执行若干低级机器操作(诸如从存储器加载、算术操作和存储器存储)或能够进行单个指令内的多步操作或寻址模式。另一常见ISA是精简指令集计算机(ReducedInstruction Set Computer,RISC),其使用少量的简单和通用指令,而不是像CISC中那样使用大量的复杂和专用指令。
CISC和RISC允许程序指定仅按顺序执行的指令。另一不是这样的ISA是超长指令字(Very Long Instruction Word,VLIW),其中若干指令可分组成指令字,并且指令字中的多个指令可以同时(即,在相同时钟周期期间)、并发地、并行地执行。VLIW的局限性在于任何指令字内的指令可能不具有任何直接的相互依赖,诸如当第一指令操作的结果被用作第二指令操作的输入时,则它们不能同时执行,并且第二指令在第一指令完成之前不能执行。
附图说明
将参考附图描述根据本公开的各种实施例,在附图中:
图1说明从1970年代早期到2015年的处理器参数的曲线图。
图2A是现有技术处理器芯片的框图。
图2B和2C是现有技术芯片的数据路径内的现有技术ALU布局的框图。
图3A和3B示出了生产者-消耗者关系中的ALU的非限制性示例。
图4示出了根据本发明的实施例的处理器芯片。
图5A是一对ALU的现有技术布置。
图5B是一对ALU的布置的实施例。
图6是数据路径中ALU的布置的实施例。
图7A-7E是依赖图。
图8是用于将指令操作分配给ALU的本发明的实施例的流程图。
图9是图8的节点选择框的实施例的流程图。
图10A和10B是指令字的实施例的框图。
图11A至图11E是根据本发明的实施例的填充的指令字的框图。
图12A至图12D是根据本发明的实施例的填充的指令字的框图。
图13A至图13B是根据本发明的实施例的填充的指令字的框图。
图14A至图14C是根据本发明的实施例的填充的指令字的框图。
图15A至图15J是根据本发明的实施例的填充的指令字的框图。
图16是用于执行指令字的本发明的实施例的流程图。
图17至图21是不同数据路径的实施例。
图22示出了诸如图5中所示的镜像的ALU对的布局。
图23示出与诸如图21中所示的复杂ALU组合的镜像ALU对的布局。
图24示出了图24的ALU组。
发明内容
根据本发明的实施例,提供了一种用于准备用于在装置上执行的一系列指令操作的方法。该装置具有在数据路径内的多个算术逻辑单元(ALU),该数据路径包括至少第一ALU、第二ALU和第三ALU,该第二ALU在该第一ALU的局部预定义范围内,并且该第三ALU在该第一ALU的该局部预定义范围之外,该局部预定义范围小于该数据路径。该方法包括:将第一指令操作第一分配给第一ALU;对于具有直接依赖于第一指令操作的输出的输入的第二指令操作,第一确定用于第二指令操作的所有输入在距第一ALU的局部预定义范围内是否可用;响应于至少第一确定的肯定结果,将第二指令操作第二分配给第二ALU;响应于第一确定的否定结果:确保在第一指令操作与第二指令操作的执行之间发生至少一个时钟周期的暂停;并且将第二指令操作第三分配给多个ALU中的ALU。
上述方法实施例的操作还可以在作为具有时钟频率和时钟周期的计算机硬件装置的实施例中提供,其中该装置被编程为执行存储在非瞬态存储器中的一系列指令以执行所述操作。上述方法实施例的操作还可以在作为存储用于执行操作以将指令操作分配给装置的指令的非瞬态计算机可读介质的实施例中提供。
上述实施例可以具有各种可选特征。可以部分地由在局部预定义范围内的该多个ALU中的消耗者ALU与生产者ALU之间的最坏情况传输时间来定义装置的时钟频率。该局部预定义范围可以是相邻两个ALU之间的距离。局部预定义范围进一步由面向彼此的相邻两个ALU的输入和输出来定义。第一ALU和第二ALU可以是相同的,并且局部预定义范围可以是ALU到其自身。装置的时钟周期可以比保证第三ALU(a)接收并选择从第一ALU产生的输入,以及(b)执行第二指令操作所需的时间量更短。确保可以包括第二确定第一指令操作和第二指令操作在执行时间是否已经分开了该装置的至少一个时钟周期,并且响应于第二确定的否定结果,在第一指令操作和第二指令操作的执行之间插入该装置的至少一个时钟周期的延迟。第一分配和第二分配可以进一步包括将第一指令操作和第二指令操作设定为在该装置的相同时钟周期期间执行。
根据本发明的实施例,提供了一种用于创建和执行同时执行多个指令操作的指令字的方法,多个指令操作的同时执行由在按时钟周期运行的数据路径中的多个算术逻辑单元(ALU)进行。该方法包括:创建带有指令操作的节点的依赖图,该依赖图至少包括具有第一指令操作的第一节点和具有第二指令操作的第二节点,第二指令操作直接依赖于第一指令操作的结果;将第一指令操作第一分配给第一指令字;在满足第一组至少一个预定标准时,将第二指令操作第二分配给第一指令字;并且在满足第二组至少一个预定标准时,将第二指令操作第二分配给被调度为在比第一指令字更晚的时钟周期期间执行的第二指令字;以及由多个ALU并行地并且在共同的时钟周期期间执行在第一指令字内的任何指令操作。
上述方法实施例的操作也可以被提供为用于创建和执行用于同时执行多个指令操作的指令字的系统的实施例,其中,该系统包括在按时钟周期运行的数据路径中的多个算术逻辑单元(ALU)以及存储指令的非瞬态计算机可读存储器,其中,该系统被编程为实现指令以执行以上操作。上述方法实施例的操作还可以被提供为存储指令的非瞬态计算机可读介质的实施例,这些指令被编程为与系统协作以使该系统执行以上操作以创建和执行用于同时执行多个指令操作的指令字,多个指令操作的同时执行由在按时钟周期运行的数据路径中的多个算术逻辑单元(ALU)进行。
上述实施例可以具有各种可选特征。第二组至少一个预定标准可以无法满足第一组至少一个预定标准。第一组至少一个预定标准可以包括具有保持第二指令操作的足够容量的第一指令字。第一组至少一个预定标准可以包括在正常操作下保证在同一时钟周期内完成第一指令操作和第二指令操作两者。第一组至少一个预定标准可以包括第一指令操作和第二指令操作不被任何预定义规则禁止在第一指令字中。第一分配可以包括将第一指令字的第一指令操作分配给多个ALU中的第一ALU。该第一组至少一个预定标准可以包括:该多个ALU中的第二ALU在距第一ALU的局部预定义范围内是可用的,该局部预定义范围小于该数据路径。所述操作可以包括确保第一指令字和第二指令字的执行分开至少一个时钟周期。
根据本发明的实施例,处理器具有包括第一ALU、第二ALU和第三ALU的第一组ALU。第一ALU在第一侧具有输入和输出。第二ALU具有面向第一ALU的第一侧的第一侧,在第二ALU的第一侧上的并且相对于第一ALU的第一侧的输入和输出处于旋转取向的输入和输出,以及在第二ALU的第二侧上的输出。第三ALU具有面向第二ALU的第二侧的第一侧,以及在第三ALU的第一侧上的输入和输出。第一ALU的第一侧的输入在逻辑上直接连接到第二ALU的第一侧的输出。第二ALU的第一侧的输入在逻辑上直接连接到第一ALU的第一侧的输出。第二ALU的第二侧上的输出在逻辑上直接连接到第三ALU的第一侧上的输入。
上述实施例可以具有各种可选特征。路径可以在第一ALU与第二ALU之间延伸,该路径是向第一组ALU提供数据并从第一组ALU接收数据的管道。该路径可以包括第一ALU和第二ALU之间的操作数选择网络,该操作数选择网络控制第一ALU和第二ALU之间的数据流。第三ALU的第一侧上的输出可以在逻辑上直接连接到操作数选择网络。操作数选择网络可以在逻辑上直接连接到第一ALU的第一侧上的输入和输出。操作数选择网络可以在逻辑上直接连接到第二ALU的第一侧上的输入和输出。处理器可具有基于以下最坏情况组合的时钟频率:(a)可由第一ALU、第二ALU和/或第三ALU中的任何ALU在一个时钟周期中执行的最耗时处理,以及(b)第一ALU、第二ALU和/或第三ALU中的任何ALU执行(a)以从路径和第一ALU、第二ALU和第三ALU中的其余ALU接收任何需要的输入将花费的最大时间量。第一ALU和第二ALU可以限于第一组类型的操作,而第三ALU可以限于第二组类型的操作,其中第二组类型的操作包括比第一组类型的操作更复杂的操作。第一ALU的第一侧、第二ALU的第一侧和第二侧、以及第三ALU的第一侧可以是平行的。第二ALU的第二侧可以缺少输入。该处理器可以包括多组ALU,该多组ALU中的每个组具有与该第一组ALU相同的布局。
根据本发明的另一实施例,处理器具有多组ALU,每个组包括第一ALU、第二ALU和第三ALU。每组ALU内是第一ALU、第二ALU和第三ALU。共同路径在第一ALU和第二ALU之间延伸到每个组中,共同路径是向每组ALU提供数据并从每组ALU接收数据,并在多组ALU之间交换数据的导管。第一ALU在第一侧具有输入和输出。第二ALU具有面向第一ALU的第一侧的第一侧、在第二ALU的第一侧上的输入和输出,并且其相对于第一ALU的第一侧的输入和输出处于旋转取向,以及第二ALU的第二侧上的输出。第三ALU具有面向第二ALU的第二侧的第一侧,以及在第三ALU的第一侧上的输入和输出。第一ALU的第一侧的输入在逻辑上直接连接到第二ALU的第一侧的输出。第二ALU的第一侧的输入在逻辑上直接连接到第一ALU的第一侧的输出。第二ALU的第二侧上的输出在逻辑上直接连接到第三ALU的第一侧上的输入。
上述实施例可以具有各种可选特征。处理器可以具有基于以下最差情况组合的时钟频率:(a)可由第一ALU、第二ALU和/或第三ALU中的任何ALU在一个时钟周期中执行的最耗时处理,以及(b)第一ALU、第二ALU和/或第三ALU中的任何ALU执行(a)以从路径和第一ALU、第二ALU和第三ALU中的其余ALU接收任何需要的输入将花费的最大时间量。处理器可能具有过快而不能适应以下各项的组合的时钟频率:(a)可由多组ALU中的特定一组ALU内的第一ALU、第二ALU和/或第三ALU中的任何ALU在一个时钟周期执行的最耗时处理,以及(b)从多组ALU中的该特定一组ALU的外部接收任何需要的输入。该路径可以包括第一ALU和第二ALU之间的操作数选择网络,该操作数选择网络控制第一ALU和第二ALU之间的数据流。第三ALU的第一侧上的输出可以在逻辑上直接连接到操作数选择网络。操作数选择网络可以在逻辑上直接连接到第一ALU的第一侧上的输入和输出。操作数选择网络可以在逻辑上直接连接到第二ALU的第一侧上的输入和输出。在多组ALU中的每组ALU内,第一ALU和第二ALU可以限于第一组类型的操作,并且第三ALU可以限于第二组类型的操作,其中第二组类型的操作包括比第一组类型的操作更复杂的操作。在多组ALU中的每组ALU内,第一ALU、第二ALU和第三ALU可以在线性路径中对齐。在多组ALU中的每组ALU内,第一ALU的第一侧、第二ALU的第一侧和第二侧、以及第三ALU的第一侧可以是平行的。在多组ALU中的每组ALU内,第二ALU的第二侧可缺少输入。
根据本发明的实施例,提供了一种用于填充用于由数据路径中的多个ALU进行的多个指令操作的同时执行的指令字的方法。该方法包括:创建指令节点的依赖图,每个指令节点包括至少一个指令操作;从依赖图中第一选择第一可用指令节点;将所选择的第一可用指令节点第一分配给指令字;第二选择依赖于所选择的第一可用指令节点的结果并且不违反任何预定规则的任何可用依赖指令节点;将所选择的的任何可用依赖指令节点第二分配给指令字;以及更新依赖图以从分配的进一步考虑中移除在第一分配和第二分配期间分配的任何指令节点。
上述方法实施例的操作也可以被提供为系统的实施例,该系统包括在按时钟周期运行的数据路径中的多个算术逻辑单元(ALU)以及存储指令的非瞬态计算机可读存储器,其中该系统被编程为实现指令以执行上述操作。上述实施例的操作还可以被提供为非瞬态计算机可读介质的实施例,该非瞬态计算机可读介质存储填充用于由数据路径中的多个ALU进行的多个指令操作的同时执行的指令字的指令,当该指令被系统执行时,该指令使得该系统执行所公开的操作。
上述实施例可以具有各种可选特征。操作可以包括在第二分配之后:确定指令字是完整的还是不完整的;响应于按照确定指令字是不完整的,返回到第一选择;以及响应于按照确定指令字是完整的,关闭指令字。操作可以包括响应于(a)关闭和(b)依赖图仍具有未分配的指令节点来创建新指令字。更新可以包括:(a)从所述依赖图中移除在第一分配和第二分配期间分配的任何指令节点,或者(b)将在第一分配和第二分配期间分配的任何指令节点标记为不可用于进一步分配给指令字。第一分配可以将所选择的第一可用指令节点分配给指令字的第一ALU槽,第一ALU槽对应于多个ALU中的第一ALU。第二分配可以将任何可用依赖节点中的一个可用依赖节点分配给指令字的第二ALU槽,第二ALU槽对应于多个ALU中的第二ALU,其中,第一ALU和第二ALU在彼此的局部预定义范围内。操作可以包括响应于在第一选择期间不存在可用节点,绕过第一分配、第二选择和第二分配。操作可以包括:在创建之后,初始地将依赖图中的任何指令节点指定为全局的,其中,全局指定表示指令节点需要在ALU的预定义物理范围之外的输入,该范围小于数据路径的完整范围,并且任何预定规则包括:当可用依赖指令节点被指定为全局的时,指令节点可以不包括依赖于所选择的第一可用指令节点的结果的可用依赖指令节点。响应于不能确定特定指令节点是否是全局的,初始地指定可以将特定指令节点指定为非全局的。
根据本发明的实施例,提供了一种用于填充用于由数据路径中的多个ALU执行指令操作的多个指令字的方法。该方法包括:创建指令节点的依赖图,每个指令节点包括至少一个指令操作;将第一指令节点第一分配给第一指令字;识别直接依赖于第一指令节点的结果的依赖指令节点;第一确定依赖指令节点是否需要来自在彼此的预定义物理范围之外的两个或更多个源的任何输入,该范围小于数据路径的完整范围;响应于满足包括第一确定的否定结果的至少一个预定标准,将依赖指令节点第二分配给第一指令字;以及响应于第一确定的否定结果并且违反至少一个预定标准中的任何标准,将依赖指令节点第三分配给第二指令字;其中,第一指令字和第二指令字的执行发生在不同的时钟周期。
上述方法实施例的操作也可以提供为用于填充用于指令操作的多个指令字的系统的实施例,其中,该系统包括在按时钟周期运行的数据路径中的多个算术逻辑单元(ALU)、存储指令的非瞬态计算机可读存储器,并且该系统被编程以实现指令以执行操作。上述方法实施例的操作还可以被提供为非瞬态计算机可读介质的实施例,该非瞬态计算机可读介质存储用于填充由数据路径中的多个ALU进行的指令操作的多个指令字的指令,这些指令在由系统执行时使得该系统执行这些操作。
上述实施例可以具有各种可选特征。操作可以进一步包括:至少响应于第一确定的肯定结果,将依赖指令节点第四分配给第三指令字,其中,第一指令字和第三指令字的执行分开至少一个时钟周期。操作可以进一步包括:在第一分配和第二分配之后,优化依赖图的指令节点到第一指令字和第二指令字的分配;以及在优化之后执行第一指令字和第二指令字。操作可以进一步包括:在第一时钟周期期间第一执行第一指令字;确定在紧接在第一时钟周期之后的第二时钟周期中执行第二指令字是否将导致至少一个预定规则的至少一个违反;响应于第二确定的否定结果,在第二时钟周期期间第二执行第二指令字;响应于第二确定的肯定结果,将第二指令字的执行延迟至少一个时钟周期,直到至少一个违反解决为止;以及响应于至少一个违反的解决,第三执行第二指令字。延迟可以包括生成缺少指令操作或者包含用于ALU在对应的时钟周期期间不采取动作的指令操作的指令字。至少一个预定规则可以包括以下保证:ALU将接收第二指令字的所有指令操作所需的所有输入,并且将在第二时钟周期内执行第二指令字的所有指令操作。
具体实施方式
在以下描述中,在附图的各图中将通过示例而非限制的方式示出各种实施例。在本公开中对各种实施例的引用不一定是同一实施例,并且这样的引用意味着至少一个实施例。尽管讨论了具体实现方式和其他细节,但应当理解,这仅是出于说明的目的而完成的。相关领域的技术人员将认识到,在不脱离所要求保护的主题的范围和精神的情况下,可以使用其他部件和配置。
现在将提出在整个本公开中应用的若干定义。术语“基本上”被定义为基本上符合该术语修饰的特定尺寸、形状、或其他特征,使得该部件不需要是精确的。例如,“基本上圆柱形”是指该物体类似于圆柱体,但是与真实圆柱体可以具有一个或多个偏差。术语“包括”在使用时是指“包括但不一定限于”;它具体表示在如此描述的组合、组、系列等中开放式的包括或成员。术语“一”是指“一个或多个”,没有明确表示仅限于单数。“第一”、“第二”等是用于将相似术语彼此区分开的标记,并且不意味着任何顺序或数值限制。
“核”是本领域的术语,并且是指在处理器芯片上找到的独立处理单元。处理器芯片可以具有多个核。
“算术逻辑单元”(ALU)是本领域的术语,并且是指对整型二进制数执行算术和按位运算的组合数字电子电路。
两个ALU可以具有一种关系,其中,一个ALU生成结果作为输出,并且第二ALU接收该输出结果作为第二ALU将在进一步的处理步骤中使用/消耗的输入。为了区分该关系中的两个部件,“生产者”指生成输出结果的部件,并且“消耗者”指消耗先前生成的输出结果的部件。ALU可以处于多个生产者/消耗者关系中,因为单个ALU既可以接收其消耗的结果(并且因此是消耗者ALU)又可以从该消耗产生结果(并且因此是生产者ALU)。除了ALU之外的部件也可以是消耗者或生产者,例如,向ALU提供值的寄存器是生产者。
通过图3A中的非限制性示例,ALU 208向ALU 210提供输出,并且ALU 210向ALU212提供其输出。ALU 208和ALU 210因此处于消耗者-提供者关系302,其中ALU 208是提供者,而ALU 210是消耗者。ALU 210和ALU 212也在消耗者-提供者关系304中,其中ALU 210是提供者,而ALU 212是消耗者;因此,ALU 210在一种关系中是消耗者ALU,在另一种关系中又是提供者ALU。
现在参见图3B,提供者-消耗者关系的特定示例是当ALU接收来自其先前输出的反馈作为输入时。在该示例中,ALU 214既是提供者又是消耗者,因为它提供它消耗的输出作为输入。
“数据路径”是指核上专门用于执行程序指令的ALU组。
“局部通信”、“局部”、“局部”、“局部预定义范围”等意味着包含于预定义的有限物理范围的ALU中的结构、通信、处理等,该范围小于数据路径的完整范围。局部通信的非限制性示例是如图3B所示的从ALU到自身的定义的通信范围。另一非限制性示例是任何紧邻的ALU的定义范围,即,一个ALU距离(例如,对于图2B中的布局,距ALU 204-206、ALU 206-208、ALU 208-210等)。另一非限制性示例是两个ALU距离内的ALU。另一个非限制性示例是在某些方向上的ALU,如在左边而不是右边的相邻ALU。另一示例是特定类型的ALU关系(例如,如下所述的镜像ALU)。除了预定义之外,本发明不限于局部的任何特定布置。
“全局通信”、“全局”、“全局地”、“非局部通信”、“非局部”等意味着需要从定义的局部范围之外(例如,在距离、定向、和/或关系上)接收信号的结构、通信、处理等。作为非限制性示例,如果局部通信范围由ALU至其自身来定义,则从ALU至任何其他ALU的通信是“全局通信”(例如,对于图2B中的布局,ALU 208至ALU 210是全局的,因为ALU 210不是ALU208)。在另一非限制性示例中,如果局部通信范围由一个相邻的ALU来定义,那么从ALU到不相邻的另一个ALU的通信是“全局通信”(例如,对于图2B中的布局,ALU 204到ALU 206是局部的,因为两者相邻,而ALU 204到ALU 208/210/212/214/216是全局的,因为ALU 204不与这些其他ALU相邻,而是相距多于一个ALU距离)。
一些信号根据它们的性质可以是全局的或局部的。例如,由寄存器提供的值可以通过数据路径在ALU的输入处可用,并且因此可以始终是局部的。局部的非限制性示例可以包括常数(也称为立即操作数)、在多个周期内从存储器读取的数据、或从特殊寄存器、特殊存储装置或特殊执行单元读取的数据。全局的非限制性示例可以包括ALU旁路网络、来自复杂或专用执行单元(诸如乘法器)的结果,或来自负载执行单元的数据。本发明不限于什么信号是局部的或全局的,除了可以满足用于该信号的预定规则之外。
在局部的上下文中的“定义的”、“定义”等是确定特定情况是局部的还是全局的的各种适用规则。应当理解的是,“定义的”等被用作开放集(例如,与“包括”一致),因为如在此所讨论的特定定义可以具有未指定的其他规则。作为非限制性示例,“紧邻的ALU”的局部的“定义”需要所指出的相邻定向,但是不排除其他(非冲突规则),诸如提供局部范围内的各种输入的接近ALU的操作数选择器开关和/或寄存器的存在。
“编译器”是与硬件组合操作的计算机软件,该计算机软件将以一种编程语言(源语言,通常是人可读的)编写的计算机代码转换成另一种计算机语言(目标语言,通常是非人可读的)。编译器通常将采取源程序的程序步骤来执行,并将这些步骤转换成一系列机器级最终指令,以供ALU执行。在编译过程中,各种程序步骤可以被重新组织和/或转换成不同的相关组,而这些组被细化成指令。
“指令操作”或“多个指令操作”是指当程序从初始程序步骤过渡到要由ALU执行的最终程序指令时来自处于任何状态的程序的操作的任何集合(包括一个操作的集合)。
“指令字”指在共同时钟周期期间将由数据路径中的至少一些ALU同时、并发地、并行地执行的指令操作束。如下文所讨论,指令字的每个指令操作与将执行特定指令操作的特定ALU相关联。指令字可以是未填充的(尚未关联指令),被称为“气泡”。在本文中以单数形式描述了指令字,但是应当理解,指令字可以是复数的(例如,两个较小的指令字可以共同地被认为是单个指令字)。如果芯片具有不同核,则针对在相一时钟周期期间并行执行的每个核,可存在不同的指令字。
“映射指令字”是指具有多个槽的指令字类型,其中,指令字的每个槽对应于特定的ALU。对于多个映射的指令字,槽共同地形成对应于特定ALU的列。因此,多个指令字定义指令操作到ALU的映射,其中每行表示在时钟周期期间要并行执行的指令操作,而各列表示针对将以顺序方式执行的那些指令的所分配的ALU;也可以使用相反的(其中,每列表示在时钟周期期间要并行执行的指令操作,而各行表示针对那些指令的所分配的ALU),尽管为了便于讨论,以下描述仅进一步讨论列=ALU。指令字可以具有任何期望数量的槽,尽管优选地,槽的数量与数据路径中的ALU的数量相同。
当被创建时,映射的指令字可以不被填充,并且此后一些槽可以被提交。如以下所讨论的,处理器可以通过将每个指令操作关联(例如,插入、链接)到指令字的特定槽/列来将指令操作分配给特定ALU用于执行。当要执行指令字时,整个行被读取并且该行的单独指令操作由对应的ALU执行。如果指令字的任何槽未被填充,则对应于该指令槽的ALU在该时钟周期内不接收任何新指令,并且将保持空闲或者继续其参与的先前多时钟周期处理。在替代方案中,未从程序接收指令操作的槽可以被分配伪指令操作,以使ALU保持空闲或继续其参与的先前多时钟周期处理。
“逻辑直接连接”、“逻辑直接连接的”等是指路径上的连接,该路径缺少会修改通过该连接的信号的介入逻辑。非限制性示例是连接两个不同点的导线。另一示例是与流量方向部件结合的导线,诸如多路复用器或操作数选择开关。当缓冲器不改变信号时,缓冲器也可以是逻辑直接连接的一部分。逻辑直接连接可以通过另一部件(例如,ALU),只要该部件不对信号施加基于逻辑的修改。
“正常操作”是指在环境条件下当支撑结构和软件在未损坏状态下运行时发生的操作。在结构和/或软件被物理或电损坏(例如,病毒)时或在外部胁迫条件(例如,过热、过冷、过压、暴露于水)下发生的操作将被认为是异常的。
本文中的实施例关于室温下的部件进行讨论,并且无需任何具体的努力来降低温度。然而,本发明不限于此,并且这些实施例可以在其他温度条件下实现。
本文中的一些实施例关于过程和/或流程图进行讨论。应当理解,对于本文中所讨论的任何过程或流程图,除非另有说明,否则在各种实施例的范围内可以存在以类似或不同顺序或并行地执行的额外、较少或替代的步骤。
如上所述,现有技术的范例是在单个时钟周期内保证两个事件。首先,ALU将从提供那些输入的数据路径内的任何源接收并选择作为输入。其次,ALU将对接收/选择的输入执行处理步骤,其中,已知处理步骤花费一个或更少的周期来完成。
根据本发明的实施例,提供了一种新的范例,其中保证限于完成到消耗者ALU的局部通信的动作,并且消耗者ALU执行其分配的处理步骤。因此,要维持保证存在两个要求。首先,像现有技术一样,ALU将对接收/选择的输入执行处理步骤,其中,已知处理步骤花费一个或更少的周期来完成。其次,ALU将从数据路径内提供输入的任何局部产生者接收和选择输入;与现有技术不同,该范例不需要并且因此不保证ALU将接收和选择非局部的内容作为输入。
该范例与现有技术的不同之处在于:现有技术要求时钟频率允许在整个数据路径上进行全局通信所需要的时间,而本文的一些实施例仅要求时钟频率允许局部通信所需要的时间;由于用于局部通信的时间小于用于全局通信的时间,因此整体时钟频率更快。当特定指令操作需要全局通信时,则对应的指令操作被延迟一个或多个时钟周期以允许完成全局通信。这种范例可以部分地通过考虑分配给特定步骤的ALU的位置并且在局部的ALU中执行相关的后续步骤来实现。
以上可以在图2A和图2B的处理器250要实现的两个指令操作的基本示例(在下文中被称为指令集1)中被证明:
1:A=R1+R2
2:B=A+R3。
其中,R1、R2和R3是提供在数据路径内可用的特定值的寄存器。
为了在现有技术的方法下执行指令集1,处理器250将选择图2B中其希望用于第一指令操作A的任何ALU,例如ALU 208。然后,现有技术的处理器还必须选择第二ALU来执行第二指令操作B。在选择第二ALU时,现有技术的处理器不考虑执行先前指令操作A的ALU 208的位置。这部分地是因为现有技术范例基于允许选择数据路径内的任何ALU来执行第二步骤的时钟频率;ALU之间的距离无关紧要,因此在选择第二ALU时不考虑先前指令的ALU位置。因此,现有技术的处理器可以像选择ALU 214(远距离的若干ALU)一样容易地挑选ALU210(接近ALU 208)。类似地,现有技术的处理器未利用指令操作A与B之间的依赖关系,因为指令操作B依赖于指令操作A的结果。
根据本发明的实施例,处理器将同样地选择第一ALU(诸如ALU 210)用于指令操作A。为了分配第二ALU,处理器可以考虑指令操作A和B之间的依赖关系的性质以及执行A的ALU的位置两者。这里,处理器识别(a)ALU 210执行第一指令操作A并因此已经访问结果,以及(b)执行指令操作B所需要的所有信息对于ALU 210局部可用。即,指令操作B需要指令操作A的结果(其将由于第一指令操作A的完成而存在于ALU 210上)以及来自寄存器R3的值(B=A+R3)(其可从寄存器217局部存取)。因此,处理器可以分配对于ALU 210局部的ALU中的一个ALU以执行第二指令操作B。
如上所述,预定义了什么被认为是局部的。局部通信的非限制性示例是ALU到其自身,例如图3B中所示。在图2B的架构中,到生产者ALU的“最”接近的消耗者ALU是其自身,因为从一个ALU到下一ALU的最短传输路径在单个ALU的输入和输出之间。例如,如果局部被定义为ALU到其自身,则在指令操作A已被分配给ALU 210的情况下,指令操作B(既依赖于指令操作A又可局部执行)也可被分配给ALU 210。由于ALU 210的输入和输出之间的距离相对较短,相应的传输时间的延迟最小(与整个数据路径上的全局通信相比)。
局部通信的定义的另一非限制性示例是任何相邻的ALU;例如,在这种定义下,执行指令操作A的ALU 210在相邻的ALU 208和212的该局部范围内。由ALU 210到ALU 208、210(即,到自身)或212的通信将是局部的。超出一个相邻ALU(例如,204、214)的通信被认为是全局的。如果指令操作A被分配给ALU 210,则指令操作B因此可在该局部定义下被分配给ALU 208、210或212。因此,在该局部的定义下,指令操作B将被分配给ALU 204、206或214,因为那些ALU太远离ALU 210而不能保证ALU 201将接收它们的输出并且在单个时钟周期内执行指令操作B。
局部的定义还优选地包括到操作数选择单元和向ALU提供输入的寄存器的范围,诸如下文描述的图22和23中的2255和2355。
在以上示例中,处理器及相应的方法在针对指令操作B选择ALU时应用了“位置感知”,处理器知道将执行先前指令操作A的生产者ALU的位置,并使用该位置作为决定将执行第二指令操作B的消耗者ALU的位置的因素。如以下更详细讨论的,处理器可以主动地寻求向ALU分配指令以避免非局部通信。
以上范例允许CPU以比现有技术显著更快的时钟频率进行操作,因为“最坏情况”的传输时间是由局部通信而不是全局通信建立的。局部通信的距离(例如,在相邻两个ALU的范围之间)显著小于用于来自数据路径中的ALU的极端边缘的全局通信的距离。由于相应的距离如此小,因此与用于全局通信的传输时间相比,用于局部通信的传输时间也相当小。
通过比较,如以上在现有技术中所讨论的,时钟周期可以由以下等式来定义:
最小时钟周期时间=tmaxglobalcomm+tmaxop+toh
在本发明的实施例中,时钟周期将由以下定义:
最小时钟周期时间=tmaxlocal+tmaxop+toh
其中:
tmaxlocal是ALU从局部生产者接收和选择输入的最大时间量;
tmax(如以上所讨论的)是在单个时钟周期内一个ALU完成步骤将花费的最大时间量;并且
toh(如以上所讨论的)是分配给如本领域已知的“开销”参数的时间,包括但不限于以下各项中的一项或多项:时钟偏斜和时钟抖动、处理变化、温度或电压、接地跳动、同时切换、信号完整性、米勒效应、保护带和/或老化。
如上所述,tmaxglobal0mm、tmaxop、toh的非限制性示例是120ps、120ps和20ps,对应的时钟周期为260ps并且最小时钟频率为3.85Ghz。对于相同的示例和电路条件,局部通信的近似值(其中,局部由相邻的ALU定义)可以是tmaxlocal=20ps。因此,现有技术与本实施例之间的相应的时钟周期时间和时钟频率为:
表1:
<u>现有技术</u> <u>本实施例</u>
最小时钟周期时间 tmaxglobalcomm+tmaxop+toh tmaxlocal+tmaxop+toh
260ps=120+120+20 160ps=20+120+20
最大时钟频率 1/260ps 1/160ps
3.85Ghz 6.25Ghz
因此,通过应用局部通信,本实施例的时钟频率比现有技术快约60%。这是因为现有技术速度基于tmaxglobalcomm,而在以上实施例中,速度基于tmaxlocal,其中tmaxlocal<<tmaxglobal0mm。
经由利用更快的晶体管来扩展时钟频率的改进,甚至有可能获得更大的改进。如上所讨论的,在现有技术中,晶体管速度的进一步改进在时钟频率上几乎没有改进,因为处理时间与tmaxglobalcomm相比变成可忽略的因素,但是由于依赖于小得多的tmaxlocal,所以对于本文的一些实施例而言不是这种情况。例如,将上述等式应用于未来晶体管速度可能翻倍的情况(tmaxop=60s),并且出于示例的目的保持其他因素稳定,时钟频率如下:
表2:
<u>现有技术</u> <u>本实施例</u>
最小时钟周期时间 tmaxglobalcomm+tmaxop+toh tmaxlocal+tmaxop+toh
200ps=120+60+20 100ps=20+60+20
最大时钟频率 5Ghz 10Ghz
在以上示例中,响应于晶体管速度的翻倍,从表1到表2可以看出,现有技术范例的时钟频率仅提高了大约1.25Ghz(+30%)。相较而言,从表1到表2可以看出,这里阐述的本实施例的范例的时钟频率表现出3.75Ghz的提高(+60%)。总之,在这个示例中,本实施例的时钟频率将是现有技术范例的两倍。
图4中示出了可以实施本文所讨论的范例的处理器芯片400的图示。处理器芯片400包括一个或多个核402,每个核具有带有多个ALU 406的数据路径404。如本领域已知的,编译器功能由作为驻留在适当硬件上的软件的编译器提供,并且在图4中表示为在处理器芯片400上运行的编译器408。调度器410将在ALU上实现编译后的指令。处理器400具有与上述一致的时钟周期和对应的时钟频率,因为其保证了局部通信而不能保证全局通信。本发明不限于该特定芯片布局,并且可以使用其他布局,并且各种操作适当地分布在这些布局内。
如上文所讨论,改进的时钟频率是基于ALU将从提供输入的任何局部产生者接收和选择输入的保证。然而,不可避免地,不是每个指令都可以局部执行,因为无论出于何种原因,特定的消耗者ALU需要来自非局部生产者的结果。针对局部通信设定的单个时钟周期不提供足够的时间来保证来自非局部生产者的输入将及时到达消耗者ALU以允许处理。
本发明的一些实施例可以通过将消耗者ALU进行的处理根据需要延迟许多时钟周期直到输入具有足够的时间到达消耗者ALU为止来补偿这一点。因此,在现有技术处理器使用单个时钟周期进行全局通信和处理的情况下,本实施例的处理器使用多个单独的时钟周期——一旦接收到输入,至少一个用于非局部通信和至少一个用于处理。
这可以相对于指令集2来说明,指令集2包括五个指令操作:
1:A=R1+R2
2:B=A+R3
3:D=R5+R6
4:E=D+R7
5:F=B+E
在前述示例中,指令操作A和B具有依赖关系,并且各自可以在单个时钟周期内在局部级别执行(例如,如果ALU 208是局部的定义,则仅由ALU 208执行)。指令操作D和E也具有依赖关系,且各自可以在不同ALU处局部地执行(例如,ALU 214)。因此,指令集2的五个指令中的四个指令可以在局部ALU内执行,所有指令都在局部通信的范围内。
对于指令操作F,情况并非如此。因为指令操作F依赖于于指令操作B和E的结果,所以在理论上,指令操作F可以在A-B发生的地方局部地处理、在D-E发生的地方局部地处理或完全在新ALU(例如,ALU 212)处处理。然而,指令操作B和E的执行在间隔太远的ALU处发生,以确保指令操作B和E两者的结果可以到达分配给指令操作F的对应ALU,以在同一时钟周期内处理指令操作F。
例如,如果在与指令操作A-B相同的局部性(ALU 208)中执行指令操作F,那么指令操作B的结果是局部地可用的,但指令操作E的结果(来自ALU 214)不是。因此,指令操作F的执行需要非局部通信。如上所述,时钟周期不够长以保证非局部通信,因为时钟周期不够长以保证指令操作E的结果将及时从ALU 214到达ALU 208以被处理。
为了应对对非局部通信的实例的这种需要,处理器400可以将附加指令插入到指令集2中,该附加指令是指令操作F的执行被延迟一个时钟周期的延迟指令。因此,处理器将把ALU分配为六个指令操作的时间表,而不是五个:
1:A=R1+R2
2:B=A+R3
3:D=R5+R6
4:E=D+R7
5:WAIT(冒泡)
6:F=B+E
插入的指令操作的添加为指令操作E和/或B的结果全局行进以到达目的地ALU提供额外的时钟时间周期。例如,使用如上关于表1所讨论的度量,在数据路径中从一个ALU到达另一个ALU所需的最大时间是约120ps。处理器的单个时钟周期为160ps。由于160ps的时钟周期大于120ps的最大行进时间,因此等待一个时钟周期执行指令操作F将保证指令操作E和B的结果将具有足够的时间到达消耗ALU以处理指令操作F。如果由于某种原因没有足够的时间(例如,最大行进时间比时钟周期长),则可以插入额外的延迟步骤直到提供足够的时间为止。
尽管有额外的时钟周期,但是整个过程比现有技术更快地发生。在使用以上表1中讨论的度量的现有技术处理器中,将以每步260ps在3.85Ghz处理器上执行以上五个步骤1-5,总共1300ps来执行五个指令操作。在上述实施例的处理器中,六个指令操作(原始的五个加上一个延迟步骤)将在6.25Ghz处理器上以每步160ps执行,总共960ps。本实施例的处理器以比现有技术范例更高的时钟频率(+62%)和更少的时间(-26%)执行整个指令操作集A-F。
如在以上示例中看到的,较高的时钟频率由于考虑非局部通信导致的步数的增加而被至少部分地抵消。申请人估计,通过使用现有技术的ALU架构,大约85%以上指令操作可以在局部进行(基于局部的具体定义是什么)。假设每六个实质性指令操作需要一个延迟的最坏情况(即,83%局部,17%全局),处理器400将仍然具有比现有技术范例更高的时钟频率(+65%)并且在更少的时间(-30%)内执行相同的指令操作集。如以下所讨论的其他实施例可以进一步对此进行改进。总体结果是处理器具有更快的时钟频率和更快的指令操作的性能。
与那些要求数据的非局部传输的因素相反,影响可以局部执行哪些操作的平衡的因素包括局部的范围,而不是全局的百分比。具体地,局部范围越小,传输时间越小,因此时钟频率越快。然而,局部处理的较小范围可能增加全局步骤的百分比/数量,因为较少步骤可满足较严格的局部处理定义。
例如,将局部性设定为仅ALU自身(例如,图3B)是比相邻ALU更短的距离;这使传输时间最小化并且相应地使时钟频率最大化,从而可以使用现有技术的ALU在这个定义下将大约90%的指令在局部执行。在另一示例中,将局部性设定为相邻ALU(例如,302或304)与ALU到其自身相比具有更长的传输时间,并且因此传输时间更高而时钟频率稍微更低。然而,申请人预期使用现有技术的ALU在此定义下大约93%的指令可以在局部执行,并且对于全局通信需要更少的延迟。
本文的各种实施例可以在上述基础上进一步改进。以下更详细公开的一个这样的实施例是收集并同时执行可并行执行的指令操作,从而减少执行指令集所需要的时钟周期的数量。例如,以上指令集1具有两个指令操作,但是它们可以在一个时钟周期中并行执行。
另一这样的实施例是利用具有不同配置和/或布局的ALU。具体地,如图5A所示,ALU配置具有通过路径506连接的ALU(诸如ALU 502和ALU 504)的相对侧上的输入和输出。如果局部被定义为相邻ALU,则传输时间由数据行进的最长路径决定,在这种情况下,504的输出沿着路径506返回到502。
图5B示出了在本文中被称为“镜像”ALU的ALU配置的实施例。在这种配置中,ALU508和ALU 510中的每一者在相同侧上具有输入和输出,并且输入和输出均连接至路径512。进一步地,ALU 508和ALU 510以一个相对于另一个翻转的方式成对,从而使得I/O连接关于介入路径514面向彼此,并且可以直接连接至彼此。如果局部由相邻ALU定义,则传输时间由最长路径决定,在这种情况下,508的输出沿着路径512返回到510。因此,图5A和5B具有相同的局部定义(即,相邻ALU),但是因为图5B中的路径512比图5A中的路径506短,所以图5B的传输时间更短并且可以支持相应更高的时钟频率。
将局部定义为诸如图5B中的镜像ALU对组合了相邻ALU对的优点(与ALU自身相比,这可以减少全局指令的数量),其中距离甚至比ALU自身更短(ALU508和ALU 510之间的距离潜在地甚至比图3B中针对ALU 214所示的输出到输入路径更短)。
图6示出了具有两对镜像的ALU 602-ALU 604和ALU 614-ALU 616的处理器芯片400的核600。在该实施例中,局部可以定义为镜像对,即,602-604是彼此局部的,并且612-614是彼此局部的。路径618允许全局ALU通信、局部提供的值(例如,经由操作数选择单元和寄存器)和根据需要的其他数据和命令。
将指令集1(A=R1+R2,B=A+R3)应用于图6的配置,其中局部被定义为镜像的ALU对,处理器400在某些条件下可以将指令操作A分配给ALU 602,并且试图将指令操作B保持在它将指令操作B分配给ALU 604的局部范围内,而不是分配给612和614,因为这些ALU相对于ALU 602在局部范围之外。
经由位置感知的ALU的分配可由处理器芯片400的编译器408实现。编译器408可以是用特定编程修改以执行步骤到ALU的映射的标准编译器,或者可以是定制设计的。为了简洁起见,参照由处理器芯片400执行的各种操作来描述以下实施例,但是应当理解,本发明不限于此。
在以上过程中,编译器408基于最后将形成指令的最终集合的操作的依赖性来生成对应于指令操作的节点的依赖图。图7A示出指令集1的依赖图,其中节点是一个指令操作。指令操作A=R1+R2可以被认为是“独立的”,因为其不依赖于任何先前操作的结果(R1和R2是来自寄存器的局部存在)。指令操作B=A+R3是“依赖的”,因为其依赖于A的结果。
如本领域已知的,编译器将尝试通过应用底层规则并检查那些规则下的结果分数来减少要执行的指令操作的数量。该过程是迭代的,并且可以执行超过100遍次尝试以优化依赖图内的步骤的分配。因此,依赖图可在这些遍次上继续改变。在某一时刻,编译器将把图上的节点映射到特定ALU以便执行;这可能发生至少两次,一次在寄存器被分配之前并且一次在寄存器被分配之后。
本发明的实施例可以利用由现有技术的编译器应用的规则中的至少一些规则。该实施例还将基于位置感知将特定规则应用于ALU选择。这样的规则的非限制性示例是在可能的情况下每个操作都在局部执行以避免非局部通信,并且应当最小化非局部通信的数量。
一旦编译器的依赖图达到特定演进状态,系统将开始将ALU分配给依赖图内的节点成为指令字。每个指令字明确地指定用于分配给这些单独的ALU的指令,以便在一个共同的时钟周期期间同时、并发地、并行地执行。与VLIW字不同,本实施例的指令字可以包括一些具有直接独立性的指令操作。根据情况,可以适应某些指令操作的至少一个级别的相互依赖性,并且如果ALU被设计为处理那么多的输入,则潜在地可以适应某些指令操作的两个或更多个级别的相互依赖性。
图10A示出作为行的映射的指令字的指令字1002的实施例,该行的映射的指令字在列1004、列1006、列1008和列1010内具有槽,对于该行的映射的指令字,槽与特定ALU相关联;槽的数量可以与数据路径404内的ALU的数量相同,但是这不需要是如以下所讨论的情况。
图10B示出多个顺序的指令字1002A-1002n,对于这些顺序的指令字,槽形成列,并且对于这些顺序的指令字,当被指令操作填充时,指令字1002A-n共同定义指令操作的映射。每一行表示将由ALU在对应的时钟周期中同时执行的指令操作。槽的每一列专用于数据路径内的特定ALU,因此列表示ALU将执行指令操作的顺序。例如,关于图6的四个ALU数据路径配置,ALU 602可以分配给列1004,ALU 604可以分配给ALU 1006,ALU 612可以分配给列1008,并且ALU 614可以分配给ALU1010。因此,将指令操作分配给ALU可以包括将该指令操作输入到专用于该ALU的适当列/槽中。然而,本发明不限于此,并且列/槽可以不分配给特定的ALU,而是槽的内容具有对特定的ALU的标识符。
如下文更详细地讨论的,处理器400将通过依赖图工作,以将每个指令操作分配到处理器芯片400内的特定ALU 406以供执行。这些过程标识指令操作的子集(在一些情况下包括直接相关的指令操作),这些指令操作的子可以由ALU在相同的时钟周期期间并行执行,并且将它们分配给那些ALU。
现在参考图8,结合流程图800示出了用于通过位置感知来分配ALU的方法的实施例。对于具有定义了局部通信的ALU布局的特定处理器400内的核的任何数据路径,该流程图可以应用于任何程序。流程图的步骤优选地由在处理器400上运行的编译器408执行,但是由于处理器400的其他部件可能参与该处理,所以本文的讨论将把功能总体上归因于处理器400。
在框802处,处理器400基于在节点处执行的操作的性质是否能够局部完成或者需要全局通信(按照局部的定义),初步地将依赖图的各个指令操作指定为全局的或局部的。例如,仅基于来自局部寄存器的输入的指令节点可能是局部的,因为寄存器内容在局部可用。基于来自两个不同的局部或全局指令节点的输入的指令节点将可能是全局的。基于来自局部或全局指令节点的单独或与寄存器输入组合的一个输入的指令节点将可能是局部的。
在一些情况下,该图将不能够预测特定节点的指令操作是全局的还是局部的。例如,这可能发生在依赖图的边界处,在该边界处不清楚前一步骤可能是什么(例如,前一步骤可能是甚至尚未输入到系统中的另一程序的一部分)。在这样的情况下,由于处理器400不知道越过边界发生了什么,因此编译器可以认为这样的操作是局部的并且允许后续处理在必要时做出调整。在替代方案中,编译器可以认为这样的操作是全局的并且允许后续处理在必要时做出调整。
在框802处评估局部和全局的努力不需要完全准确。如下文所讨论,可以在后续处理中校正和/或补偿分配中的错误。因此,在框802处的局部和全局的指定可以被认为是初步的。
在指定局部/全局节点之后,在框803处,处理器400将以新的指令字1002开始,优选地以映射的指令格式开始。这可能需要创建新的指令字(以跟随任何先前的指令字),或者识别先前创建的指令字。在其中收集而不是映射指令操作的替代实施例中,框803可以是不必要的。
在框804处,处理器400从依赖图的剩余部分中选择节点用于分配,其中剩余部分排除针对任何先前分配的节点的分配考虑。(对于初始选择的节点,存在整个图,因为尚未分配任何东西。)所选择的节点可以是不违反规则的剩余关键路径(即,依赖图内的在开始与完成之间具有最长步数的路径)上的最低节点。
图9示出可以通过其执行框804的非限制性方法的流程图。在框902处,处理器400识别分布图的关键路径;因为每一节点可包含多个步骤,所以关键路径可能不同于由最长节点数目界定的路径。在框904处,处理器400识别在框902处识别的关键路径的最低节点。在框906处,处理器400确定对所识别节点的指令操作的选择是否将违反任何规则,例如,如果在特定指令字中包括指令操作将创建其中不能维持局部通信和处理的保证的情形。如果没有违反规则,则在框908处,处理器400选择该节点用于分配,并且控制转到图8中的框806。
如果在框906处包括指令操作将违反规则,则在框910处,处理器400识别下一最关键路径并将控制返回到框904。该过程可以迭代地继续,直到节点被选择。最终,如果没有节点满足标准(例如,所有节点都用尽,一些节点保留,但是已经考虑足够的节点,则进一步的搜索将被认为是适得其反的或徒劳的),则控制将转到框816以作为过渡到新的指令字(下面讨论的)的处理。
在框806处,处理器400为所分配的节点的指令操作选择ALU并且使指令操作与指令字1002的槽相关联。各种规则可以定义选择哪个ALU和/或槽。例如,已经在使用中的ALU不可用并且不应当被分配。处理器400可能不希望使用已经在使用中的ALU局部的ALU,以避免局部资源分配中的潜在冲突,除非这样做是有意义的。
如上文所讨论,当在映射的指令字中时,指令字1002的格式槽可以专用于某些ALU,且因此可以通过将指令操作插入到指令字1002的用于所选择的ALU的适当槽中来定义指令操作-ALU的关联。然而,本发明不限于此,因为存在可以涉及或可以不涉及映射的指令字的使用的其他方式来创建关联。作为非限制性示例,可以将标记插入到指令字中,该指令字指向如存储在其他地方的指令操作。作为另一个非限制性示例,可以将指令操作连同对所选择的ALU的标记插入到指令字中。本发明不限于将指令操作关联或集合到指令字中的形式。
在框808处,处理器400识别依赖于先前分配的节点的任何节点,该节点可以包括在相同指令字1002中以用于并行执行。以下非限制性规则可以应用于特定的依赖节点是否可以被包括在与其所依赖的节点相同的指令字1002中。例如,一个规则可以是依赖节点是局部的(每个框804)。另一规则可以是依赖节点和其所依赖的节点的指令操作足够简单/快速使得两者可以在单个时钟周期内完成。另一个规则可以是依赖性级别不超过ALU可以处理的程度(例如,当ALU仅可以处理两个输入时,依赖性级别是一个)。另一规则可以是指令字1002具有用于依赖节点的空间(即,指令字尚未满)。另一规则可以是局部ALU可用。本发明不限于可应用的规则。
如果识别出这样的规则投诉节点,则控制转到框810。如果没有识别到这样的节点,则控制转到框812。
在框810处,处理器400向来自框808的任何标识的依赖节点指令操作分配ALU和指令字1002。对于映射的指令字,ALU分配可以将所识别的指令操作插入到指令字的对应于ALU的槽中,该指令字对应于相对于依赖节点所依赖的生产者节点的ALU为局部的ALU。如本文中所讨论的,可以使用其他分配形式。
在框812处,处理器400更新依赖图以将所分配节点从节点选择中的进一步考虑(至少从关键路径的角度来看)移除,这可以是从依赖图自身的删除,或节点上不应当再考虑该节点的标记。本发明不限于该方法从进一步的分配考虑中移除分配的节点的方式。
在框814处,处理器400确定指令字1002是否完整并且应该被关闭。指令字1002可以被认为是完整的原因的非限制性示例是当指令字是满的(不存在更多可用槽)时,没有要放置的指令操作剩下(依赖图已经被完全转换成指令字),和/或在指令字1002中存在可用的槽,但是剩余的指令操作都不适合放入其中,因为将其包括在指令字1002中将违反规则。
如果指令字1002是完整的,则在框816处,处理器400在指令字1002中的最后指令操作中设定标志以指示指令字1002的结束。控制转到框818以检查是否针对任何剩余的未分配的指令操作开始新的指令字1002。如果是这样,则控制返回到框803以开始新的指令字1002。如果不是,则ALU分配处理结束。
现在将讨论以上流程图的应用的示例。
示例1
在示例1中,使用图2B的现有技术的ALU配置,并且局部的定义是ALU到其自身(如图3B所示)。在图2B中存在六个ALU,并且如图11A所示,处于映射的指令字格式的每个指令字1102包括六个槽,具体地分配给每个ALU 204-214。指令集1是有要分配给ALU的程序,指令操作为A=R1+R2和B=A+R3。如上所述,指令集1的分布图在图7A中;在该图示例中,指令集1的每个指令操作占据单个节点,但是应当理解,由于情况可能并非如此,因为节点被编译,所以若干指令操作可以发生在单个节点内,或者若干指令操作可以编译成针对节点的其他指令操作。在此上下文中,指令操作被分配给节点,并且指令操作和节点可以在某种程度上可互换地使用。
在图7A的图表中,不存在全局操作,并且如此,在框802处,处理器400将每个节点指定为局部的。在框892处,处理器400开始新的指令字,在此情况下为字1102A。在框804和806处,处理器400将A=R1+R2识别为关键路径,且在指令字1102A中包含指令操作A不(在此情况下)违反任何规则;因此,处理器将指令操作A分配给如图11A中所示的指令字1102A中的ALU槽(例如,对于此示例是ALU 208)。
在框808和810处,处理器400将指令操作B识别为依赖于对A局部的指令操作A(B=A+R3),且指令字未满(仍有三个槽剩余)。然而,因为此定义中的局部性是对其自身局部的ALU,所以不能将指令操作B分配到相同指令字1102A中的另一ALU,因为指令操作A的ALU已经在使用中,即,在指令字1102A中不存在可用的用于分配指令操作B的局部ALU。
由于没有其他依赖节点可用于填充指令字1102A,所以控制转到框812,在框812处,处理器400更新依赖图以将节点A从如图7B中所示的进一步分配考虑中移除。
在框814处,指令字1102A被认为是完整的。即使为在指令字1102A中未分配的ALU保留槽,包含剩余的节点B也会规则违反。因此,在框814处设定标志以将用于ALU 208的槽指定为指令字1102A的结束,需要新的字并且在803处创建为图11B中的指令字1102B,并且控制返回至框804。
在框804和806处,编译器将B=A+R3识别为依赖图中的下一关键路径(这是剩下的全部),且指令操作B不(在此情况下)违反将排除包含在指令字1102B中的任何规则。由于指令操作B对于指令操作A是局部的,所以处理器400将指令操作B分配到对于被分配指令操作A的ALU是局部的ALU。在这种情况下,通过局部的定义(ALU到其自身),ALU 208将被使用,因为它是与图11B中所示的先前指令(即,操作A)相同的ALU 208。(如果由于任何原因ALU 208不可用,那么指令操作B不能放置在指令字1102B中,因为其他ALU不是局部的并且将需要全局通信,并且将需要创建新的指令字1102C(未图示)。)
在框808和810处没有选择或分配进一步的依赖节点(没有剩余),字在框812处被确定为是满的(所有节点都被分配),在框814处设定标志以将用于ALU 208的槽指定为指令字1102B的结束,该处理被确定为完成,并且在框816处该处理结束。
在上面的示例中,作为映射的指令字的指令字的格式直接经由槽分配来识别指令操作-ALU的关联。然而,本发明不限于此。图11C示出了在槽内包含ALU ID的填充的指令字1102A/B的另一表示的非限制性示例。
图11D示出填充的指令字1102A/B的另一表示的非限制性示例,填充的指令字1102A/B不采用映射的指令格式,并且对于填充的指令字1102A/B,指令操作-ALU的关联是自包含在数据字段中的。
图11E示出填充的指令字1102A/B的另一表示的非限制性示例,填充的指令字1102A/B不采用映射的指令格式,并且对于填充的指令字1102A/B,指令操作-ALU的关联通过ALUID和链接L包含在数据字段中,指令操作A和B可以在该数据字段中被检索。
在该示例中,ALU配置和指令集的特定组合不会导致需要执行的指令的数目的任何节省。尽管如此,如果处理器正在使用由tmaxlocal定义的时钟频率,则处理将以更快的时钟频率执行,如上所述。
示例2
示例2使用与示例1中相同的指令集1。在这种情况下,使用图6的ALU配置,并且将局部的定义预定义为与镜像对中的伙伴的通信(例如,ALU 602和ALU 604作为镜像对彼此局部,并且ALU 614和ALU 616作为镜像对彼此局部,但是ALU 602和ALU 614/616不是局部的,因为当它们相邻时没有被镜像)。因为存在四个ALU(602、604、614、616),所以具有如图12A-12B中所示的映射的指令字格式的每个指令字1202将具有四个槽。同样,由于图6的ALU配置在其整个数据路径中具有4个ALU并且局部的定义是镜像对,所以局部预定义范围小于数据路径。
如上所述,指令集1的分布图在图7A中。不存在全局操作,并且因此在框802处,处理器400将每个节点指定为局部的。在框803处,处理器开始如图12A中所示的新的指令字1202A。在框804和806处,处理器400将A=R1+R2识别为关键路径,且指令操作A(在此情况下)不违反任何规则;因此,处理器400将指令操作A分配给指令字1202A中的ALU槽(例如,在此示例中为ALU 602)。
在框808处,处理器400将指令操作B识别为依赖于对A局部的指令操作A,指令字1202A未满(仍有三个槽剩余),且指令操作A和B两者为可在相同时钟周期中顺序执行的简单指令。在本示例中,因为局部被定义镜像对,由于ALU 602分配了指令操作A,则局部ALU是可用的——ALU 604(当前没有在使用中)——以作为合格的相关节点接收指令操作B。在框810处,处理器400将B分配给指令字1202A中的ALU 604的槽,如图12B所示。
如上所述,现有技术的VLIW不能填充如图12B所示的指令字1202A,因为VLIW禁止同一指令字中的相互依赖,并且因为B依赖于A,所以VLIW不能在同一字中包括A和B。此示例的实施例相对于VLIW进行了改进,因为其允许同时包含A和B,因此总处理时间将相应减少。
由于不存在要分配的其他节点,所以在框814处认为指令字1202A是满的,在框816处设定指令字已满标志,在框818处认为该图是完整的,并且分配处理终止。
如以上关于图11C至图11E所指出的,可以使用其他存储/指令字格式,针对于此,图12C和12D中示出了这样的非限制性示例。
在该示例中,ALU配置、局部的定义和指令集的特定组合导致所需的时钟周期的数量的减少,因为可以在单个时钟周期中执行两个依赖指令操作作为单个指令字的一部分。此外,如果处理器正在使用由tmaxlocal定义的时钟频率,则该过程以更快的处理器速度发生,如上所述。
示例3
示例3的环境与示例2相同(使用图6的ALU配置,并且将局部的定义预定义为与镜像对中的伙伴的通信,并且进一步假设ALU可以处理复杂的操作)。指令集3如下:
A=R1*R2
B=A+R3
指令集3与指令集1类似,除了指令操作A是乘法而不是加法的动作。乘法比加法花费更长的时间,并且在此示例中表示指令操作,对于该指令操作,指令操作A的乘法和指令操作B的加法的总时间太长而不能在相同的时钟周期中完成。
指令集3的分布图在图7C中。不存在全局操作,因为所有输入在局部可用,并且因此在框802处,处理器400将每个节点指定为局部的。在框803处,开始新的指令字1302A。在框804和806处,编译器将A=R1*R2识别为关键路径,且指令操作A(在此情况下)不违反任何规则;处理器因此将指令操作A分配到图13A中的指令字1302A中的ALU槽(例如,在此示例中为ALU 602)。
在框808处,处理器400将指令操作B识别为依赖于对A局部的指令操作A,指令字未满(仍有三个槽剩余)。然而,因为指令操作A和B不能在单个时钟周期中执行(A的乘法与B的加法所需要的时间太长而不能在一个时钟周期中完成),B不能被包括在同一指令字1302A中,因为这将违反规则(在时钟周期中没有足够的时间来保证完成指令操作A和B两者)。
由于没有其他依赖节点可用以填充指令字1302A,控制转到框812,其中处理器400更新图以将节点A从进一步的分配考虑中移除。
在框814处,指令字1302A被认为是完整的。即使为在指令字1302A中为未分配的ALU保留了槽,但是包含剩余的指令操作B将会违反规则。因此,在框816处,设定字结束标志,在框803处,需要和创建新的字1302B,并且控制返回到框804。
在框804和框806处,编译器将指令操作B=A+R3识别为下一关键路径(这是剩下的全部),并且B不(在此情况下)违反任何规则。由于指令操作B对于指令操作A是局部的,因此处理器400将指令操作B分配给对于分配给指令操作A的ALU是局部的ALU。在这个示例中,因为局部被定义为镜像对,所以当ALU 602被分配指令操作A时,则局部ALU是可用的——ALU604(当前没有在使用中)——以作为合格的相关节点接收指令操作B,如图13B所示。
在框808和框810处没有选择或分配进一步的依赖节点(没有剩余),在框812处将字确定为满(分配了所有节点),在框814处设定标志以将最后占用的槽指定为字1202B的结束,在框816处确定处理完成,并且处理结束。
与其他示例一样,可以使用存储指令字的其他格式,诸如在先前讨论的图11C至图11E中所示出的。
示例4
示例4使用图6的ALU配置,并且局部的定义被预定义为镜像对(例如,ALU 602和604作为镜像对彼此局部,并且ALU 614和616作为镜像对彼此局部,但是ALU 602和ALU614/616不是局部的,因为当它们相邻时没有被镜像)。由于在数据路径618中存在四个ALU,所以每个指令字将具有四个槽。在该示例中,指令集4是:
A=R1+R2
B=R3+R4
C=A+B
指令集4的分布图在图7D中。
从框802开始,处理器400将指令操作A=R1+R2和B=R3+R4指定为局部操作,因为两者可以基于局部寄存器内容(R1、R2、R3、R4)来执行。注意,将指令操作A和B指定为局部并不意味着它们彼此是局部的;相反,如以下所讨论的,执行A和B的ALU可能超出局部范围。
指令操作C=A+B将被指定为全局,因为将执行指令操作A和B的ALU不可能彼此局部,因此将需要全局通信,该全局通信不能在一个时钟周期中完成。
在节点被指定为局部/全局的情况下,处理器在框803处开始图14A中的新的指令字1402A,并且在框804处选择用于分配给指令字1402A中的ALU的节点。作为非限制性示例,如果图7D中的节点各自是一个步骤,那么在框902处,指令操作A=R1+R2和B=R3+R4都被识别为具有相等的关键路径长度,因为它们具有相同数量的步骤;为了方便可以选择指令操作A。在框904处,确定指令字1402A中包含指令操作A不违反任何规则。由此,在框908处,节点A被选择用于分配,并且控制转到框806。在框806处,为节点A选择ALU并将其放置到指令字1402A中。在这种情况下,指令操作A是独立的并且独立于第一分配,因此,处理器可以有效地选择任何ALU,例如,如图14A中所示的ALU 602。
在框808处,处理器400将指令操作C识别为依赖于指令操作A。然而,由于已将指令操作C指定为全局,因此指令操作C无法包含在与其所依赖的指令操作相同的指令字中。不存在其他依赖节点,因此控制转到框812。
在框812处,处理器400更新依赖图以将所分配的节点A从进一步分配考虑中移除。在框814处,处理器400确定指令字1402A尚不完整,因为它还剩余两个空间,并且仍有节点要添加,要添加的节点不违反当前指令字1402A的任何规则。控制因此返回到框804以考虑依赖图的剩余部分。
根据框902,处理器400沿着最长剩余关键路径找出节点,在该示例中,最长剩余关键路径是驻留在对应节点上的指令操作B=R3+R4。在904处,指令操作B不违反任何规则,因此可以被分配给当前指令字1402A。
在框806处,节点B的指令操作被分配给ALU。由于指令操作B在独立节点中,所以处理器400可以将其分配给尚未使用的任何ALU,且可避免与正在使用的ALU呈局部关系的任何ALU。由此,由于指令字1402中的先前分配,ALU 602不可用,并且处理器400可以优选避免ALU 604,因为它是与正在使用的ALU 602的现有局部关系的一部分。在此示例中,处理器400将指令操作B分配到字1402A的对应槽中的ALU 614,如图14B中所示。
然后,控制转到框808,以从节点B查找相关节点。处理器400将节点C识别为依赖于节点B。然而,由于节点C是全局的,并且对应的指令操作不能被包括在与其所依赖的节点相同的指令字中,所以控制转到框812。
在框812处,更新依赖图以将所分配的节点B从进一步考虑中移除。
然后,控制转到框814以查看指令字1402A是否完整。在此情况下,指令字1402A是完整的,因为出于以上讨论的原因不能包括仅剩余的指令操作C=A+B。因此,在框816处,控制设定标志以指示该字是满的。在框818处,需要新的字,且控制返回到框803以开始新的指令字1402B。
在框804处,关键路径是作为唯一剩余节点的节点C,但是其不被选择,因为在指令字1402B中包括指令操作C将违反规则。具体地,节点C是全局的,因此必须从指令操作A和/或B的最后结果等待至少一个时钟周期,以便有时间进行全局通信。因此,在框804处,处理器400将在下一最不关键路径上寻找另一节点;由于不存在这样的节点(节点C是最后节点),因此在框806处没有分配节点。类似地,在框808处没有分配节点,在框810处没有分配依赖节点,该图被更新(无变化),在框814处指令字1402B被确定为满的(没有其他节点要输入),在框816处,该标志被设定为指示完整字,在框803处,生成下一指令字1402C,并且控制返回至框804以用于下一节点分配。
在框804处,关键路径是作为唯一剩余节点的节点C,但这次它不违反任何规则,因为添加了介入指令字1402B以考虑全局通信;当每个指令字出现在单个时钟周期上时,该附加指令字1402B将指令操作C的执行延迟一个时钟周期,以提供足够时间使指令操作A和/或B的结果到达将被分配给指令操作C的ALU并由该ALU选择。在框806处,将指令操作C分配到ALU且插入到指令字1402C中。在这些情况下,几乎任何ALU都可以用于指令操作C,因为没有一个被使用(或将被使用)并且没有来自局部通信的需求/收益。为了方便起见,可以选择ALU 604,因为从指令操作A生成输出的是ALU 602的局部,指令操作C依赖于指令操作A,并且将ALU 604放置在对应于ALU 604的槽中,尽管这种情况不是必须的。
在框808和框810处没有选择或分配依赖节点(没有剩余),在框812处确定指令字1402C为满(所有节点被分配),在框814处设定该标志以将字1402C的最后一个槽指定为字的结束,该处理在框816被确定为完成,并且该处理结束。
与其他示例一样,可以使用存储指令字的其他格式,诸如图11C至图11E所示。
示例5
示例5使用图6的ALU配置,并且局部的定义被预定义为镜像对(例如,ALU 602和604作为镜像对彼此局部,并且ALU614和616作为镜像对彼此局部,但是ALU 602和ALU 614/616不是局部的,因为当它们相邻时ALU没有被镜像)。因为存在四个ALU,所以每个指令字将具有四个槽。在该示例中,指令集5是:
1:A=R1+R2
2:B=A+R3
3:C=B+R4
4:D=R5+R6
5:E=D+R7
6:F=B+E
指令集4的分布图描绘在图7E中。
从框802开始,编译器将指令操作A=R1+R2和D=R5+R6指定为局部操作,因为两者可以基于局部寄存器内容(R1、R2、R5、R6)来执行。注意,将指令操作A和D指定为局部并不意味着它们彼此是局部的;相反,如以下所讨论的,执行A和D的ALU可能超出局部范围。
指令操作B=A+R3也被指定为局部的,因为R3的寄存器内容是局部地可用的,并且指令操作B可以被分配给对于被分配用于执行指令操作A的任何ALU是局部的ALU。类似地,指令操作C=B+R4被指定为局部的,因为R4的寄存器内容局部地可用,因此指令操作C可以被分配给对于被分配用于执行指令操作B的任何ALU是局部的ALU。类似地,指令操作E=D+R7被指定为局部的,因为R7的寄存器内容是局部地可用的,因此指令操作E可以被分配给对于被分配用于执行指令操作D的任何ALU是局部的ALU。指令操作F=C+E将被指定为全局的,因为将执行指令操作C和E的ALU不是彼此局部的,因此需要全局通信,这不能保证在一个时钟周期内完成。
在框803处,处理器400开始新的指令字1502A。
在框804处,处理器400选择用于分配给指令字1502A中的ALU的节点。作为非限制性示例,如果图7E中的节点各自为一个步骤,那么在框902处将指令操作A=R1+R2确定为关键路径,因为来自A-F(A-B-C-F)的路径在依赖图中具有最多步骤(四个步骤)。(作为反例,如果节点E由于某种原因具有五个步骤,则D-F可能是关键路径。)在框904处,确定指令操作A不违反任何规则。由此,在框906处,节点A被选择用于分配。
在框806处,ALU被选择用于驻留在节点A中的指令操作A,并且被放置到指令字1402A中。在这种情况下,没有待决的规则正在运行,并且处理器400可以将指令操作A分配给可以处理它的任何ALU,例如,诸如图15A中所示的ALU 602。
在框808处,处理器400将节点B识别为可以被添加到指令字1502A的依赖节点,因为(1)指令操作B依赖于指令操作A,(2)指令操作B被指定为局部的,(3)局部ALU(604)是可用的,(4)指令字1502A不是满的,(5)指令操作A和B可以在一个时钟周期中完成,以及(5)没有其他规则阻止它。
处理器400不识别可以被添加到字的任何其他依赖节点,因为不存在直接依赖于节点A的其他节点。节点C间接地依赖于节点A至B,但是在使用标准ALU的此示例中,在时钟周期内不能完成三个连续的操作,并且ALU没有被配置成处理3个输入。这同样适用于进一步依赖于节点C的任何节点。(然而,如果有ALU可以处理三个输入和/或存在可以在一个时钟周期内执行三个连续的指令操作的情形,那么C可以潜在地插入到同一字中。)
在框810处,所识别的节点B的指令操作被分配给对于其所依赖的ALU 602是局部的ALU 604,并且按照其依赖关系将其插入到指令字1402A中,如图14B所示。
在框812处,更新依赖图以从仍然需要分配的那些节点中移除所分配的节点。
在框814处,确定指令字1402A尚不完整,因为其剩余两个槽,并且仍有节点要添加,要添加的节点不违反当前指令字的任何规则。控制因此返回到框804以考虑依赖图的剩余部分。
此时,不再考虑先前分配的节点A和节点B进行进一步分配。在框902处,系统沿着最长剩余关键路径找出节点,其在此示例中为指令操作D=R5+R6。在框904处,在字1502A中包括指令操作D不违反任何规则,因此可以被分配给当前指令字1502A。
在框806处,处理器400将节点D的指令操作分配给ALU。由于节点D是独立节点,因此编译器可以将其分配给尚未使用和/或是另一局部关系的一部分的任何ALU。因此,由于指令字1502A中的先前分配,ALU 602和ALU 604不可用,但即使一个正在使用而另一个未被分配,处理器400也可以优选避开任一个,因为它们是现有局部关系的一部分。在此示例中,处理器将指令操作D分配给对应于字1502A的那个槽的ALU 614,如图15C中所示。
在框808处,处理器400将节点E识别为可以被添加到指令字1502A的依赖节点,因为(1)指令操作E依赖于指令操作D,(2)指令操作D被指定为局部的,(3)局部ALU(616)是可用的,(4)指令字1502A不是满的,(5)指令操作D和E可在一个时钟周期中完成,以及(6)没有其他规则阻止它。在框810处,处理器400将指令操作E分配给对应于字1502A的该槽的ALU616,如图15D所示。
然后,控制转到框814,以查看指令字1502A是否完整。在这种情况下,指令字1502A由于至少出于两个原因是完整的。首先,字1502A是满的,因为所有槽均已填充有指令。其次,仅有的剩余的指令操作C=B+R3和F=C+E不能被包括,指令操作C出于以上讨论的原因,指令操作F因为作为指定的全局,它不能存在于与它所依赖的局部指令操作相同的指令字中(两者不能并行执行)。因此,在框816处,控制设定标志以指示该字是满的。在框818处,处理器400确定指令操作仍保留用于分配,因此在框803处创建新的字1502B,如图15E中所示。
在框804处,处理器400将下一节点识别为C,其为关键路径中的最低节点。在字1502B中包含指令操作C将不违反任何规则,因此在框806处,指令操作C可以被分配到当前指令字1502B。
由于指令操作C依赖于指令操作B,并且在分配了指令操作B的ALU的局部,处理器400优选地将指令操作C分配给分配了指令操作B的ALU的局部的ALU。由于指令操作B被分配给ALU 604并且ALU 602是局部的,因此ALU 602是优选的选择。处理器400将指令操作C分配给ALU 602,其对应于字1502B的那个槽,如图15E中所示。
在框808处,编译器从C查找它可以包括在相同字中的依赖节点。节点F依赖于C(F=C+E)。然而,如上文所讨论,指令操作F需要全局通信,因此如果被放置在与指令操作C相同的指令字中,那么将违反规则。因此,指令操作F不能被添加到指令字1502B。类似地,出于相同的原因,不能添加依赖于节点F的任何其他依赖节点。
在框812处,调节依赖图以解决节点C的指令操作的分配。
在框814处,字1502B被认为是完整的。即使保留槽,但是包含剩余的节点F也会违反规则。因此,在框816处设定标志,在框818处需要新的指令字1502C,并且在803处创建。
在框804处,关键路径是作为唯一剩余节点的节点F。在框806处用于包括在指令字1502C中的选择选项是受限的。在这种情况下唯一可用的选项是ALU 604。理由来自多种情况的组合。首先,在F=C+E的情况下,指令操作E在1502A之前是两个指令字,因此E的结果将具有从介入的指令字1402B到全局行进到其需要行进的任何地方的时钟周期。其次,ALU604在执行指令操作C的ALU 602局部,使得指令操作C的结果局部可用于提供指令操作F。由此,如果将指令操作F分配给604,那么其可以局部地接收指令操作C的输出且全局地接收指令操作E的输出。分配如图15F所示。之后,指令字1502C将以上述方式关闭。
相反,指令字1502C中没有其他ALU可以容纳指令操作F,因为所有其他ALU对于产生C的输出的ALU 602将是全局的。如果ALU 604出于任何原因在指令字1502C中不可用,那么该处理将必须再次循环以创建新的指令字1502D,对于该指令字,在给定的情况下,指令操作F可以被放置在任何槽/ALU中,如图15G所示。
在以上示例中,每个指令操作被描述为在一个时钟周期内完成。然而,存在许多指令操作无法在一个时钟周期内完成,因此该指令操作的结果可能未准备好用于下一个指令字。处理器400通过将依赖节点到新字的插入延迟了指令操作完成所需的尽可能多的时钟周期来解决这个问题。例如,在示例5中,如果指令操作D需要两个完整时钟周期来完成,那么指令操作E将不被插入到字1502A中,而是将必须等待插入直到指令字1502C为止,如图15H所示。因此,指令操作F只能在ALU 614处插入指令字1504中,因为那个ALU对于生成指令操作E的输出的ALU是局部的,并且对于生成指令操作C的输出的ALU是全局的;如果614出于任何原因不可用,那么指令操作F将需要被放置到新字1502E(未图示)中。
图15A至图15H将映射的指令字格式用于指令字1502。然而,如上所述,如果与槽相关联的各个指令操作具有ALU标识符,则无需是这种情况。图15I和图15J示出了指令字的格式的非限制性示例。
上述处理可以运行一次,或为了优化目的运行多次。编译器工作的总体目标是使指令字的数量最小化。在一些情况下,对处理的严格遵守可能不满足该目标。例如,将某些指令放置在某些槽中的较早决定可能会影响可以在后面的指令字中插入什么指令,从而创建总体上非最佳的指令字集。例如,如果特定独立节点被放置在字的最后可用槽中,则这可能迫使依赖指令节点进入不同的指令字。相反,该特定独立节点及其依赖节点在同一指令字中可以是最佳的,并且所指出的最后的槽被保留用于不同的独立指令节点。在另一示例中,在上面的示例1至示例5中,许多ALU未被使用,并且在优化期间(诸如在框804处和/或在完成初始ALU分配之后)可能将稍后的指令操作插入到这些空的槽中的一些空的槽中。
优化处理的特定目标可以是最小化全局通信的数量。
因此,可以将优化考虑视为图8的流程图中的规则,例如,通常,其他规则将允许将指令放置到槽中,但发现此放置对于程序的总体执行来说不是最佳的,可以覆盖那些规则以有利于不将指令包括在在特定槽中。对于空槽,反之亦然,因为如果在应用基本规则集时某个槽是空的,但优化指示该槽应当填充另一指令(可能来自图的远处的不相关分支)而不违反保证,则优化考虑可以胜过规则集。
可以在寄存器的分配之前和之后执行对指令字的指令操作的分配。具体地,仅存在有限数量的寄存器可以为要处理的ALU提供值。然而,在编译程序的较早阶段期间,可以假设对寄存器的数量没有限制,并且在以后的优化步骤中,可以限制寄存器的数量。图8的方法因此可以在寄存器的分配之前执行。一旦以后认为寄存器是固定的,则可以至少部分地重新运行该处理,以响应于寄存器分配中的任何冲突而做出改变。
如上所述,处理器400的每个核可以具有其自己的数据路径。因此,可以为每个数据路径创建单独的指令字,并且由其特定核同时执行这些指令字。
一旦程序被编译成指令字1002,处理器400就可以以本领域已知的方式顺序地执行指令字1002A-n。每个指令字中的指令操作可以并行执行,并且指令字以编译顺序执行。
如上所述,在框802处,局部/全局的指定可能不是完全准确的,因此将某些指令操作分配给指令字和/或ALU可能引起违反。在执行期间,处理器400的调度器410实时地识别违反,例如,如果指令操作被编译为在先前指令字中的局部,但仍将导致违反,调度器410可以将指令字的执行延迟一个或多个时钟周期,以为全局信号到达其目的地提供时间。
图16中示出了处理器400的执行步骤的实施例。在框1602处,选择下一指令字(对于第一次运行,其将是第一指令字)。在框1604处,处理器400分析所选择的指令字以查看其执行是否将以任何方式违反保证。如果不是,则处理器400在框1608处执行指令字。如果存在违反,则处理器400在框1606处将执行过程延迟清除违反所需要的时钟周期,即,如果在执行下一指令字之前全局通信需要两个时钟周期,则在继续至框1608以执行指令字之前,处理器400将延迟执行两个时钟周期。在框1610处,处理器400确定所执行的指令字是否是最后一个字,并且如果是,则处理结束,而如果不是,则控制针对下一个指令字返回到1502。延迟的动作可以是不采取动作(即,不发送指令字)、生成缺少指令操作的冒泡指令字、和/或生成包含使ALU在相应的时钟周期期间不采取动作的指令操作的指令字。本发明不限于如何执行延迟的性质。
本发明的实施例是可扩展的。如上所述,图6示出了具有四个ALU的数据路径。图17示出了具有通过路径1704连接的八个ALU 1702的数据路径。图18示出了具有通过路径1804连接的十六个ALU 1802的数据路径。数据路径内的ALU的数量可能仅受限于处理器400的尺寸、形状和期望的花费。
如以上所讨论的,ALU可以是复杂或简单的,并且数据路径趋向于包括每个ALU中的至少一个。在图6、图17和图18中,一些ALU可以是复杂的,如图19中所示的非限制性示例,其中,配置包括七个简单ALU 1902和一个复杂ALU 1904。在另一实施例中,复杂ALU 2004可以被提供并且对于镜像的局部ALU 2002在全局上是可用的,诸如图20中所示。
现在参考图21,示出了本发明的另一个实施例。在该实施例中,简单ALU 2102和简单ALU 2104的镜像ALU对与复杂ALU 2106匹配。ALU 2102和ALU 2104以及路径2108与关于图6所描述的相同。此外,ALU 2104在与面向ALU 2102的一侧不同的一侧上具有输出,并且该输出馈送复杂ALU 2106的一侧。ALU 2106的输出可以返回到路径2108,其允许传输到ALU2102或2104的输入;附加地和/或替代性地,ALU 2106的输出可以直接进入ALU 2104。
可以在以上实施例中使用局部的各种定义。作为非限制性示例,局部可以被定义为ALU 2102/2104、ALU 2104/2106与ALU 2104w/路径2108之间的任何通信。局部可以被定义为ALU 2102/2104与从2104至2106的输出之间的任何通信,但不是从2106至2102或2104的输出(该距离足够长以也许有资格作为全局)。
图22示出了诸如图5中所示的镜像的ALU对的更详细的布局的示例,其中一对镜像的ALU 2200和ALU 2250面向彼此并且由操作数选择单元和寄存器(下文称为“操作数选择网络/寄存器”)的集合(总体上以2255表示)分开。对于本实施例,局部的定义可以是通过操作数选择网络2255从ALU 2200和ALU 2250到彼此的通信之间的距离,该操作数选择网络2255在这样的距离内包括要提供给ALU 2200和/或ALU 2250的寄存器中存在的任何值。局部的定义可以排除或包括ALU 2200或ALU 2250到自身的通信。
在图22中,由ALU 2200经由耦合2203从操作数选择网络2255接收操作数A的最低有效位。由ALU 2200经由耦合2201从操作数选择网络2255接收操作数A的最高有效位。由ALU 2200经由耦合2204从操作数选择网络2255接收操作数B的最低有效位。由ALU 2200经由耦合2202从操作数选择网络2255接收操作数B的最高有效位。ALU 2200的结果(A+B)的最低有效位经由耦合2211被发送到操作数选择网络2255。ALU 2200的结果(A+B)的最高有效位经由耦合2210被发送到操作数选择网络2255。
由ALU 2250经由耦合2253从操作数选择网络2255接收操作数C的最低有效位。由ALU 2200经由耦合2251从操作数选择网络2255接收操作数C的最高有效位。由ALU 2200经由耦合2254从操作数选择网络2255接收操作数D的最低有效位。由ALU 2200经由耦合2252从操作数选择网络2255接收操作数D的最高有效位。ALU 2200的结果(C+D)的最低有效位经由耦合2261被发送到操作数选择网络2255。ALU 2200的结果(C+D)的最高有效位经由耦合2260被发送到操作数选择网络2255。
图23示出了与诸如图21中所示的复杂ALU组合的镜像ALU对的更详细的布局,其中一对镜像的ALU 2300和ALU 2350面向彼此,并且由操作数选择单元(参见以上讨论的215/220/221/222)和寄存器(下文称为“操作数选择网络/寄存器”)的集合(总体上以2355表示)分开,并且ALU 2300为此将其输出发送至复杂ALU 2398。对于本实施例,局部的定义可以由相邻ALU之间的距离来定义。因此,局部通信包括:(a)通过操作数选择网络2355从ALU 2300和ALU 2350到彼此的通信(该操作数选择网络2355在这样的距离内包括要提供给ALU 2300和/或ALU 2350的寄存器中存在的任何值),(b)从ALU 2300到复杂ALU 2398的通信,以及(c)经由操作数交换网络/寄存器2355从复杂ALU 2398到ALU 2300和/或ALU 2350的通信。在这种定义下,从ALU 2350到复杂ALU 2398的通信是全局的,因为它们不相邻(ALU 2350的输出将需要行进通过ALU 2300以到达ALU 2398),尽管可以预先设定将考虑这种局部通信的另一局部定义。局部的定义可以排除或包括ALU 2200或ALU 2250到其自身的通信。
2300与2350之间的耦合和连接与图22中类似。ALU 2398经由耦合2355向操作数选择网络提供结果。ALU 2398加法器路径被分成最低有效位ALU 2320和最高有效位ALU 2321以加速加法操作。并非计算16位A[15:0]+B[15:0]的总和,而是将其拆分成A[7:0]+B[7:0]与A[15:8]+B[15:8]+来自A[7:0]+B[7:0]的进位相加。请注意,二进制数字仅具有2个值:0和1。因此,我们可以能够计算A[15:8]+B[15:8]+0和A[15:8]+B[15:8]+1,然后使用经由耦合2320和耦合2332发送的在2330中计算的来自A[7:0]+B[7:0]的进位以选择结果A[15:8]+B[15:8]+0(如果2330是0)和选择结果A[15:8]+B[15:8]+1(如果2330是1)。A+B的结果选择在被2322选择之后经由2310发送到操作数选择2355网络,其中2340具有A[15:8]+B[15:8]+0的结果,而2341具有A[15:8]+B[15:8]+0的结果,并且2322选择2340(如果2330是0),并且选择2341(如果2330是1)。相同的概念适用于2313。
由于A[15:8]+B[15:8]+0和A[15:8]+B[15:8]+1可以在不知道A[7:0]+B[7:0]的进位的结果的情况下计算,而无需等待与2332相同的信号的进位2330。现在,可以基于2330(2332是相同信号),预先计算结果,并且选择最终结果。2330从ALU的中间路由。
图24示出图23的更高级的布局以及相同布局中的其他ALU。操作数交换网络/寄存器215内的操作数交换单元是数据和控制信号通过其到达不同组的ALU的路径。在关于考图23所讨论的局部(由2410示出的范围)的定义下,这样的数据和控制信号通常被认为是全局的,尽管某些信号和控制信号可以在适当的定义下是局部的。
在一些实施例中,针对不同ALU或不同环境,可能存在不同的局部的定义。时钟频率可以被设定为足够长以考虑到操作时间和传输时间加上开销因素的最坏情况组合。
因此,说明书和附图被视为是说明性的而不是限制性的。然而,很明显,在不脱离权利要求书所阐述的本发明的更宽泛的精神和范围的情况下,可以对其做出各种修改和改变。

Claims (15)

1.一种填充用于多个指令操作的同时执行的指令字的系统,所述系统包括:
多个算术逻辑单元(ALU),其在按时钟周期运行的数据路径中;
非瞬态计算机可读存储器,其存储指令:
所述系统被编程为实现所述指令以执行多个操作,所述多个操作包括:
创建指令节点的依赖图,每个指令节点包括至少一个指令操作;
初始地将所述依赖图中的任何所述指令节点指定为全局的,其中,全局指定至少表示相应的指令节点被期望需要来自ALU的预定义有限物理范围之外的输入,所述范围小于所述数据路径的完整范围;以及
从所述依赖图中第一选择第一可用指令节点;
将所选择的第一可用指令节点第一分配给所述指令字;
第二选择依赖于所选择的第一可用指令节点的结果并且不违反任何预定规则的任何可用依赖指令节点,所述任何预定规则包括所述指令字可以不包括被指定为全局的可用依赖指令节点;
将所选择的任何可用依赖指令节点第二分配给所述指令字;以及
更新所述依赖图以从分配的进一步考虑中移除在所述第一分配和所述第二分配期间分配的任何指令节点。
2.根据权利要求1所述的系统,其中,所述多个操作还包括:在所述第二分配之后:
确定所述指令字是完整的还是不完整的;
响应于按照所述确定所述指令字是不完整的,返回到所述第一选择;以及
响应于按照所述确定所述指令字是完整的,关闭所述指令字。
3.根据权利要求1所述的系统,其中,所述更新包括:(a)从所述依赖图移除在所述第一和所述第二分配期间分配的任何指令节点,或者(b)将在所述第一分配和所述第二分配期间分配的任何指令节点标记为不可用于进一步分配给所述指令字。
4.根据权利要求1所述的系统,其中:
所述第一分配将所选择的第一可用指令节点分配给所述指令字的第一ALU槽,所述第一ALU槽对应于所述多个ALU中的第一ALU;以及
所述第二分配将所述任何可用依赖节点中的一个可用依赖节点分配给所述指令字的第二ALU槽,所述第二ALU槽对应于所述多个ALU中的第二ALU,其中所述第一ALU和所述第二ALU在彼此的局部预定义范围内。
5.根据权利要求1所述的系统,所述多个操作还包括,响应于在所述第一选择期间不存在可用节点:
绕过所述第一分配、所述第二选择和所述第二分配。
6.一种用于填充由数据路径中的多个ALU进行的多个指令操作的同时执行的指令字的方法,所述方法包括:
创建指令节点的依赖图,每个指令节点包括至少一个指令操作;
初始地将所述依赖图中的任何所述指令节点指定为全局的,其中,全局指定至少表示相应的指令节点被期望需要来自ALU的预定义有限物理范围之外的输入,所述范围小于所述数据路径的完整范围;以及
从所述依赖图中第一选择第一可用指令节点;
将所选择的第一可用指令节点第一分配给所述指令字;
第二选择依赖于所选择的第一可用指令节点的结果并且不违反任何预定规则的任何可用依赖指令节点,所述任何预定规则包括所述指令字可以不包括被指定为全局的可用依赖指令节点;
将所选择的任何可用依赖指令节点第二分配给所述指令字;以及
更新所述依赖图以从分配的进一步考虑中移除在所述第一分配和所述第二分配期间分配的任何指令节点。
7.根据权利要求6所述的方法,还包括:在所述第二分配之后:
确定所述指令字是完整的还是不完整的;
响应于按照所述确定所述指令字是不完整的,返回到所述第一选择;以及
响应于按照所述确定所述指令字是完整的,关闭所述指令字。
8.根据权利要求6所述的方法,其中,所述更新包括:(a)从所述依赖图移除在所述第一和所述第二分配期间分配的任何指令节点,或者(b)将在所述第一分配和所述第二分配期间分配的任何指令节点标记为不可用于进一步分配给所述指令字。
9.根据权利要求6所述的方法,其中:
所述第一分配将所选择的第一可用指令节点分配给所述指令字的第一ALU槽,所述第一ALU槽对应于所述多个ALU中的第一ALU;以及
所述第二分配将所述任何可用依赖节点中的一个可用依赖节点分配给所述指令字的第二ALU槽,所述第二ALU槽对应于所述多个ALU中的第二ALU,其中所述第一ALU和所述第二ALU在彼此的局部预定义范围内。
10.根据权利要求6所述的方法,还包括,响应于在所述第一选择期间不存在可用节点:
绕过所述第一分配、所述第二选择和所述第二分配。
11.一种非瞬态计算机可读介质,存储用于填充指令字的指令,所述指令字用于由数据路径中的多个ALU进行的多个指令操作的同时执行,所述指令当由系统执行时使所述系统执行多个操作,所述多个操作包括:
创建指令节点的依赖图,每个指令节点包括至少一个指令操作;
初始地将所述依赖图中的任何所述指令节点指定为全局的,其中,全局指定至少表示相应的指令节点被期望需要来自ALU的预定义有限物理范围之外的输入,所述范围小于所述数据路径的完整范围;以及
从所述依赖图中第一选择第一可用指令节点;
将所选择的第一可用指令节点第一分配给所述指令字;
第二选择依赖于所选择的第一可用指令节点的结果并且不违反任何预定规则的任何可用依赖指令节点,所述任何预定规则包括所述指令字可以不包括被指定为全局的可用依赖指令节点;
将所选择的任何可用依赖指令节点第二分配给所述指令字;以及
更新所述依赖图以从分配的进一步考虑中移除在所述第一分配和所述第二分配期间分配的任何指令节点。
12.根据权利要求12所述的非瞬态计算机可读介质,所述多个操作还包括:在所述第二分配之后:
确定所述指令字是完整的还是不完整的;
响应于按照所述确定所述指令字是不完整的,返回到所述第一选择;以及
响应于按照所述确定所述指令字是完整的,关闭所述指令字。
13.根据权利要求11所述的非瞬态计算机可读介质,其中,所述更新包括:(a)从所述依赖图移除在所述第一分配和所述第二分配期间分配的任何指令节点,或者(b)将在所述第一分配和所述第二分配期间分配的任何指令节点标记为不可用于进一步分配给所述指令字。
14.根据权利要求11所述的非瞬态计算机可读介质,其中:
所述第一分配将所选择的第一可用指令节点分配给所述指令字的第一ALU槽,所述第一ALU槽对应于所述多个ALU中的第一ALU;以及
所述第二分配将所述任何可用依赖节点中的一个可用依赖节点分配给所述指令字的第二ALU槽,所述第二ALU槽对应于所述多个ALU中的第二ALU,其中所述第一ALU和所述第二ALU在彼此的局部预定范围内。
15.根据权利要求11所述的非瞬态计算机可读介质,所述多个操作还包括,响应于在所述第一选择期间不存在可用节点:
绕过所述第一分配、所述第二选择和所述第二分配。
CN202111316274.8A 2018-08-16 2019-08-15 填充指令字的系统和方法 Pending CN114265592A (zh)

Applications Claiming Priority (6)

Application Number Priority Date Filing Date Title
US201862764767P 2018-08-16 2018-08-16
US62/764,767 2018-08-16
US16/540,328 2019-08-14
US16/540,328 US20200057645A1 (en) 2018-08-16 2019-08-14 System and method for location aware processing
CN201980067592.XA CN112912842A (zh) 2018-08-16 2019-08-15 用于位置感知处理的系统和方法
PCT/US2019/046630 WO2020037112A1 (en) 2018-08-16 2019-08-15 System and method for location aware processing

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201980067592.XA Division CN112912842A (zh) 2018-08-16 2019-08-15 用于位置感知处理的系统和方法

Publications (1)

Publication Number Publication Date
CN114265592A true CN114265592A (zh) 2022-04-01

Family

ID=69524071

Family Applications (3)

Application Number Title Priority Date Filing Date
CN202210365321.6A Pending CN114691600A (zh) 2018-08-16 2019-08-15 用于处理器的算术逻辑单元布局
CN202111316274.8A Pending CN114265592A (zh) 2018-08-16 2019-08-15 填充指令字的系统和方法
CN201980067592.XA Pending CN112912842A (zh) 2018-08-16 2019-08-15 用于位置感知处理的系统和方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202210365321.6A Pending CN114691600A (zh) 2018-08-16 2019-08-15 用于处理器的算术逻辑单元布局

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201980067592.XA Pending CN112912842A (zh) 2018-08-16 2019-08-15 用于位置感知处理的系统和方法

Country Status (5)

Country Link
US (7) US11144497B2 (zh)
EP (3) EP3837599A4 (zh)
KR (3) KR20210124513A (zh)
CN (3) CN114691600A (zh)
WO (1) WO2020037112A1 (zh)

Families Citing this family (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US10853079B2 (en) * 2018-09-26 2020-12-01 Side Effects Software Inc. Dependency-based streamlined processing
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
WO2023161725A1 (en) * 2022-02-28 2023-08-31 Neuroblade Ltd. Processing systems
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
CN116796816B (zh) * 2023-08-25 2024-05-14 深圳比特微电子科技有限公司 处理器、计算芯片和计算设备

Family Cites Families (65)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5487156A (en) * 1989-12-15 1996-01-23 Popescu; Valeri Processor architecture having independently fetching issuing and updating operations of instructions which are sequentially assigned and stored in order fetched
US5963746A (en) * 1990-11-13 1999-10-05 International Business Machines Corporation Fully distributed processing memory element
US5590345A (en) * 1990-11-13 1996-12-31 International Business Machines Corporation Advanced parallel array processor(APAP)
US5488729A (en) 1991-05-15 1996-01-30 Ross Technology, Inc. Central processing unit architecture with symmetric instruction scheduling to achieve multiple instruction launch and execution
US5227989A (en) 1991-09-27 1993-07-13 Chips And Technologies, Inc. Arithmetic logic unit for microprocessor with sign bit extend
US5457644A (en) * 1993-08-20 1995-10-10 Actel Corporation Field programmable digital signal processing array integrated circuit
JP3623840B2 (ja) * 1996-01-31 2005-02-23 株式会社ルネサステクノロジ データ処理装置及びマイクロプロセッサ
US6256745B1 (en) 1998-06-05 2001-07-03 Intel Corporation Processor having execution core sections operating at different clock rates
US6230303B1 (en) 1997-02-24 2001-05-08 Lucent Technologies Inc. Proximity-based cluster allocation for hardware-software co-synthesis of heterogeneous distributed embedded systems
US6065126A (en) * 1998-02-02 2000-05-16 Tran; Thang Minh Method and apparatus for executing plurality of operations per clock cycle in a single processing unit with a self-timed and self-enabled distributed clock
US6609189B1 (en) 1998-03-12 2003-08-19 Yale University Cycle segmented prefix circuits
EP3073388A1 (en) * 1998-03-18 2016-09-28 Koninklijke Philips N.V. Data processing device and method of computing the cosine transform of a matrix
US6324639B1 (en) * 1998-03-30 2001-11-27 Matsushita Electric Industrial Co., Ltd. Instruction converting apparatus using parallel execution code
US6490673B1 (en) * 1998-11-27 2002-12-03 Matsushita Electric Industrial Co., Ltd Processor, compiling apparatus, and compile program recorded on a recording medium
FR2793628A1 (fr) 1999-05-11 2000-11-17 Koninkl Philips Electronics Nv Systeme de transmission, recepteur et reseau d'interconnexion
US6766440B1 (en) 2000-02-18 2004-07-20 Texas Instruments Incorporated Microprocessor with conditional cross path stall to minimize CPU cycle time length
GB2370381B (en) * 2000-12-19 2003-12-24 Picochip Designs Ltd Processor architecture
US7337306B2 (en) * 2000-12-29 2008-02-26 Stmicroelectronics, Inc. Executing conditional branch instructions in a data processor having a clustered architecture
US10331194B2 (en) * 2001-03-05 2019-06-25 Pact Xpp Schweiz Ag Methods and devices for treating and processing data
US7996827B2 (en) * 2001-08-16 2011-08-09 Martin Vorbach Method for the translation of programs for reconfigurable architectures
US7080365B2 (en) * 2001-08-17 2006-07-18 Sun Microsystems, Inc. Method and apparatus for simulation system compiler
US6920545B2 (en) 2002-01-17 2005-07-19 Raytheon Company Reconfigurable processor with alternately interconnected arithmetic and memory nodes of crossbar switched cluster
US7093255B1 (en) 2002-05-31 2006-08-15 Quicksilver Technology, Inc. Method for estimating cost when placing operations within a modulo scheduler when scheduling for processors with a large number of function units or reconfigurable data paths
WO2004001584A2 (en) * 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
US20110238948A1 (en) * 2002-08-07 2011-09-29 Martin Vorbach Method and device for coupling a data processing unit and a data processing array
US6952816B2 (en) 2002-10-07 2005-10-04 Hewlett-Packard Development Company, L.P. Methods and apparatus for digital circuit design generation
US7107568B2 (en) 2002-10-07 2006-09-12 Hewlett-Packard Development Company, Lp. System and method for reducing wire delay or congestion during synthesis of hardware solvers
JP3896087B2 (ja) * 2003-01-28 2007-03-22 松下電器産業株式会社 コンパイラ装置およびコンパイル方法
WO2004072796A2 (en) 2003-02-05 2004-08-26 Arizona Board Of Regents Reconfigurable processing
US20040193837A1 (en) 2003-03-31 2004-09-30 Patrick Devaney CPU datapaths and local memory that executes either vector or superscalar instructions
JP2004334429A (ja) * 2003-05-06 2004-11-25 Hitachi Ltd 論理回路及びその論理回路上で実行するプログラム
JP4104538B2 (ja) * 2003-12-22 2008-06-18 三洋電機株式会社 リコンフィギュラブル回路、リコンフィギュラブル回路を備えた処理装置、リコンフィギュラブル回路における論理回路の機能決定方法、回路生成方法および回路
US7657882B2 (en) 2004-01-22 2010-02-02 University Of Washington Wavescalar architecture having a wave order memory
US7668979B1 (en) * 2005-03-25 2010-02-23 Tilera Corporation Buffering data in a parallel processing environment
US7840914B1 (en) * 2005-05-13 2010-11-23 Massachusetts Institute Of Technology Distributing computations in a parallel processing environment
US20060288196A1 (en) * 2005-06-20 2006-12-21 Osman Unsal System and method for exploiting timing variability in a processor pipeline
US9648325B2 (en) * 2007-06-30 2017-05-09 Microsoft Technology Licensing, Llc Video decoding implementations for a graphics processing unit
US8265144B2 (en) * 2007-06-30 2012-09-11 Microsoft Corporation Innovations in video decoder implementations
US8521800B1 (en) * 2007-08-15 2013-08-27 Nvidia Corporation Interconnected arithmetic logic units
US8098251B2 (en) 2008-02-22 2012-01-17 Qualcomm Incorporated System and method for instruction latency reduction in graphics processing
EP2366144B1 (en) * 2008-10-15 2015-09-30 Hyperion Core, Inc. Sequential processor comprising an alu array
US8671167B2 (en) * 2009-07-17 2014-03-11 Honeywell International Inc. System for providing demand response services
JPWO2011096016A1 (ja) * 2010-02-05 2013-06-06 株式会社東芝 コンパイラ装置
WO2012003997A1 (en) 2010-07-09 2012-01-12 Martin Vorbach Data processing device and method
US10592444B2 (en) 2013-01-07 2020-03-17 Wave Computing, Inc. Reconfigurable interconnected programmable processors
US9588773B2 (en) 2013-01-07 2017-03-07 Wave Computing, Inc. Software based application specific integrated circuit
US9612836B2 (en) 2014-02-03 2017-04-04 Nvidia Corporation System, method, and computer program product for implementing software-based scoreboarding
US10031756B2 (en) * 2015-09-19 2018-07-24 Microsoft Technology Licensing, Llc Multi-nullification
US10180840B2 (en) * 2015-09-19 2019-01-15 Microsoft Technology Licensing, Llc Dynamic generation of null instructions
US11681531B2 (en) * 2015-09-19 2023-06-20 Microsoft Technology Licensing, Llc Generation and use of memory access instruction order encodings
US10198263B2 (en) * 2015-09-19 2019-02-05 Microsoft Technology Licensing, Llc Write nullification
US20170083320A1 (en) * 2015-09-19 2017-03-23 Microsoft Technology Licensing, Llc Predicated read instructions
US10061584B2 (en) * 2015-09-19 2018-08-28 Microsoft Technology Licensing, Llc Store nullification in the target field
US11977891B2 (en) * 2015-09-19 2024-05-07 Microsoft Technology Licensing, Llc Implicit program order
US20180329708A1 (en) * 2015-09-19 2018-11-15 Microsoft Technology Licensing, Llc Multi-nullification
US10528356B2 (en) 2015-11-04 2020-01-07 International Business Machines Corporation Tightly coupled processor arrays using coarse grained reconfigurable architecture with iteration level commits
US10303481B2 (en) 2015-12-02 2019-05-28 International Business Machines Corporation Performance-aware instruction scheduling
US10191724B2 (en) * 2016-10-21 2019-01-29 Intel Corporation Compiler-based instruction scoreboarding
US10282296B2 (en) * 2016-12-12 2019-05-07 Intel Corporation Zeroing a cache line
US10210170B2 (en) * 2017-01-28 2019-02-19 Microsoft Technology Licensing, Llc Chunk storage deduplication using graph structures
US11360808B2 (en) * 2017-04-09 2022-06-14 Intel Corporation Efficient thread group scheduling
US11592817B2 (en) * 2017-04-28 2023-02-28 Intel Corporation Storage management for machine learning at autonomous machines
US20200210158A1 (en) * 2017-05-30 2020-07-02 Phase Change Software Llc Automated or machine-enhanced source code debugging
US10515431B2 (en) * 2017-12-12 2019-12-24 Intel Corporation Global optimal path determination utilizing parallel processing
US10877746B2 (en) * 2018-05-06 2020-12-29 Methodics, Inc. Component dependency tree normalization through contextual dependency

Also Published As

Publication number Publication date
EP3837599A1 (en) 2021-06-23
US20200057639A1 (en) 2020-02-20
US11755528B2 (en) 2023-09-12
US20220066982A1 (en) 2022-03-03
US11846974B2 (en) 2023-12-19
EP4040290A1 (en) 2022-08-10
KR20220047397A (ko) 2022-04-15
US11144497B2 (en) 2021-10-12
US11379406B2 (en) 2022-07-05
EP3837599A4 (en) 2022-04-06
EP3979070A1 (en) 2022-04-06
CN112912842A (zh) 2021-06-04
US20200057645A1 (en) 2020-02-20
US20200057642A1 (en) 2020-02-20
US20200057646A1 (en) 2020-02-20
US10915324B2 (en) 2021-02-09
US11403254B2 (en) 2022-08-02
KR20210106404A (ko) 2021-08-30
CN114691600A (zh) 2022-07-01
WO2020037112A1 (en) 2020-02-20
US20200057748A1 (en) 2020-02-20
US20220129409A1 (en) 2022-04-28
KR20210124513A (ko) 2021-10-14

Similar Documents

Publication Publication Date Title
CN114265592A (zh) 填充指令字的系统和方法
US10031775B2 (en) Backfill scheduling for embarrassingly parallel jobs
Chatterjee et al. Deadline and energy aware dynamic task mapping and scheduling for Network-on-Chip based multi-core platform
Wang et al. Bubble budgeting: Throughput optimization for dynamic workloads by exploiting dark cores in many core systems
Pourmohseni et al. Hard real-time application mapping reconfiguration for NoC-based many-core systems
Lee et al. Mapping and scheduling of tasks and communications on many-core SoC under local memory constraint
Yang et al. Mapping multiple applications with unbounded and bounded number of cores on many-core networks-on-chip
Saleem et al. A Survey on Dynamic Application Mapping Approaches for Real-Time Network-on-Chip-Based Platforms
Liang et al. Hi-DMM: High-performance dynamic memory management in high-level synthesis
Elakhras et al. Straight to the queue: Fast load-store queue allocation in dataflow circuits
Deniziak et al. Co-synthesis of contention-free energy-efficient NOC-based real time embedded systems
Huang et al. Hierarchical and dependency-aware task mapping for NoC-based systems
Juang et al. Let Coarse-Grained Resources Be Shared: Mapping Entire Neural Networks on FPGAs
Tafesse et al. Framework for simulation of heterogeneous mpsoc for design space exploration
CN115617396B (zh) 应用于新型人工智能处理器的寄存器分配方法及装置
Huang et al. Reconfigurable topology synthesis for application-specific noc on partially dynamically reconfigurable fpgas
US20220019415A1 (en) Sharing Data Structures
CN117931052A (zh) 用于高性能计算应用程序的流动存储器
Jones et al. Tools for mapping applications to CCMs
Dorota Scheduling tasks in embedded systems based on NoC architecture
Park et al. Retargetable Compilation Technique for Optimal Placement of Scaling Shifts in a Fixed-point Processor
Roddy Is an open architecture tester really achievable?

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