专利名称:积和熔加功能单元的制作方法
技术领域:
本发明大体涉及图形处理器,且明确地说涉及一种用于图形处理器的双精度积和熔 加功能单元。
背景技术:
图形处理器普遍用于计算机系统中以加速从二维或三维几何数据的图像的绘制。此 类处理器通常经设计而具有高度并行性和高处理量,从而允许并行处理数千个图元以实 时绘制复杂、逼真的动画图像。高端图形处理器提供比典型中央处理单元(CPU)多的 计算能力。
更近一些,已关注于影响图形处理器的功率以加速与图像绘制无关的各种计算。 "通用"图形处理器可用于在科学、经济、商业和其它领域中执行计算。
对图形处理器进行调适以用于通用计算的一个困难是,图形处理器通常经设计以实 现相对较低数值精度。可使用32位("单精度")或甚至16位("半精度")浮点值来绘 制高质量图像,且功能单元和内部管线经配置以支持这些数据宽度。相比之下,许多通 用计算需要较高数值精度,例如64位("双精度")。
为了支持较高精度, 一些图形处理器使用软件技术来使用机器指令序列和32位或 16位功能单元执行双精度计算。此方法减缓了处理量;例如,可能需要一百个或一百个 以上机器指令来完成单一 64位乘法运算。此类较长序列可显著减少图形处理器的双精 度处理量。在一个代表性情况下,估计图形处理器将以高端双核心CPU芯片可能的处 理量的约1/5完'成双精度计算。(通过比较,相同图形处理器可以双核心CPU的处理量 的约15-20倍完成单精度计算。)因为基于软件的解决方案慢得如此多,所以现有图形处 理器很少用于双精度计算。
另一解决方案只是使图形处理器的所有算术电路足够宽以处理双精度操作数。这将 增加图形处理器对于双精度运算的处理量以与单速处理量匹配。然而,图形处理器通常 具有每一算术电路的许多副本以支持并行运算,且增加每一此电路的大小将实质上增加 芯片面积、成本和功率消耗。
如2006年2月21日申请的共同拥有共同待决的第11/359,353号美国专利申请案中 描述的另一解决方案是,影响单精度算术电路以执行双精度运算。在此方法中,单精度功能单元中包含的特殊硬件用于迭代地执行双精度运算。此方法显著快于基于软件的解 决方案(处理量可能相对于单精度处理量减小例如4倍,而不是约100倍),但其可使 芯片设计明显复杂。另外,如果太多指令需要同一功能单元,那么在单精度与双精度运 算之间共享同一功能单元可导致所述单元变成管线中的瓶颈。
发明内容
本发明的实施例直接支持图形处理器中的双精度算术。除了用于绘制的单精度功能 单元外,还提供多用途双精度功能单元。双精度功能单元可使用至少双精度宽度的数据 路径和/或逻辑电路对双精度输入执行若干不同运算,包括积和熔加。双精度和单精度功 能单元可由共享的指令发布电路控制,且核心中包含的双精度功能单元的副本的数目可 小于单精度功能单元的副本的数目,借此减小添加针对双精度的支持对芯片面积的影 响。
根据本发明的一个方面, 一种图形处理器具有适于产生图像数据的绘制管线。对单 精度操作数操作的所述绘制管线包含适于执行若干同时线程的处理核心。处理核心包含 适于对一组双精度输入操作数选择性地执行若干双精度运算中的一者的多用途双精度 功能单元。多用途双精度功能单元包含至少一个算术逻辑电路,且双精度功能单元的所 有算术逻辑电路足够宽以在双精度下操作。在一些实施例中,双精度功能单元经调适使
得双精度运算的每一者在相同数目的时钟循环中完成,且所述单元也可经调适使得完成 双精度运算的任一者所需的时间(例如,时钟循环的数目)不受下溢或溢出条件影响。
可支持双精度运算的各种操作和组合。在一个实施例中,双精度运算包含将两个双 精度操作数相加的加法运算;将两个双精度操作数相乘的乘法运算;以及计算第一双精 度操作数与第二双精度操作数的乘积,接着将第三双精度操作数添加到所述乘积的积和 熔加运算。可支持的其它双精度运算包含双精度比较(DSET)运算,其对第一操作 数和第二操作数执行比较测试并产生指示是否满足所述比较测试的布尔结果;双精度最
大化(DMAX)运算,其传回两个双精度输入操作数中的较大一者;或双精度最小化 (DMAX)运算,其传回两个双精度输入操作数中的较小一者。另外,还可支持将操作 数从双精度格式转换为非双精度格式(或反之亦然)的格式转换操作。
根据本发明的另一方面, 一种图形处理器包含适于产生图像数据的绘制管线。所述 绘制管线包含适于执行多个同时线程的处理核心。处理核心包含适于对一个或一个以上 单精度操作数执行算术运算的单精度功能单元,以及适于对一组双精度输入操作数执行 积和熔加运算并提供双精度结果的双精度积和熔加(DFMA)功能单元。DFMA功能单
6元有利地包含DFMA管线,其具有足够宽以在单次通过DFMA管线的过程中执行积和 熔加运算的数据路径。举例来说,DFMA功能单元可包含适于在单一迭代中计算两个双 精度尾数的乘积的乘法器,和适于在单一迭代中计算两个双精度尾数的和的加法器。
DFMA功能单元还可经配置以执行其它运算。举例来说,在一些实施例中,DFMA 经配置以对一对双精度输入操作数执行乘法运算,并提供双精度结果。在一些实施例中, 乘法运算和积和熔加运算每一者在相同数目的时钟循环中完成。类似地,DFMA功能单 元可经配置以对一对双精度输入操作数执行加法运算,并提供双精度结果。在一个实施 例中,加法运算和积和熔加运算每一者在相同数目的时钟循环中完成。
在一些实施例中,处理核心包含适于并行操作的第一功能单元的若干(P)副本以 及DFMA功能单元的若干(N)副本,数目P大于数目N。在一个实施例中,数目N为
处理核心可包含输入管理器电路,其适于收集用于DFMA功能单元的P组双精度 输入操作数,且在不同(例如,连续)时钟循环上将所述P组双精度操作数中的不同者 传递到DFMA功能单元。输入管理器电路还可适于收集用于第一功能单元的P组单精 度输入操作数,且并行地将所述P组单精度操作数中的不同者传递到第一功能单元的P
个副本中的每一者。
以下具体实施方式
连同附图一起将提供对本发明的性质和优点的较好理解。
图1是根据本发明一实施例的计算机系统的框图2是根据本发明一实施例可在图形处理单元中实施的绘制管线的框图; 图3是根据本发明一实施例的执行核心的框图4列举根据本发明一实施例可由双精度功能单元执行的双精度算术、比较运算和 格式转换操作;
图5是根据本发明一实施例的双精度功能单元的简化框图6是图5的双精度功能单元的操作数准备区块的框图7是图5的双精度功能单元的指数路径的框图8是图5的双精度功能单元的尾数路径的框图9是图5的双精度功能单元的符号路径的框图IO是图5的双精度功能单元的输出区段的框图
图11是根据本发明一实施例的执行核心的框图;以及
7图12是展示根据本发明一实施例双精度功能单元的操作数定序的框图。
具体实施例方式
本发明实施例提供包含专用双精度(例如,64位)功能单元的图形处理器。在一个 实施例中,双精度功能单元能够执行加法、乘法和积和熔加运算,以及双精度比较和向 双精度格式及从双精度格式的格式转换。
I.系统概述
A.计算机系统概述
图1是根据本发明一实施例的计算机系统100的框图。计算机系统100包含经由包 含存储器桥105的总线路径通信的中央处理单元(CPU) 102和系统存储器104。存储 器桥105 (其可以是例如常规北桥芯片)经由总线或其它通信路径106 (例如,超传送 链接)连接到I/0 (输入/输出)桥107。 1/0桥107 (其可以是例如常规南桥芯片)从一 个或一个以上用户输入装置108 (例如,键盘、鼠标)接收用户输入并将所述输入经由 总线106和存储器桥105转发到CPU102。视觉输出提供于基于像素的显示装置IIO(例 如,常规基于CRT或LCD的监视器)上,所述基于像素的显示装置110在经由总线或 其它通信路径113 (例如,PCI Express (PCI-E),或加速图形端口 (AGP)链接)耦合 到存储器桥105的图形子系统112的控制下操作。系统盘114也连接到I/O桥107。开 关116在1/0桥107与例如网络适配器118和各种内插式卡120、 121等其它组件之间提 供连接。其它组件(未明确展示),包含USB或其它端口连接、CD驱动器、DVD驱动 器等也可连接到I/O桥107。各种组件间的总线连接可使用总线协议来实施,所述总线 协议例如PCI (外围组件互连)、PCI-E、 AGP、超传送,或任何其它总线或点到点通信 协议,且不同装置之间的连接可使用此项技术中已知的不同协议。
图形处理子系统112包含图形处理单元(GPU) 122和图形存储器124,其可例如 使用比如可编程处理器、专用集成电路(ASIC)和存储器装置等一个或一个以上集成电 路装置来实施。GPU 122可经配置以执行与从由CPU 102和/或系统存储器104经由存 储器桥105和总线U3供应的图形数据产生像素数据、与图形存储器124交互以存储和 更新像素数据等有关的各种任务。举例来说,GPU 122可从在CPU 102上执行的各种程 序所提供的2-D或3-D场景数据产生像素数据。GPU 122还可在进行或不进行进一步处 理的情况下将经由存储器桥105接收的像素数据存储到图形存储器124。 GPU 122还包 含经配置以将像素数据从图形存储器124递送到显示装置110的扫描输出模块。
GPU 122还可经配置以针对数据处理任务执行通用计算,所述数据处理任务包含与
8图形应用有关的任务(例如,对于视频游戏等的物理建模)以及与图形应用无关的任务。 对于通用计算,GPU 122有利地读取来自系统存储器104或图形存储器124的输入数据, 执行一个或一个以上程序以处理所述数据,并将输出数据写回到系统存储器104或图形 存储器124。除了在绘制操作期间使用的其它单精度功能单元外,GPU 122有利地还包 含用于通用计算中的一个或一个以上双精度积和熔加单元(图l未图示)。
CPU102作为系统100的主处理器操作,其控制并协调其它系统组件的操作。明确 地说,CPU 102发布控制GPU 122的操作的命令。在一些实施例中,CPU 102将针对 GPU 122的命令流写入到命令缓冲器,所述命令缓冲器可在系统存储器104、图形存储 器124,或CPU 102和GPU 122两者可存取的另一存储位置中。GPU 122从命令缓冲器 读取命令流并与CPU 102的操作异步地执行命令。所述命令可包含用于产生图像的常规 绘制命令,以及使在CPU 102上执行的应用程序能够影响GPU 122的用于可能与图像 产生无关的数据处理的计算能力的通用计算命令。
将了解,本文展示的系统是说明性的,且可能作出变化和修改。可视需要修改包含 桥的数目和布置的总线拓扑。举例来说,在一些实施例中,系统存储器104直接而不是 通过桥连接到CPU 102,且其它装置经由存储器桥105和CPU 102与系统存储器104通 信。在其它替代拓扑中,图形子系统112连接到1/0桥107而不是连接到存储器桥105。 在另外其它实施例中,1/O桥107和存储器桥105可能并入到单一芯片中。本文展示的 特定组件是任选的;例如,可能支持任何数目的内插式卡或外围装置。在一些实施例中, 消除开关116,且网络适配器118和内插式卡120、 121直接连接到1/0桥107。
还可改变GPU 122到系统100的其余部分的连接。在一些实施例中,将图形系统 112实施为可插入到系统100的扩展槽中的内插式卡。在其它实施例中,GPU与总线桥 (例如,存储器桥105或I/O桥107)集成在单一芯片上。在另外其它实施例中,GPU 122 的一些或所有元件可与CPU 102集成。
GPU可具备任何量的局部图形存储器,包含无局部存储器,且可使用处于任何组合 中的局部存储器和系统存储器。举例来说,在统一存储器结构(UMA)实施例中,不提 供专用图形存储器装置,且GPU专门地或几乎专门地使用系统存储器。在UMA实施例 中,GPU可集成到总线桥芯片中或提供为具有将GPU连接到桥芯片和系统存储器的高 速总线(例如,PCI-E)的离散芯片。
还应了解,可例如通过将多个GPU包含在单一图形卡上或通过将多个图形卡连接 到总线113,而将任何数目的GPU包含在系统中。多个GPU可并行操作以针对相同显 示装置或针对不同显示装置产生图像,且一个GPU可经操作以产生图像,同时另一 GPU执行通用计算,包含如下文所描述的双精度计算。
另外,体现本发明多个方面的GPU可并入到多种装置中,包含通用计算机系统、 视频游戏控制台和其它特殊用途计算机系统、DVD播放器、手持式装置(例如,移动电 话或个人数字助理)等。
B.绘制管线概述
图2是根据本发明一实施例可在图1的GPU 122中实施的绘制管线200的框图。在 此实施例中,使用一结构来实施绘制管线200,在所述结构中,使用相同并行处理硬件 (下文中称为"多线程核心阵列"202)来执行任何可应用的图形相关程序(例如,顶点 遮影器、几何遮影器和/或像素遮影器)和通用计算程序。
除了多线程核心阵列202外,绘制管线200还包含前端204和数据汇编器206、设 置模块208、光栅化器210、颜色汇编模块212和光栅操作模块(ROP) 214,其每一者 可使用常规集成电路技术或其它技术实施。
对于绘制操作,前端204例如从图1的CPU 102接收状态信息(STATE)、命令(CMD) 和几何数据(GDATA)。在一些实施例中,并不是直接提供几何数据,而是CPU102提 供对系统存储器104中存储几何数据的位置的参考;数据汇编器206从系统存储器104 检索所述数据。对于绘制操作,状态信息、命令和几何数据可以具有一般常规性质,且 可用于界定所需绘制的图像,包含场景的几何形状、照明、阴影、纹理、运动和/或相机 参数。
状态信息和绘制命令界定绘制管线200的各个级的处理参数和动作。前端204将状 态信息和绘制命令经由控制路径(未明确展示)导向绘制管线200的其它组件。如此项 技术中已知,这些组件可通过在各种控制寄存器中存储或更新在处理期间存取的值来响 应于所接收的状态信息,且可通过处理管线中接收的数据而响应于绘制命令。
前端204将几何数据导向数据汇编器206。数据汇编器206将几何数据格式化并准 备将其递送到多线程核心阵列202中的几何模块218。
几何模块218引导多线程核心阵列202中的可编程处理引擎(未明确展示)以对顶 点数据执行顶点和/或几何遮影器程序,其中所述程序是响应于由前端204提供的状态信 息而选择。顶点和/或几何遮影器程序可通过如此项技术中已知的绘制应用程序指定,且 不同的遮影器程序可应用于不同顶点和/或图元。在一些实施例中,顶点遮影器程序和几 何遮影器程序是使用多线程核心阵列202中的相同可编程处理核心来执行。因此,在某 些时间,给定处理核心可作为顶点遮影器操作,其接收并执行顶点程序指令,且在其它 时间,同一处理核心可作为几何遮影器操作,其接收并执行几何程序指令。处理核心可
10多线程化,且执行不同类型的遮影器程序的不同线程可在多线程核心阵列202中同时处 于运行中。
在已执行顶点和/或几何遮影器程序之后,几何模块218将经处理的几何数据 (GDATA')传递到设置模块208。设置模块208 (其可以是一般常规设计)从每一图元 的剪辑空间或屏幕空间坐标产生边缘等式;所述边缘等式可有利地用于确定屏幕空间中 的一点在图元内部还是外部。
设置模块208将每一图元(PRIM)提供到光栅化器210。光栅化器210 (其可以是 一般常规设计)例如使用常规扫描转换算法确定哪些(如果有的话)像素被图元覆盖。 如本文所使用,"像素"(或"片段") 一般是指2-D屏幕空间中将针对其确定单一颜色 值的区域;像素的数目和布置可以是绘制管线200的可配置参数,且可能或可能不与特 定显示装置的屏幕分辨率相关。
在确定哪些像素被图元覆盖之后,光栅化器210将图元(PRIM)连同被图元覆盖 的像素的屏幕坐标(X,Y)的列表一起提供到颜色汇编模块212。颜色汇编模块212使 从光栅化器210接收的图元和覆盖信息与图元的顶点的属性(例如,颜色分量、纹理坐 标、表面法线)相关联,且产生将一些或所有所述属性界定为屏幕坐标空间中的位置的 函数的平面等式(或其它适宜的等式)。
这些属性等式可有利地用于像素遮影器程序中以计算属性在图元内的任何位置处 的值;常规技术可用于产生所述等式。举例来说,在一个实施例中,颜色汇编模块212 针对每一属性U产生平面等式的系数A、 B和C,其形式为U-Ax + By + C。
颜色汇编模块212将覆盖像素的至少一个取样位置的每一图元的属性等式(EQS, 其可包含(例如)平面等式系数A、 B和C)和被覆盖像素的屏幕坐标(X,Y)的列表 提供到多线程核心阵列202中的像素模块224。像素模块224引导多线程核心阵列202 中的可编程处理引擎(未明确展示)以对由图元覆盖的每一像素执行一个或一个以上像 素遮影器程序,其中所述程序是响应于由前端204提供的状态信息而选择。与顶点遮影 器程序和几何遮影器程序一样,绘制应用程序可指定待用于任何给定组像素的像素遮影 器程序。
像素遮影器程序有利地使用也执行顶点和/或几何遮影器程序的相同可编程处理引 擎在多线程核心阵列202中执行。因此,在某些时间,给定处理引擎可作为顶点遮影器 操作,其接收并执行顶点程序指令;在其它时间,同一处理引擎可作为几何遮影器操作, 其接收并执行几何程序指令;且在另外其它时间,同一处理引擎可作为像素遮影器操作, 其接收并执行像素遮影器程序指令。一旦对于像素或像素群组的处理完成,像素模块224就将经处理的像素(PDATA) 提供到ROP214。 ROP214 (其可以是一般常规设计)在可位于(例如)图形存储器124 中的帧缓冲器226的构造下将从像素模块224接收的像素值与图像的像素集成。在一些 实施例中,ROP214可遮蔽像素或将新的像素与先前写入到所绘制的图像的像素混合。 深度缓冲器、a缓冲器和模板缓冲器也可用于确定每一传入像素对所绘制的图像的贡献 (如果有的话)。将对应于每一传入像素值与任一先前存储的像素值的适当组合的像素数 据PDATA'写回到帧缓冲器226。 一旦图像完成,帧缓冲器226就扫描输出到显示装置和 /或经受进一步处理。
对于通用计算,多线程核心阵列可由像素模块224 (或由几何模块218)控制。前 端204例如从图1的CPU 102接收状态信息(STATE)和处理命令(CMD),并将状态 信息和命令经由控制路径(未明确展示)递送到工作分布单元,所述工作分布单元可并 入(例如)到颜色汇编器212或像素模块224中。工作分布单元在组成多线程核心阵列 202的处理核心之间分布处理任务。可使用各种工作分布算法。
每一处理任务有利地包含执行若干处理线程,其中每一线程执行相同程序。所述程 序有利地包含以下指令从"全局存储器"(例如,系统存储器104、图形存储器124, 或GPU 122和CPU 102两者可存取的任何其它存储器)读取输入数据,对输入数据执 行包含至少一些双精度运算的各种运算以产生输出数据,并将输出数据写入到全局存储 器。特定处理任务对于本发明并不关键。
将了解,本文描述的绘制管线是说明性的,且可能作出变化和修改。管线可包含与 所展示的那些单元不同的单元,且处理事件的顺序可不同于本文描述的顺序。此外,本 文描述的一些或所有模块的多个实例可并行操作。在一个此类实施例中,多线程核心阵 列202包含两个或两个以上几何模块218和并行操作的相等数目的像素模块224。每一 几何模块和像素模块联合控制多线程核心阵列202中的不同子组的处理引擎。
C.核心概述
多线程核心阵列202有利地包含适于并行执行大量处理线程的一个或一个以上处理 核心,其中术语"线程"是指对一组特定输入数据执行的特定程序的实例。举例来说, 线程可以是对单一顶点的属性执行的顶点遮影器程序的实例、对给定图元和像素执行的 像素遮影器程序,或通用计算程序的实例。
图3是根据本发明一实施例的执行核心300的框图。可例如在上述多线程核心阵列 202中实施的执行核心300经配置以执行用于执行各种计算的任意指令序列。在一些实 施例中,相同执行核心300可用于在图形绘制的所有阶段执行遮影器程序,包含顶点遮影器、几何遮影器和/或像素遮影器程序,以及通用计算程序。
执行核心300包含取得与分派单元302、发布单元304、双精度积和熔加(DFMA) 单元320、若干(N)其它功能单元(FU) 322和寄存器堆324。每一功能单元320、 322 经配置以执行指定操作。在一个实施例中,DFMA单元320除了如下文描述的其它双精 度运算外还有利地实施双精度积和熔加运算。应了解,任何数目的DFMA单元320可包 含在核心300中。
其它功能单元322可以是一般常规设计且可支持例如单精度加法、乘法、逐位逻辑 运算、比较运算、格式转换操作、纹理过滤、存储器存取(例如,加载和存储操作)、 超越函数的近似、内插等多种操作。功能单元320、 322可管线化,从而允许在已完成 先前指令之前发布新的指令,如此项技术中已知。可提供功能单元的任何组合。
在执行核心300的操作期间,取得与分派单元302从指令存储库(未图示)获得指 令,对其进行解码并将其作为具有相关联操作数参考或操作数数据的操作码分派到发布 单元304。对于每一指令,发布单元304例如从寄存器堆324获得任何所参考操作数。 当指令的所有操作数准备就绪时,发布单元304通过将操作码和操作数发送到DFMA单 元320或另一功能单元322而发布指令。发布单元304有利地使用操作码来选择适当功 能单元执行给定指令。取得与分派单元302和发布单元304可使用常规微处理器结构和 技术来实施,且省略详细描述,因为对理解本发明并不关键。
DFMA单元320和其它功能单元322接收操作码和相关联操作数并对操作数执行指 定运算。以结果值的形式提供结果数据,所述结果值可经由数据传递路径326转发到寄 存器堆324 (或另一目的地)。在一些实施例中,寄存器堆324包含具有分配到特定线程 的区段的局部寄存器堆和允许在线程之间共享数据的全局寄存器堆。寄存器堆324可用 于存储在程序执行期间的输入数据、中间结果等。寄存器堆324的特定实施方案对本发 明并不关键。
在一个实施例中,核心300多线程化且可(例如)通过维持与每一线程相关联的当 前状态信息而同时执行至多达最大数目(例如,384、 768)的线程。核心300有利地经 设计以从一个线程快速切换到另一线程,使得(例如)来自顶点线程的程序指令可在一 个时钟循环上发布,之后是来自不同顶点线程或来自不同类型的线程(例如,几何线程 或像素线程等)的程序指令。
将了解,图3的执行核心是说明性的,且可能作出变化和修改。任何数目的核心可 包含在处理器中,且任何数目的功能单元可包含在一核心中。取得与分派单元302和发 布单元304可实施任何所需微结构,(视需要)包含具有按序或无序指令发布的标量、超标量或向量结构;推测性执行模式;单指令多数据(SIMD)指令发布等。在一些结 构中,发布单元可接收和/或发布长指令字,其包含用于多个功能单元的操作码和操作数,
或用于一个功能单元的多个操作码和/或操作数。在一些结构中,执行核心可包含可并行 操作(例如)以执行SIMD指令的每一功能单元的多个实例。执行核心还可包含管线功 能单元序列,其中来自一个级中的功能单元的结果转发到稍后级中的功能单元而不是直 接转发到寄存器堆;此配置中的功能单元可由单一长指令字或单独指令控制。
另外,能够使用本发明教示的所属领域的一般技术人员将认识到,DFMA单元320 可实施为任何微处理器中的功能单元,不限于图形处理器或任何特定处理器或执行核心 结构。举例来说,DFMA单元320可实施在通用并行处理单元或CPU中。
C. DFMA单元概述
根据本发明一个实施例,执行核心300包含执行三类操作的DFMA单元320:双精 度算术、比较运算,和双精度与其它格式之间的格式转换。
DFMA单元320有利地处理呈双精度浮点格式(且对于转换操作,呈其它浮点和定 点格式)的输入和输出;用于不同运算的操作数可呈不同格式。在描述DFMA单元320 的实施例之前,将定义代表性格式。
如本文所使用,"fp32"是指标准IEEE 754单精度浮点格式,其中正规浮点数由符 号位、八个指数位和23个有效数位表示。指数向上偏置127使得处于2"26到2|27范围 内的指数使用从1到254的整数来表示。对于"正规"数,23个有效数位解译为一 24 位尾数的小数部分,其中所隐含的1是整数部分。(本文中当隐含前导1时使用术语"有 效数",而"尾数"用于表示(如果适用的话)已使前导1为显式。)
如本文所使用,"fp64"是指标准正EE 754双精度浮点格式,其中正规浮点数由符 号位、11个指数位和52个有效数位表示。指数向上偏置1023使得处于2—1()22到21()23范 围内的指数使用从1到2046的整数来表示。对于"正规"数,52个有效数位解译为一 53位尾数的小数部分,其中所隐含的l是整数部分。
如本文所使用,"fpl6"是指普遍用于图形中的"半精度"浮点格式,其中正规浮点 数由符号位、5个指数位和10个有效数位表示。指数向上偏置15使得处于2—14到215 范围内的指数使用从1到30的整数来表示。对于"正规"数,IO个有效数位解译为一 ll位尾数的小数部分,其中所隐含的l是整数部分。
在fpl6、 fp32和fp64格式中,指数位中全部为零的数字称为非正规化数字(或"非 正规化数(denorm)"),且被解译为尾数中不具有所隐含前导1;此类数字可表示(例如) 计算中的下溢。指数位中全部为一且有效数位中全部为零的数字(正或负)称为(正或负)INF;此数字可表示(例如)计算中的溢出。指数位中全部为一且有效数位中为非 零数字的数字称为不是一个数字(Not a Number, NaN),且可用于(例如)表示未定义 的值。零也被认为是特殊数字且由所有指数和有效数位均设定为零来表示。零可具有任 一符号;因此正和负零两者均是允许的。
本文中通过指示格式为带符号还是不带符号的初始"s"或"u"和表示位的总数的 数字(例如,16、 32、 64)来指定固定点格式;因此,s32表示带符号32位格式,u64 表示不带符号64位格式等等。对于带符号格式,有利地使用二的补码表示形式。在本 文使用的所有格式中,最高有效位(MSB)在位字段中的左侧,且最低有效位(LSB) 在右侧。
应了解,在本文中出于说明的目的界定并参考这些格式,且DFMA单元可能支持这 些格式或不同格式的任何组合,而不脱离本发明的范围。明确地说,应了解,"单精度" 和"双精度"可表示任何两种不同浮点格式,不限于当前定义的标准;双精度格式(例 如,fp64)是指使用比相关单精度格式(例如,fp32)大的数目的位来表示较大范围的 浮点数和/或以较高精度表示浮点值的任何格式。类似地,"半精度"可通常表示使用比 相关单精度格式少的位来表示较小范围的浮点数和/或以较低精度表示浮点数的格式。
现将描述根据本发明的DFMA单元320的实施例。图4是列举可由DFMA单元320 的此实施例执行的双精度算术、比较运算和格式转换操作的表400。
部分402列举算术运算。加法(DADD)将两个fp64输入A和C相加并返回fP64 和A+C。乘法(DMUL)将两个fp64输入A和B相乘并返回fp64积A*B。积和熔加(DFMA) 接收三个fp64输入A、 B和C并计算A*B+C。运算为"熔加",因为积A*B在加上C 之前不舍入;使用准确值A*B改进了准确性且遵守浮点算术的即将出现的IEEE 754R 标准。
部分404列举比较运算。最大化运算(DMAX)返回fp64操作数A和B中的较大 者,且最小化运算(DMIN)返回两者中的较小者。二元测试运算(DSET)对双精度操 作数A和B执行若干二元关系测试中的一者并返回指示是否满足所述测试的布尔值。在 此实施例中,可测试的二元关系包含大于(A>B)、小于(A<B)、等于(A = B),和 无序(A B,如果A或B任一者为NaN,那么其为真),以及否定(例如,A#B),和 各种组合测试(例如,A2B、 AoB、 A -B等)。
部分406列举格式转换和舍入运算。在此实施例中,DFMA单元320可将fb64格 式数字转换为呈其它64位或32位格式的数字,或反之亦然。D2F运算将操作数A从fp64 转换为fp32; F2D将操作数A从fp32转换为fp64。 D2I运算将操作数A从fp64转换为
15s64、 u64、 s32和u32格式中的任一者;应了解,不同操作码可用于识别目标格式。I2D 运算将整数操作数C从s64、 u64、 s32和u32格式中的任一者转换为fp64格式;再次应 了解,不同操作码可用于识别源格式。在此实施例中,DFMA单元320支持到或从双精 度格式的所有转换;其它功能单元可执行其它格式转换(例如,fp32与fpl6之间,fp32 与整数格式之间等)。
D2D运算用于将舍入运算,例如IEEE舍入模式应用于fp64操作数。这些运算将fp64 操作数舍入到以fp64格式表示的整数值。在一个实施例中,所支持的D2D运算包含舍 位(向零舍入)、最高限度(向+INF舍入)、最低限度(向-INF舍入)和最近(向上或 向下至最近整数舍入)。
在此实施例中,DFMA单元320不提供对于例如除法、余数或平方根等较高级数学 函数的直接硬件支持。然而,DFMA单元320可用于加速这些运算的基于软件的实施。 举例来说, 一种常用除法方法估计商q-a/b,接着使用t=q*b-a来测试所述估计值。如 果t为零,那么已正确确定商q。如果t不是零,那么使用t的大小来修改所估计的商q, 且重复测试直到t变为零为止。可使用单一DFMA运算(其中,A=q, B=b, C=-a)准 确地计算每一迭代的测试结果t。类似地,对于平方根, 一种常用方法是估计口a"2,接 着计算t=r*r-a以测试所述估计值并在t不是零的情况下修改r。再次,可使用单一 DFMA 运算(其中,A = B=r, C = -a)准确地计算每一迭代的测试结果t。
部分II和III描述可执行图4所示的所有运算的DFMA单元320。部分II描述DFMA 单元320的电路结构,且部分III描述可如何使用所述电路结构来执行图4中列举的运 算。应了解,本文描述的DFMA单元320是说明性的,且可能使用电路区块的适当组合 支持其它或不同的功能组合。
II. DFMA单元结构
图5是根据本发明一实施例支持图4所示的所有运算的DFMA单元320的简化框图。 在此实施例中,DFMA单元320实施用于所有运算的多级管线。在每一处理器循环上, DFMA单元320可经由操作数输入路径502、 504、 506接收(例如,从图3的发布单元 304)三个新操作数(AQ、 BQ、 C。),并经由操作码路径508接收指示待执行的运算的操 作码。在此实施例中,运算可以是图4所示的任何运算。除了运算外,操作码还有利地 指示操作数的输入格式以及用于结果的输出格式,其可能或可能不与输入格式相同。应 注意,图4所示的运算可具有与其相关联的多个操作码;例如,对于具有s64输出的D21 可存在一个操作码,且对于具有s32输出的D2I可存在不同的操作码等。
DFMA单元320穿过其所有管线级处理每一运算,并在信号路径510上产生64位(或对于某些格式转换操作为32位)结果值(OUT)且在信号路径512上产生相应条件 码(COND)。这些信号可传播(例如)到如图3所示的寄存器堆324,传播到发布单元 304,或传播到处理器核心的其它元件,这取决于结构。在一个实施例中, 一个管线级 对应于一个处理器循环;在其它实施例中, 一级可包含多个处理器循环。另外,管线内
的不同路径有利地并行操作。
部分II. A提供DFMA管线的概述,且部分II.B-I详细描述每一部分的电路区块。 A.DFMA管线
可参考DFMA运算期间如何使用电路区块来获得对管线的初始理解。操作数准备区 块514执行操作数格式化(对于尚未呈fp64格式的操作数)和特殊数字检测;操作数准 备区块514还从输入fp64操作数中提取尾数(Am、 Bm、 Cm)、指数(Ae、 Be、 Ce) 和符号位(As、 Bs、 Cs)。在一个实施例中,不存在非法操作数组合;可简单地忽略特 定运算中未使用的任何操作数。
尾数路径516计算尾数Am和Bm的积。并行地,指数路径518使用指数Ae和Be 来确定积A+B与操作数C之间的相对对准,并将操作数C的对准的尾数(C_align)供 应到尾数路径516。尾数路径516将C—align加上积An^Bm,接着正规化结果。基于正 规化,尾数路径516提供对准信号(ALIGNLNORM)回到指数路径518,指数路径518 使用ALIGN—NORM信号连同指数Ae、 Be和Ce —起来确定最后结果的指数。
符号路径520从操作数准备区块514接收符号位As、 Bs和Cs,并确定结果的符号。 尾数路径516检测结果为零的情况并将零结果(R—ZERO)以信号通知符号路径520。
输出区段522从尾数路径516接收结果尾数Rm,从指数路径518接收结果指数Re, 并从符号路径520接收结果符号Rs。输出区段522还从操作数准备区块514接收特殊数 字信号(SPC)。基于此信息,输出区段522格式化最后结果(OUT)以递送到输出路径 510上,并在输出路径512上产生条件码(COND)。条件码(其有利地包含比结果少的 位)载运关于结果的性质的一般信息。举例来说,条件码可包含指示结果是否为正、负、 零、NaN、 INF、非正规化数等的位。如此项技术中已知,在随结果提供条件码的情况 下,所述结果的后续消费者有时可使用条件码而不是结果本身来进行其处理。在一些实 施例中,条件码可用于指示运算的执行期间异常或其它事件的发生。在其它实施例中, 可完全省略条件码。
应了解,虽然例如"尾数路径"和"指数路径"等名称可暗示每一路径的各种电路 区块在某些运算(例如,DFMA)期间执行的功能,但可以随运算而定的方式针对多种 用途影响沿着内部数据路径的任一者的电路区块。下文描述实例。除了数据路径外,DFMA单元320还提供控制路径,图5中由控制区块530表示。 控制区块530接收操作码并产生本文一般表示为"OPCTL"的各种随操作码而定的控制 信号,其可与穿过管线的数据传播同步而传播到每一电路区块。(图5中未展示0PCTL 信号到各种电路区块中的连接。)如下文所描述,OPCTL信号可用于响应于操作码而启 用、停用和以另外方式控制DFMA单元3220的各种电路区块的操作,使得可使用相同 管线元件执行不同操作。本文提及的各种OPCTL信号可包含操作码本身或(例如)通 过控制区块530中实施的组合逻辑从操作码导出的某一其它信号。在一些实施例中,可 在若干管线级中使用多个电路区块来实施控制区块530。应了解,在给定操作期间提供 到不同区块的OPCTL信号可以是相同信号或不同信号。鉴于本揭示内容,所属领域的 一般技术人员将能够构造适宜的OPCTL信号。
应注意,给定级的电路区块可能需要不同量的处理时间,且特定级处所需的时间可 能依据操作的不同而变化。因此,DFMA单元320还可包含各种定时和同步电路(图5 中未展示)以控制不同路径上数据从一个管线级到下一管线级的传播。可使用任何适当 的定时电路(例如,锁存器、传输门等)。
A.操作数准备
图6是根据本发明一实施例的操作数准备区块514的框图。操作数准备区块514接 收输入操作数A、 B和C并将尾数部分(Am、 Bm、 Cm)提供到尾数路径516,将指数 部分(Ae、 Be、 Ce)提供到指数路径518,并将符号位(As、 Bs、 Cs)提供到符号路径 520。
操作数A、 B和C在各自NaN检测区块612、 614、 616和各自绝对值/负值区块618、 620、 622处被接收。每一 NaN检测区块612、 614、 616确定所接收的操作数是否为NaN (指数位中全部为一,且有效数位中为非零数字)并产生相应控制信号。
绝对值/负值区块618、 620、 622可用于响应于OPCTL信号(未明确展示)反转操 作数的符号位。举例来说,图4中列举的运算的任一者可能指定将使用操作数的负值或 操作数的绝对值。区块618、 620、 622可反转符号位以将操作数取负值或迫使符号位变 为非负状态(对于IEEE 754格式为零)。如果输入操作数为NaN,那么适当绝对值/负值 区块618、 620、 622还"安定"NaN (例如,通过将有效数的前导位设定为1),从而保 持符号位。绝对值/负值区块618、 620、 622将其各自输出提供到操作数选择多路复用器 632、 634、 636。
对于双精度算术,可直接使用由绝对值/负值区块618产生的操作数A、 B和C。对 于比较运算,A/B比较电路624将操作数A与B进行比较。在一个实施例中,绝对值/
18负值电路620将操作数B取负值,且A/B比较电路624计算A与-B的和,如同其是定 点数一样。如果结果为正,那么A大于B;如果结果为负,那么A小于B;如果结果为 零,那么A等于B。 A/B比较电路624还可从NaN检测电路612和614接收NaN信息 (这些路径在图6中未明确展示)。如果A或B (或两者)是NaN,那么A和B"无序"。 将结果信息提供到控制逻辑630。控制逻辑630将结果信息作为信号R—TEST提供到输 出区段522,并且还将控制信号提供到操作数选择多路复用器632、 634、 636。
对于格式转换操作数,输入可能不呈fp64格式。fp32提取电路626在F2D运算期 间有效。fp32提取电路626接收操作数A并对于非正规fp32输入执行所有测试。fp32 提取电路626还将所接收操作数的有效数字段从23位扩展到52位(例如,通过加上尾 随零)。fp32提取电路626将8位fp32指数扩展到11位,且将指数偏置从127增加到 1023 (例如,通过将896加上fp32指数)。
不带符号/带符号(U/S)提取电路628在I2D运算期间有效。U/S提取电路628接 收呈u32、 s32、 u64或s64格式中的任一者的固定点操作数C,并将其准备好以转换为 fp64。 U/S提取电路628将固定点操作数从1的补码(或2的补码)形式转换为符号-量 值形式,并预备或附加零以对准有效数字段中的操作数。U/S提取电路628将其输出作 为I2D输入信号提供到操作数选择多路复用器636,且还提供到指数路径518。
操作数选择多路复用器632、 634、 636响应于来自控制逻辑630的信号以选择操作 数A、 B和C。操作数选择多路复用器632在来自绝对值/负值电路618的操作数A与常 数值O.O和1.0 (以fp64格式表达)之间进行选择。对于DMUL和DFMA运算,选择操 作数A。对于DMIN (DMAX)运算,如果A〈B (A>B),那么选择操作数A;否贝ij, 选择1.0。对于DADD和I2D运算,选择O.O。
操作数选择多路复用器634在来自绝对值/负值电路620的操作数B与常数值0.0和 1.0 (以fp64格式表达)之间进行选择。对于DMUL和DFMA运算,选择操作数B。对 于DMIN (DMAX)运算,如果B〈A (B>A),那么选择操作数B;否则,选择1.0。 对于DADD和I2D运算,选择O.O。
操作数选择多路复用器636在来自绝对值/负值电路622的操作数C、来自fp32提 取电路626的所提取fp32值、来自U/S提取电路628的所提取不带符号或带符号整数 值与常数值O.O (以fp64格式表达)之间进行选择。对于DADD和DFMA运算,选择 操作数C。对于DMUL和比较运算,选择常数0.0。对于F2D运算,选择来自fp32提 取电路626的所提取fp32值,且对于I2D运算,选择来自U/S提取电路628的所提取 u/s值。
19636选择的操作数A、 B和C提供到特殊数字检测 电路638、 640、 642。对于fp64操作数,特殊数字检测电路638、 640、 642检测所有特 殊数字条件,包含非正规化数、NaN、 INF和零。对于F2D运算,特殊数字检测电路642 经由路径644从fp32提取电路626接收fp32特殊数字信息。每一特殊数字检测电路638、 640、 642产生特殊数字信号(SPC),其指示操作数是否为特殊数字,且如果是,那么 为何种类型。特殊数字信号SPC在信号路径524上提供到输出区段522,如图5所示。 可使用一般常规设计的特殊数字检测逻辑。在一个替代实施例中,不在电路638、 640、 642中重复NaN检测(由电路612、 614和616执行);事实上,每一特殊数字检测电路 638、 640、 642从NaN检测电路612、 614和616的相应一者接收NaN信号,并使用所 述信号来确定操作数是否为NaN。
不管是否检测到任何特殊数字,特殊数字检测电路638、 640和642将操作数分离 为尾数、指数和符号位。特殊数字检测电路638将操作数A的尾数部分(Am)提供到 尾数路径516 (图5),将操作数A的指数部分(Ae)提供到指数路径518,并将符号位 (As)提供到符号路径520。特殊数字检测电路640将操作数B的尾数部分(Bm)提供 到尾数路径516,将操作数B的指数部分(Be)提供到指数路径518,并将符号位(Bs) 提供到符号路径520。特殊数字检测电路642将操作数C的尾数部分(Cm)和指数部分 (Ce)提供到指数路径518,并将符号位(Cs)提供到符号路径520。在一些实施例中, 特殊数字检测电路638、 640、 642将前导1附加到尾数Am、 Bm、 Cm (数字为非正规 化数的情况除外)。
B.指数路径
图7是根据本发明一实施例的指数路径518的框图。
指数计算电路702从操作数准备区块514 (图5)接收指数位Ae、 Be和Ce,并计 算0 厘八结果八*8+(:的区块指数。可使用常规指数计算电路。在一个实施例中,如果 所有操作数均为正规数字,那么指数计算电路将Ae与Be相加并减去fp64指数偏置 (1023)以确定积A+B的指数,接着选择积指数和指数Ce中的较大者作为DFMA结果 的区块指数(BLE)。将此区块指数BLE提供到下游最终指数计算电路704。如果一个 或一个以上操作数为非正规的(如由特殊数字信号SPC指示),那么可使用适当逻辑来 确定区块指数BLE。在其它实施例中,在输出区段522中处理涉及特殊数字的运算的指 数确定,如下文所描述。
另外,指数计算区块702确定为了使Cm与积Am*Bm对准操作数C的尾数将有效 左移或右移的量。此量作为Sh—C控制信号提供到移位电路706。此控制信号有利地说
20明Cm的额外填充以使得有效左移或右移可始终通过右移Cm来实现。
尾数Cm提供到负值电路708,所述负值电路708在C与积A*B之间存在相对减号 的情况下有条件地将Cm取负值(例如,使用1的补码负值)。相对减号在如下文所描 述的符号路径520上检测到,且符号控制信号SignCTL指示是否存在相对减号。负值电 路708的输出(Cm或 Cm)提供到移位电路706。
在一个实施例中,移位电路706是可将54位尾数Cm右移至多达157位的217位 桶形移位器;Sh一C信号决定右移Cm的量。尾数Cm有利地以对准进入移位器,使得可 如同所需那样远地右移Cm。选择217位大小以允许有足够的空间将53位尾数Cm (加 上保护位和舍入位)完全对准到106位积八*8 (加上积的保护位和舍入位)的左侧或完 全对准到其右侧,所述106位积A*B将以55位对准到217位字段的MSB的右侧。可 丢弃右移离开桶形移位器的任何位。在其它实施例中,使用旗标位跟踪是否所有右移离 开桶形移位器的位均为"1",且此信息可用于下文描述的舍入运算中。
在替代实施例中,常规交换多路复用器可用于在积Am*Bm与Cm之间选择较大操 作数,接着将较小操作数右移。
对于D2D运算,尾数Cm还被提供到D2D逻辑电路710。 D2D逻辑电路710接收 尾数Cm、指数Ce和符号Cs并应用整数舍入规则。在一个实施例中,D2D逻辑电路710 基于指数Ce确定二元点的位置,接着基于OPCTL信号(未明确展示)应用选定的舍入 规则。可使用用于实施舍入模式的常规逻辑,且可支持舍入模式的任何组合,包含(但 不限于)舍位、最高限度、最低限度和最近模式。
选择多路复用器712从U/S提取电路628 (图6)接收经移位尾数C—Shift、 D2D逻 辑电路输出和I2D输入,并基于OPCTL信号选择这些输入中的一者作为待供应到尾数 路径516的经对准尾数Cjlign。对于双精度算术和比较运算,选择操作数C—Shift。对 于格式转换D2D或I2D,选择适当的替代输入。
下溢逻辑713经配置以检测fp64和fp32结果中的潜在下溢。对于除D2F运算以外 的运算,下溢逻辑713确定11位fp64区块指数BLE是否为零或足够接近零以使得可能 实现非正规化结果。基于区块指数,下溢逻辑713确定尾数在指数达到零之前可左移的 位的最大数目。将此数字作为8位下溢信号U_fp64提供到尾数路径516 (见图8)。对 于D2F运算,将指数视为8位fp32指数,且下溢逻辑713确定所允许的最大左移。将 此数字作为8位下溢信号U一 fp32提供到尾数路径516。
指数路径518还包含最终指数计算逻辑电路704。区块指数BLE提供到减法电路 720。还提供到减法电路720的是来自尾数路径516的区块移位信号(BL—Sh)。如下文
21所描述,BL—Sh信号反映当积Am*Bm加上操作数C—align时MSB的消去效果。减法电 路720从BLE减去BL—Sh以确定差EDIF。下溢/溢出电路722检测减法结果EDIF中的 下溢或溢出。加1电路724将1加上结果EDIF,且基于下溢/溢出条件,多路复用器720 在EDIF与EDIF+1信号之间选择作为结果指数Re。结果Re和下溢/溢出信号(U/O) 提供到输出区段522。 C.尾数路径
图8是根据本发明一实施例的尾数路径516的框图。尾数路径516对操作数A、 B 和C的尾数执行积与和运算。
53x53乘法器802从操作数准备区块514 (上文所描述)接收尾数Am和Bm,并计 算106位积Am*Bm。积提供到168位加法器804,所述168位加法器804还接收经对 准尾数Cjlign。由桶形移位器706使用的217位字段的尾随位可丢弃,或可保留指示 尾随位为非零还是全部为l的旗标位。加法器804产生和与 和(和的2的补码)输出。 多路复用器806基于和的MSB (符号位)在和与 和之间进行选择。选定的和(S)提 供到零检测电路814并提供到左移电路816。零检测电路814确定选定的和S是否为零 并将相应R一ZERO信号提供到符号路径520。
尾数路径516还正规化和S。使用前导零检测(LZD)电路808、 810并行地对和与 ~和两者执行前导零检测。每一 LZD电路808、 810产生指示其输入中的前导零的数目 的LZD信号(Zl、 Z2)。 LZD多路复用器812基于和的MSB (符号位)选择相关LZD 信号(Zl或Z2)。如果多路复用器806选择和,那么选择Z2,且如果多路复用器806 选择 和,那么选择Zl。选定的LZD信号作为区块移位信号BL—Sh提供到指数路径518, 在指数路径518处其被用于如上所述调节结果指数。
正规化逻辑818选择确定和S的正规化移位的左移量Lshift。对于正规数结果,左 移量有利地足够大以将前导1移出尾数字段,从而留下52位有效数(加上保护和舍入 位)。然而,在一些情况下,结果是应表达为fp64或fp32非正规化数的下溢。在一个实 施例中,对于除D2F以外的运算,除非BL^Sh大于下溢信号l^fp64,否则正规化逻辑 818从LZD多路复用器812选择输出BL—Sh,在BL_Sh大于下溢信号U—fp64的情况下, 正规化逻辑818选择U_fp64作为左移量。对于D2F运算,正规化逻辑818使用fp32下 溢信号U_fp32来限制左移量Lshift。
左移电路816将和S左移所述量Lshift。结果Sn提供到舍入逻辑820,提供到加1 加法器822并提供到尾数选择多路复用器824。舍入逻辑820有利地实施针对IEEE标 准算术界定的四个舍入模式(最近、最低限度、最高限度和舍位),其中不同模式可能选择不同结果。OPCTL信号或另一控制信号(未图示)可用于指定舍入模式中的一者。 基于舍入模式和经正规化和Sn,舍入逻辑820确定选择结果Sn还是由加1加法器822 计算的Sn+l。选择多路复用器824通过选择适当结果(Sn或Sn+l)来响应于来自舍入 逻辑820的控制信号。
多路复用器824选择的结果传递到格式化区块826。对于具有浮点输出的运算,区 块826将尾数Rm提供到输出区段522。和S有利地为至少64位宽(以支持整数运算), 且还可通过格式化区块826来去除无关的位。对于D2I运算(其具有整数输出),格式 化区块826将结果分离为含有LSB的52位int—L字段以及含有MSB的11位int—M字 段。将Rm、 int—L和int—M递送到输出区段522。
D.符号路径
图9是根据本发明一实施例的符号路径520的框图。符号路径520从操作数准备区 块514 (图5)接收操作数的符号As、 Bs和Cs。符号路径520还从尾数路径516接收 零结果信号R一Zero,并接收指示进行中的运算的类型的OPCTL信号,以及从操作数准 备区块514接收特殊数字信号SPC。基于此信息,符号路径520确定结果的符号并产生 符号位Rs。
更明确地说,符号路径520包含积/和电路902和最终符号电路904 。积/和电路902 从操作数准备区块514接收操作数A、 B和C的符号位As、 Bs和Cs。积/和电路902 使用符号位As和Bs以及常规符号逻辑规则确定积A*B的符号(Sp),接着将积的符号 与符号位Cs进行比较以确定积与操作数C具有相同符号还是相反符号。基于此确定, 积/和电路904对SignCTL信号进行断言或解除断言,所述SignCTL信号被递送到最终 符号电路904并递送到指数路径518 (图7)中的负值区块708。此外,如果积与操作数 C具有相同符号,那么最后结果也将具有所述符号;如果积与操作数C具有相反符号,
那么结果将取决于哪一个更大。
最终符号电路904接收确定最终符号所需的所有信息。明确地说,最终符号电路904
从积/和电路902接收符号信息,包含积的符号Sp和SignCTL信号,以及接收符号位 As、 Bs禾nCs。最终符号电路904还从尾数路径516接收零检测信号R_ZERO,并从操 作数准备区块514接收特殊数字信号SPC。最终符号电路904还从尾数路径516上的加 法器804接收和的MSB,其指示和为正还是负。
基于此信息,最终符号电路904可使用常规符号逻辑来确定结果的符号位Rs。举例 来说,对于DFMA运算,如果符号位Sp与Cs相同,那么结果也将具有所述符号。如 果Sp与Cs为相反符号,那么尾数路径516中的加法器804计算(An^Bm)-C—align。如果Am*Bm大于C_align,那么加法器804将计算正结果和,且应选择积符号Sp;如果 Am*Bm小于C一align,那么加法器804将计算负结果和,且应选择符号Cs。加法器804 的和输出的MSB指示结果的符号且可用于驱动选择。如果结果和为零,那么断言 R一ZERO信号,且最终符号电路904可视需要选择任一符号(零在fp64格式中可为正或 负)。对于其它运算,最终符号电路904可通过一个或另一操作数的符号作为最终符号。
E. 输出区段
图10是根据本发明一实施例的DFMA单元320的输出区段522的框图。 输出多路复用器控制逻辑1002从指数路径518 (图7)接收下溢/溢出(U/O)信号, 从操作数准备区块514 (图6)接收R一test和SPC信号,以及指示进行中的运算的类型 的OPCTL信号。基于此信息,输出多路复用器控制逻辑1002产生针对有效数选择多路 复用器1004和指数选择多路复用器1006的选择控制信号。输出多路复用器控制逻辑 1002还产生可指示(例如)溢出或下溢、NaN或其它条件的条件码信号COND。在一 些实施例中,条件码还用于在DSET运算期间以信号通知布尔结果。
有效数选择多路复用器1004从尾数路径516接收结果有效数Rm和一整数输出的 多达52位(在D2I运算期间使用),以及若干特殊值。在一个实施例中,特殊值包含 一的52位字段(用于表达D2I运算的最大64位整数);零的52位字段(在0.0或1.0 为结果的情况下使用)52位字段0x0—0000—8000_0000 (用于表达D2I运算的最小32 位整数);具有前导1的52位字段(用于表示内部产生的安定NaN); maxjnt32值,例 如0x7fff—ffff—ffff—ffff (用于表达D2I运算的最大32位整数);安定的NaN值(用于通 过来自操作数准备区块514的为NaN的输入操作数);以及min_denorm值,例如最后 位位置中的1 (用于下溢)。依据运算以及操作数或结果的任一者是否为特殊数字,可选 择输入中的任一者。
指数选择多路复用器1006从指数路径518接收结果指数Re和多达11整数位(整 数格式输出的MSB),以及若干特殊值。在一个实施例中,特殊值包含Ox3ff (fp64中 l.O的指数)、0x000 (非正规化数和0.0的指数)、0x7fe (正规化数字的最大fp64指数) 以及0x7ff (用于fp64 NaN或INF结果)。依据运算以及操作数或结果的任一者是否为 特殊数字,可选择输入中的任一者。
串联区块1008接收符号位Rs、由多路复用器1004选择的有效数位和由多路复用器 1006选择的指数位。串联区块1008将结果格式化(例如,依据IEEE754标准,按符号、 指数、有效数的次序)并提供64位输出信号OUT。
F. 操作数绕过或通过路径在一些实施例中,DFMA单元320提供允许操作数在未修改的情况下传播穿过各种 电路区块的绕过或通过路径。举例来说,在一些运算期间,乘法器802将输入(例如, Am)乘以1.0,从而有效地通过输入Am。不同于将Am乘以1.0,可提供围绕乘法器 802的用于输入Am的绕过路径。绕过路径有利地消耗与乘法器802相同数目的时钟循 环,使得Am在正确时间到达到加法器804的输入。但乘法器802当其被绕过时可设定 为无效或低功率状态,借此减少功率消耗以换取电路面积的较小增加。同样,在一些运 算期间,加法器804用于将零加上输入(例如,C—align),从而有效地通过输入C—align。 不同于将零加上C—align,可提供围绕加法器804的用于输入C一align的绕过路径,尤其 对于事先知道多路复用器806应选择加法器804的和与-和输出中的哪一者的运算;输 入C一align可被绕到和与 和路径中的正确一者上。再次,绕过路径有利地消耗与加法器 804相同数目的时钟循环,使得定时不受影响,但功率消耗可减少,因为加法器804可 针对绕过其的运算置于无效或低功率状态。
因此,部分III(下文)中的运算描述可参考被绕过或通过到达特定电路区块的各种 操作数;应了解,这可通过以下方式实现控制任何介入电路区块以执行不影响操作数 的运算(例如,加上零或乘以l.O),使得到区块的输入作为输出或借助使用绕过路径而 被通过。此外,遵循围绕某些电路区块的绕过或通过路径不一定需要在后续电路区块处 继续遵循绕过路径。另外,在一个电路区块中修改的值可遵循围绕后续电路区块的绕过 路径。在运算期间绕过特定电路区块的情况下,所述电路区块可设定为无效状态以减少 功率消耗,或允许例如通过使用选择多路复用器或其它电路元件使其输出被忽略的情况 下正常操作。
将了解,本文描述的DFMA单元是说明性的,且可能作出变化和修改。本文描述的 许多电路区块提供常规功能,且可使用此项技术中已知的技术实施因此,已省略对这 些区块的详细描述。可修改运算电路至区块的划分,且可组合或改变区块。另外,还可 修改或改变管线级的数目和特定电路区块或运算到特定管线级的指派。针对特定实施方 案的电路区块的选择和指派将取决于所支持的运算组,且所属领域的技术人员将认识 到,并非每个可能的运算组合都需要本文描述的所有区块。
III. DFMA单元运算
DFMA单元320有利地影响上述电路区块而以区域有效方式支持图4中列举的所有 运算。因此,DFMA单元320的运算在至少一些方面取决于正执行哪一运算。以下部分 描述使用DFMA单元320执行图4中列举的运算的每一者。
应注意,在DFMA单元320内处理浮点异常(包含,例如溢出或下溢情形),而不需要额外处理循环。举例来说,在图5的操作数准备区块514中检测到其中输入操作数 为NaN或其它特殊数字的运算,且在输出区段522中选择适当的特殊数字输出。当在运 算过程中发生NaN、下溢、溢出或其它特殊数字的情况下,检测所述情形且在输出区段 522中选择适当的特殊数字输出。 A.积和熔加(DFMA)
对于DFMA运算,DFMA单元320接收呈fp64格式的操作数A0、 BO禾卩C0,以及 指示将执行DFMA运算的操作码。NaN电路612、 614、 616确定选定操作数中的任一 者是否为NaN。绝对值/负值电路618、 620、 622视需要针对每一操作数将符号位取负 值(或不这样做)。操作数选择多路复用器632、 634和636选择绝对值/负值电路618、 620、 622的各自输出并将那些输出提供到特殊数字检测电路638、 640、 642。特殊数字 检测电路638、 640和642确定每一操作数是否为特殊数字且在路径524上产生适当的 特殊数字SPC信号。特殊数字检测电路638、 640和642将尾数Am、 Bm和Cm (对于 正规数字附加有前导1,且对于非正规化数附加有前导零)提供到尾数路径516,将指 数Ae、 Be和Ce提供到指数路径518,并将符号位As、 Bs和Cs提供到符号路径520。
A/B比较电路624、fp32提取电路626和U/S整数提取电路628不用于DFMA运算, 且这些电路可视需要设定为无效或低功率状态。
在信号路径520上,积/和电路902从符号位As和Bs确定积A*B为正还是负,且 将积的符号Sp与符号位Cs进行比较。如果积与Cs具有相反符号,那么断言SignCTL 信号以指示相反符号;如果积与Cs具有相同符号,那么将SignCTL信号解除断言。
在指数路径518 (图7)上,指数计算区块702接收指数Ae、 Be禾口 Ce。指数计算 区块702将指数Ae和Be相加以确定积A*B的区块指数,接着选择积区块指数和指数 Ce中的较大者作为结果区块指数BLE。指数计算区块702还从积区块指数和指数Ce中 的较大者减去两者中的较小者并产生相应移位控制信号Sh—C。下溢逻辑713检测区块 指数BLE是否对应于下溢或潜在下溢并产生下溢信号U—fp64。 (U—fp32信号在DFMA 运算期间不使用。)
负值区块708从操作数准备区块514接收尾数Cm,并从信号路径520接收SignCTL 信号。如果SignCTL信号经断言,那么负值区块708反转尾数Cm以说明相对减号,并 将经反转Cm提供到移位电路706。否则,负值区块708将Cm在不修改的情况下提供 到移位电路706。
移位电路706将由负值区块708提供的尾数Cm右移对应于移位控制信号Sh_C的 量,并将经移位C—Shift尾数提供到选择多路复用器712。选择多路复用器712选择经移
26数作为操作数C—align提供到尾数路径516。
在尾数路径516 (图8)中,乘法器802计算106位积Am*Bm并将积提供到168 位加法器804。乘法器802的运算可与指数计算区块702的运算并行发生。
加法器804从指数路径518的选择多路复用器712接收操作数C—align,并将输入 An^Bm和C一align相加以确定和与 和。基于和的MSB,多路复用器806选择输出中的 一者作为最终和。如果和为正(MSB零),那么选择和,而如果和为负(MSB —),那 么选择 和。LZD电路808和810分别确定~和与和中的前导零的数目多路复用器812 选择LZD输出中的一者作为所述前导零数目,并将前导零信号BL一Sh提供到指数路径 518且提供到正规化逻辑818。
多路复用器806选择的最终和S还提供到零检测电路814。如果最终和为零,那么 零检测电路814向符号路径520断言R—ZERO信号;否则,不断言R—ZERO信号。
除非U一fp64信号指示下溢,否则正规化逻辑818选择前导零信号作为正规化信号 Lshift;在l^fp64信号指示下溢的情况下,尾数仅移位到对应于指数1的点,使得以非 正规化形式表达结果。移位电路816响应于Lshift信号将选定的和S左移以产生正规化 和Sn。加1加法器822将1加上正规化和Sn。舍入逻辑820使用舍入模式(由OPCTL 信号指定)和正规化和Sn的LSB (路径821上)来确定是否应上舍入所述正规化和。 如果是,那么舍入逻辑820控制选择多路复用器824从加法器822选择输出Sn+1;否则, 选择多路复用器824选择正规化和Sn。选择多路复用器824将选定结果Rm提供到输出 区段522。在一些实施例中,选择多路复用器824从结果尾数丢弃前导位(对于正规数 字为1)。
与舍入运算并行,指数路径518 (图7)计算结果指数Re。明确地说,减法区块720 从指数计算区块702接收区块指数BLE,并从尾数路径516接收区块移位信号BL_Sh。 减法区块720将其两个输入相减并将结果EDIF提供到下溢/溢出逻辑722、加1加法器 724和选择多路复用器726。下溢/溢出逻辑722使用结果的MSB确定是否己发生下溢或 溢出,并产生反映下溢或溢出的存在或不存在的U/0信号。基于U/0信号,选择多路 复用器726在减法结果EDIF与加I加法器724的输出之间进行选择。将选定值作为结 果指数Re并连同U/O信号一起提供到输出区段522。
与舍入运算并行,符号路径520 (图9)中的最终符号电路904基于由积/和电路902 确定的符号、从尾数路径516接收的R_ZERO信号及和的MSB,以及从操作数准备区 块514接收的特殊数字SPC信号而确定最终符号Rs。
输出区段522 (图10)从尾数路径516接收结果尾数Rm,从指数路径518接收结果指数Re,并从符号路径520接收结果符号Rs,以及从操作数准备区块514接收特殊 数字SPC信号,和从指数路径518接收U/0信号。基于SPC和U/0信号,输出多路复 用器控制逻辑1002产生用于有效数多路复用器1004的控制信号和用于指数多路复用器 1006的控制信号。输出多路复用器控制逻辑1002还产生例如指示结果为溢出、下溢还 是NaN的各种条件码COND。
有效数多路复用器1004选择有效数Rm用于正规数和非正规化数。对于下溢,选 择零或min—denorm有效数,这取决于舍入模式。对于溢出(INF),选择有效数 0x0—0000—0000—0000。在任何输入操作数为NaN的情况下,选择安定的NaN有效数。 如果在运算期间产生NaN,那么选择内部(安定)NaN尾数0x8—0000—0000。
指数多路复用器1006选择结果指数Re用于正规数。对于非正规化数和下溢,选择 指数0x000。对于INF或NaN,选择最大指数0x7ff。
串联区块1008接收选定有效数和指数及符号Rs并产生最终fp64结果OUT。可视 需要设定条件码。
应注意,DFMA单元320在相同数目的循环中完成所有DFMA运算,而不管溢出 还是下溢。DFMA单元320还根据IEEE 754标准针对浮点算术实施预期默认溢出/下 行为返回适当的结果OUT,且设定状态旗标(在条件码COND中)以指示溢出/下溢 条件。在一些实施例中,可实施用户定义的陷阱以处理这些情形;条件码COND可用于 确定是否应发生陷阱。
B. 乘法
乘法(DMUL)可与上述DFMA运算相同地实施,其中操作数C设定为零;DFMA 单元320接着计算A*B+0.0。在一个实施例中,当操作码指示DMUL运算时,选择多路 复用器636 (图6)可用于以fp64零值代替输入操作数C。
C. 加法
加法(DADD)可与上述DFMA运算相同地实施,其中操作数B设定为1.0; DFMA 单元320接着计算A*1.0+C。在一个实施例中,当操作码指示DADD运算时,选择多路 复用器634 (图6)可用于以fp64 l.O值代替输入操作数B。
D. 羅AX禾n DMIN
对于DMAX或DMIN运算,操作数准备区块514 (图6)接收操作数A和B。 NaN 电路612和614确定选定操作数的任一者或两者是否为NaN。绝对值/负值电路618、620 视需要将符号位取负值(或不这样做)。
A/B比较电路624从绝对值/负值电路618、 620接收操作数A和B并例如通过从A中减去B (如同操作数是整数那样)来执行比较。基于减法,A/B比较电路624产生指 示A大于、小于还是等于B的COMP信号。COMP信号提供到控制逻辑630,其产生 相应R—Test信号且还产生用于选择多路复用器632、 634和636的选择信号。
明确地说,对于DMAX运算,操作数A多路复用器632在A大于B的情况下选择 操作数A,且在A小于B的情况下选择操作数1.0,而操作数B多路复用器634在B大 于A的情况下选择操作数B,且在B小于A的情况下选择操作数1.0。对于DMIN运算, 操作数A多路复用器632在A小于B的情况下选择操作数A,且在A大于B的情况下 选择操作数1.0,而操作数B多路复用器634在B小于A的情况下选择操作数B,且在 B大于A的情况下选择操作数1.0。对于DMAX和DMIN两者,可通过控制多路复用器 632选择操作数A同时多路复用器634选择操作数1.0或通过控制多路复用器632选择 操作数1.0同时多路复用器634选择操作数B来处理A=B的特殊情况。在任何情况下, 操作数C多路复用器636有利地操作以选择操作数0.0。
特殊数字检测电路638、 640和642确定操作数是否为特殊数字并在路径524上产 生适当的特殊数字SPC信号。特殊数字检测电路638、 640和642将尾数Am、 Bm和 Cm(对于正规数附加有前导1,且对于非正规化数附加有前导零)提供到尾数路径516; 将指数Ae、 Be和Ce提供到指数路径518,并将符号位As、 Bs和Cs提供到符号路径 520。
fp32提取电路626和不带符号/带符号整数提取电路628不用于DMAX或DMIN运 算,且这些电路可视需要设定为无效或低功率状态。
尾数路径516、指数路径518和符号路径520如上文针对DFMA运算所描述而操作。 对于DMAX运算,尾数路径516、指数路径518和符号路径520计算max(A,B)* 1.0+0.0; 对于DMIN运算,尾数路径516、指数路径518和符号路径520计算min(A,B)* 1.0+0.0。 因此,对于正规数,Rm、 Re和Rs对应于所需结果的尾数,指数和符号。
输出区段522 (图10)处理特殊数字。明确地说,DMAX和DMIN运算的结果针 对NaN操作数未定义,且结果可设定为NaN值。输出多路复用器控制逻辑1002使用特 殊数字SPC信号来确定结果是否应为NaN;如果是,那么有效数多路复用器1004选择 安定的NaN输入,同时指数多路复用器选择0x7ff。否则,选择结果Rm和Re。可视需 要设定条件码。
在替代实施例中,可绕过尾数路径516、指数路径518和符号路径520的一些或所 有组件;被绕过的组件可置于低功率状态。绕过路径可包含各种延迟电路(锁存器等) 使得所述路径占据与尾数路径516、指数路径518和符号路径520中的最长者相同数目的管线级。这确保DFMA单元320中的所有运算需要完成相同数目的循环,其简化了指 令发布逻辑。 E. DSET
与DMAX和DMIN—样,DSET运算使用操作数准备区块514 (图6)中的A/B比 较电路624。不同于DMAX和DMIN, DSET不返回输入操作数的一者,而是返回指示 是否满足所测试条件的布尔值。
对于DSET运算,操作数准备区块514 (图6)接收操作数A和B。 NaN电路612 和614确定选定操作数中的任一者或两者是否为NaN。绝对值/负值电路618、 620视需 要将符号位取负值。
A/B比较电路624从绝对值/负值电路618、 620接收操作数A和B并例如通过从A 中减去B (如同操作数是整数那样)来执行比较并考虑其各自符号位。基于减法,A/B 比较电路624产生指示A大于、小于还是等于B的COMP信号。COMP信号提供到控 制逻辑630,其产生相应R一Test信号且还产生用于A-多路复用器632、B-多路复用器634 和C-多路复用器636的选择信号。在一个实施例中,由于DSET运算的结果为布尔值, 所以所有三个多路复用器632、 634和636选择零操作数。在另一实施例中,多路复用 器632和634选择操作数A和B;特殊数字检测电路638和640确定操作数是否为特殊 数字并在路径524上产生适当的特殊数字SPC信号。
fp32提取电路626和不带符号/带符号整数提取电路628不用于DSET运算,且这些 电路可视需要设定为无效或低功率状态。
尾数路径516、指数路径518和符号路径520如上文针对DFMA运算所描述而操作, 或者可部分或完全被绕过。任何被绕过的组件可置于低功率状态。如上所述,绕过路径 可包含各种延迟电路(锁存器等)使得所述路径占据与尾数路径516、指数路径518和 符号路径520中的最长者相同数目的管线级。这确保DFMA单元320中的所有运算需要 完成相同数目的循环,其简化了指令发布逻辑。
输出区段522 (图10)处理特殊数字。明确地说,在IEEE 754标准下,如果A或 B (或两者)为NaN,那么A和B为无序的。输出多路复用器控制逻辑1002接收指示 A大于、小于还是等于B的R一Test信号、指示A或B是否为NaN的特殊数字SPC信 号、以及指示所请求的特定测试运算的OPCTL信号。输出多路复用器控制逻辑1002使 用R—Test和SPC信号来确定是否满足所请求的测试。在一个实施例中,DSET运算的结 果提供为条件码,且忽略结果OUT;在所述情况下,输出多路复用器控制逻辑1002设 定条件码COND以指示结果且可任意选择输出OUT的有效数和指数。在另一实施例中,
30可设定输出OUT以反映测试结果,在所述情况下,输出多路复用器控制逻辑1002操作 有效数多路复用器1004和指数多路复用器1006以选择对应于逻辑真的64位值(如果 满足测试)或对应于逻辑假的64位值(如果不满足测试)。 F.格式转换
在一些实施例中,DFMA单元320还支持到和从双精度格式的格式转换操作。现将 描述实例。
1. fp32到fp64 (F2D)
对于F2D运算,将fp32输入操作数A转换为相应fp64数字。适当处理特殊数字输 入;例如将fp32 INF或NaN转换为fp64 INF或NaN。所有fp32非正规化数可转换为fp64 正规化数。
操作数准备区块514 (图6)接收fp32操作数A。绝对值/负值电路618将操作数A 在不修改的情况下传递到fp32提取区块626。 fp32提取区块626执行操作数A到fp64 格式的初始向上转换。明确地说,fp32提取区块626提取8位指数并加上1023-127=896 以产生对于fp64格式具有正确偏置的11位指数。用尾随零填充23位尾数。fp32提取 区块626还确定操作数A是否为fp32特殊数字(例如,INF、 NaN、零或非正规化数), 并将所述信息经由路径644提供到特殊数字检测电路642。 fp32提取区块626还可将操 作数取负值或对操作数应用绝对值。
操作数C多路复用器636选择由fp32提取区块626提供的经向上转换操作数;操 作数A多路复用器632和操作数B多路复用器634选择零操作数。除非操作数为fp32 非正规化数,否则特殊数字检测电路642将前导1预备到尾数。特殊数字检测电路642 还使用由fp32提取区块626提供的特殊数字信息作为其特殊数字SPC信号,只是fp32 非正规化数被识别为正规化数(由于在fp64中,所有fp32非正规化数均可表达为正规 化数)。
尾数路径516和指数路径518如上文针对DFMA运算所描述而操作以在fp64格式 中计算0.0*0.0+C。尾数路径516和指数路径518中的正规化元件使经向上转换的fp64 操作数正规化。在替代实施例中,参看图8,来自指数路径518的经对准尾数C_align 可围绕尾数路径516中的加法器804被绕到多路复用器806的和输入;乘法器802和加 法器804可置于低功率状态。符号路径520有利地通过符号位Cs。
在输出区段522 (图10)中,除非特殊数字SPC信号指示输入操作数为fp32INF、 NaN或零,否则选择经正规化fp64结果(Rm、 Rs、 Re)。如果输入操作数为fp32 INF, 那么输出多路复用器控制逻辑1002操作有效数多路复用器1004选择fp64 INF有效数
31(0x0—0000—0000—0000)且操作指数多路复用器1006选择fp64 INF指数(0x7ff)。如果 输入操作数为fp32 NaN,那么输出多路复用器控制逻辑1002操作有效数多路复用器 1004选择fp64安定NaN有效数且操作指数多路复用器1006选择fp64 NaN指数(0x7ff )。 如果输入操作数为fp32零,那么输出多路复用器控制逻辑1002操作有效数多路复用器 1004选择fp64零有效数(0x0—0000—0000—0000)且操作指数多路复用器1006选择fp64 零指数(0x000)。可视需要设定条件码。 2.整数到fp64 (I2D)
对于I2D运算,将整数(u64、 s64、 u32或s32格式)转换为fp64格式。操作数准 备区块514 (图6)接收64位整数操作数C。对于32位整数格式,可预备32个前导零。 绝对值/负值电路622将操作数C在不修改的情况下传递到U/S提取区块628。 U/S提取 区块628执行操作数C到fp64格式的初始向上转换。明确地说,提取区块628确定操 作数C中前导1的位置(例如,使用优先编码器)。通过将指数字段初始化为1086 (对 应于263)来确定ll位指数。对于32位输入格式,丢弃前导l,且用尾随零填充尾数以 产生52位有效数。对于64位输入格式,尾数视需要舍位到53位,且丢弃前导l。可视 需要保留保护位和舍入位。
U/S提取区块628还确定输入操作数是否为零,并产生用于特殊数字检测电路642 的相应控制信号。其它特殊数字(非正规化数、INF和NaN)在I2D运算期间不发生且 不需要检测。
操作数C多路复用器636选择由U/S提取区块628提供的经向上转换操作数;操作 数A多路复用器632和操作数B多路复用器634每一者选择零操作数。特殊数字检测电 路642使用由U/S提取区块628提供的零信息以产生指示输入操作数是否为零的特殊数 字SPC信号。
尾数路径516和指数路径518如上文针对DFMA运算所描述而操作以计算 0.0*0.0+C。尾数路径516和指数路径518中的正规化元件使经向上转换的fp64操作数 正规化。在替代实施例中,来自指数路径518的经对准尾数C—align可围绕尾数路径516 中的加法器804被绕到多路复用器806的和输入;乘法器802和加法器804可置于低功 率状态。符号路径520有利地通过符号位Cs。
在输出区段522 (图10)中,除非特殊数字SPC信号指示输入操作数为整数零,否 则选择经正规化fp64结果(Rm、 Rs、 Re)。如果输入操作数为整数零,那么输出多路 复用器控制逻辑1002操作有效数多路复用器1004选择fp64零有效数 (0x0—0000—0000—0000)且操作指数多路复用器1006选择fp64零指数(0x000)。可视需
32要设定条件码。
3. fp64至(j fp32 (D2F)
由于fp64比fp32覆盖更大范围的浮点值,所以从fp64转换为fp32 (D2F)需要检 测fp32值中的溢出和下溢。
对于D2F运算,将操作数C提供到操作数准备区块514 (图6)。绝对值/负值电路 622视需要执行绝对值或操作数负值并将操作数C传递到操作数C多路复用器636,操 作数C多路复用器636选择待提供到特殊数字检测电路642的操作数C。特殊数字检测 电路642检测fp64非正规化数、零、INF或NaN并将相应SPC信号提供到输出区段522。 选择多路复用器632和634选择0.0操作数。
在指数路径518(图7)中,指数计算区块702使fp64指数向下偏置897以确定相 应fp32指数。如果fp32指数下溢,那么指数计算区块702产生Sh_C信号,其将使C 的尾数右移以消除下溢(如果需要大于217位的移位,那么C的尾数将变为零)。移位 电路706根据Sh_C信号使C的尾数右移。结果由多路复用器712选择并作为经对准尾 数C—align提供到尾数路径516。下溢逻辑713检测fp32下溢并产生U_fp32信号。
在尾数路径516 (图8)中,乘法器802计算积0.0*0.0 (或被绕过)。加法器804 将积(零)加上尾数Cjlign。多路复用器806选择和结果(由于输入呈符号/量值形式)。 电路814检测零结果;如上文在DFMA运算的上下文中所描述正规化非零结果。舍入逻 辑820可用于确定是否上舍入;应注意,力B 1加法器822将需要将1加上第24位位置 (而不是第53),因为结果将是23位fp32尾数。
输出区段522 (图10)汇编结果。在52位字段Rm中提供23位fp32有效数。除非 结果不是fp32正规化数,否则输出多路复用器控制逻辑1002控制有效数多路复用器 1004选择Rm。对于fp32零或INF,选择零尾数0x0—0000_0000—0000;对于fp32NaN, 选择安定的fp32NaN尾数。对于fp32非正规化数,可使用Rm。
在11位指数字段中提供8位fp32指数。除非结果不是fp32正规化数,否则输出多 路复用器控制逻辑1002控制指数多路复用器1004选择Re。对于fp32非正规化数或零, 选择零指数0x000。对于fp32INF或NaN,选择最大fp32指数0x7ff。
串联区块1008将Rm和Re装填到64位输出字段的31位中并附加符号位Rs。丢弃 11位指数中的3个MSB,如同52位有效数中的29个LSB—样。fp32结果可视需要例 如在64位字段的MSB或LSB中对准。可视需要设定条件码。
4. fp64到整数(D2I)
对于D2I运算,检测溢出和下溢。溢出设定为最大整数值,且下溢设定为零。以fp64格式将待转换的操作数提供为操作数C。绝对值/负值电路622视需要执行 绝对值或操作数负值并将操作数C传递到操作数C多路复用器636,操作数C多路复用 器636选择待提供到特殊数字检测电路642的操作数C。特殊数字检测电路642检测fp64 非正规化数、零、INF或NaN并将相应SPC信号提供到输出区段522。选择多路复用器 632和634选择O.O操作数。
在指数路径518(图7)中,指数计算区块702使用指数Ce确定为了使二元点在整 数位置处对准时Cm应移位的量并产生相应Sh—C信号。在一个实施例中,指数计算区 块702去除指数偏置并说明有效数的宽度、待使用的整数格式,以及32位格式的结果 在64位字段中将如何表示(例如,使用32个MSB或32个LSB)。指数Ce还用于确定 结果在目标整数格式中是否将溢出或下溢;如果是,那么有利地将相应的溢出或下溢信 号(未明确展示)发送到输出区段522 (图10)中的输出多路复用器控制逻辑1002。
移位电路706将Cm移位量C—Shift,且多路复用器712选择C—Shift信号作为C_align 信号。
在尾数路径516 (图8)中,乘法器802将0.0结果提供到加法器804。加法器804 将0.0加上C—align,并依据C为正还是负而选择和或 和。移位器816有利地不使结果 移位。整数格式区块826将结果分离为11位MSB字段int_M和53位LSB字段int_L。
在输出区段522 (图10)中,输出多路复用器控制逻辑1002分别控制有效数多路 复用器1004和指数多路复用器1006选择int—L和int_M结果,在溢出、下溢或特殊数 字操作数的情况下除外。对于溢出,选择输出格式(u32、 s32、 u64或s64)中的最大整 数;对于下溢,选择零。可视需要设定条件码。
IV.另外的实施例
虽然已相对于特定实施例描述本发明,但所属领域的技术人员将认识到,大量修改 是可能的。举例来说,DFMA单元可经实施以支持更多、更少或不同功能组合,并支持 呈任何格式或格式组合的操作数和结果。
本文描述的各种绕过路径和通过路径也可变化。 一般来说,在描述围绕任何电路区 块的绕过路径的情况下,可由所述区块中的识别运算(即,对其操作数没有影响的运算, 例如加上零)替换所述路径。在给定运算期间绕过的电路区块可置于闲置状态(例如, 减少功率状态)或在其结果被下游区块忽略(例如,通过选择多路复用器或其它电路的 操作)的情况下正常操作。
DFMA管线可划分为任何数目的级,且可视需要改变每一级处组件的组合。本文中 归因于特定电路区块的功能性也可在管线级上分离举例来说,乘法器树可能占据多个级。还可修改各种区块的功能性。举例来说,在一些实施例中,可使用不同加法器电路 或乘法器电路。
另外,已依据电路区块描述DFMA单元以促进理解;所属领域的技术人员将认识到, 可使用多种电路组件和布局实施所述区块,且本文描述的区块不限于一组特定组件或物 理布局。区块可视需要在物理上组合或分离。
处理器可包含执行核心中的一个或一个以上DFMA单元。举例来说,在需要超标量 指令发布(即,每循环发布一个以上指令)或SIMD指令发布的情况下,可实施多个 DFMA单元,且不同的DFMA单元可支持不同功能组合。处理器还可包含多个执行核 心,且每一核心可具有其自身的DFMA单元。
在其中执行核心支持SIMD指令发布的一些实施例中,单一 DFMA单元可与适当输 入定序和输出收集逻辑组合使用以允许在单一 DFMA管线中依序处理多个数据集。
图11是根据本发明一实施例包含DFMA功能单元1102的执行核心1100的框图。 DFMA单元1102可与上文描述的DFMA单元320类似或相同。核心1100发布SIMD指 令,意味着具有P组不同单精度操作数的相同指令可并行发布到一组P个单精度SIMD 单元1104。每一 SIMD单元1104接收相同操作码和一组不同操作数;P个SIMD单元 1104并行操作以产生P个结果。P路SIMD指令作为一系列P个单精度、单数据(SISD) 指令发布到DFMA单元1102。
输入管理器1106 (其可以是指令发布单元的一部分)收集SIMD指令的操作数,且 当已收集SIMD指令的所有P组操作数时,将操作数和适用的操作码递送到P个SIMD 单元1104或递送到DFMA单元1102。输出收集器1008从SIMD单元1104或DFMA单 元1102收集结果并将结果经由结果总线1110递送到寄存器堆(图11中未明确展示)。 在一些实施例中,结果总线1110还提供到达输入管理器1106的绕过路径使得结果可与 向寄存器堆的递送并行而递送到输入管理器1106以与后续指令一起使用。为了使用一 个DFMA单元1102提供SIMD行为的表现,输入管理器1106可例如通过在P个连续时 钟循环的每一者上发布相同操作码与一组不同操作数而有利地使向DFMA单元1102的 指令的发布串行化。
图12是展示根据本发明一实施例DFMA单元1102的串行化指令发布的框图。输入 操作数收集单元1202 (其可包含在图11的输入管理器1106中)包含两个收集器1204、 1206。每一收集器1204、 1206是为P个单精度操作数三元组A、 B和C提供充足空间 的32位寄存器的布置;换句话说,每一收集器1204、 1206可存储用于单一SIMD指令 的所有操作数。输入操作数收集单元1202例如从图3的寄存器堆324和/或从图11的结
35果总线1110获得操作数;可使用标记或其它常规技术来确定将对于给定指令收集哪些 操作数。提供足够的收集器1206以允许用于给定指令的操作数在所述指令将被发布的 时间之前若干时钟循环被收集到。
对于单精度指令, 一个收集器(例如,收集器1204)载有P个SIMD单元1104执 行一个指令所需的所有操作数。当指令发布到P个SIMD单元1104时,有利地并行地 读取整个收集器1204,其中向SIMD单元1104的每一者递送不同的A、 B、 C操作数三 元组。
对于到达DFMA单元1102的指令,操作数为双精度(例如,64位)。每一操作数 可使用收集器1204、 1206两者中的相应寄存器来存储;举例来说,收集器1204中的寄 存器1208可存储操作数A的一个实例的32个MSB (例如,符号位、11个指数位和有 效数的20个MSB),而收集器1206中的寄存器1210存储同一操作数的32个LSB (例 如,有效数的剩余32位)。因此可使用两个单精度收集器1204、 1206收集P路双精度 SIMD指令所需的所有操作数三元组A、 B、 C。
核心IIOO仅具有一个DFMA单元1102,且有利地使用输出多路复用器(多路复用 器)1212、 1214依序递送P组操作数,所述输出多路复用器1212、 1214两者由计数器 1216控制。多路复用器1212和1214响应于计数器1216从各自收集器1204和1206中 选择操作数三元组的MSB和LSB。举例来说,在所示的数据路径中,多路复用器1212 可从收集器1204中的寄存器1208中选择操作数A的32个MSB,而多路复用器1214 从收集器1206中的寄存器1210中选择相同操作数A的32个LSB。 64位在双精度宽路 径上递送到DFMA单元1102。类似地,可使用由相同计数器1216控制的相应多路复用 器(未明确展示)将操作数B(来自寄存器1220和1222)和C(来自寄存器1224和1226) 递送到DFMA单元1102。在下一时钟循环上,来自收集器1204和1206中的下一组寄 存器的操作数A、 B和C可递送到DFMA单元1102等等,直到已递送所有P组操作数 为止。
多路复用器1212和1214连同收集器1204和1206 —起为DFMA单元1102提供 SIMD执行的表现(虽然具有减少的处理量)。因此,核心1100的编程模型可假定P路 SIMD执行可用于所有指令,包含双精度指令。
将了解,本文描述的操作数收集和定序逻辑是说明性的,且可能作出变化和修改。 在启用SIMD的核心中,可提供任何数目的DFMA单元,且指令可并行发布到任何数目 的DFMA单元。在一些实施例中,双精度运算相对于单精度运算的处理量随着DFMA 单元的数目縮放。举例来说,如果存在P个SIMD单元和N个DFMA单元,那么双精度处理量将是单精度处理量的N/P。在一些实施例中,N最佳等于P;在其它实施例中, 其它因素(例如,寄存器堆与功能单元之间的内部数据路径的宽度)可将双精度处理量 限制为小于单精度处理量,而不管存在的DFMA单元的数目如何。在所述情况下,N最 佳不大于所允许的其它限制因素。
还应注意,由于DFMA单元与单精度功能单元分离,所以其当不在使用时,例如当 图形处理器或核心正专门用于绘制过程或不需要双精度的其它计算时,可断电。此外, 可从集成电路设计中去除DFMA单元而不影响其它电路组件的操作。这促进了其中不同 芯片提供对双精度运算的不同等级的支持的产品系列的设计。举例来说,GPU系列可能 包含具有许多核心的高端GPU (每一核心包含至少一个DFMA单元),以及不具有基于 硬件的双精度支持且不具有DFMA单元的低端GPU。
此外,虽然已参考图形处理器描述本发明,但所属领域的技术人员将了解,也可在 例如数学协处理器、向量处理器或通用处理器等其它处理器中使用本发明的各方面。
因此,尽管己相对于特定实施例描述本发明,但将了解,本发明希望涵盖在所附权 利要求书范围内的所有修改和等效物。
权利要求
1. 一种图形处理器,其包括适于产生图像数据的绘制管线,所述绘制管线包含适于执行多个同时线程的处理核心,其中所述绘制管线对单精度操作数操作,所述处理核心进一步包含适于对一组双精度输入操作数选择性地执行多个双精度运算中的一者的多用途双精度功能单元,所述多用途双精度功能单元包含至少一个算术逻辑电路,其中所述双精度功能单元的所有所述算术逻辑电路足够宽以在双精度下操作。
2. 根据权利要求1所述的图形处理器,其中所述双精度功能单元进一步经调适使得所 述多个双精度运算的每一者在相同数目的时钟循环中完成。
3. 根据权利要求2所述的图形处理器,其中所述双精度功能单元进一步经调适使得所 述多个双精度运算的每一者在相同数目的时钟循环中完成而不管是否发生溢出或 下溢条件。
4. 根据权利要求3所述的图形处理器,其中所述双精度功能单元进一步适于在确实发 生溢出或下溢条件的情况下产生符合浮点算术标准的溢出或下溢结果,并设定输出 状态旗标以指示是否发生了所述溢出或下溢条件。
5. 根据权利要求1所述的图形处理器,其中所述双精度功能单元进一步经调适使得完 成所述多个双精度运算的任一者所需的时间不受浮点异常的影响。
6. 根据权利要求1所述的图形处理器,其中所述多个双精度运算包含将两个双精度操作数相加的加法运算; 将两个双精度操作数相乘的乘法运算;以及计算第一双精度操作数与第二双精度操作数的乘积,接着将第三双精度操作数加 到所述乘积的积和熔加运算。
7. 根据权利要求6所述的图形处理器,其中所述多个双精度运算进一步包含双精度比 较(DSET)运算,其对第一操作数和第二操作数执行比较测试并产生指示是否满 足所述比较测试的布尔结果。
8. 根据权利要求6所述的图形处理器,其中所述多个双精度运算进一步包含双精度最大化(DMAX)运算,其传回两个双精度输入操作数中的较大一者;以及双精度最小化(DMIN)运算,其传回两个双精度输入操作数中的较小一者。
9. 根据权利要求6所述的图形处理器,其中所述多个双精度运算进一步包含将操作数 从双精度格式转换为非双精度格式的至少一个格式转换操作。
10. 根据权利要求6所述的图形处理器,其中所述多个双精度运算进一步包含将操作数 从非双精度格式转换为双精度格式的至少一个格式转换操作。
11. 一种图形处理器,其包括适于产生图像数据的绘制管线,所述绘制管线包含适于执行多个同时线程的处理 核心,所述处理核心包含适于对一个或一个以上单精度操作数执行算术运算的单精度 功能单元,所述处理核心进一步包含适于对一组双精度输入操作数执行积和熔加运算并提 供双精度结果的双精度积和熔加(DFMA)功能单元,其中所述DFMA功能单元包含DFMA管线,所述DFMA管线具有足够宽的数据 路径以在单次通过所述DFMA管线的过程中执行所述积和熔加运算。
12. 根据权利要求11所述的图形处理器,其中所述DFMA功能单元包含适于在单 一 迭代中计算两个双精度尾数的乘积的乘法器;以及适于在单一迭代中计算两个双精度尾数的和的加法器。
13. 根据权利要求11所述的图形处理器,其中所述DFMA功能单元进一步经配置以对 一对双精度输入操作数执行乘法运算,并提供双精度结果。
14. 根据权利要求13所述的图形处理器,其中所述乘法运算和所述积和熔加运算每一 者在相同数目的时钟循环中完成。
15. 根据权利要求11所述的图形处理器,其中所述DFMA功能单元进一步经配置以对 一对双精度输入操作数执行加法运算,并提供双精度结果。
16. 根据权利要求15所述的图形处理器,其中所述加法运算和所述积和熔加运算每--者在相同数目的时钟循环中完成。
17. 根据权利要求16所述的图形处理器,其中所述DFMA功能单元进一步经配置以对一对双精度输入操作数执行乘法运算, 并提供双精度结果;以及所述积和熔加运算、所述加法运算和所述乘法运算每一者在相同数目的时钟循环 中完成,而不管是否发生溢出或下溢条件。
18. 根据权利要求17所述的图形处理器,其中所述DFMA功能单元进一步经配置以在 发生溢出或下溢条件的情况下产生符合浮点算术标准的溢出或下溢结果,并设定输出状态旗标以指示是否发生了所述溢出或下溢条件。
19. 根据权利要求11所述的图形处理器,其中所述处理核心包含适于并行操作的第一 功能单元的若干(P)副本以及所述DFMA功能单元的若干(N)副本。
20. 根据权利要求19所述的图形处理器,其中所述数目P大于所述数目N。
21. 根据权利要求20所述的图形处理器,其中所述数目N为一。
22. 根据权利要求21所述的图形处理器,其中所述处理核心进一步包含输入管理器电 路,其适于收集用于所述DFMA功能单元的P组双精度输入操作数,且在不同时 钟循环上向所述DFMA功能单元递送所述P组双精度操作数中的不同者。
23. 根据权利要求22所述的图形处理器,其中所述输入管理器电路进一步适于收集用 于所述第一功能单元的P组单精度输入操作数,且并行地向所述第一功能单元的所 述P个副本中的每一者递送所述P组单精度操作数中的一不同者。
全文摘要
除了用于绘制的单精度功能单元外,还将一功能单元添加到图形处理器以提供对双精度算术的直接支持。所述双精度功能单元可使用至少为双精度宽度的数据路径和/或逻辑电路对双精度输入执行若干不同运算,包括积和熔加。所述双精度和单精度功能单元可由共享的指令发布电路控制,且核心中包含的所述双精度功能单元的副本的数目可小于所述单精度功能单元的副本的数目,借此减小添加针对双精度的支持对芯片面积的影响。
文档编号G06T1/20GK101452571SQ20081018250
公开日2009年6月10日 申请日期2008年12月4日 优先权日2007年12月7日
发明者戴维·C·坦嫩鲍姆, 斯图尔特·F·奥伯曼, 明·Y·西乌 申请人:辉达公司