具有嵌入式取整规则的浮点指令格式的制作方法

文档序号:18456660发布日期:2019-08-17 01:38阅读:345来源:国知局
具有嵌入式取整规则的浮点指令格式的制作方法
本申请要求于2016年12月15日提交的美国临时专利no.62/434,521的优先权,该临时申请的内容通过引用被并入本文。本公开涉及处理器,且更特别地,涉及与处理器相关联的指令集架构(isa),其中isa的每个浮点指令规定特别适用于那个浮点指令的取整规则。
背景技术
:处理器(例如中央处理单元(cpu))可执行包括系统软件(例如操作系统)和用户软件应用的软件应用。可根据规定指令的集合的指令集架构(isa)来设计处理器的微架构。软件程序可被编译成可在处理器的执行流水线上执行的这些指令的集合。在isa中规定的指令可包括处理浮点值(例如作为输入或作为输出)的指令。这些指令被称为isa的浮点指令。附图说明从下面给出的详细描述中和从本公开的各种实施方式的附图中将更充分理解本公开。然而,附图不应被理解为将本公开限制到特定的实施方式,而是仅为了解释和理解。图1示出根据本公开的实施方式的包括处理器102的系统。图2示出根据本公开的实施方式的可包括存储取整规则的标识符的字段的浮点指令。图3示出根据本公开的实施方式的浮点转换指令。具体实施方式在计算机中,可使用可被解释为实数的表示的多个位来表示浮点值。一个共同的表示是如根据ieee754技术标准而定义的二进制32格式。二进制32格式的32位可包括符号位(s)、8个指数位和23个分数位。可使用如在表1中所示的下面的伪代码来将以这种格式编码的32位字转换成实数:表1在这个例子中,符号位s用于确定实数是正(+)数还是负(-)数,其中指数值255(即,全部1)用于表示+/-无限大和其它例外条件。使用有限数量的位的表示可以只表示有限数量的实数值;特别地,存在不能使用该表示来表示的一些实数值。例如,ieee二进制32格式可表示至多232个实数值。这意味着某些实数不能被表示。考虑十进制数字33554432(在十六进制中是0x200_0000)和数字1。这两个数字都可以二进制32格式确切地分别被表示为s=0,exponent=152,fraction=0以及s=0,exponent=127,fraction=0。然而它们的和33554433(0x200_0001)不能以该格式被表示,因为和的表示需要25位分数,其超过被分配到二进制32格式的分数部分的位的数量。当实数值不能确切地以特定的浮点格式被表示时,取整操作可能发生。在一些实现中,取整操作是选择可以那种格式(例如二进制32格式)被表示的可替换实数。一般,所选择的可替换实数可以是下一最大可表示的实数或下一最小可表示的实数。当执行诸如加法、减法、乘法和/或除法的浮点操作时,这些操作的确切结果常常不能以浮点格式被表示。在这种情况下,处理器可能需要执行取整操作以确定可被表示的可替换数字。处理器可基于取整规则来选择特定的取整方法。可被使用的一些取整方法是:·向最近值取整:向最近值取整;如果数字落在中间,则它被取整到具有偶数(零)最低有效位的最近值。·向0取整:向零取整(也被称为截尾取整)。·向+无限大取整:向正无限大取整(也被称为向上或最高限度取整)。·向-无限大取整:向负无限大取整(也被称为向下或最低限度取整)。不同取整规则的应用可产生不同的取整结果。当浮点数转换成整数时,取整也可出现在处理器中。在那种情况下,处理器可使用所确定的取整规则来将由浮点格式表示的实数值转换成最接近的整数。整数结果可根据所使用的取整规则而不同。例如,考虑如表2所示的下面的例子。使用不同的取整规则可产生不同的结果。表2规则/值+11.5+12.5-11.5-12.5最近+12+12-12-12向0+11+12-11-12向+无限大+12+13-11-12向-无限大+11+12-12-13取整也可在整数到浮点转换的情况下产生。例如,当将以整数格式表示的32位整数转换成二进制32位格式时,整数数字0x200_0001不是确切地可表示的且可能在转换之前被取整到0x200_0000或0x200_0004。在处理器的一些实现中,在处理器架构的规定中确定取整规则。在其它实现中,在由处理器通过编程接口可访问的寄存器(被称为浮点控制寄存器)中规定可被使用的取整规则。在这种情形中,当浮点操作(或浮点/整数转换)产生不可表示的结果时,处理器检查浮点控制寄存器以确定要应用哪个取整规则,且结果基于所确定的取整规则被取整。所使用的取整规则的选择可影响浮点操作的序列的总体结果。因此在专门的应用中,挑选不同的取整规则可导致较高或较低质量的最终结果。在这样的应用中,程序可选择适当的取整规则(或多个规则)。然而通常,软件应用并不规定在浮点操作中使用的取整规则。当未规定规则时,使用默认取整规则。默认取整规则通常与编程语言相关联,且常常是向最近值取整规则。当从浮点数转换成整数时的取整方法的选择可明确地被定义为在编程语言的函数库中的取整函数。程序员可接着以代码使用这些取整函数(例如ceiling、round或floor),以便明确地将期望取整规则应用于特定的数字。在控制浮点取整模式的唯一方式是浮点控制寄存器的情况下,明确地规定取整模式的库函数将增加与管理取整模式有关的开销。例如,在表3中示出ceiling函数的伪代码序列:表3其中注意,在这个代码序列中的五行指令中的三行与操纵取整模式有关,这引起计算开销的增加。频繁切换取整模式可能在计算上是昂贵的,特别是在现代无序超标量处理器的情况中。在一些实现中,读取和/或写入取整模式可能消耗多个处理器周期。它常常是序列化操作,禁止并行和无序浮点执行。有出现的情况,其中在代码序列中,取整模式需要频繁地改变。一个例子是在c程序中,其中浮点操作通常在向最近值取整的情况下被执行,同时浮点到整数转换使用向零取整来被规定。这意味着涉及然后被取整到整数的浮点操作的操作序列将具有频繁的取整模式变化。出现的另一情形是用户明确地希望控制被应用到特定代码区的浮点取整模式。为了正确地支持这个功能,每当控制离开那个代码区时,浮点取整模式需要被重置到语言的默认模式。这也证明是相当昂贵的。本公开的实施方式提供包括指令的指令集架构,指令规定应用于可能需要取整的浮点指令的取整规则。在一个实施方式中,指令可将取整规则直接规定为指令的属性。如果语言需要特定的取整模式,则可在指令中使用立即值来明确地对取整规则编码,因而避免管理浮点寄存器的需要。在另一实施方式中,指令可规定表示指令的取整规则的标识符从浮点控制寄存器被读取。这支持下面的情况:用户希望对所使用的取整规则施加控制,并动态地改变在应用程序中的取整规则。因此,本公开的实施方式提供用于使isa的浮点指令(包括浮点转换指令)确切地规定期望取整模式或规定由浮点控制寄存器提供的默认取整模式被使用的手段。图1示出根据本公开的实施方式的包括处理器102的片上系统(soc)100。处理器102可包括在例如soc100的半导体芯片集上制造的逻辑电路。处理器100可以是中央处理单元(cpu)、图形处理单元(gpu)或多核处理器的处理核心。如图1所示,处理器102可包括指令执行流水线104和寄存器文件106。流水线104可包括多个流水线阶段,以及每个阶段包括被制造成在多阶段过程中执行特定阶段的操作的逻辑电路,多阶段过程是充分执行在处理器102的指令集架构(isa)中规定的指令所需的。在一个实施方式中,流水线104可包括指令取出/解码阶段110、数据取出阶段112、执行阶段114和写回阶段116。处理器102可包括寄存器文件106,其还可包括与处理器102相关联的寄存器108、109。在一个实施方式中,寄存器文件106可包括通用寄存器108、109,每个寄存器可包括某个数量(被称为“长度”)的位以存储由在流水线104中执行的指令处理的数据项。例如,根据实现,寄存器108、109可以是64位、128位、256位或512位寄存器。寄存器108、109中的每个可存储一个或多个数据项。可实现寄存器108、109以存储浮点数据项和/或固定点数据项,其中浮点数据项可表示实数而固定点数据项可表示整数。程序的源代码可被编译成在与处理器102相关联的指令集架构(isa)中定义的一系列机器可执行指令。当处理器102开始执行可执行指令时,这些机器可执行指令可被放置在流水线104上以被顺序地执行。指令取出/解码阶段110可取回放置在流水线104上的指令并识别与指令相关联的标识符。指令标识符可使所接收的指令与在处理器102的isa中规定的指令118的电路实现相关联。在isa中规定的指令可被设计成处理存储在通用寄存器(gpr)108、109中的数据项。数据取出阶段112可从gpr108取回待处理的数据项(例如浮点或固定点)。执行阶段114可包括逻辑电路以执行在处理器102的isa中规定的指令。在一个实施方式中,与执行阶段114相关联的逻辑电路可包括多个“执行单元”(或功能单元),每个单元专用于执行一个相应的指令。由这些执行单元执行的所有指令的集合可构成与处理器102相关联的指令集。在执行指令以处理由数据取出阶段112取回的数据项之后,写回阶段116可输出结果并将结果存储在gpr108、109中。在一个实施方式中,处理器102的isa可定义浮点指令,且处理器102的执行阶段114可包括执行单元118,其包括在isa中定义的浮点指令的硬件实现。浮点指令可包括存储第一寄存器108的标识符的第一字段120(或操作数)、存储第二寄存器109的标识符的第二字段122(或操作数)和存储表示取整规则的标识符的第三字段124(或操作数)。指令当被执行时可包括下列操作:读取第一数据项(浮点数据项或固定点数据项)、基于存储在第一寄存器中的第一数据项来计算结果值(浮点数据项)以及使用在指令的第三字段中规定的取整规则来对结果值取整以将结果存储在第二寄存器109中。以这种方式,本公开的实施方式可允许程序规定按指令取整规则。按指令取整规则实现允许与不同的取整规则相关联的不同指令,而不是对由处理器102执行的所有指令使用一种取整规则(例如默认取整规则)。在一个实施方式中,取整规则可由存储在第三字段124中的立即值识别。例如,立即值可以是整数,且不同的整数值可对应于不同的取整规则。在另一实施方式中,第三字段124可存储寄存器文件106的第三寄存器126的标识符,其中寄存器126可存储对应于特定取整规则的标识符。取整规则的间接规定(例如经由寄存器126)可向程序员提供另外的灵活性以对应用进行编程。图2示出根据本公开的实施方式的可包括存储取整规则的标识符的字段的浮点指令。如图2所示,可在isa中规定指令200以包括操作字段202、目标寄存器字段204、第一输入寄存器字段206、第二输入寄存器字段208、操作类型字段210和取整规则字段212。操作字段202可存储浮点操作的标识符(例如fadd)。目标寄存器字段204可规定用于存储输出的与处理器相干的浮点寄存器。第一输入寄存器字段206和第二输入寄存器字段208可规定存储所述输入值(或被加在一起的值)的浮点寄存器。操作类型字段210可存储表示浮点类型(例如单精度或双精度)的值。取整规则字段212可存储表示取整规则的类型的标识符(frm)。例如,在gptx架构中的指令fadd_s_rzero$f3,$f1,$f2使用向零取整的取整规则来规定$f1与$f2的内容的单精度浮点相加,将结果存储回到$f3中。以frm值编码的固定取整规则可包括:·rnear:向最近值取整(例如与标识符rnear相关联),·rzero:向零取整(例如与标识符rzero相关联),·rdown:向下取整(例如与标识符rdown相关联),·rup:向上取整(例如与标识符rup相关联)。对frm标识符可采用的其它编码是rdyn,其规定在浮点控制寄存器中规定的取整规则应被使用,因而间接地规定取整规则(而不是使用固定值)。在从整数到浮点数的转换期间,处理器可将整数存储在通用寄存器中并将结果存储在浮点寄存器中。在从通用寄存器到浮点寄存器的复制期间,整数值在取整(如果必要)的情况下转换成等效的浮点表示。当处理器执行将浮点值从浮点寄存器复制到通用寄存器的指令时,取整可类似地出现,其中浮点值基于在指令中规定的取整规则而转换成整数值。在isa的一个实现中,这些指令是fcvtr(从整数转换到浮点)和rcvtf(从浮点转换到整数)指令,其分别将在通用寄存器中存储的整数转换成在浮点寄存器中存储的浮点值以及将在浮点寄存器中的浮点值转换成在通用寄存器中存储的整数。这些指令的frm字段可规定在转换期间应用的取整规则的选择。图3示出根据本公开的实施方式的fcvtr指令302和rcvtf指令304。fcvtr指令302的规定可包括存储对浮点寄存器(浮点寄存器存储浮点值)的参考的浮点寄存器字段306和存储对通用寄存器(通用寄存器存储整数)的参考的通用寄存器字段。fcvtr指令302基于在取整规则字段310中规定的取整规则来将浮点值转换成整数。类似地,rcvtf指令304的规定可包括存储对通用寄存器(其存储整数)的参考的通用寄存器字段312和存储对浮点寄存器(其存储浮点值)的参考的浮点寄存器字段314。rcvtf指令304基于在取整规则字段316中规定的取整规则来将整数转换成浮点值。在可复制到通用寄存器/从通用寄存器复制的指令(例如fcvtr或rcvtf)的上下文中,取整规则可包括被称为raw规则的额外的取整规则。在一个实施方式中,可在具有标识符raw的fcvtr指令的取整规则字段310(或rcvtf指令的字段316)中规定raw规则。在raw规则下,在源寄存器(通用或浮点)中的位照现状直接复制(例如位到位复制)到目标寄存器(浮点/通用寄存器)而没有转换。raw规则的使用允许浮点值从浮点寄存器复制到相同(或更大)长度的通用寄存器并复制回而不干扰该值。在将浮点数转换成整数的指令的上下文中,本公开的实施方式可提供与未定义数字(nan)的处理有关的额外取整规则。未定义数字可表示无限大值。这个取整规则可规定nan到整数转换,其被选择为下列项之一:·所有nan都被转换成0,·+nan/-nan被转换成可表示的最正/最负的整数值,·所有nan被转换成可表示的最正值,或·所有nan被转换成可表示的最负值。在rcvtf指令的上下文中,如图3所示,rcvtf指令304可包括nan规则字段318,其中nan到整数转换规则(如上所述)可被规定。在一个实施方式中,如表3所示的ceiling函数可使用rcvtf指令由表4的下面的代码实现。表4因为指令明确地对取整规则编码,没有操纵浮点控制寄存器的需要,因而减小了与切换取整模式相关联的开销。虽然关于有限数量的实施方式描述了本公开,但本领域中的技术人员将从那里认识到很多修改和变化。意图是所附权利要求涵盖如落在本公开的真实精神和范围内的所有这样的修改和变化。设计可经历从创建到模拟到制造的各种阶段。表示设计的数据可以用很多方式表示该设计。首先,如在模拟中有用的,可使用硬件描述语言或另一功能描述语言来表示硬件。此外,可在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,大部分设计在某个阶段达到以硬件模型表示各种装置的物理放置的数据的级别。在常规半导体制造技术被使用的情况下,表示硬件模型的数据可以是规定在掩模的不同掩模层上的用于产生集成电路的各种特征的存在或缺乏的数据。在设计的任何表示中,数据可存储在任何形式的机器可读介质中。存储器或磁性或光学存储装置(例如磁盘)可以是机器可读介质以存储经由光波或电波传输的信息,光波或电波被调制或以另外方式被产生以传输这样的信息。当指示或承载代码或设计的电载波在电信号的拷贝、缓冲或重新传输被执行的程度上被传输时,新拷贝被制造。因此,通信提供商或网络提供商可在有形机器可读介质上至少临时地存储物品,例如被编码到载波内的信息,体现本公开的实施方式的技术。如本文使用的模块指硬件、软件和/或固件的任何组合。作为例子,模块包括硬件,例如微控制器,其与非临时介质相关联以存储适合于由微控制器执行的代码。因此,对模块的引用在一个实施方式中指硬件,其特别地被配置成识别和/或执行在非临时介质上保持的代码。此外,在另一实施方式中,模块的使用指包括代码的非临时介质,代码特别适合于由微控制器执行以执行预定操作。而且如可被推断出的,在又一实施方式中,术语“模块”(在这个例子中)可以指微控制器和非临时介质的组合。通常,被示为分开的模块边界通常改变并可能重叠。例如,第一和第二模块可共享硬件、软件、固件或其组合,同时可能保留某个独立的硬件、软件或固件。在一个实施方式中,术语“逻辑”的使用包括硬件,例如晶体管、寄存器或其它硬件,例如可编程逻辑装置。短语“被配置成”的使用在一个实施方式中指布置、放置在一起、制造、提供出售、导入和/或设计设备、硬件、逻辑或元件以执行所指定或确定的任务。在这个例子中,如果未正在操作的设备或其元件被设计、耦合和/或互连以执行指定任务,其仍然“被配置成”执行所述指定任务。作为纯粹示例性的例子,逻辑门可在操作期间提供0或1。但“被配置成”向时钟提供使能信号的逻辑门不包括可提供1或0的每个潜在逻辑门。替代地,逻辑门是以某种方式耦合的逻辑门,使得在操作期间1或0输出启用时钟。再一次注意,术语“被配置成”的使用并不需要操作,但替代地聚焦于设备、硬件和/或元件的潜伏状态,其中在潜伏状态中,当设备、硬件和/或元件正在操作时,设备、硬件和/或元件被设计成执行特定的任务。此外,短语“以”、“能够”和/或“可操作来”的使用在一个实施方式中指被设计成以特定的方式实现设备、逻辑、硬件和/或元件的使用的一些设备、逻辑、硬件和/或元件。注意如上面,以、能够或可操作来的使用在一个实施方式中指设备、逻辑、硬件和/或元件的潜伏状态,其中设备、逻辑、硬件和/或元件没有正在操作,但被设计成以特定的方式实现设备的使用。如在本文使用的值包括数字、状态、逻辑状态或二进制逻辑状态的任何已知的表示。逻辑电平、逻辑值(logicvalues)或逻辑值(logicalvalues)的使用常常也被称为1和0,其简单地表示二进制逻辑状态。例如,1指高逻辑电平而0指低逻辑电平。在一个实施方式中,存储单元(例如晶体管或闪存单元)也许能够保持单个逻辑值或多个逻辑值。然而,在计算机系统中的值的其它表示被使用。例如,十进制数字10也可被表示为910的二进制值和十六进制字母a。因此,值包括能够保持在计算机系统中的信息的任何表示。而且,状态可由值或值的部分表示。作为例子,第一值(例如逻辑一)可表示默认或初始状态,而第二值(例如逻辑零)可表示非默认状态。此外,术语“重置”和“置位”在一个实施方式中分别指默认或已更新的值或状态。例如,默认值可能包括高逻辑值,即,重置,而已更新的值可能包括低逻辑值,即,置位。注意,值的任何组合可用于表示任何数量的状态。可经由存储在机器可访问、机器可读、计算机可访问或计算机可读介质上的由处理元件可执行的指令或代码来实现上面阐述的方法、硬件、软件、固件或代码集的实施方式。非临时机器可访问/可读介质包括以由机器(例如计算机或电子系统)可读的形式提供(即,存储和/或传输)信息的任何机制。例如,非临时机器可访问介质包括:随机存取存储器(ram),例如静态ram(sram)或动态ram(dram);rom;磁性或光学存储介质;闪存装置;电气存储装置;光学存储装置;声存储装置;用于保持从临时(传播的)信号(例如载波、红外信号、数字信号)接收的信息的其它形式的存储装置;等等,这些介质与可从那里接收信息的非临时介质区分开。用于对逻辑编程以执行本公开的实施方式的指令可存储在系统中的存储器(例如dram、高速缓存器、闪存或其它存储装置)中。此外,指令可经由网络或借助于其它计算机可读介质被分发。因此,机器可读介质可包括用于以由机器(例如计算机)可读的形式存储或传输信息的任何机制,但不限于软盘、光学盘、光盘、只读存储器(cd-rom)和磁光盘、只读存储器(rom)、随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、磁卡或光卡、闪存、或有形机器可读存储装置,其在信息通过互联网经由电气、光学、声或其它形式的传播信号(例如载波、红外信号、数字信号等)的传输中被使用。因此,计算机可读介质包括适合于以由机器(例如计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。在整个该说明书中对“一个实施方式”或“实施方式”的引用意指结合该实施方式所述的特定特征、结构或特性被包括在本公开的至少一个实施方式中。因此,短语“在一个实施方式中”或“在实施方式中”在整个该说明书中的不同地方中的出现并不一定都指同一实施方式。此外,可在一个或多个实施方式中以任何适当的方式组合特定特征、结构或特性。在前述描述中,关于特定的示例性实施方式给出详细描述。然而,将明显的是,可在不偏离如在所附权利要求中阐述的本公开的更宽的精神和范围的情况下对其做出各种修改和变化。说明书和附图相应地在示例性意义而不是限制性意义上被看待。此外,实施方式和其它示例性语言的前述使用并不一定指同一实施方式或同一例子,但可以指不同和独特的实施方式以及可能同一实施方式。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1