专利名称:支持局部寄存和条件执行的64位浮点整数融合运算群的制作方法
技术领域:
本发明主要涉及到芯片设计中的64位浮点和整数运算群的设计方法领域,特指一种支持局部寄存和条件执行的64位浮点整数融合运算群。
背景技术:
随着计算密集型应用的大量出现,如何有效利用程序中大量的数据并行性成为计算机界的焦点。在众多的计算密集型应用中,媒体流的数据并行性尤为突出。如多媒体、图形图像以及信号处理等,都包含大量数据并行性。针对这种大量的数据并行性应用,产生了很多能够有效的提取这种并行性的体系结构,如向量处理器和SIMD处理器等,这些结构都能够获得很高的性能。斯坦福大学根据流程序的特点提出的SIMD流处理器结构就是这些数据并行结构中的典型代表。流程序模型分为流级和核心级,流级负责主存与流寄存器文件之间的流调度;核心级(kernel)负责流的运算。整个流程序模型就是由流级调度kernel处理一系列串行的流数据的模型。流编程模型中,应用程序由一系列kernel组成,每个kernel消费由前一个kernel产生的流数据并为其后的kernel产生新的数据流。流体系结构就是用来开发对大量不同数据并行进行相同操作的并行性的。
由斯坦福大学研制并已经投片的32位Imagine流处理器芯片,包含8个运算群,每个运算群包含3个加法部件、2个乘法部件和1个倒数/平方根倒数部件。已有的研究表明,在媒体流程序的处理方面,相对于其他处理器结构,Imagine具有明显的优势。但是对于64位运算群的设计却有诸多困难。本发明提出了一种64位的带局部寄存器文件和支持条件执行的浮点/整数融合的运算群设计方法。
发明内容
本发明要解决的技术问题就在于针对现有技术存在的技术问题,本发明提供一种能够有效支持类媒体流计算的64位运算群部件,以满足当前高性能科学计算对计算性能的无限需求,并以简单有效的方式解决大量并行计算中的控制相关引起性能急剧下降问题的支持局部寄存和条件执行的64位浮点整数融合运算群。
为解决上述技术问题,本发明提出的解决方案为一种支持局部寄存和条件执行的64位浮点整数融合运算群,其特征在于它包括一个或者一个以上64位浮点/整数融合的运算部件、用来解决控制相关的条件执行部件、用来实现数据交叉共享的部件互联结构以及控制器,整个LRF地址空间由数个完全独立的地址空间构成,每个运算部件的一个输入对应一个地址空间,所有的运算群不能对其直接寻址,本地的运算群只有通过统一的控制器对每个地址空间进行间接寻址访问;控制器中有专门的指令存储器存储编译好的指令,程序执行时,控制器将编译好的指令按时序要求同时发送给各个运算群的功能部件,各个运算群以SIMD方式接收指令并执行,执行的结果存入每个运算群中相同的LRF中或者进行输出操作。
所述条件执行部件包括控制部件、通信部件和缓冲部件,控制部件负责保存和更新条件执行过程中的各个状态位,协调其他部件共同完成条件执行操作,控制部件将更新的状态位传给通信部件和缓冲部件,通信部件根据获得的信号从其他运算群获得数据,缓冲部件在流缓冲和运算群之间缓冲数据,为条件操作提供缓冲区。
所述运算部件包括浮点乘加部件、浮点杂类部件以及整数算术逻辑单元。
所述运算部件包括求浮点倒数和平方根倒数的DSQ部件,该DSQ部件以查表的方式求出数据的倒数或者平方根倒数,配合软件加以迭代可以根据要求实现高精度的除法或开平方根运算。
与现有技术相比,本发明的优点就在于1、扩充数据宽度。将传统的32位流处理器的处理器的运算结构扩充至64位,合理调整输入输出流的个数,克服了高数据带宽引起的低延迟的缺点,在不影响计算速度的情况下,能够兼容32位流处理器的处理模式,同时有效的支持了64位的科学计算,能够支持更宽的数据宽度。
2、设计64位浮点乘加。改进传统的32位流处理器的2输入的运算部件的结构,采用3输入的64位浮点乘加结构,将一次乘法操作和一次加法操作融合为一次乘加操作提高了运算速度。并且可以将多个64位浮点乘加操作有效的融合在了流处理器的结构框架中,能够按照设计需求提供有效的峰值计算速度。
3、融合多媒体计算。在浮点乘加的内部,在不影响已有结构的前提下,设计完成了多媒体指令的操作,使得该发明能够有效处理8位、16位、32位以及64位的多媒体指令,在进行高数据宽度的科学计算的同时也能够满足低宽度的多媒体程序的要求。
4、条件交叉处理。依附流处理器的传统结构,设计了有效的条件执行部件,以简单有效的方式支持了条件处理,弥补了穿透SIMD结构的缺点,使得使用该发明的处理器能够更有效的处理运算群之间的交叉数据,从而避免了条件执行引起的传统流处理器性能下降的问题。
图1是包含四个运算部件的运算群整体结构示意图;图2是运算群进行一次乘加运算的数据通路示意图;图3是包含四个运算部件的运算群的详细数据通路示意图;图4是8个运算群和控制器的互连关系示意图;图5是FMAC运算部件内部各个子部件的连接关系示意图;图6是条件执行部件的处理实例示意图;图7是条件执行的处理流程示意图。
具体实施例方式
以下将结合附图和具体实施例对本发明做进一步详细说明。
本发明的一种支持局部寄存和条件执行的64位浮点整数融合运算群,它包括一个或者一个以上64位浮点/整数融合的运算部件、用来解决控制相关的条件执行部件、用来实现数据交叉共享的部件互联结构以及控制器,整个LRF地址空间由数个完全独立的地址空间构成,每个运算部件的一个输入对应一个地址空间,所有的运算群不能对其直接寻址,本地的运算群只有通过统一的控制器对每个地址空间进行间接寻址访问;控制器中有专门的指令存储器存储编译好的指令,程序执行时,控制器将编译好的指令按时序要求同时发送给各个运算群的功能部件,各个运算群以SIMD方式接收指令并执行,执行的结果存入每个运算群中相同的LRF中或者进行输出操作。运算群的总体逻辑结构包括一个或者多个64位浮点/整数融合的运算部件、解决控制相关的条件执行部件和数据交叉共享的部件互联结构。
运算部件除了完成双精度浮点的乘加融合计算外还要完成定点数的算术和逻辑操作。从逻辑上运算部件可以分为浮点乘加部件(FMAC)、浮点杂类部件(FMISC)和整数算术逻辑单元(ALU)三个部分。浮点计算指令遵循IEEE-754国际标准,浮点数据采用IEEE双精度格式表示(11位指数,53位尾数,其中包括隐含的打头1)。为了能在运算群内部处理非格式化数据,指数被扩展一位,即指数扩展为12位。
浮点乘加的实质是将加数作为一项部分积,在与乘的结果指数对齐之后累加,然后在求和,而不是乘加分开的两次求和,两次舍入,从而降低关键路径的延时。浮点乘加部件实现的指令主要有浮点乘加指令、浮化整类指令、浮点规格化指令以及融合的8位、16位、32位和64位整数乘法指令;浮点杂类部件实现的指令主要有浮点逻辑类指令和浮点测试类指令。ALU部件实现的指除了通常的SIMD方式的8位、16位、32位和64位多媒体指令外,还增加了整数测试指令,饱和计算指令和数据移动指令,如字节混洗操作,条件路径选择操作等。
浮点乘加部件采用了规格化移位提前、求和与舍入合并的低延迟结构,在支持双精度浮点乘加的基础上,扩充位宽和增加相关单元实现了浮化整、整化浮、浮点规格化和8位、16位、32位和64位定点乘四类指令。整个浮点乘加部件可划分为多个时钟节拍,浮点数或定点数都支持最近偶舍入模式。
此外,为了有效支持除法和平方根的运算,本发明还设计了一个专门的求浮点倒数和平方根倒数的DSQ部件。DSQ部件以查表的方式求出数据的倒数或者平方根倒数,配合软件加以迭代可以根据要求实现高精度的除法或开平方根运算。若双精度浮点数的值小于规格化浮点数可表示的最小值,则根据尾数的舍入情形或将其表示为最小的规格化浮点数、或者直接将该数表示为规格化的+0.0或一0.0,具体操作是保留结果的符号位,而将其指数、尾数部分置为全0,同时报浮点下溢。
条件执行部件能够将控制相关转化为数据路由,解决了大量数据并行中含有的少量控制相关引起的性能急剧下降,扩展了数据并行程序的范围,使得并行运算群能够更有效的执行带控制相关的应用程序。
条件操作可以发生在流数据计算之前,称为条件输入操作;或发生在流数据计算之后,称为条件输出操作。条件输出操作可以对一个流进行筛选,将不同的数据分配到不同的流中,使得每个流中只含有同种类型的数据。虽然产生的不同流可能需要不同的kernel进行处理,但是对每个流中的数据的处理却是相同的。条件输入操作可以对多个流进行合并,将不同的数据数据流合并到同一个流中,使得该流中包含有各种类型的数据。对于条件输出操作来说,条件输入操作是一个互补过程。
条件执行部件分为控制部件、通信部件和缓冲部件。控制部件负责保存和更新条件执行过程中的各个状态位,协调其他部件共同完成条件执行操作。控制部件将更新的状态位传给通信部件和缓冲部件,通信部件根据获得的信号从其他运算群获得数据,缓冲部件在流缓冲和运算群之间缓冲数据,为条件操作提供缓冲区。条件输入操作时,数据首先从流缓冲读入缓冲部件,控制部件根据所有运算群的条件码以及上一次循环的条件状态更新本次条件输入的状态,并发送给其他条件操作部件;通信部件根据控制信号从缓冲部件的相应项读取数据。条件输出操作时,控制信号首先根据条件码和上次循环的条件状态产生当前循环的条件状态并发送出去;通信部件根据控制信号将本地的有效数据存储至缓冲部件的相应项中;然后进行一次数据传输操作将数据写入到流缓冲中。
整个LRF地址空间由多个完全独立的地址空间构成,每个运算部件的一个输入对应一个地址空间,它们在逻辑上是独立的,所有的运算群不能对其直接寻址,本地的运算群只有通过统一的控制器对每个地址空间进行间接寻址访问。本地的运算群没有对各个地址空间的访问指令,所有对地址空间的读写访问操作通过控制器统一控制。对寄存器的写由控制器从运算群的群内总线选择一个数据后写入控制器指定的地址内;对寄存器的读由控制器直接向寄存器发读地址完成,读出的数据直接送给运算部件。LRF以独立的物理和逻辑空间分布于各个运算部件的输入端口,为运算部件缓存输入数据,这样可以增加核心级运算的处理带宽,使得更适合大数据量的处理;加快运算部件的处理速度,不至于由于数据的供应不足而浪费运算单元。
整个运算群内部的所有的功能部件通过一个全互连的交叉开关连在一起,所有的LRF的输入从群内开关获得,所有的功能部件的输出直接送到交叉开关上(除特殊的功能部件,其输出只需要存储至专有的LRF中)。
整个运算群采用全流水结构,指令的相关性由编译和一个统一的控制器进行控制。控制器中有专门的指令存储器存储编译好的指令,程序执行时,控制器将编译好的指令按时序要求同时发送给各个运算群的功能部件,各个运算群以SIMD方式接收指令并执行,执行的结果存入每个运算群中相同的LRF中或者进行输出操作。各个运算群之间通过全交叉的群间互连总线相连。
在本实施例中,如图1所示,包含4个运算部件的运算群整体结构图。运算群总共由运算部件和非运算部件两大部分组成。其中运算部件包括四个浮点乘加部件,在实际的实现中,如果对性能要求非常高,可以增加浮点乘加部件的个数,相应的需要增加群内总线的条数;非运算部件包括SP、JB、VAL和COMM部件,该四个部件协同工作完成条件流的处理工作。此外,COMM通信部件还可以单独完成各个运算群部件之间的相互通信操作,这对于弥补SIMD处理器的缺点是非常必要的。每个功能部件的输出结果都有一条专用的内部总线,各个功能部件的输入LRF的输入由内部一个全交叉的总线开关提供,该交叉开关接收所有功能单元的输出,并根据控制器的信号为每个LRF选择一路总线结果,并根据控制器发来的地址写入到LRF相应项中去。图中JB/VAL的LRF的输入来自于其本身,属于特殊的LRF,在图中的输入来源并未画出。YHFT64-2流处理器中,为了节省内部总线的负担,将输入流的数量减少至4个,每个输入流占一条内部总线,输出流的数量为8个,每个输出流需要一个专门的全交叉开关。该连接结构可以根据实际性能的要求进行调节。如要增加一个运算部件和一个输入流,就要相应的增加2条内部总线,并连接至每个交叉开关的输入端,相应的修改编译器配置及控制信号的连接。
图2是运算群进行一次乘加运算的数据通路图。由于乘加操作需要3个操作数,该例子中三个操作数分别来自于3个数据流,分别与3条群内总线相连,如图所示。编译器判断当前空闲的乘加部件,给其分配乘加操作。本例中,乘加0处于空闲状态,控制器控制乘加0从群内总线上接收外部送来的三个数据到三个输入的LRF中进行缓存;然后经LRF缓存后送入乘加部件内部进行运算,计算后的结果送入群内总线上;输出单元通过群内交叉开关从群内总线上选择乘加0送入总线上的结果,并输出出去。
图3是包含四个运算部件的运算群的详细数据通路图。运算群是由多个功能组成,包含了多个局部寄存器文件LRF,功能部件和LRF之间用一组运算群内部总线互相连接起来。运算群之间通过通信部件用群间总线相连,运算群和流缓冲之间通过输入输出部件相连。功能部件完成不同的算术运算和其它操作,局部寄存器文件(LRF)是功能部件的数据源和中间结果暂存器,条件码寄存器文件(CCRF)存储比较指令产生的结果,用于数据通路选择和条件流操作。功能部件之间的数据交换以及流缓冲和功能部件之间的数据传输是通过计算群内交叉互联网络开关完成的,所有的功能部件都是将输出结果发送到结果总线上,而LRF的输入端可以接收所有的结果总线,这样交叉互联开关就将所有的功能部件和LRF之间形成一种全互联的结构。
运算群的功能部件大致可以分为两类运算部件和非运算部件。运算部件执行整数和浮点运算指令,包括4个乘加部件FMACO,FMAC1 FMAC2,FMAC3和一个倒数/平方根倒数部件DSQ;非运算部件支持条件流和数据移动操作,包括I/O单元,群间通信单元COMM,便笺寄存器单元SP,条件执行控制单元JB和VAL。各个部件的计算结果直接送到群内的总线上;部件的各个输入直接通过群内交叉开关进行选择。
图4是运算群和控制器的互连关系图。YHFT64-2流处理器中包含4个运算群。实际的运算群个数可以根据性能要求进行增加或减少(一般为2的整数次幂),只需要改动运算群之间的总线数目,因为每个运算群专有一条总线。图中显示的8个运算群和控制器的连接关系。控制器和运算群以一组全交叉的互连总线进行相连,每个运算群和控制器需要将本地数据放到对应的总线上,并且能够接收其他任意运算群的数据,各个运算群内部的通信单元负责进行各个运算群以及控制器之间的通信操作。除此之外,控制器还负责向所有的运算群发送控制指令,所有的运算群以SIMD的方式进行数据的运算。
图5是FMAC运算部件内部各个子部件的连接关系。FMAC部件融合浮点和整数的运算于一体,并对浮点乘法的部分积位数进行相应的扩展实现了8位、16位、32位和64位整数的乘法;ALU部件完成其它整数的操作;FMISC部件完成浮点测试及逻辑操作。如图所示,操作码同时送入三个子部件,各个子部件各自进行指令译码,如果是本部件指令即进行相应运算,否则将输出结果置为0。FPMA要完成乘加操作,所以需要三个操作数;ALU和FMISC只需要2个操作数进行运算,在YHFT64-2中指定前2个操作数为其运算数。三个子部件的运算结果最后进行一次或操作即得出最后的结果,这个是由指令译码信号置零其他部件的结果保证的。
图6是包含四个运算群的条件执行部件的处理实例。如图(a)所示的kernel程序,对一个输入流的每个元素首先进行Compter_1()计算,然后只对对流中的circle元素进行computer_circle()计算。图(b)是该程序在没有任何条件处理机制的只含有四个运算群的流处理器上的执行过程。在没有任何条件处理机制的情况下,四个运算群进行computer_circle()计算时,四个运算群的工作量产生了不平衡的状况,运算群1要处理四个数据元素,而运算群0和运算群3只要处理1个数据元素,因此,由于SIMD的特性运算群0和运算群3在处理完自己的数据之后必须等待运算群1,直到运算群1计算完成,四个运算群才能同时进行下一步的运算。在SIMD的控制机制下,由于相关控制引起的这种负载不平衡的问题在X流处理器中会导致资源的极大浪费,最先完成计算任务的运算群必须进行空转等待其他的运算群,所有的运算群都完成一个计算任务之后,才能进行下一个计算任务,并且进入后续运算的数据在各个运算群之间仍旧存在不平衡的问题,因此负载不平衡的问题在整个kernel的运算过程中都是存在的,kernel的运算过程越多,这种负载不平衡导致的资源浪费的情况就越严重。
YHFT64-2流处理器的一个设计思想是控制机制要尽量简单。YHFT64-2流处理器中不支持循环之外的其它分支指令,它采用条件执行的方式来部分解决控制相关引起的负载不平衡的问题。正常的数据流访问,对运算群来说是无条件的。如此以来,各个运算群总是同时对数据流进行读写,而且运算群和流缓冲是一一对应的,如运算群0只能访问流缓冲0的数据,没有办法访问其它流缓冲中的数据。而在条件处理中,运算群对数据流的访问要根据CC条件码有选择地进行,从而对数据流进行扩展或压缩。
图(c)是图(a)程序在YHFT64-2条件执行的过程。条件机制首先将引起负载不平衡的数据流中的数据进行筛选,形成一个只包含相同数据类型的流,然后将这个数据流平均分给各个运算群进行运算,使得各个运算群同时处理同种类型的数据元素,就不会产生有的运算群必须空闲以等待其它运算群完成计算,避免了负载不平衡的问题。
图7是条件执行的处理流程。对于条件输入操作,在进入循环处理之前,首先进行条件状态的初始化,输入一批数据填充数据缓冲。条件码CC为1,表示当前运算群要请求有效数据。每次根据本次循环的条件码状态以及上次循环的条件状态更新本次循环的条件状态,发送给数据缓冲SP、通信单元以及控制器,控制通信单元从SP相应项选取数据到本地运算群,控制器根据产生的ready信号控制INOUT单元从流缓冲中读取数据。对于条件输出操作,初始化条件状态之后进入条件循环处理,与条件输入操作不同的是,CC码为1,表示本地运算群的数据有效,通信单元要将本地的数据传送到数据缓冲中,数据缓冲填满后,由控制器控制INOUT单元进行一次输出操作。在条件输出操作末尾,可以根据程序员的要求进行流的FLUSH操作,对流进行填充。
权利要求
1.一种支持局部寄存和条件执行的64位浮点整数融合运算群,其特征在于它包括一个或者一个以上64位浮点/整数融合的运算部件、用来解决控制相关的条件执行部件、用来实现数据交叉共享的部件互联结构以及对以上三类部件进行整体控制的控制器部件,在运算群内部,运算部件和条件执行部件通过部件互联结构进行相互连接,部件之间的数据传输通过部件间的互联结构完成,即所有运算部件和条件执行部件的输入从互联结构获得,处理的处理结果也送到互联结构中,由互联结构进行相应的处理;控制器通过互联结构向整个运算群发送指令,对其功能进行相应的控制,整个运算群的存储地址空间由数个完全独立的地址空间构成,每个运算内部的每个功能部件的每个输入对应一个独立的地址空间,该地址空间不能采用直接寻址方式访问;本地的运算群只有通过统一的控制器对每个地址空间进行间接寻址访问;控制器中有专门的指令存储器存储编译好的指令,程序执行时,控制器将编译好的指令按时序要求同时发送给各个运算群的功能部件,各个运算群以SIMD方式接收指令并执行,执行的结果存入每个运算群中相同的LRF中或者进行输出操作。
2.根据权利要求1所述的支持局部寄存和条件执行的64位浮点整数融合运算群,其特征在于所述条件执行部件包括控制部件、通信部件和缓冲部件,控制部件负责保存和更新条件执行过程中的各个状态位,协调其他部件共同完成条件执行操作,控制部件将更新的状态位传给通信部件和缓冲部件,通信部件根据获得的信号从其他运算群获得数据,缓冲部件在流缓冲和运算群之间缓冲数据,为条件操作提供缓冲区。
3.根据权利要求1或2所述的支持局部寄存和条件执行的64位浮点整数融合运算群,其特征在于所述运算部件包括浮点乘加部件、浮点杂类部件以及整数算术逻辑单元。
4.根据权利要求3所述的支持局部寄存和条件执行的64位浮点整数融合运算群,其特征在于所述运算部件包括求浮点倒数和平方根倒数的DSQ部件,该DSQ部件以查表的方式求出数据的倒数或者平方根倒数,配合软件加以迭代可以根据要求实现高精度的除法或开平方根运算。
全文摘要
本发明公开了一种支持局部寄存和条件执行的64位浮点整数融合运算群,它包括一个或者一个以上64位浮点/整数融合的运算部件、条件执行部件、部件互联结构以及控制器部件;运算部件和条件执行部件通过部件互联结构进行相互连接,部件之间的数据传输通过部件间的互联结构完成,整个运算群的存储地址空间由数个完全独立的地址空间构成,本地的运算群只有通过统一的控制器对每个地址空间进行间接寻址访问;控制器中有专门的指令存储器存储编译好的指令,程序执行时,控制器将编译好的指令按时序要求同时发送给各个运算群的功能部件,各个运算群以SIMD方式接收指令并执行,执行的结果存入每个运算群中相同的LRF中或者进行输出操作。
文档编号G06F15/80GK101021832SQ20071003457
公开日2007年8月22日 申请日期2007年3月19日 优先权日2007年3月19日
发明者邢座程, 蒋江, 杨学军, 张民选, 张明, 穆长富, 阳柳, 曾献君, 马驰远, 李勇, 陈海燕, 高军, 李晋文, 衣晓飞, 倪晓强, 唐遇星, 张承义 申请人:中国人民解放军国防科学技术大学