用于执行过载检查的指令的制作方法
【专利摘要】本申请主要描述了用于执行过载检查的指令,并描述了在指令执行流水线内具有功能单元的处理器。该功能单元具有用于确定来自较大源数据大小的实质数据是否将放得进该实质数据要流入的较小数据大小的电路。
【专利说明】用于执行过载检查的指令
【技术领域】
[0001] 本发明的【技术领域】一般地涉及计算科学,且更具体地涉及用于执行过载检查的指 令。
[0002] 用于执行过载检查的指令
[0003] 图1示出了在半导体芯片上用逻辑电路实现的处理核100的高级图。该处理核包 括流水线101。该流水线由各自被设计成在完全执行程序代码指令所需的多步骤过程中执 行特定步骤的多个级组成。这些级通常包括至少:1)指令取出和解码;2)数据取出;3)执 行;4)写回。执行级将由在上述步骤1))中所取出和解码的指令所标识出的特定操作对由 相同指令标识出并在另一先前级(例如,上述步骤2))中被取出的数据执行。被操作的数据 通常是从(通用)寄存器存储空间102中取出的。在该操作完成时所创建的新数据通常也被 "写回"寄存器存储空间(例如,在上述级4 ))。
[0004] 与执行级相关联的逻辑电路通常由多个"执行单元"或"功能单元" 1〇3_1至103_ N构成,这些单元各自被设计成执行其自身的唯一操作子集(例如,第一功能单元执行整数 数学操作,第二功能单元执行浮点指令,第三功能单元执行自/至高速缓存/存储器的加载 /存储操作等等)。由所有这些功能单元执行的所有操作的集合与处理核1〇〇所支持的"指 令集"相对应。
[0005] 两种类型的处理器体系结构在计算机科学领域中被广泛认可:"标量"和"向量"。 标量处理器被设计成执行对单个数据集进行操作的指令,然而向量处理器被设计成执行对 多个数据集进行操作的指令。图2A和图2B呈现比较性示例,该比较性示例展示标量处理 器与向量处理器之间的基本差异。
[0006] 图2A示出标量AND指令的示例,其中单个操作数集A和B被相与(AND)以产生奇 异(或"标量")结果C (即,A. AND. B=C)。相比之下,图2B示出向量AND指令的示例,其中 两个操作数集A/B和D/E被分别相与(AND)以(例如,同时并行地)产生向量结果C、F (即, A. AND. B=C和D. AND. E=F)。根据术语学,"向量"是具有多个"元素"的数据元素。例如,向 量V=Q,R,S,T,U具有五个不同元素:Q,R,S,T和U。示例性向量V的"大小"为五(因为它 具有五个元素)。
[0007] 图1还不出与通用寄存器空间102不同的向量寄存器空间107的存在。具体而目, 通用寄存器空间102名义上用于存储标量值。由此,当各执行单元中的任一个执行标量操 作时,它们名义上执行从通用寄存器存储空间102调用的操作数(并且将结果写回通用寄 存器存储空间102)。相比之下,当各执行单元中的任一个执行向量操作时,它们名义上执行 从向量寄存器空间107调用的操作数(并且将结果写回向量寄存器空间107)。存储器的不 同区域可类似地被分配以供存储标量值和向量值。
[0008] 还注意到,在去往功能单元103_1至103_N的相应输入以及来自功能单元103_1 至103_N的相应输出处,存在掩码逻辑104_1至104_N以及105_1至105_N。在各种实现中, 对于向量操作,这些层中只有一层实际上被实现--尽管这并不是严格的要求(尽管图1中 未描绘,但可以想到,仅执行标量操作而非向量操作的执行单元不需要具有任何掩码层)。 对于采用掩码的任何向量指令,输入掩码逻辑1〇4_1至104_N和/或输出掩码逻辑105_1 至105_N可用于控制针对该向量指令对哪些元素进行有效地操作。这里,掩码向量从掩码 寄存器空间106中被读取(例如,连同从向量寄存器存储空间107中被读取的输入操作数向 量一起)并且被呈现给掩码逻辑104、105层中的至少一者。
[0009] 在执行向量程序代码的过程中,每一向量指令无需要求全数据字。例如,对于某些 指令的输入向量可以仅是8个元素,对于其他指令的输入向量可以是16个元素,对于其他 指令的输入向量可以是32个元素等等。因此,掩码层104/105用于标识全向量数据字的应 用于特定指令以便影响跨指令的不同向量大小的元素集合。通常,对于每一向量指令,掩 码寄存器空间106中所保持的特定掩码模式被该指令调出,从掩码寄存器空间中被取出并 且提供给掩码层104/105中的任一者或两者,以"启用"针对该特定向量操作的正确元素集 合。
【专利附图】
【附图说明】
[0010] 以下的描述和附图用于图示本发明的实施例。在附图中:
[0011] 图1示出指令执行流水线的实施例;
[0012] 图2a和2b涉及向量处理;
[0013] 图3示出使用检查过载条件的指令的方法;
[0014] 图4示出用于确定是否存在过载条件的方法;
[0015] 图5示出用于确定是否存在过载条件的另一方法;
[0016]图6示出被设计成检查过载条件的功能单元的实施例;
[0017] 图7示出处理器的实施例。
【具体实施方式】
[0018] 如本领域中理解的,软件算法一般记载要对变量采取和/或鉴于变量而要采取的 动作。数值数据被有效地插入变量中,使得软件可以实际上处理该数据。在计算机软件源 代码语言(诸如,C语言)中,变量作为各种变量"类型"(例如,整数、浮点等)之一被声明。 需要保存变量数据的存储器和/或寄存器空间的单元可以是变量类型的定义的一部分(例 如,32位、64位等)。
[0019] 软件过程本身可被视作其中在前数据计算馈入后续数据计算的多个"数据流"之 一。可以想到,涉及第一类型的变量的各过程将馈入涉及不同类型的变量的各过程。在"较 大"数据类型要馈入"较小"数据类型的情况下,可能引发问题。例如,在64位值要馈入被 定义成具有仅仅32位大小的变量的情况下,将产生"溢出错误"。
[0020] 在数据值处于其自身大小的最大值并且使该数据值递增的尝试被作出的情况下, 可能发生另一类型的溢出错误。例如,2x(2~16)的值被表达成16个1。如果将该值保持 在16位的数据单元大小中,则有效地达到该数据单元大小的最大容量。如果要对该值执行 使其递增的数学操作(例如,对该值执行+1操作),则将产生过载错误,因为该值将需要结转 (carry over)至第17位,而第17位不可用。
[0021] 遗憾的是,程序员通常不检查其代码的相应变量的可能数据值的上边界。由此,溢 出错误在某种程度上是普遍的。更糟糕的是,恶意软件可以专门地设法造成此类错误。为 了解决这些问题,程序员具有使用所谓安全整数或其他强类型化的语言的选择权。当使用 安全整数库时,在每一操作之后针对溢出和下溢检查各操作。这伴随着性能成本,因为新分 支和整个子例程必需被插入该程序。
[0022] 图3示出采用在处理器的指令集体系结构(ISA)内使用被设计成确定是否存在溢 出条件的"溢出检查"指令的改进方式。根据图3的方法,检测从较大大小的数据类型到 较小大小的数据类型的数据流301。这里,在处理器的ISA中可存在某些类型的指令,这些 类型的指令将第一较大数据大小的单个源操作数或多个源操作数广播、置换、混洗到由较 小数据单元大小构成的目的地等等。例如,广播指令可将32位源操作数的下半部分广播 (broadcast)至2X16向量结果的每个16位元素中。
[0023] 响应于该检测,执行测试该数据流是否将导致溢出错误302的"溢出检查"指令。 如果该指令确定该数据流将不创建溢出条件,则该指令的结果不对应于溢出警告303。如果 该指令确定该数据流将创建溢出条件,则该指令的结果将对应于某类溢出警告304。例如, 警告304可采取异常、中断或标志的形式(为方便起见,各异常或中断在下文中将被称为异 常)。
[0024] 异常本质上是自动使得该程序流被重定向到错误处理程序的错误条件。错误处理 程序是特别被设计成处理不同种类的错误的软件和/或硬件组件。这里,溢出条件抛出的 异常将具有某类标识符,错误处理程序使用该标识符来标识要应用于该特定类型的错误的 特定纠正动作。
[0025] 标志通常被实现成指令执行流水线的控制寄存器空间中的一位。这里,控制寄存 器空间中存在不同标志来标识不同条件,其中某些条件不一定是错误条件(例如,等于零、 小于零等等)。在该特定方式中,在控制寄存器空间中保留标志位,以指示被设计成确定较 大数据类型是否可流入较小数据类型的指令是否已检测到溢出。这里,条件分支指令可被 自动插入到溢出检查指令与使较大数据流入较小数据的指令之间。条件分支指令可被设计 成在标志被设置的情况下,查看由溢出条件指令关联的标志并且使程序执行跳转至某一其 他位置,而不是执行使较大数据流入较小数据的指令。
[0026] 对从较大大小到较小数据大小的数据流进行的检测301可由编译器预运行时来 执行,或在运行时期间在硬件中执行。在前一种情况下,编译器标识该较大到较小的数据 流,并且在该较大到较小的数据流之前插入溢出检查指令。在后一种情况下,硬件在进行中 (on the fly)检测该较大到较小的数据流。在固有地将数据从较大数据大小移至较小数据 大小的指令的情况下,编译器和/或硬件识别该指令的存在,并且在指令流中有效地将过 载指令插在其之前。或者,在需要造成较大到较小的数据单元大小流的指令被需要的任何 时间,编辑器的代码创建过程可简单地自动插入两个指令:第一在前过载检测指令和第二 在后指令,第二在后指令是较大到较小的数据流指令。在编译器的情况下,可以在对象代码 中显式地进行插入。
[0027] 在硬件的情况下,指令执行流水线在指令取出级可具有监听电路,该监听电路监 听指令队列并且检测造成较大到较小的数据单元流的指令的存在。作为响应,指令取出级 内的特殊电路创建过载检查指令,该过载检查指令采取该检测到的指令的数据输入操作数 内容,并且在指令队列中将该过载检查质量插在该检测到的指令之前。
[0028] 图4呈现用于过载检测指令的操作的方法。如图4中观察到的,该指令确定操作 数中实质(substantive)数据的最高阶位是否不高于结果数据大小中的次最高阶位401。 例如,如果结果为16位,则该指令确定输入操作数的实质数据是否达到该16位的第16位。 如果达到,则引发过载警告。如果未达到,则不引发过载错误。注意,该特定过程本质上设 法确认输入操作数的实质数据的最高阶位未被使用。通过这样做,该指令允许对实质数据 的后续递增。即,过载检查指令确保在实质数据参加(sit in)其新的、较小的数据存储分 配时对实质数据进行后续递增的情况下,将不会产生过载错误。
[0029] 图5示出用于确定结果中最高阶位是否未被输入操作数的实质数据消费的方法 的实施例。如图5中观察到的,该指令检查以获悉输入操作数的从与结果中最高阶位相对 应的位位置开始一直到输入操作数的最高阶位的这些位值是否相等501。图5示出对于32 位输入操作数502的特定示例,该32位输入操作数502的最低有效16位要被映射到16位 结果503。刚刚在上文描述的过程501标识结果中的最高阶位504 (第16位)以及输入操 作数中的最高阶位505 (第32位),并且检查这些位和之间的所有位是相等的。如图5的示 例中观察到的,所有这样的位是相等的,因此不会触发过载错误警告。
[0030] 该特定方法在使用互补表示法来表达负数的处理器的情况下是有效的。这里,正 的非实质数字被表达成0 (如图5的示例中观察到的),而负的非实质数字被表达成1。上 述在两个经标记的位位置之间检查数字相等性的特定方法对于这些位是1还是0是无关性 的(agnostic),且因此对于输入操作数是正数还是负数也是无关性的。
[0031] 图6示出用于指令执行流水线功能单元的逻辑设计600。如图6中观察到的,功能 单元包括宽为N的比较器601,其中N对应于可能需要进行比较的最大位数。这里,假定功 能单元600支持对多个不同的较大到较小数据大小的流进行过载检查。取决于所执行的特 定的较大到较小数据大小的流来配置比较器601的输入宽度,该输入宽度对应于针对相等 性对多少输入位进行比较。
[0032] 例如,在一个实施例中,功能单元支持对以下各项中每一者的过载检查:1) 64位 数据值到32位数据值;2) 64位数据值到16位数据值;3) 64位数据值到8位数据值。64 位到32位的流对应于33位宽的比较,64位到16位的流对应于49位宽的比较,而64位到 8位的流对应于57位宽的比较。在这种情况下,N将对应于57,因为57是功能单元将需要 检查相等性的最大位数。
[0033] 因此,当功能单元被要求执行对64位到8位数据流的过载检查时,功能单元将启 用到比较器601的所有N=57个输入。对于64到32位以及64到16位过载检查,功能单元 将分别启用比较器的33和69个输入。从输入操作数604的最高有效位位置朝向输入操作 数的最低有效位位置来对要启用的比较器输入进行计数。这里,在一实施例中,只读存储器 (ROM) 602内响应于指令的操作码和/或直接操作数的微代码被用于针对比较器601的相 应输入来设置这些启用输入603_1至603_N。例如,如果指令的微代码和/或直接操作数 表示要执行64位到8位的过载检查,则R0M602内的微代码运作以启用比较器604的所有 N=57个输入。在过载检查失败的情况下,如上面讨论的,比较器601创建异常或设置标志。
[0034] 上面的讨论考虑了对单个标量输入操作数(诸如64位到32位的整数)的过载检 查。各种数量的向量指令也可执行较大到较小数据大小的流的操作。例如,置换或混洗指 令可接受输入向量作为输入操作数,并且本质上创建输出向量,该输出向量的各元素对应 于该输入向量的各元素中的一个或多个的某类重新排列(而不是对它们执行的某一布尔逻 辑和/或数学操作)。例如,置换指令可能根据置换指令的逻辑所被设计成实现的固定模式 来对输入向量元素进行强制重新排列。不同的固定模式可通过直接操作数来调用。混洗指 令可接受第一和第二输入操作数,其中第二操作数中每一元素与结果中相同位置的元素相 对应,并且标识第一操作数中这些元素之一作为针对该结果元素位置要选取的元素。这里, 第二元素与上面关于图1讨论的掩码类似。这些类型的指令中的任一个可制作元素大小比 这些元素更小的结果。
[0035] 功能单元600的逻辑电路可被阐述以包括以下功能,该功能不仅构想向量指令, 而且还构想输入向量的哪些特定元素已被选取以供结果中进行选择。例如,在过载检查指 令刚好已插在置换指令之前的情况下,过载检查指令的指令格式可包括:i)置换指令内标 识置换模式的同一直接操作数,以及ii)置换指令的元素被包括在置换指令的结果中的输 入向量。
[0036] 这里,由直接操作数标识的固定模式可以不选择输入向量的所有元素供包括在结 果中。过载指令被设计成具有以下逻辑,该逻辑研究直接操作数以标识输入向量的哪些元 素将出现在结果中,并且针对符合上述原理的过载错误来检查被选取的元素中的每一个。
[0037] 可以想到,多个相同的逻辑设计实例604可被安排在单个功能单元中,例如,一个 逻辑设计实例对应于要处理的输入操作数的每一向量元素,使得输入操作数的各数据元素 可被并行处理。或者,如果存在设计实例比需要处理的设计元素的数量少,则微代码可在第 一元素已被处理之后通过同一功能单元来处理第二元素,使得结果按一件一件的方式来创 建。
[0038] 在混洗指令的情况下,功能单元600接收两个输入向量(第一输入向量定义哪些 源元素将被选择,以及第二输入向量包含这些源元素),因此它可以确定哪些特定数据元素 要流入较小大小。多个逻辑设计实例可并行处理这些数据元素中的某些或所有。就少于所 有的元素被并行处理的情况来说,单个设计实例可处理一系列源元素,使得结果按一件一 件的方式来形成。
[0039] 在一个实施例中,过载检查指令的结果(例如,如上所述,该所得结果可以是异常 或标志)标识针对向量置换或混洗指令的一个或多个侵犯(offending)数据元素。例如,如 果ISA支持接受具有最大32个元素的源元素输入向量的置换和/或混洗指令,则在控制寄 存器空间中可存在用来分开地标识未通过过载测试的任何源元素的32个标志位。较少的 标志位将用于生成更少的数据元素的置换/向量指令。类似元素结构(例如,各自对应于一 个置换的32位)可以在具有异常的情况下通过。
[0040] 就功能单元要执行过载检查来说,指令执行流水线必须能够将适当的操作数馈送 给它。例如,如果功能单元测试要测试标量和向量指令两者,则指令执行流水线需要将标量 和向量寄存器空间两者耦合至功能单元。
[0041] 上述实施例针的主导思想是,通过确保较小目标数据大小的最高阶位未被较大源 数据大小内的实质数据消费,尝试防止由递增造成的过载错误。在其他实施例中,该特定保 护可被丢弃,使得检查将准许较小目标数据大小的最高(而不是仅仅次高)阶位被实质数据 消费。这对宽为N的比较器的输入宽度的计算的影响是与上面的讨论相比减少一位。在一 个实施例中,要采用哪个主导思想是建立在指令格式的操作码或直接操作数中的(按指令 主导思想配置),或通过某种形式的寄存器空间(诸如硬件线程上下文寄存器空间或模型专 用寄存器(MSR)空间)内的设置来更全局地建立在按线程的基础上或处理器范围基础上。
[0042] 图7示出示例性多核处理器700的架构。如图7中观察到的,处理器包括:1)多个 处理核701_1至701_N ;2)互连网络702 ;3)末级高速缓存系统703 ;4)存储器控制器704 和I/O中枢705。每个处理核包含用于执行程序代码指令的一个或多个指令执行流水线。此 类指令执行流水线中的任一个或全部可支持符合图1描述的对向量指令的执行,并且包括 可执行过载检查指令的功能单元,以及包括用于响应于检测到将数据从较大数据大小移至 较小数据大小的指令来将过载检查指令插入指令流的电路。互连网络702用于将核701_1 至701_N中的每一个彼此互连以及互连至其它组件703、704、705。末级高速缓存系统703 用作在指令和/或数据被驱逐到系统存储器708之前处理器中的最后一层高速缓存。
[0043] 存储器控制器704从系统存储器708读取数据和指令/将数据和指令写入系统存 储器708。I/O中枢705管理处理器和"I/O"设备(例如非易失性存储设备和/或网络接口) 之间的通信。端口 706源于互连网络702,用于链接多个处理器,使得能够实现具有N个以 上的核的系统。图形处理器707执行图形计算。功率管理电路(未示出)管理处理器作为整 体(封装级摂)的性能和功率状态以及处理器内的各单元(诸如各核701_1至701_N、图形处 理器707等)的性能和功率状态的方面。为了方便在图7中未示出其它有意义的功能块(例 如,锁相环(PLL)电路)。
[0044] 以上讨论所教导的过程可以用程序代码来执行,程序代码诸如使机器(诸如"虚拟 机"、放置在半导体芯片上的通用CPU处理器或放置在半导体芯片上的专用处理器)执行某 些功能的机器可执行指令。另选地,这些功能可由包含用于执行这些功能的硬连线逻辑的 专用硬件组件来执行,或由编程的计算机组件和自定义的硬件组件的任何组合来执行。
[0045] 存储介质可用于存储程序代码。存储程序代码的存储介质可体现为但不限于 一个或多个存储器(例如,一个或多个闪存、随机存取存储器(静态、动态或其它))、光盘、 CD-ROM、DVD ROM、EPROM、EEPR0M、磁或光卡或适于存储电子指令的其它类型的机器可读介 质。还可从远程计算机(例如,服务器)将程序代码作为体现在传播介质中的数据信号(例 如,经由通信链路(例如,网络连接))下载至请求计算机(例如,客户机)。
[0046] 在上述说明书中,已参考本发明具体示例实施例描述了本发明。然而,显然可对这 些实施例作出各种修改和改变,而不背离如所附权利要求所述的本发明的更宽泛精神和范 围。因此,应当以说明性而非限制性的意味看待说明书和附图。
【权利要求】
1. 一种处理器,包括: 指令执行流水线内的功能单元(600),所述功能单元具有用于确定来自较大源数据大 小的实质数据是否将放得进所述实质数据要流入的较小数据大小的电路(601)。
2. 如权利要求1所述的设备,其特征在于,所述电路包括比较器,所述比较器检查以获 悉从所述较大数据大小的最高阶位处的位位置开始到所述较小数据大小的位范围内的位 位置的位是否相等。
3. 如权利要求2所述的设备,其特征在于,所述较小数据大小的位范围内的所述位位 置位于所述较小数据大小的位范围的最高阶位位置处。
4. 如权利要求1所述的设备,其特征在于,所述电路包括比较器,所述比较器检查以获 悉从所述较大数据大小的最高阶位处的位位置开始到刚好在所述较小数据大小的最高阶 位之后的位位置的位是否相等。
5. 如权利要求1所述的设备,其特征在于,所述电路包括比较器,所述比较器检查以获 悉从所述较大数据大小的最高阶位的位位置开始到以下i)或ii)中任一个的位是否相等: i) 刚好在所述较小数据大小的最高阶位之后的位位置;或 ii) 在所述较小数据大小的位范围内的最高阶位位置, 其中,利用i)或ii)中的哪一个取决于信息。
6. 如权利要求5所述的设备,其特征在于,所述信息是否根据由所述功能单元执行的 指令的指令格式内的内容来确定的。
7. 如权利要求5所述的设备,其特征在于,所述信息是否根据所述处理器的控制寄存 器空间来确定。
8. 如权利要求7所述的设备,其特征在于,所述控制寄存器空间是模型专用寄存器空 间。
9. 如权利要求7所述的设备,其特征在于,所述控制寄存器空间用于保持线程的上下 文信息。
10. 如权利要求所述的设备,其特征在于,所述实质数据在向量的元素内。
11. 如权利要求1所述的设备,其特征在于,所述处理器包含逻辑电路,所述逻辑电路 用于检测将使所述实质数据从所述较大源数据大小流入所述较小数据大小的第二指令,并 且创建所述指令并在指令流中将所述指令插入所述第二指令之前。
12. -种方法,包括: 在指令执行流水线内执行指令,执行所述指令包括检查(401)较大数据大小内的实质 数据将放得进较小数据大小,其中在所述实质数据放不进所述较小数据大小的情况下所述 指令的结果为警告,并且在所述实质数据放得进所述较小数据大小的情况下所述指令的结 果为不警告。
13. 如权利要求12所述的方法,其特征在于,所述实质数据在向量内。
14. 如权利要求12所述的方法,其特征在于,所述警告是标志。
15. 如权利要求12所述的方法,其特征在于,所述警告是异常。
16. 如权利要求12所述的方法,其特征在于,进一步包括在所述指令执行流水线内检 测第二指令,所述第二指令将所述实质数据从所述较大数据大小移至所述较小数据大小, 并且作为响应创建所述指令并将所述指令插入在所述第二指令之前。
17. -种计算系统,包括: 具有指令执行流水线的处理器,所述指令执行流水线具有功能单元,所述功能单元具 有用于确定来自较大源数据大小的实质数据是否将放得进所述实质数据要流入的较小数 据大小的电路(601)。 存储器,耦合至所述处理器的存储器控制器。
18. 如权利要求17所述的计算系统,其特征在于,所述电路包括比较器,所述比较器检 查以获悉从所述较大数据大小的最高阶位处的位位置开始到所述较小数据大小的位范围 内的位位置的位是否相等。
19. 如权利要求17所述的计算系统,其特征在于,所述较小数据大小的位范围内的所 述位位置位于所述较小数据大小的位范围的最高阶位位置处。
20. 如权利要求17所述的计算设备,其特征在于,所述电路包括比较器,所述比较器检 查以获悉从所述较大数据大小的最高阶位处的位位置开始到刚好在所述较小数据大小的 最高阶位之后的位位置的位是否相等。
【文档编号】G06F11/36GK104216827SQ201410098551
【公开日】2014年12月17日 申请日期:2014年3月17日 优先权日:2013年3月15日
【发明者】M·G·迪克森, B·帕特尔, R·古帕拉克里西南 申请人:英特尔公司