CN101133389A - 多用途乘法-加法功能单元 - Google Patents

多用途乘法-加法功能单元 Download PDF

Info

Publication number
CN101133389A
CN101133389A CNA2005800424120A CN200580042412A CN101133389A CN 101133389 A CN101133389 A CN 101133389A CN A2005800424120 A CNA2005800424120 A CN A2005800424120A CN 200580042412 A CN200580042412 A CN 200580042412A CN 101133389 A CN101133389 A CN 101133389A
Authority
CN
China
Prior art keywords
computing
operand
result
functional unit
response
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.)
Granted
Application number
CNA2005800424120A
Other languages
English (en)
Other versions
CN101133389B (zh
Inventor
明·Y·西乌
斯图尔特·F·奥伯曼
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.)
Nvidia Corp
Original Assignee
Nvidia Corp
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
Priority claimed from US10/985,695 external-priority patent/US7240184B2/en
Priority claimed from US10/985,674 external-priority patent/US7428566B2/en
Priority claimed from US10/985,291 external-priority patent/US7225323B2/en
Application filed by Nvidia Corp filed Critical Nvidia Corp
Priority claimed from PCT/US2005/040852 external-priority patent/WO2006053173A2/en
Publication of CN101133389A publication Critical patent/CN101133389A/zh
Application granted granted Critical
Publication of CN101133389B publication Critical patent/CN101133389B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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/483Computations with numbers represented by a non-linear combination of denominational numbers, e.g. rational numbers, logarithmic number system or floating-point numbers
    • 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
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • 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
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • 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
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • 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
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/3875Pipelining a single stage, e.g. superpipelining

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Computing Systems (AREA)
  • Nonlinear Science (AREA)
  • Advance Control (AREA)

Abstract

本发明揭示一种多用途功能单元,其可经配置以支持多种运算,包括乘法-加法及比较测试运算、以及其他整数及/或浮点算术运算、布尔运算、及格式转换运算。

Description

多用途乘法-加法功能单元
相关申请案交叉参考
本申请案主张优先于以下美国专利申请案,其均于2004年11月10日提出申请并让与本发明的受让人:
·第10/985,291号申请案,其名称为“Multipurpose Multiply-Add FunctionalUnit”;
·第10/986,531号申请案,其名称为“Multipurpose Functional Unit withCombined Integer and Floating-Point Multiply-Add Pipeline”;
·第10/985,695号申请案,其名称为“Multipurpose Functional Unit withMultiply-Add and Logical Test Pipeline”;及
·第10/985,674号申请案,其名称为“Multipurpose Functional Unit withMultiply-Add and Format Conversion Pipeline”。第10/9865,291号申请案。
技术领域
本发明大体而言涉及微处理器,且具体而言涉及一种用于处理器核心的多用途乘法-加法单元。
背景技术
实时计算机动画对处理器具有极高的要求。为满足这些要求,专用图形处理单元通常构建一其中有诸多(例如16个)核心平行运行的高度平行的架构,其中每一核心包含多个(例如8个)平行管线,这些管线包含用于执行该处理单元所支持的作业的功能单元。这些作业一般包括各种整数及浮点算数运算(加法、乘法等等)、逐位的逻辑运算、比较运算、格式转换运算等等。这些管线一般为相同的设计,以便可由任一管线处理任何所支持的指令;相应地,各管线均需要完整的一组功能单元。
传统上,各功能单元一直专用于处理仅一个或两个运算。例如,这些功能单元可包括整数加法/减法单元、浮点乘法单元、一个或多个二进制逻辑单元、及一个或多个用于在整数与浮点格式之间进行转换的格式转换单元。
随着时间的进行,人们希望图形处理单元支持的初等运算的数量一直在增加。人们已提出了新的指令,例如三元“乘法-加法”(MAD)指令,其用于计算运算数A、B及C的A*B+C。继续增加功能单元来支持这些运算会引起许多问题。例如,由于任一新的功能单元均须加入每一管线中,因而为仅增加额外单元所需的芯片面积可变得非常大。新的功能单元也会增加功率消耗,此可能需要改善冷却系统。这些因素会增大芯片设计的困难及成本。此外,在功能单元的数量超过在一循环中可发出的指令数量这一方面而言,各功能单元的处理容量的利用效率偏低。
因此,希望提供所需芯片面积减小且可更有效利用的功能单元。
发明内容
本发明的实施例提供多用途功能单元。在一个实施例中,所述多用途功能单元支持所有如下运算:整数及浮点运算数的加法、乘法及乘法-加法;测试运算,包括布尔运算、最大及最小运算、三元比较运算及二元测试运算(例如大于、小于、等于或无序运算);左移及右移运算;格式转换运算,例如在整数与浮点格式之间、在一个整数格式与另一整数格式之间、及在一个浮点格式与另一浮点格式之间进行转换;对包括指数函数及三角函数在内的超越函数的自变数进行自变数归约运算;及返回一浮点运算数的小数部分的小数运算。在其他实施例中,所述多用途功能单元也可支持这些运算及/或其他运算的任一子集。
根据本发明的一个方面,一种用于处理器的多用途功能单元包括输入段、乘法管线、测试管线、加法管线、指数管线及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于所述操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述测试管线耦接至输入段并可响应于所述控制信号而进行配置,以对第一、第二、及第三运算数中的一者或多者实施比较及选择所述比较的结果作为第二中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述指数管线耦接至输入段并可响应于控制信号而进行配置,以对第一、第二及第三运算数中的一者或多者实施指数计算及选择所述指数计算的结果作为指数结果。所述输出段经耦接以接收运算结果及指数结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。所支持的运算包括一浮点乘法-加法(FMAD)运算、一整数乘法-加法(IMAD)运算、及至少一个比较测试运算。
可支持各种比较测试运算。例如,在一个实施例中,所述至少一个比较测试运算包括从由如下运算组成的群组中选出的一个或多个运算:最大(MAX)运算,最小(MM)运算,及三元比较(CMP)运算。在另一实施例中,所述至少一个比较测试运算包括从由如下运算总成的群组中选出的一个或多个二元测试(SET)运算:大于运算,小于运算,相等性运算,及无序运算,其中所述一个或多个二元测试运算中的每一者均产生一布尔结果。在其中支持具有一布尔结果的SET运算的实施例中,一辅助结果路径可耦接于测试管线与输出段之间,并经配置以将布尔辅助结果从所述测试管线递送至输出段,且所述输出段可响应于所述控制信号而进一步配置,以在所述操作码指示其中一个SET运算的情况下根据布尔辅助结果来产生最终结果。
还可支持其他运算。例如,所支持的运算可进一步包括逐位的布尔逻辑运算(例如AND运算、OR运算及XOR运算);浮点加法(FADD)运算及整数加法(IADD)运算,其中所述加法管线可响应于所述控制信号而进一步进行配置,以实施FADD运算及IADD运算;浮点乘法(FMUL)运算及整数乘法(IMUL)运算,其中所述乘法管线可响应于所述控制信号而进一步进行配置,以实施FMUL运算及IMUL运算;格式转换运算,其将第一运算数从输入格式转换成目标格式;域映射(RRO)运算,例如用于三角函数或指数函数;及小数(FRC)运算,其返回第一运算数的小数部分。可支持这些运算的各种子组合以及其他运算。
根据本发明的另一方面,一种微处理器包括一执行核心,其具有经配置以执行程序运算的功能单元。所述功能单元中的至少一者是一多用途功能单元,其能够执行若干种所支持的运算,包括至少浮点乘法-加法(FMAD)运算、整数乘法-加法(IMAD)运算、及至少一个比较测试运算。所述多用途功能单元包括输入段、乘法管线、测试管线、加法管线、指数管线及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于所述操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述测试管线耦接至输入段并可响应于所述控制信号而进行配置,以对第一、第二、及第三运算数中的一者或多者实施比较及选择所述比较的结果作为第二中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述指数管线耦接至输入段并可响应于控制信号而进行配置,以对第一、第二及第三运算数中的一者或多者实施指数计算及选择所述指数计算的结果作为指数结果。所述输出段经耦接以接收运算结果及指数结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。
根据本发明的再一方面,提供一种用于操作微处理器的功能单元的方法。接收操作码及一个或多个运算数;所述操作码指示要对所述一个或多个运算数实施的多种所支持运算中的一个。响应于所述操作码及所述一个或多个运算数,操作所述功能单元中的乘法管线以产生第一中间结果,操作所述功能单元中的测试管线以产生第二中间结果,及操作所述功能单元中的指数管线以产生指数结果及对齐控制信号。响应于所述操作码及所述对齐控制信号而操作所述功能单元中的加法管线,以对第一与第二中间结果进行相加并产生运算结果。操作所述功能单元中的输出段,以根据所述运算结果及指数结果来计算最终结果。所支持的运算包括浮点乘法-加法(FMAD)运算、整数乘法-加法(IMAD)运算、及至少一个比较测试运算。
根据本发明的又一方面,一种用于处理器的多用途功能单元包括输入段、乘法管线、加法管线及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于所述操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述输出段经耦接以接收运算结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。所支持的运算包括对第一、第二及第三运算数进行运算的浮点乘法-加法(FMAD)运算及整数乘法-加法(IMAD)运算,且所述乘法管线及所述加法管线可响应于所述控制信号而进行进一步配置,以使得对于所述FMAD运算,所述最终结果代表浮点值,而对于IMAD运算,所述最终结果代表整数值。
亦可支持其他运算。例如,在一实施例中,所支持运算进一步包括对第一及第三运算数进行运算的浮点加法(FADD)运算及整数加法(IADD)运算。在另一实施例中,所支持运算进一步包括对第一及第二运算数进行运算的浮点乘法(FMUL)运算及整数乘法(IMUL)运算。在再一实施例中,所支持运算进一步包括绝对差(ISAD)运算的整数和。
根据本发明的另一方面,一种微处理器包括具有若干功能单元的执行核心,所述功能单元经配置以执行程序运算。所述功能单元中的至少一者是多用途功能单元,其能够执行若干种所支持的运算,包括至少浮点乘法-加法(FMAD)运算与整数乘法-加法(IMAD)运算。所述多用途功能单元包括输入段、乘法管线、加法管线、及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于该操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述输出段经耦接以接收运算结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。所述乘法管线及所述加法管线可响应于所述控制信号而进一步进行配置,以使得对于所述FMAD运算,所述最终结果代表浮点值,而对于所述IMAD运算,所述最终结果代表整数值。
根据本发明的再一方面,提供一种操作微处理器的功能单元的方法。接收一操作码及一个或多个运算数;所述操作码指示要对所述一个或多个运算数实施的多个所支持运算中的一者。响应于所述操作码及所述一个或多个运算数,操作所述功能单元中的乘法管线,以产生第一中间结果及第二中间结果。操作所述功能单元中的加法管线,以对第一与第二中间结果进行相加并产生运算结果。所述功能单元中的输出段根据所述运算结果来计算最终结果。所支持的运算包括浮点乘法-加法(FMAD)运算及整数乘法-加法(MAD)运算。
根据本发明的再一方面,一种用于处理器的多用途功能单元包括输入段、乘法管线、测试管线、加法管线、及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于该操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述测试管线耦接至输入段并可响应于所述控制信号而进行配置,以对第一、第二、及第三运算数中的一者或多者实施比较及选择所述比较的结果作为第二中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述输出段经耦接以接收运算结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。所述多个所支持的运算包括对所述第一、第二及第三运算数进行运算的整数乘法-加法(TMAD)运算及对所述第一、第二、及第三运算数中的至少一者进行运算的逻辑测试运算。
在某些实施例中,所述逻辑测试运算可为一组二元测试(SET)运算中的一者,所述一组二元测试运算包括至少相等性测试、大于测试及小于测试。在一个实施例中,所述逻辑测试运算的第一、第二及第三运算数可为整数运算数或浮点运算数。在某些实施例中,所述所支持的运算还包括对所述第一、第二、及第三运算数进行运算的浮点乘法-加法(FMAD)运算。在其他实施例中,所述所支持的运算还包括逐位布尔AND运算、逐位布尔OR运算、及逐位布尔XOR运算。
根据本发明的另一方面,一种微处理器包括执行核心,其具有经配置以执行程序运算的功能单元。所述功能单元中的至少一者是多用途功能单元,其能够执行若干种所支持的运算,包括对第一、第二、及第三运算数进行运算的乘法-加法(MAD)运算、以及对所述第一、第二、及第三运算数中的至少一者进行运算的逻辑测试运算。所述多用途功能单元包括输入段、乘法管线、测试管线、加法管线、及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于所述操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算所述第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述测试管线耦接至输入段并可响应于所述控制信号而进行配置,以对所述第一、第二、及第三运算数中的一者或多者实施比较及选择所述比较的结果作为第二中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述输出段经耦接以接收所述运算结果,并可响应于所述控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。
根据本发明的再一方面,提供一种用于操作微处理器的功能单元的方法。接收操作码及一个或多个运算数;所述操作码指示要对所述一个或多个运算数实施的多种所支持运算中的一个。响应于所述操作码及所述一个或多个运算数,操作所述功能单元中的乘法管线以产生第一中间结果,及操作所述功能单元中的测试管线以产生第二中间结果。操作所述功能单元中的加法管线,以对第一与第二中间结果进行相加并产生运算结果。操作所述功能单元中的输出段,以根据所述运算结果来计算最终结果。所支持的运算包括对第一、第二、及第三运算数进行运算的乘法-加法(MAD)运算、以及对所述第一、第二、及第三运算数中的至少一者进行运算的逻辑测试运算。
根据本发明的又一方面,一种用于处理器的多用途功能单元包括输入段、乘法管线、加法管线、指数管线及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于所述操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述指数管线耦接至输入段并可响应于控制信号而进行配置,以对第一、第二、及第三运算数中的一者或多者实施指数计算及选择所述指数计算的结果作为指数结果。所述输出段经耦接以接收运算结果及指数结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。所述所支持的运算包括对所述第一、第二及第三运算数进行运算的乘法-加法(MAD)运算以及将所述第一运算数从输入格式转换成目标格式的格式转换运算。
可支持整数运算与浮点运算的各种组合。例如,在一个实施例中,支持整数MAD运算,且还支持其中输入格式与目标格式中的至少一者为整数格式的格式转换运算。在另一实施例中,支持浮点MAD运算,且还支持其中输入格式与目标格式中的至少一者为浮点格式的格式转换运算。在再一实施例中,MAD运算可选择性地为浮点MAD运算或整数MAD运算。
根据本发明的另一方面,一种微处理器包括一执行核心,其具有经配置以执行程序运算的功能单元。所述功能单元中的至少一者是一多用途功能单元,其能够执行若干种所支持的运算,至少包括对第一、第二及第三运算数进行运算的乘法-加法(MAD)运算、以及将所述第一运算数从输入格式转换成目标格式的格式转换运算。所述多用途功能单元包括输入段、乘法管线、加法管线、指数管线及输出段。所述输入段经配置以接收第一、第二及第三运算数及一指示所要执行的若干个所支持运算之一的操作码,且进一步经配置以响应于所述操作码而产生控制信号。所述乘法管线耦接至输入段并可响应于所述控制信号而进行配置,以计算第一与第二运算数的乘积及选择所计算的乘积作为第一中间结果。所述加法管线耦接至乘法段及测试管线并可响应于所述控制信号而进行配置,以计算第一与第二中间结果的和及选择所计算的和作为运算结果。所述指数管线耦接至输入段并可响应于控制信号而进行配置,以对第一、第二及第三运算数中的一者或多者实施指数计算及选择所述指数计算的结果作为指数结果。所述输出段经耦接以接收运算结果及指数结果,并可响应于控制信号而进行配置,以产生由所述操作码指定的所支持运算中所述的一者的最终结果。
根据本发明的再一方面,提供一种用于操作微处理器的功能单元的方法。接收操作码及一个或多个运算数;所述操作码指示要对所述一个或多个运算数实施的多种所支持运算中的一个。响应于所述操作码及所述一个或多个运算数,操作所述功能单元中的乘法管线以产生第一中间结果及第二中间结果,及操作所述功能单元中的测试管线以产生第二中间结果。操作所述功能单元中的指数管线以产生指数结果及对齐控制信号。响应于所述对齐控制信号而操作所述功能单元中的加法管线,以对第一与第二中间结果进行相加并产生运算结果。所述所支持的运算包括对所述第一、第二及第三运算数进行运算的乘法-加法(MAD)运算以及将所述第一运算数从输入格式转换成目标格式的格式转换运算。
下文具体实施方式部分与附图一起将使人们能够更好地了解本发明的性质及优点。
附图说明
图1是根据本发明一实施例的计算机系统的方块图;
图2是根据本发明一实施例的执行核心的一部分的方块图;
图3是根据本发明一实施例可在多用途乘法-加法(MMAD)单元中实施的运算的列表;
图4是根据本发明一实施例的MMAD单元的方块图;
图5是图4所示MMAD单元的运算数格式化方块的方块图;
图6A是图4所示MMAD单元的左乘法器方块的方块图;
图6B是图4所示MMAD单元的指数乘积块的方块图;
图6C是图4所示MMAD单元的逐位逻辑块的方块图;
图7A是图4所示MMAD单元的乘法器块的方块图;
图7B是图4所示MMAD单元的指数和块的方块图;
图8A是图4所示MMAD单元的右乘法器块的方块图;
图8B是图4所示MMAD单元的比较逻辑块的方块图;
图9是图4所示MMAD单元的对齐块的方块图;
图10是图4所示MMAD单元的小数和块的方块图;
图11是图4所示MMAD单元的正规化块的方块图;及
图12是图4所示MMAD单元的输出控制块的方块图。
具体实施方式
本发明的实施例提供一种高速多用途功能单元,其用于任何能够实施大量高速计算的处理系统,例如图形处理器。在一个实施例中,所述功能单元支持三元乘法-加法(“MAD”)运算一其通过包含乘法器树及加法器电路的管线以整数或浮点格式来计算输入运算数A、B、C的A*B+C。通过利用MAD管线的硬件,所述功能单元还支持其他整数及浮点算术运算。所述功能单元可进一步扩展至仅以少量的额外电路来支持各种比较、格式转换、及逐位运算。
I.系统概述
A.图形处理器
图1是根据本发明一实施例的计算机系统100的方块图。计算机系统100包括通过总线106进行通信的中央处理器(CPU)102及系统存储器104。从耦接至总线106的一个或多个用户输入装置108(例如键盘、鼠标)接收用户输入。在基于像素的显示装置110(例如传统的基于CRT或LCD的监视器)上提供视觉输出,显示装置110是在耦接至系统总线106的图形处理子系统112的控制下工作。系统盘128及其他组件-例如一个或多个可拆卸存储装置129(例如软盘驱动器、光盘(CD)驱动器、及/或DVD驱动器)-也可耦接至系统总线106。系统总线106可使用各种总线协议中的一种或多种来构建,这些总线协议包括PCI(外围组件互连)、AGP(高级图形处理)及/或PCI-Express(PCI-E);可提供例如北桥及南桥(未显示)等恰当的“桥式”芯片来互连各种组件及/或总线。
图形处理子系统112包括图形处理单元(GPU)114及图形存储器116-其可例如使用一个或多个集成电路装置(例如可编程处理器、应用专用集成电路(ASIC)及存储装置)来构建。GPU 114包括渲染模块120、存储器接口模块122、及扫描输出模块124。渲染模块120可经配置以实施与如下有关的各种任务:根据经由系统总线106所提供的图形数据来产生像素数据(例如执行各种2D及/或3D渲染算法),与图形存储器116交互作用以存储及更新像素数据,及类似作业。渲染模块120较佳经配置以根据由在CPU 102上执行的各种程序所提供的2-D或3-D景象数据来产生像素数据。可根据需要来改变渲染模块120的特定配置,且由于对于理解本发明而言无关紧要,因而不再对其加以赘述。
与渲染模块120及扫描输出控制逻辑124进行通信的存储器接口模块122管理与图形存储器116进行的所有交互作用。存储器接口模块122还可包括用于将从系统总线106接收的像素数据写入至图形存储器116而不由渲染模块120处理的路径。可根据需要改变存储器接口模块122的特定配置,且由于其对于理解本发明而言无关紧要,因而不再对其加以赘述。
图形存储器116-其可使用一般常规设计的一个或多个集成电路存储装置来构建-可包含各种物理或逻辑子分区,例如像素缓冲器126。像素缓冲器126存储图像(或图像的一部分)的像素数据,所述像素数据由扫描输出控制逻辑124读取并加以处理,然后传输至显示装置110进行显示。所述像素数据可例如根据经由系统总线106提供至GPU 114的渲染模块120的2D或3D景象数据来产生,或者由在GPU 102上执行的各种过程来产生并经由系统总线106提供至像素缓冲器126。
可与GPU 114集成于单个芯片上或构建于单独芯片上的扫描输出模块124从像素缓冲器118读取像素颜色数据并将所述数据传送至显示装置110进行显示。在一个实施例中,扫描输出模块124同步地运行,无论在GPU 114中或系统100中的其他位置中可进行的任何其他活动如何,均以规定的刷新速率(例如80Hz)来扫描输出像素数据帧。在某些实施例中,所述规定的刷新速率可以是用户可选择的参数,且可根据显示格式来改变扫描输出次序(例如交错扫描或渐进扫描)。扫描输出模块124也可实施其他作业,例如调节特定显示硬件的颜色值及/或通过将来自像素缓冲器126的像素数据与视频数据或游标覆盖图像等等相组合来产生合成屏幕图像,所述视频数据或游标覆盖图像等等可例如从图形存储器116、系统存储器104或另一数据源(未显示)获得。可根据需要来改变扫描输出模块124的特定配置,且由于其对于理解本发明而言无关紧要,因而不再对其加以赘述。
在系统100的工作过程中,CPU 102执行各种程序,例如操作系统程序、应用程序、及图形处理子系统112的驱动程序。所述驱动程序可构建传统的应用程序界面(API),例如OpenGL、Microsoft DirectX或D3D,这些应用程序界面(API)使应用程序及操作系统程序能够调用图形处理子系统112的各种功能,此在所属领域中众所周知。可借助恰当的命令缓冲器使图形处理子系统112的操作与其他系统操作不同步。
应了解,本文所述的系统只是例示性的,且也可具有各种变化形式及修改形式。GPU可使用任何适当的技术来构建,例如构建为一个或多个集成电路装置。GPU可安装于可包含一个或多个这种处理器的扩展卡上,直接安装于系统母板上、或集成至系统芯片组组件中(例如集成至一个常用PC系统架构的北桥芯片中)。所述图形处理子系统可包括任意量的专用图形存储器(某些实施方案可不具有专用图形存储器),并可使用系统存储器与专用图形存储器的任意组合形式。具体而言,可根据需要将像素缓冲器构建于专用图形存储器或系统存储器中。扫描输出电路可与GPU相集成或者提供于单独的芯片上,并可例如使用一个或多个ASIC、可编程处理器元件、其他集成电路技术、或其任一组合来构建。此外,可将实施本发明的GPU并入各种装置中,包括通用计算机系统、视频游戏控制台及其他专用计算机系统、DVD播放器、例如移动电话或个人数字助理等手持式装置、等等。
B.执行核心
图2是根据本发明一实施例的执行核心200的方块图。执行核心200-其可构建于例如用于上述GPU 114的渲染模组120的可编程着色器中-经配置以执行任意指令序列来实施各种计算。执行核心200包括提取及调度单元202、发出单元204、多用途乘法-加法(MMAD)功能单元220、若干(M)个其他功能单元(FU)222、及寄存器文件224。每一功能单元220、222经配置以实施规定的运算。下文将说明MMAD单元220所实施的运算。其他功能单元222可为一般的常规设计,并可支持各种操作,例如超越函数计算(例如正弦及余弦、指数及对数等等)、互反、纹理过滤、存储器访问(例如加载及存储操作)、整数或浮点算术等等。
在执行核心200的操作过程中,提取及调度单元202从指令存储器(未显示)获得指令,对其进行解码,并将其作为具有相关联运算数参考或运算数数据的操作码调度至发出单元204。对于每一指令,发出单元204均例如自寄存器文件224获得任何参考运算数。当用于指令的所有运算数均准备好时,发出单元204通过将操作码及运算数发送至MMAD单元220或另一功能单元222来发出指令。发出单元204较佳使用操作码来选择要执行给定指令的恰当功能单元。提取及调度电路202及发出电路204可使用传统的微处理器架构及技术来构建,且由于其对于理解本发明而言无关紧要,因而不再对其加以赘述。
MMAD单元220及其他功能单元222接收操作码及相关联的运算数,并对运算数执行规定的运算。结果数据是以结果值(OUT)及条件码(COND)的形式提供,所述条件码(COND)提供关于结果值OUT的一般信息,例如其是正的还是负的还是一特殊值(在下文中予以说明)。在某些实施例中,条件码COND也可指示在功能单元的操作过程中是否出现错误或异常。结果数据通过数据传送路径226转发至寄存器文件224(或另一目的地)。
应了解,图2所示执行核心只是例示性的,且也可具有各种变化形式及修改形式。提取及调度单元202和发出单元204可根据需要构建任何所需的微架构,包括具有有序或无序指令发出模式、推测性执行模式的标量或超级标量架构等等。在某些架构中,发出器可为多个功能单元发出包含操作码及/或运算数的长指令字。所述执行核心也可包含一管线式功能单元序列,其中来自一个级中各功能单元的结果转接至后续级的功能单元,而非直接转接至寄存器文件;这些功能单元可通过单个长指令字或单独的指令加以控制。所属领域的技术人员根据本文的教示内容将知,MMAD单元220可在任何微处理器中构建为功能单元,并非仅限于图形处理器或任一特定处理器或执行核心架构。
C.MMAD单元
根据本发明的一实施例,执行核心200包括MMAD单元220,MMAD单元220支持对多达三个运算数(在此处标记为A、B及C)进行诸多整数及浮点运算。在一个实施例中,MMAD单元220构建一用于计算整数或浮点运算数的A*B+C的乘法-加法(MAD)管线,并利用其管线内的各种电路来实施诸多其他整数及浮点运算。MMAD单元220的运算由发出电路204进行控制,发出电路204如上文所述将运算数及操作码提供至MMAD单元220。由发出电路204随每一组运算数提供的操作码控制MMAD单元220的行为,从而选择性地对该组运算数实施其各种运算中的一种。
MMAD单元220较佳经设计以按各种格式处理运算数,包括按整数及浮点两种格式。在本文所述的各实施例中,MMAD单元220处理两种浮点格式(在本文中称作fp32及fp16)及六种整数格式(在本文中称作u8、u16、u32、s8、s16、s32)。现在将对这些格式进行说明。
“Fp32”是指标准IEEE 754单精度浮点格式,其中由符号位、八个指数位及23个有效数字位来表示一正规的浮点数。所述指数向上偏置127,从而使用从1至254的整数来表示处于2-126至2127范围内的指数。对于“正规”数而言,将所述23个有效数字位解释为一24位的尾数的小数部分,其中以隐含的1作为整数部分。将在指数位中全为零的数称为非正规数,并将其解释为在尾数中不具有隐含的前导数字1;这些数可代表例如计算中的下溢。将在指数位中全为1且在有效数字位中为0的(正或负)数称作(正或负)INF;此种数可代表例如计算中的溢出。将在指数位中全为1且在有效数字位中为非零数的数称作非数(NaN),并可用于例如代表未定义的值。将0也视为一特殊数,且通过将所有指数位及有效数字位均设定为0来表示。
“Fp16”是指在图形处理中常常使用的半精度格式。fp16格式类似于fp32,只是fp16具有5个指数位及10个有效数字位。将指数向上偏置15,且将正规数的有效数字解释为一11位的尾数的小数部分,其中以隐含的“1”作为整数部分。特殊数(包括非正规数、INF、NaN及0)的定义类似于fp32。
在本文中以开头的“s”或“u”及一表示总的位数(例如8、16、32)的数来规定整数格式,“s”或“u”指示该格式是带符号还是不带符号;因此,s32是指带符号的32位整数,u8是指不带符号的八位整数,依此类推。对于带符号的格式,较佳使用2补数反数。因此,u8的范围是[0,15],而s8的范围是[-8,7]。在本文使用的所有格式中,最高有效位(MSB)处于位字段的左侧,而最低有效位(LSB)处于右侧。
应了解,在本文中定义及提及具体格式是为了便于进行例解,且MMAD单元可支持这些各种的任一组合或支持不同格式。
除处理不同运算数格式之外,MMAD单元220较佳经配置以支持诸多种不同的运算。例如,图3是可由本文所述的MMAD单元220的一实施例实施的运算类型的列表。可按fp32或fp16格式对运算数实施浮点算术运算(列于302处),并返回输入格式的结果。在某些实施例中,仅支持一种格式(例如fp32)的浮点算术。连同加法(FADD)、乘法(FMUL)、及乘法-加法(FMAD)运算一起,支持各种运算数比较运算。这些运算包括:三元条件选择运算(FCMP),如果C大于或等于0而B则不,则选择A;及最大运算(FMAX),其返回运算数A与B中较大的一者;以及最小运算(FMDST),其返回这两者中较小的一者。二元测试运算(FSET)对运算数A及B实施诸多种二元关系测试中的一种,并返回一指示是否满足所述测试的布尔值。在该实施例中,可测试的二进制关系包括大于(A>B)、小于(A<B)、等于(A=B)、及无序(A?B,如果A或B之一是NaN,则其为真)、以及否定(例如A≠B)、及各种组合测试(例如A>B、A<>B、A?=B等等)。
可按任意整数格式对运算数实施整数算术运算(列于304处),并以输入格式返回结果。所支持的整数算术运算包括加法(IADD)、乘法(IMUL)、乘法-加法(IMAD)、条件选择(ICMP)、最大(IMAX)、最小(IMIN)、及二元测试(ISET),所有这些运算的定义均类似于对应的浮点运算。还支持绝对差(ISAD)运算,其是计算|A-B|+C。
位运算(列于306处)将运算数视为32位的字段。逻辑运算(LOP)包括二元布尔运算AND(A&B)、OR(A|B)及XOR(A^B)。LOP的结果是一32位字段,其指示对运算数A及B的对应位实施运算的结果。还支持左移(SHL)及右移(SHR)运算,其中运算数A用于提供将要移位的所述位字段,而运算数B用于规定移位量。右移可为逻辑移位(其中在新的MSB位置上插入0)或算术移位(使符号位扩展至新的MSB位置上)。
格式转换运算(列于308处)将运算数A从一种格式转换成另一种格式。“F2F”大体是指从一种浮点格式转换成另一种浮点格式。在某些实施例中,这些转换也可包括以2N(N为整数)换算运算数。此外,也支持使整数圆整化的F2F转换。“F2I”是指从浮点格式转换成整数格式。如同F2F转换一样,可以2N换算运算数。“I2F”一般是指整数-浮点转换;这些运算可与求反或绝对值运算以及2N换算相结合。“I2I”是指从一种整数格式转换成另一种整数格式;这些转换也可与绝对值或求反运算相结合。“FRC”是“小数”运算,其返回浮点输入运算数的小数部分。
fp32自变数归约运算(列于310处)也称作范围归约运算(RRO),用于将超越函数(例如sin(x)、cos(x)或2X)的自变数x限制至方便的数值间隔中,从而可由一经适当配置的功能单元(其可为例如图2中的功能单元222中的一者)来计算超越函数。在该实施例中,在将超越函数指令发至功能单元之前,将其自变数作为运算数A提供至MMAD单元220。对于正弦及余弦函数,将运算数A映射至间隔[0,2π)中;对于指数函数(也标记为EX2),将运算数A表示为数N+f,其中N是整数且f处于间隔[0,1)中。如在此项技术中所知,此种自变数归约可通过将所述一组可能的自变数限制至有界范围来简化超越函数的功能单元的设计。
第II及第III部分描述MMAD单元220,其可实施图3中所示的所有运算。第II部分描述MMAD单元220的电路结构,且第III部分描述可如何使用该电路结构来执行图3中所列的运算。应了解,本文所述的MMAD单元220只是例示性的,且也可使用电路块的恰当组合来支持其他功能或不同的功能组合。
II.实例性MMAD单元结构
图4是根据本发明一实施例支持图3中所示的所有运算的MMAD单元220的简化方块图。在该实施例中,MMAD单元220构建一用于所有运算的八级式管线。在每一处理器循环中,MMAD单元220均可通过运算数输入路径402、404、406接收(例如从图2中的发出单元204)三个新的运算数(A0、B0、C0)及通过操作码路径408接收一指示所要实施的运算的操作码。在该实施例中,所述运算可以是图3中所示的任一运算。除所述运算之外,所述操作码还较佳指示运算数的输入格式(且还有要对结果使用的输出格式,其既可与输入格式相同也可与输入格式不同)。应注意,图3中所示的运算可具有与其相关的多个操作码;例如,可存在一个用于使用fp32运算数的FMUL运算的操作码及一用于使用fp16运算数的FMUL的不同操作码,等等。
MMAD单元220通过所有管线级0-7来处理每一运算,并在信号路径410上产生32位的结果值(OUT)及在信号路径412上产生对应的条件码(COND)。视架构而定,这些信号可传播至例如寄存器文件224(如在图2中所示),或者传播至处理器核心的其他元件。在一个实施例中,每一级均对应于一处理器循环;在其他实施例中,在一个级中所示的元件可在多个处理器循环中进行划分,或者可将两个(或更多个)级的元件组合成一个处理器循环。一个实施方案是十个级(循环)、1.5GHz。
第II.A部分提供对MMAD管线的概述,且第II.B-I部分详细说明每一级的电路块。
A.MMAD管线
参照如何在FMAD运算期间使用第0-2级的电路块便可对管线具有最初的了解。第0级是运算数格式化级,其可视需要构建于发出单元204或MMAD单元220中,以通过恒定不变的方式来对齐及表示运算数(其可具有少于32位)。第1-3级实施FMAD运算的乘法(A*B=P)部分,而第4-6级则实施加法(P+C)部分。在第7级中,将最终结果格式化,以将其分配于信号路径410、412上。第7级还包括控制逻辑,以用于如下文所述在出现特殊数输入、溢流、下溢或其他条件时产生特殊输出。
为利于进行本说明,将MMAD单元220的三个主要内部数据路径在图4中由虚线边界表示,且在本文中将其称作“尾数路径”413、“指数路径”415、及“测试路径”417。尽管这些名称表明由在每一路径上所示各种电路块在某些运算(例如FMAD或比较)期间所实施的功能,然而将显而易见,可以与运算相关的方式将沿任一内部数据路径413、415、417的电路块用于各种各样的应用中。
沿尾数路径413,第1-3级包括对浮点运算数A及B的尾数进行相乘的电路块。第2级中的乘法器块414是由一左乘法器块416及一右乘法器块418支持。乘法结果在第3级末端处在路径421上作为结果R3a提供。第4-6级包括对齐块420及小数和块422,对齐块420及小数和块422使结果R3a与通过测试路径417在路径419上作为结果R3b提供的浮点运算数C的尾数对齐并相加。在正规化块423中将最终的尾数正规化,并在第6级的输出处在路径425上作为结果R6提供。
指数路径415对浮点运算数A、B及C的指数部分(标记为Ea、Eb、Ec)实施恰当的运算,以支持FMAD运算。第1级中的指数乘积块424(例如)通过对Ea及Eb进行相加并减去偏置量(例如127)来计算乘积A*B的指数,同时第2级中的指数和块426确定和(A*B)+C的有效最终指数(EFE)及指数差(Ediff),所述指数差(Ediff)用于控制第4级中对齐块420的操作。沿指数路径415的后续电路块,包括第3级中的Rshift计数块428、第4级中的指数递增块430、第6级中的指数递减块432,根据尾数结果的特性来调节指数EFE,从而在路径427上提供最终指数E0。
测试路径417的电路块主要用于除FMAD以外的运算,特别是整数及浮点比较运算。测试路径417包括处于第1级中的逐位逻辑块434及处于第3级中的比较逻辑块436;这些元件的运算将在下文中进行说明。在FMAD运算期间,测试路径412将运算数C的尾数在第3级的输出处传播至路径419。
与主要数据路径并行地,MMAD单元220还通过第1级中的特殊数检测电路438来处理特殊数(例如在fp32或fp16运算数的情形中是NaN、INF、非正规数及0),特殊数检测电路438在路径429上产生特殊数信号(SPC)。特殊数检测电路438-其接收所有三个运算数A、B及C-可为一般的传统设计,且特殊数信号SPC可每一运算数包括数个(例如3个)位,以通过预定的特殊数代码来指示每一运算数的特殊数状态。可将所述特殊数信号SPC提供给各个下游电路块,包括第7级的输出控制块440,输出控制块440在适当时使用所述特殊数信号SPC以特殊值覆盖来自管线(例如R6及E0)的结果;其实例将在下文中进行说明。
在管线的末端处,输出控制块420在信号路径410上提供结果OUT并在信号路径412上提供条件码COND。所述条件码-其较佳包括比所述结果少的位数-载送关于所述结果的性质的一般信息。例如,所述条件码可包含指示所述结果是否是正的、负的、0、NaN、INF、非正规数等等的位。如在此项技术中所知,当随结果提供条件码时,该结果的后续使用者有时可在其处理中使用条件码而非结果本身。在某些实施例中,可使用条件码来指示在执行运算过程中出现异常或其他事件。在其他实施例中,可完全省略条件码。
除数据路径外,MMAD单元220还提供控制路径,其在图4中由第0级中的控制块442表示。控制块442接收操作码并产生各种与操作码相关的控制信号(在本文中一般标记为“OPCTL”),所述与操作码相关的控制信号可通过管线与数据传播同步地传播至每一电路块。(在图4中未显示OPCTL信号与各种电路块的连接。)如下文所述,OPCTL可用于响应于所述操作码而启用、禁用、及以其他方式控制MMAD单元220的各种电路块的操作,以便可使用同一些管线元件来实施不同的运算。本文中所提及的各种OPCTL信号可包括操作码本身或者从操作码导出(例如由构建于控制块442中的组合逻辑导出)的某种其他信号。在某些实施例中,可在数个管线级中使用多个电路块来构建控制块442。应了解,在给定运算期间提供至不同块的OPCTL信号既可为同一信号也可为不同的信号。根据本发明的揭示内容,所属领域的一般技术人员将能够构造适合的OPCTL信号。
应注意,给定级的各电路块可能需要不同的处理时间量,且一特定级所需的时间可因运算而异。相应地,MMAD单元220也可包括各种定时及同步电路(在图4中未显示),以控制数据在不同路径上从一个管线级向下一管线级的传播。可使用任何恰当的定时电路(例如锁存器、传输门等等)。
B.第0级中的元件
在该实施例中,将8位(16位)整数运算数作为32位运算数的八(16)个LSB递送至MMAD单元220,并将fp16运算数以一“填充”格式递送,其中将三个额外的位(全部为0)插入五个指数位的左侧并将13个额外的位(全部为0)插入十个小数位的右侧。在第0级中,格式化块400较佳对某些运算的所接收运算数实施进一步的格式化。
图5是一方块图,其显示格式化块400的组件。每一所接收运算数A0、B0、C0沿多个路径并行地传送,其中对每一路径应用不同的转换。八位上转换器504、505、506通过对最高有效位(MSB)进行符号扩展来将8位整数转换成32位整数。类似地,16位上转换器508、509、510通过符号扩展将16位整数转换成32位整数。对于运算数A,fp16上转换器块512通过将指数偏置从15调节至127而将fp16运算数提升至fp32。
选择多路复用器(mux)514、515、516根据OPCTL信号为每一运算数选择正确的输入格式,所述OPCTL信号对应于运算数格式(其由上文所述的操作码加以规定)。在多路复用器514-516之后,每一运算数路径还包括条件反相器电路518、519、520,所述条件反相器电路518、519、520可用于通过使所有位反转而产生运算数的1补数。条件反相器电路518-520由OPCTL信号及运算数的符号位进行控制。可在其中实施求反的具体情形将在下文中进行说明。
在某些实施例中,对于fp16及fp32运算数,在内部使用一33位的表示形式。在此种表示形式中,在有效数字位前面带有隐含的前导1,从而在fp32(fp16)情况下传播24(11)个尾数位。在其他实施例中,可使呈少于32位的格式的整数运算数在32位字段中任意对齐,且格式化块400可将这些运算数移位至内部32位数据路径的LSB。类似地,可不经填充地递送fp16运算数,且格式化块400可如上文所述插入填充或者实施其他对齐操作。
C.第1级中的元件
重新参见图4,格式化块400将运算数A、B及C提供至第1级的各个数据路径。第1级在尾数路径413中包括左乘法器块416,在指数路径415中包括指数乘积块424,且在测试路径417中包括逐位逻辑块434,以及如上文所述的特殊数检测块438。
图6A是左乘法器块416的方块图。左乘法器块416为使用Booth 3算法进行的乘法准备被乘数(运算数A)及乘数(运算数B);实际的乘法是在第2级的乘法器块414中实施。在整数运算数A及B的情形中,左乘法器块416对整个运算数进行运算;在浮点运算数的情形中,左乘法器块416对包含隐式或显式前导“1”的尾数部分进行运算。因而,在本说明提及运算数时,应了解,可根据需要使用整个运算数或仅使用尾数部分。
如在图6A中所示,左乘法器块416包括“3X”加法器612、Booth3编码器614、及选择乘法器(mux)616。3X加法器612-其可为一般的常规设计-接收运算数A(被乘数)并计算3A(例如通过A+2A进行相加)以供乘法器块414使用。将运算数A及所计算的3A转接至第2级。Booth3编码器614-其可为一般的常规设计-接收运算数B(乘数)并执行常规Booth3编码,从运算数B的各个位产生交叠的4位式段。在其他实施例中,可使用除Booth3以外的乘法算法,且可使用任何恰当的左乘法器电路来取代本文所述的特定电路。
选择mux 616由OPCTL信号进行控制,以在运算数B、运算数B的经Booth3编码型式、及以经Booth3编码的形式存储于寄存器618、620中的常数乘数(例如1/2π及1.0)之间进行选择。所选的值作为结果BB提供至第2级。对于FMUL或IMUL运算,选择运算数B的经Booth3编码的型式。在其他运算中,可对选择mux 616进行控制,以使运算数B绕过Booth3编码器614(例如对于下文所述的比较运算)或者选择来自寄存器618、620的常数乘数中的一者(例如,对于下文所述的自变数归约或格式转换运算)。在其他实施例中,对于其中使用常数乘数的运算,可将所述乘数作为运算数B0提供于MMAD单元220的输入端处,或者可在左乘法器块416的输入端处选择乘法器的未经Booth编码的表示形式,然后使用编码器614对其进行Booth编码。
图6B是显示指数乘积块424的方块图。对于浮点算术运算,指数乘积块424接收运算数A及B的指数位(Ea,Eb)并在第一加法器电路622中将其相加,以计算乘积A*B的指数。指数乘积块424还包括第二加法器电路624,其将一偏置量β(其可为正数、负数、或0)加至和Ea+Eb。偏置量寄存器626存储一个或多个候选偏置值,并使用OPCTL信号以与运算相关的方式来选择恰当的偏置量。例如,在FMUL运算期间,当将两个经过偏置的指数Ea与Eb相加时,可使用偏置量β来校正fp16或fp32指数偏置量。在其他运算期间,可如下文所述为偏置量β选择不同的值。在指数乘积块424的输出端处,选择mux 628响应于OPCTL信号而在所述和与所述两个输入指数之间进行选择。将结果Eab在路径431上传播至第2级。
较佳比输入指数Ea、Eb多使用一个位来表示结果Eab,从而能够在下游检测到指数饱和(溢出)。例如,如果指数Ea及Eb分别为八位,则Eab可为九位。
图6C是显示逐位逻辑块434的方块图。运算数A及B提供至AND2电路630、OR2电路632、及XOR2电路634。这些电路中的每一者-其可为一般的常规设计-对运算数A及B的对应位实施指定的逻辑运算,从而提供32位的候选结果。并行地操作条件反相器635,以使运算数C在FRC运算期间反相并在其他运算期间不加改变地传送运算数C。选择mux 636响应于OPCTL信号而选择各种逻辑运算的结果或运算数C(或其反数)中的一者,所选数据(R1)在路径433上经第2级传播。选择mux 636的OPCTL信号经配置以针对MAD、ADD或CMP运算来选择运算数C;将选择所述逻辑运算结果中恰当的一者来用于逻辑运算;且将传播来自XOR2电路634的结果以用于SET运算。对于某些运算,在下游组件中不使用结果R1;在这些情形中,可作出任一选择。
第1级还包括“I2F字节”电路444,如在图4中所示。在I2F格式转换操作期间所使用的该电路选择运算数A的八个MSB作为字节A并将字节A通过路径435传播至第2级。I2F字节电路444还包括AND树(未显示),其判定是否运算数A的24个LSB全部为1。路径437上的AND树输出信号(And24)可为单个位,如果运算数A的所有24个LSB均为1,则将所述单个位设定为1,否则设定为0。
D.第2级中的元件
重新参见图4,第2级包括位于尾数路径413上的乘法器块414及位于指数路径415上的指数和块426。在测试路径417上,路径433将数据R1一直传播至第3级,而不进行进一步处理。
图7A为包括乘法器树700的乘法器块414的方块图。在乘法器树700中,Booth多路复用器704从第1级接收运算数A、所计算结果3A及经Booth3编码的运算数BB,并执行Booth乘法算法。如在此项技术中所习知,Booth乘法涉及到选择与经Booth3编码的乘数BB中每一位组相对应的部分乘积(其将为被乘数A的倍数)。使用一进位-保存加法器(CSA)树对所得到的部分乘积进行相加,在该实施例中,所述进位-保存加法器(CSA)树由三个(3∶2)CSA706组成,所述三个(3∶2)CSA706向两个(3∶2)CSA 708进行馈入,而所述两个(3∶2)CSA 708又对一个(4∶2)39位CSA 710进行馈入。Booth多路复用器704及CSA 706、708、710可为一般的传统设计。所述最终输出是呈冗余(和,进位)表示形式的乘积A*B。和及进位字段较佳宽于运算数(例如在一个实施例中为48位)。可替代为其他乘法器电路,包括执行不同于Booth乘法的算法的电路。
在一个实施例中,所述乘法器支持多达24位×24位乘法。可使用此项技术中所知的多种乘法运算(例如多种16位×16位乘法运算)来合成较大运算元(例如32位整数)的乘积。在其他实施例中,所述乘法器可具有不同的大小,并可支持例如多达32位×32位乘法。这些设计选项对于本发明而言无关紧要,并可基于例如芯片面积及性能等考虑因素。
乘法器块414还包括运算数A及B的旁通路径,具体而言,选择mux 711从乘法器树700接收运算数A及和字段,同时另一选择mux 713从乘法器树410接收运算数B及进位字段。Mux 711、713由共用OPCTL信号加以控制,以便选择运算数(A,B)或乘法结果(和,进位)作为结果R2a及R2b,并将其传播至路径715、717上。对于乘法或MAD运算,将选择和及进位结果。对于其他运算,例如ISAD或最大或最小运算,将如下文所述选择运算数A及B。应注意,较佳使结果路径715、717宽于正规运算数(例如48位相对于32位);相应地,当mux 711、713选择运算数A及B时,可根据需要使用前导或后随的0来填充运算数A及B。
图7B是指数和块702的方块图,指数和块702包括差值电路714、选择mux 716及八位优先权编码器718。差值电路714在路径431上接收乘积指数Eab及在路径439上接收运算数C的指数部分(Ec),并计算差值(Eab-Ec)。在浮点加法或MAD运算期间,差值电路714在路径721上提供代表所述差值的符号的信号Sdiff。该信号用于控制选择mux 716选择Eab与Ec中的较大者作为和(A*B)+C的有效最终指数(EFE)。信号EFE在路径723上向下游传播。差值(Ediff)自身-其既可为正也可为负-在路径725上向下游组件传播。对于除浮点加法或MAD以外的运算,指数和块702可用于其他用途;相应地,差值电路714接收OPCTL信号,所述OPCTL信号控制信号Sdiff及Ediff的产生,如下文所述。
在I2F转换运算期间使用优先权编码器718在运算数A的八个MSB中识别前导1(若有)的位置。将MSB(字节A信号)通过路径435提供至优先权编码器718,且优先权编码器的输出BP代表从前导1的位位置导出的指数(如果所有八个MSB均为0,则输出BP可为0)。在I2F转换运算期间,差值电路714还在如下文所述的输出选择期间使用信号And24。
E.第3级中的元件
第3级在尾数路径413上包括右乘法器块418、在指数路径415上包括Rshift计数电路428、并在测试路径417上包括比较逻辑436。
图8A是右乘法器块418,其包括中间乘积(IP)加法器804、粘附位逻辑808、整数mux 810、输入选择mux 812及输出选择mux 814。响应于OPCTL信号,输入选择mux 812在路径717(来自第2级中的乘法器块414)上的结果R2b与存储于寄存器816中的常数运算数(值1)之间进行选择。如下文所述,在其中需要运算数A的2补数的某些格式转换运算期间,用于mux 812的OPCTL信号选择所述常数运算数。在这些情形中,在第0级中使运算数A反相,并使用IP加法器804加上1。对于其他运算,mux 812可选择结果R2b。
IP加法器804对结果R2a及R2b(或R2a与常数运算数)进行相加,以产生-和RP。IP加法器804还通过路径805将所述和RP的两个MSB(RP2)提供至比较逻辑块806。在乘法或MAD运算的情形中,所述和RP是A*B的乘积。对于其他运算而言,所述和RP可代表A+B(例如,当使运算数A及B绕过乘法器树700时)或~A+1(例如当在第0级中使运算数A反相并使其绕过乘法器树700、且输入mux 812选择常数运算数时)。
如上文所述,结果R2a及R2b可宽于正规运算数(例如48位);相应地,IP加法器804可构建为48位加法器,且路径RP可为49位宽以容纳进位。右乘法器块802较佳将和RP减至具有正规运算数宽度(例如32位)的结果R3a,例如通过丢弃LSB。粘附位逻辑808-其可为一般的常规设计-较佳收集粘附位SB3(所丢弃的位中的某些或全部)并将其提供至下游组件,下游组件可如下文所述使用粘附位来进行舍入。与此并行地,整数mux 810处理整数运算数;mux 810响应于OPCTL信号而选择所述49位和RP的上部32位或下部32位。所述选择取决于运算数R2a及R2b在宽路径715、717上如何对齐。
输出mux 814响应于取决于所述运算的OPCTL信号而选择来自浮点路径或整数路径的结果R3a,并在路径421上提供R3a。此外,一旁通路径817使结果R2a能够绕过IP加法器804并由输出mux 814加以选择;因此,R2a(其可为运算数A)可作为结果R3a在路径421上传播。
重新参见图4,Rshift计数电路428可响应于OPCTL信号。在FMAD(或FADD)运算中,Rshift计数电路428使用路径725上的指数差Ediff来确定浮点加数(例如A*B及C)是否正确对齐。具体而言,具有较小指数的加数将右移,从而可使用较大的指数对其进行表示。相应地,Rshift计数电路428使用指数差Ediff的符号来判定A*B或C是否具有较大的指数,并产生如下文所述来控制将哪一加数右移的交换控制信号(SwapCtl)。Rshift计数电路428还使用指数差Ediff的量值来产生如下文所述控制如何快地使所选加数右移的移位量信号(RshAmt)。可例如根据加数的宽度对移位量进行钳制。这些信号在路径441上传播至对齐块420。
借助OPCTL信号,利用Rshift计数电路428来用于其中可使用右移的其他运算。这些应用的实例如下文所述。
图8B是显示比较逻辑块436的方块图,比较逻辑块436包括AB符号电路820、二元测试逻辑单元822及选择mux 824。比较逻辑块436经配置以接收输入R1、R2a及R2b,并选择其中一个来作为结果R3b在路径419上传播。在为MAD或加法运算的情形中,接收运算数C作为输入R1并使其不加修改地传播过比较逻辑块436。对于其他运算(包括LOP、CMP、MAX、MIN及SET)而言,比较逻辑块436可选择其输入中的不同的一者。
AB符号电路820在路径805上从IP加法器804(图8A)接收两个MSB RP2。在为最大(FMAX或MAX)、最小(FMTN或TMIN)、或二元测试(FSET或ISET)运算的情形中,较佳在第0级中由条件反相器519使运算数B反相(参见图5),并使用如上文所述的选择mux将运算数A及B旁通至IP加法器804。在这些情形中,结果RP是差值A-B,且MSB RP2指示所述差值是否是负的(意味着B>A)。AB符号电路820接收MSB并产生符号信号Sab(例如如果A-B是负的,则将一位的信号置高,否则将其置低)。所述符号信号Sab通过路径821提供至二元测试逻辑单元822及下游组件。
除符号信号Sab外,二元测试逻辑单元822还通过路径429从第1级(图4)的特殊数检测块438接收特殊数信号SPC、OPCTL信号、及从第1级的逐位逻辑电路434接收结果R1。结果R1对于条件选择运算(FCMP、ICMP)而言是运算数C,或者对于其中第3级中的二元测试逻辑单元822现用的其他运算而言是XOR单元634的输出。
响应于这些输入信号,二元测试逻辑单元822产生用于控制选择mux 824的操作的比较选择信号(CSEL)、以及在路径825上传播至第7级的布尔结果信号(BSEL),如在图4中所示。CSEL信号也可通过路径827传播至下游组件。
CSEL及BSEL信号的产生是与运算相关的。在FMAX、IMAX、FMIN或IMIN的情形中,使运算数A及B绕过乘法器树700(图7A)并作为结果R2a及R2b提供。二元测试逻辑822产生CSEL信号,以根据符号信号Sab来选择这两个运算数中的一个。
对于条件选择运算(FCMP、ICMP)而言,路径433上的结果R1是运算数C。特殊数信号SPC尤其指示运算数C是否为0(或者任何其他特殊数)。二元测试逻辑822使用运算数C的符号位及特殊数信号SPC来判定是否满足条件C≥0并相应地选择运算数A(R2a)及B(R2b)中的一者。
对于二元测试运算(FSET、ISET),二元测试逻辑822产生布尔真或假信号BSEL。该信号通过路径825提供至第7级,在第7级中使用其来产生布尔结果的恰当的32位表示形式。在此种情形中,路径433上的结果R1提供32位的XOR2结果。二元测试逻辑822实施四个基本测试:“无序”(A?B),“等于”(A=B),“大于”(A>B)及“小于”(A<B)。如果A与B中的至少一者为INF或NaN-此可参照特殊数信号SPC加以确定,则A?B测试的结果是布尔真。如果路径R1上XOR结果的所有位均为0,则A=B测试的结果是布尔真。如果路径Sab上的符号信号指示A-B是负数,则A<B测试的结果是布尔真。如果其他三个测试的结果均是假,则A>B测试的结果是布尔真。可通过逆反这四个基本测试的结果来求解否定测试(不等于、不大于、不小于、非无序)。可通过对来自这四个基本测试或其否定测试的结果构造适当的布尔OR来支持其他组合测试(例如A<B等等)。在一个实施例中,二元测试逻辑822经配置以并行地执行多个测试并根据OPCTL信号来选择结果BSEL。可选择mux 824的任何输入作为结果R3b,因为该结果在SET运算期间将被忽略。
F.第4级中的元件
重新参见图4,第4级包括对齐块420及指数递增块430。
图9是显示对齐块420的方块图。在FMAD或FADD运算期间,使用对齐块420使尾数对齐,以准备进行浮点加法。对齐块420还用于在如下文所述的其他运算期间实施右移。Rshift计数电路428通过路径441为对齐块420提供控制信号。
对齐块420包括“小的”交换mux 904及“大的”交换mux 906,交换mux 904及906分别从路径421、419接收输入R3a及R3b。小的交换mux 904及大的交换mux906处于来自Rshift计数电路428的SwapCtl信号的共同控制之下,以便当小的交换mux 904将输入R3a、R3b中的一者指引至小运算数路径908内时,大的交换mux 906将另一输入R3b、R3a指引入大的运算数路径910内。在FMAD运算情形中,运算数对应于(A*B)及C,且将具有较小指数的运算数指引至小的运算数路径908内。
小运算数路径908包括右移电路912、粘附位逻辑914、移位mux 916、及条件反相器918。右移电路912将小运算数路径908上的数据位右移,其中移位量(例如0至32位)受来自Rshift计数电路804的RshAmt信号的控制。在一个实施例中,可通过RshAmt信号或通过单独的OPCTL信号(未显示)来控制右移电路912实施算术移位或逻辑移位。
粘附位逻辑914捕获由右移电路912移出的LSB中的某些或全部,并通过路径915将粘附位SB4提供至第5级,以供如下文所述用于舍入。在一个实施例中,粘附位逻辑914还通过SB3从第3级(参见图8A)接收粘附位SB3;可响应于OPCTL信号来控制粘附位逻辑914是传播所接收的粘附位SB3还是产生新的粘附位。
提供移位mux 916,以在前一乘法的结果向下一位位置进位时调节对齐。其也可用于在移位量RshAmt所基于的指数差(Ediff)为负值的情形中支持对齐移位的正确实施。这些情形可通过如下方式来处理:在Rshift计数电路428中将Ediff值反相以获得RshAmt、然后操作移位mux 916来实施进一步的右移1位。在某些实施例中,移位mux 916也可用于支持其中在不使用额外专用逻辑情况下当将运算数移位32位时应返送回0的运算。
条件反相器918可将小运算数路径918上的运算数反相或者不响应于OPCTL信号及在某些情形中不响应于其他信号,例如来自比较逻辑块436(参见图8B)的CSEL信号或Sab信号。条件反相可用于例如在第5级期间实施减法运算。输出信号R4a在路径909上提供至第5级。
大运算数路径910包括条件0电路920及移位mux 922。条件0电路920-其可响应于OPCTL信号-可用于将路径910上的运算数替换为0。这例如在其中希望将R3a或R3b不加修改地传递过第5级的加法器(在下文中说明)的运算期间使用。对于FMAD运算,条件0电路920不现用,且大的运算数不加修改地通过。移位mux 922,如移位mux 916一样,可用于在前一乘法出现进位的情况下调节对齐。
将来自大运算数路径410的输出信号R4b在路径911上提供至第5级。
重新参见图4,指数递增块430在路径723上接收有效最终指数EFE并在路径421上接收乘积结果R3a(或者仅乘积结果的最高有效位)。在FMAD或FMUL运算期间,指数递增块430检测所述48位和与右乘法器块418中的进位结果(R2a、R2b)的相加的结果是否向第49位位置进位。如果是,则将有效最终指数EFE递增1。将经修改(或未经修改)的有效最终指数EFE2通过路径443提供至第4级。
G.第5级中的元件
第5级包括小数和块422。在加法及MAD运算期间,该块实施加法。使用其的所有运算的舍入也在该级中执行。
图10是小数和块422的方块图,小数和块422包括加1加法器1002、AND2电路1004、反相器1006、舍入逻辑单元1008及选择mux 1010。在路径909、911上从对齐块420接收加数R4a及R4b。加1加法器1002-其可为一般的传统设计-其将所述加数相加以产生Sum(和)输出,并对所述和加上1以产生Sum+1(和+1)输出。反相器1006将所述和输出反相,以产生-Sum(-和)输出。这些输出支持2补数算法以及舍入。
并行地,AND2电路1004对运算数R4a及R4b的对应位实施逻辑AND运算,并提供32位的结果。AND2电路1004是在如下文所述的FRC运算期间使用。在其他运算期间,可绕过AND2电路1004或者将其置于低功率空闲状态中。
舍入逻辑1008-其可为一般的传统设计-接收OPCTL信号、在路径821上从比较逻辑块436(参见图8B)接收符号信号Sab、在路径915上接收粘附位SB4、及从加1加法器1002接收所选的MSB及LSB。响应于这些信号,舍入逻辑1008指示mux1010选择Sum、Sum+1、-Sum及AND2输出中的一者作为结果R5;在路径1011上传播所选结果R5。
结果R5的选择取决于若干种考虑因素。例如,舍入逻辑1008较佳执行对IEEE标准算法所规定的四种舍入模式(最近、底限、顶限及截取),其中不同的模式可能选择不同的结果。可使用OPCTL信号或另一控制信号(未显示)来规定其中一种舍入模式。另外,所述选择还将取决于格式(整数还是浮点数)、所述结果是正的还是负的、是不是请求绝对值、及类似考虑因素。可执行用于根据各种舍入模式来舍入正数及负数的传统规则。对于FRC运算,选择AND2电路1004的输出;对于其他运算,则可忽略该输出。
H.第6级中的元件
重新参见图4,第6级包括正规化块423及指数递减块432。在FMAD、FMUL或FADD运算期间,正规化块423运行以通过将结果左移直到前导位是1为止来对齐尾数R5。由于在该上下文中,左移意味着乘以2,因而将左移量提供至指数递减块432,指数递减块432相应地减小指数EFE,从而产生最终指数E0。在其他运算期间,利用正规化块423如下文所述实施左移。
图11是正规化块423的方块图。优先权编码器1108在路径1011上接收加法结果R5,并确定前导1的位置。该信息提供至移位控制电路1110,由移位控制电路1110产生左移量信号LshAmt。LshAmt信号提供至左移电路1112且还提供至指数递减块432(图4)。左移电路1112将结果R5左移规定的位数,并在路径425上提供结果R6。指数递减块432根据LshAmt信号减小指数EFE2,并在路径427上提供所得到的最终指数E0。
移位控制电路1110还接收OPCTL信号、从路径443接收EFE2信号、及从路径429接收特殊数信号SPC,从而能够在其他上下文中利用左移电路1112来实施左移,这些上下文的实例在下文中进行说明。
I.第7级中的元件
重新参见图4,第7级包括输出控制块440,所述输出控制块440对最终结果(OUT及COND)进行格式化及选择以通过路径410、412递送至MMAD单元220外部的组件。图12是输出控制块440的方块图。对于浮点运算,格式块1210通过路径427接收最终指数E0及通过路径425接收最终尾数R6。对于浮点运算,格式块1210使用值E0及R6来产生由OPCTL信号所规定的fp32或fp16格式的结果Rdata。
对于整数运算,格式块1210接收结果R6并舍弃指数E0。格式块1210可使指数结果R6不加修改地通过或应用恰当的格式化,例如对于使用少于32位的整数格式,在32位结果的恰当位置上使有效位对齐。在某些实施例中,格式块1210还对溢出或下溢(例如溢至所规定整数格式的最大或最小值)的整数输出进行钳制。
将经过格式化的结果Rdata作为输入提供至一最终选择mux 1212,所述最终选择mux 1212在所述结果Rdata与一个或多个预定值之间进行选择来作为路径410上的最终结果OUT。在一个实施例中,预定值包括呈fp16及fp32格式的特殊数NaN及INF、以及32位的布尔真值(例如0x1)及假值(例如0x0)。所选最终结果OUT还提供至条件码电路1218,由条件码电路1218根据所述结果产生条件码COND。由于结果的格式部分地取决于操作码,因而条件码电路1218接收一指示预期格式的OPCTL信号。条件码的实例已在上文进行了说明。
在浮点算术运算期间,指数饱和逻辑1216接收最终指数E0并判定是否已出现指数溢出(或下溢)。所述判定较佳部分地基于一指示是在使用fp16格式还是在使用fp32格式的OPCTL信号。来自指数饱和逻辑1216的指数饱和信号Esat提供至最终结果选择逻辑1214。
最终结果选择逻辑1214响应于各控制信号的组合而控制最终选择mux 1212的操作,所述控制信号包括OPCTL信号、路径429(来自第1级)上的特殊数信号SPC、路径825(来自第3级)的布尔选择信号BSEL、及指数饱和信号Esat。最终结果的选择根据运算及结果格式、以及特殊数或饱和的出现而变化。
例如,在浮点算术运算的情形中,最终结果选择逻辑1214较佳使用特殊数信号SPC来为涉及到特殊数(例如将该NaN加到任意数或乘以任意数的结果是NaN,等等)的算术构建规则。当输入运算数(A、B或C)中的一者为特殊数时,最终结果选择逻辑1214指令mux 1212优先于所述结果Rdata而选择对应的特殊数。此外,倘若出现指数溢出或下溢状态,最终结果选择逻辑1214还使用饱和信号Esat来选择特殊数(例如INF或0)。
在二元测试(FSET、ISET)运算情形中,最终结果选择逻辑1214使用布尔选择信号BSEL在布尔真输出与逻辑假输出之间进行选择而忽略数值结果Rdata。
J.运算数旁通或直通路径
如上文所述,MMAD单元220提供旁通或直通路径,从而使运算数不加修改地传播过各种电路块。例如,运算数A在第1级中直通过左乘法器块416(参见图6A)。运算数A可进一步作为结果R2a绕过第2级中的乘法器树700(参见图7A)、作为结果R3a绕过第3级)中的IP加法器804(参见图8A、及作为结果R4a直通过第4级中的小运算数路径908(参见图9)。此外,条件0单元920可将结果R4b强制至0,以便通过第5级中的加1加法器1002将运算数A与0相加(参见图10)。如果随后mux 1010选择Sum结果,则结果R5为运算数A。
类似地,运算数B可绕过第1级中的左乘法器块416(参见图6A)而到达路径B并作为结果R2b绕过第2级中的乘法器树700(参见图7A)。运算数C可作为结果R1直通过第1级中的逐位逻辑块434(参见图6C),并作为结果R3b直通过第3级中的比较逻辑块436(参见图8B)。在该实施例中,不为运算数B及C提供进一步的旁通路径;在替代实施例中,如果需要,可提供进一步的旁路(例如类似于针对运算数A所示的旁路)。
因此,第III部分中的操作说明涉及旁通或直通至特定级的各种运算数;应了解,沿循旁通或直通过某些级的路径未必要求在后续级中继续沿循旁通路径。另外,在一个级中经过修改的值可在下一个级中沿循旁通路径。当在运算期间旁通过特定电路块时,可将该块设定为非现用状态,以减小功率消耗,或者使其正常工作,但忽略其输出,例如借助选择mux或其他电路元件。
应了解,本文所述的MMAD单元只是例示性的,且也可存在变化及修改形式。本文所述的许多电路块提供传统功能,并可使用此项技术中所习知的技术进行构建;相应地,在本文中省略了对这些块的详细说明。可改变对操作电路的区块划分,并可组合或改变各区块。此外,如在下文中将显而易见,也可修改或改变管线级的数量及对特定级进行的特定电路块或运算的指配。为特定实施方案进行的电路块选择及布置将取决于所支持的一组运算,且所属领域的技术人员将知,并非本文所述的所有块均是为所述运算的每一种可能组合所必需的。
III.MMAD单元运算的实例
MMAD单元220较佳利用上文所述的电路块以面积有效的方式支持在图3中所列的所有运算。相应地,MMAD单元220的运算至少在某些方面取决于正在执行哪一运算。以下各部分对使用MMAD单元220执行图3中所列的每一运算进行说明。
A.浮点运算
MMAD单元220所支持的浮点运算显示于图3中的302处。对于算术运算(FADD、FMUL、FMAD),使用指数路径415来计算指数,同时使用尾数路径413来计算尾数。其他浮点运算(FCMP、FMIN、FMAX及FSET)利用如下性质:在fp32及fp16格式中,可通过将各个数视为仿佛其是32位无符号整数一样来精确地确定相对量值;这些运算是使用尾数路径413及测试路径417进行处理。
1.FMAD运算
FMAD运算计算以fp16或fp32格式提供至MMAD单元220的运算数A、B及C的A*B+C,以与输入运算数相同的格式返送回结果。
在第0级中,接收运算数A0、B0及C0并通过选择mux 514-516的操作将其不加修改地穿过格式化块400传递至运算数A、B及C(图5)。
在第1级中,左乘法器块416根据运算数A的尾数部分计算3A,且Booth3对运算数B的尾数部分进行编码,从而在路径BB上传播经Booth编码的尾数。指数乘积块424接收运算数A及B的整数部分(Ea,Eb)并计算Ea+Eb,其中较佳使用偏置量β在所述和中重建正确的fp16或fp32指数偏置量。将运算数C的尾数部分递送至逐位逻辑块434,其中mux 636(图6C)选择运算数C并将其作为结果R1传播至路径433上。运算数C的指数部分(Ec)在路径439上路由至指数路径415。在第1级期间,特殊数检测块438判定运算数A、B或C中的任一者是否是特殊数并在路径429上产生恰当的特殊数信号SPC以供在第7级中使用。
在第2级中,乘法器块414计算A*B的尾数部分,并选择和字段及进位字段作为结果R2a及R2b。指数和块426在路径431上接收路径Eab上的乘积指数并在路径439上接收运算数C的指数部分(Ec)。差值单元704(图7B)计算Eab-Ec并在路径725上传播结果Ediff。此外,根据Eab-Ec的符号,选择Eab与Ec中的一者作为有效最终指数EFE。运算数C的尾数(R1)直通过路径433。
在第3级中,右乘法器块418将所述和与进位结果R2a与R2b相加,从而在路径421上提供结果R3a。粘附位逻辑808(图8A)可进行操作,但在该实施例中,粘附位SB3路径在后续级中被忽略,因而乘积A*B被截断而非进行舍入。Rshift计数块428使用路径725上的Ediff的符号来确定哪一运算数进行移位以进行浮点加法,并产生对应的SwapCtl信号。Rshift计数块428还使用路径Ediff上的值的量值来确定对所选运算数进行移位的位数,并产生恰当的RshAmt信号。比较逻辑436使运算数C的尾数部分作为结果R3b直通过路径419。
在第4级中,对齐块420接收乘积A*B的尾数作为结果R3a并接收运算数C的尾数作为结果R3b。根据来自Rshift计数块804的SwapCtl信号,交换mux 904、906(图9)将所述运算数中的一者指引至小运算数路径908内并将另一者指引至大运算数路径910内。右移电路912使小运算数右移,其中粘附位逻辑914根据所移出的位来产生粘附位SB4。将所得到的对齐的加数R4a、R4b提供于路径909、911上。指数递增块430(图4)接收乘积A*B的尾数(R3a),并如上文所述使有效最终指数EFE递增或不递增。在路径443上传播结果EFE2。
在第5级中,小数和块422接收对齐的加数R4a及R4b。加1加法器1002(图10)产生Sum(和)及Sum+1(和+1)输出,且反相器1006提供反相的Sum。舍入逻辑1008在路径SB4上接收粘附位,并根据所述粘附位、所选舍入模式、及在加1加法器1002中计算出的和的符号来控制选择mux 1010在Sum与Sum+1输出之间进行选择。所得到的尾数R5在路径1011上进行传播。
在第6级中,正规化块423将尾数R5正规化。优先权编码器1108(图11)检测前导1的位置,并将该数据提供至移位控制单元1110,由移位控制单元1110产生对应的LshAmt信号。左移块1112使尾数左移并将结果R6传播至路径425上。指数递减块432(图4)相应地下调有效最终指数EFE2并将所得到的最终指数E0传播至路径427上。
在第7级中,输出控制电路440产生最终结果。格式块1210(图12)接收指数E0及尾数R6,并以正确格式(例如fp32或fp16)在Rdata上产生正规数。饱和逻辑1216根据所规定格式来评价指数E0,检测任何溢出,并产生恰当的饱和信号Esat。最终结果选择逻辑1214接收饱和信号Esat以及特殊数信号SPC。对于该运算而言,最终结果选择逻辑1214指引mux 1212选择结果Rdata,除非Esat或SPC信号指示最终结果应为特殊数。在该情形中,选择恰当的特殊数作为最终结果。如上文所述,对于其中所述输入运算数中的一者为特殊数的情形,最终结果选择逻辑1214可执行与IEEE 754相符的规则(或其他规则)。
2.FMUL及FADD运算
对于浮点乘法(FMUL),MMAD单元220接收被乘数作为运算数A并接收乘数作为运算数B;较佳为运算数C提供值0.0(浮点0)。然后,执行上文所述的FMAD运算,以产生乘积A*B(+0.0),只是在第4级中,粘附位914(图9)较佳使来自第3级的粘附位SB3直通过,从而能够对乘积进行舍入。在某些实施例中,可借助第4级中的条件0块920(图9)将运算数C强制至0,以便可为运算数C提供任意值。
对于浮点加法(FADD),MMAD单元220接收加数作为运算数A及C。在一个实施例中,通过将运算数B设定为1.0以计算(A*1.0)+C来实施FMAD运算;可例如通过将浮点1.0作为运算数B提供至MMAD单元220或者通过操作左乘法器选择mux 616(图6A)以选择来自寄存器620的经Booth3编码的1.0,来实施将运算数B设定为1.0。
在FADD的一替代实施方案中,将运算数B设定为0.0(例如通过将浮点0作为输入运算数提供至MMAD单元220),并将运算数A及B旁通至第3级,其中可由右乘法器块418中的IP加法器804(图8A)来计算和A+0.0,或者在一替代实施例中,可将运算数A作为结果R3a进一步绕过IP加法器804。各后续级如对于FMAD运算一样进行操作来计算A+C。
3.FMIN及FMAX运算
浮点最大(FMIN)及最小(FMIN)运算返送回其两个运算数中较大或较小的一者。如上文所述,这些及其他基于比较的运算是使用尾数路径413及测试路径417的组件进行处理。MMAD单元220接收运算数A及B以对其实施FMAX或FMIN运算;运算数C可设定为任意值。
对于FMIN及FMAX运算,将运算数B在第0级中反相(反相成~B),且使运算数A及~B的所有32个位分别作为结果R2a及R2b直通至第3级。在第3级中,IP加法器804(图8A)计算和A+~B(即A-B)。将该结果RP2的两个MSB提供至比较逻辑块436。应注意,尽管运算数A及B为浮点数,然而由于fp32及fp16格式的定义方式,为便于进行比较运算,可仿佛其为整数一样对其进行相减。
在比较逻辑块436中,AB符号电路820(图8B)在路径RP2上接收信号并产生恰当的符号信号Sab。二元测试逻辑822如上文所述作出选择:对于FMAX,如果(A+~B)是负的(即如果B大于A),则选择B,相反则选择A;对于FMIN,如果(A+~B)是负的,则选择A,相反则选择A。应注意,未对A=B的情形进行特殊对待,因为FMIN或FMAX选择这两个运算数中的任一个均将得到正确的结果。二元测试逻辑822产生一恰当的CSEL信号,所述CSEL信号指令mux 824将R2a(运算数A)及R2b(运算数~B)中恰当的一者作为结果R3b传播。
在第4级中,小的交换mux 904(图9)选择将结果R3b传播至小运算数路径908,同时大的交换mux 906选择结果R3a-由于在第3级中的运算,其可为A-B。Rshift计数电路428可用于产生SwapCtl信号的恰当状态,以响应于OPCTL信号而形成该结果,而无论指数如何。在大运算数路径910中,操作条件0块914以将结果R4b清零。在小运算数路径908中,使结果R3b作为结果R4a直通过。如果在第3级中选择运算数~B(其在第0级中反相),则可使用条件反相电路918使结果R4a再反相。为检测此种情形,条件反相电路918可从路径827接收CSEL信号(参见图8B)。
在第5级中,加1加法器1002(图10)将R4a(A或B)与R4b(0)相加。mux1010选择Sum结果(即所选运算数A或B)作为结果R5。
在第6级中,移位控制电路1110(图11)通过将LshAmt设定为0来对OPCTL信号作出响应,以使结果R5作为结果R6不加修改地传播。
在第7级中,格式块1210(图12)可提供未经改动的结果R6作为结果Rdata。倘若A或B为特殊数,则最终结果选择逻辑1214可操作mux 1212,以使用恰当的特殊数来覆盖结果Rdata。例如,如果A或B是NaN,则可将FMAX或FMIN结果强制至NaN。
4.FSET运算
对于二元测试(FSET)运算,MMAD单元220接收运算数A及B;可提供任意值作为运算数A。如同上文所述的FMIN及FMAX运算一样,在第0级处将运算数B反相,并将运算数A及~B旁通至第3级,在第3级中使用PP加法器802(图8A)对其进行相减,将MSB RP2提供至比较逻辑块436。
在第1级中,在使运算数A及~B直通的同时,逐位逻辑块434操作,其中mux 636(图6C)选择XOR2单元634的结果作为结果R1进行传播。
在第3级中,AB符号电路820(图8B)接收信号RP2并产生符号信号Sab。二元测试逻辑822接收Sab信号、XOR2结果(R1)、特殊数信号SPC、及OPCTL信号,所述OPCTL信号规定要实施哪一二元测试。二元测试逻辑822如上文所述执行其测试(参见第II.E部分),并将布尔结果BSEL传播至路径825上。
布尔结果BSEL在路径825上传播至第7级。第4至6级中的各种电路块可依据碰巧出现于恰当信号路径中的任何信号进行操作,或者可将其禁用。在第4-6级中所执行的任何运算的结果均将被输出控制块440忽略。
在第7级中,最终结果选择逻辑1214接收布尔结果BSEL并操作最终选择mux1212以相应地在布尔真(例如0x1)与假(例如0x0)值之间进行选择。结果BSEL正确地反映所述运算数为特殊数,且最终结果选择逻辑1214可在FSET运算期间忽略特殊数信号SPC。
5.FCMP运算
对于三元条件选择运算(FCMP),MMAD单元接收运算数A、B及C。运算数A及B分别作为结果R2a及R2b直通至第3级。运算数C作为结果R1直通至第3级。
在第3级中,二元测试逻辑822(图8B)接收运算数C(R1)及特殊数信号SPC。如上文所述(参见第II.E部分),二元测试逻辑822使用这些信号来判定是否满足条件C>0。如果C>0,则二元测试逻辑822指令mux 824选择运算数A(R2a),否则选择运算数B(R2b)。由于NaN既不大于也不等于0,因而当运算数C为NaN时,将选择运算数B。
所选的值以上文针对FMIN及FMAX运算所述的方式作为结果R3b传播至第7级。(结果R3a可为来自IP加法器804(图8A)的运算数A及B的和,或者可选择运算数A作为结果R3a;在这两种情形中,结果R3a均不影响最终结果。)在第7级中,最终结果选择逻辑1214较佳检测其中运算数C是NaN的情形并以NaN值来覆盖所传播的结果。
B.整数算术
整数运算数不包括指数位。在本文所使用的格式中,使用2补数来表示整数;所属领域的一般技术人员将知,也可替代为其他表示形式。如下文所述,整数算术运算大体类似于其浮点对应形式,只是不使用指数逻辑。
1.IMAD
对于整数MAD(IMAD)运算,MMAD单元220使用尾数路径413来计算A*B+C。尽管某些整数格式可不带符号,然而MMAD单元220较佳将所有格式均视为带符号的32位2补数表示形式;无论实际格式如何,此均会内在地得到正确结果。
在第0级中,如果需要,则通过对8位输入格式使用块504-506(图5)或者使用块508-510(对16位格式),将运算数A、B及C扩展至32位。
在第1级中,左乘法器块416计算3A及运算数B的Booth3编码。逐位逻辑块434将运算数C作为结果R1进行传播。
在第2级中,乘法器块414计算A*B并选择所述乘积的和字段及进位字段作为结果R2a及R2b。
在第3级中,右乘法器块418使用IP加法器804(图8A)将所述和字段与进位字段相加。整数mux 810选择上部32位,且选择mux 812选择此作为结果R3a。比较逻辑块436将运算数C(R1)作为结果R3b进行传播。
在第4级中,对齐单元420接收R3a(乘积A*B)及R3b(运算数C)。由于整数加法不要求尾数对齐,因而Rshift计数电路428可对所有IMAD运算以一致的状态产生SwapCtl信号,从而始终将例如R3a(R3b)指引至小(大)运算数路径908(910)(图9),或者反之。另一选择为,如果所述运算数中的一者为负的,则可将该运算数路由至小运算数路径908并由条件反相器918进行反相。粘附位逻辑914操作以在路径915上产生粘附位SB4。
在第5级中,加1加法器1002(图10)将值R4a及R4b(表示A*B及C)相加,且舍入逻辑1008根据所接收运算数的符号及粘附位SB4来选择Sum、Sum+1及~Sum输出中恰当的一者。将结果R5传播至路径1011上。
在第6级上,将结果R5不加修改地直通过正规化块423。
在第7级中,格式化块1210接收结果R6,并在需要时将其格式化以与输入运算数格式相匹配。格式化块1210较佳还检测任何溢出并将结果值Rdata钳制至输入格式的最大允许值。最终结果选择逻辑1214选择路径Rdata上的值作为最终结果OUT。
2.乘法(IMUL)及加法(IADD)
类似于上文所述的FMUL及FADD运算,整数乘法(IMUL)及加法(IADD)运算利用MAD管线。对于IMAD运算,MMAD单元220接收被乘数作为运算数A并接收乘数作为运算数B;较佳为运算数C提供值0(整数0)。然后,执行上文所述的IMAD运算,以产生乘积A*B(+0),只是在第4级中,粘附位逻辑914(图9)较佳使粘附位SB3直通过,从而能够对乘积进行舍入。在某些实施例中,可借助第4级中的条件0块920(图9)将运算数C强制为0,从而可提供任意值作为运算数C。
对于整数加法(IADD),MMAD单元220接收加数作为运算数A及C。在一个实施例中,通过将运算数B设定为1来实施IMAD运算,以计算(A*l)+C;可例如通过将整数1作为运算数B提供至MMAD单元220或通过操作左乘法器选择mux 616(图6A)以选择例如来自寄存器620或不同寄存器的经Booth3编码的整数1,来实施将运算数B设定为1。
在IADD的一替代实施方案中,运算数B设定为0(例如通过将整数0作为输入运算数提供至MMAD单元220),并将运算数A及B旁通至第3级,其中可由IP加法器804(图8A)在右乘法器块802中计算和A+0,或者在一不同的实施例中,可将运算数A作为结果R3a绕过IP加法器804。各后续级如在IMAD运算中一样进行操作来计算A+C。
3.绝对差之和:ISAD
对于整数,支持绝对差之和(ISAD)运算。该运算计算|A-B|+C。在第0级中,接收运算数A、B及C,并由反相器519使运算数B反相(图5)以得到运算数~B。然后使运算数直通过第1及第2级。
在第3级中,右乘法器块418通过在IP加法器804(图8A)中对A及~B相加来计算A-B,并传播结果R3a。在比较逻辑块436(图8B)中,AB符号电路820检测A-B的符号,并产生对应的符号信号Sab,所述符号信号Sab在路径821上转接至第4及第5级。二进制测试逻辑822控制选择mux 824以将运算数C作为结果R3b进行传播。
在第4级中,求解A-B的绝对值。具体而言,用于ISAD运算的SwapCtl信号控制交换mux 904及906(图9),从而将结果R3a(即A-B)路由至小运算数路径908并将结果R3b(即运算数C)路由至大运算数路径910。小运算数路径908上的条件反相器918从AB符号电路820接收Sab信号,且如果符号为负,则将运算数(A-B)反相。因此,结果R4a对应于非负整数,而运算数C(其可为正整数或负整数)作为结果R4b传播。
在第5级中,加1加法器1002对来自路径R4a及R4b的值相加。根据Sab信号,舍入逻辑1008选择Sum或Sum+1输出,以便以2补数形式提供正确的答案。具体而言,如果A-B不是负的,则结果应为(A-B)+C-其为Sum输出。如果A-B是负的,则结果是C-(A-B),其以2补数形式表示为C+~(A-B)+1-其是因在第4级中进行条件反相而得到的Sum+1输出。
在第6及7级中,如在其他整数算术运算中一样,结果R5直通地传播。在某些实施例中,第7级的格式化块1214(图12)如上文所述检测并处理溢出。
4.比较运算:IMIN,Max,ISET
如上文所述,可通过将运算数作为整数对待来执行浮点比较FMIN、FMAX、FSET。A.3 and ffi.A.4.相应地,整数比较运算IMIN、IMAX及ISET的实施方式完全类似于上文在第III.A.3及第III.A.4部分中所述的浮点比较的实施方式。
5.条件选择运算:ICMP
整数条件选择运算(ICMP)也完全类似于其浮点对应运算,且该运算在MMAD单元220中的处理与上文在第III.A.5部分中所述的FCMP的实施方式相同。
C.逐位逻辑运算
除整数及浮点算术功能外,MMAD单元220还支持各种逐位逻辑运算(在图3中列于306处),所述逐位逻辑运算操纵其运算数的各个位,而无论这些位可能代表什么。这些运算包括逐位布尔运算AND、OR及XOR、以及移位运算SHL(左移)及SHR(右移)。
1.布尔运算:AND,OR,XOR
布尔运算主要由第1级中的逐位逻辑块434进行处理。对于这些运算,MMAD单元接收两个32位运算数A及B(由于运算数C被忽略,因而其可设定为任意值)及一指示所需布尔运算的操作码。这些运算数直通过第0级。
在第1级中,逐位逻辑块434接收运算数A及B,并使用逻辑电路630、632、634(图6C)对运算数A及B并行地执行逐位AND、OR及XOR运算。选择mux 636接收一指示请求哪一布尔运算的OPCTL信号,并将对应结果作为R1进行传播。运算数A及B可直通过第1级中的左乘法器块416及第2级中的乘法器块414。
在第3级中,比较逻辑块436将布尔运算结果R1作为结果R3b进行传播。右乘法器块418可对A与B相加,或者只是将A作为结果R3a进行传播;在这两种情形中,结果R3a均将被舍弃。
在第4级中,交换mux 904及906(图9)将结果R3b指引至小运算数路径908上并将结果R3a指引至大运算数路径910上。在小运算数路径908上,使结果R3b(所需结果)不加修改地作为结果R4a进行传播。在大运算数路径910上,条件0电路920响应于OPCTL信号而将结果R4b清零。
在第5级中,加1加法器1002(图10)将R4b(0)加至R4a(布尔运算结果),且mux 1010选择Sum结果作为结果R5。在第6级中,不对结果R6应用移位。在第7级中,将结果R6作为最终结果不作任何进一步修改地进行传播;这些运算不存在溢出或其他特殊状态。
2.移位运算:SHL,SHR
MMAD单元220还实施移位运算,以将位字段左移(SHL)或右移(SHR)。对于这两种运算,将所要移位的32位字段作为运算数A提供至MMAD单元220,并较佳通过将八位整数值插入运算数B的fp32指数位位置中而将移位量提供至MMAD单元220。由于大于31的移位量没有意义,因而八位即足以载送移位量数据。在这些运算中,运算数B的符号及小数位被忽略,且因此可设定为任意值,运算数C也可如此。
SHL运算利用第6级中的左移电路1112(图11)。如上文在第II.J部分中所述,运算数A直通至第5级的输出R5。指示移位量的运算数B的整数部分Eb也并行地在路径443上直通过指数路径415传递至结果EFE2。更具体而言,在第1级中,通过选择mux 628(图6B)的操作使移位量Eb旁通过指数乘积块424。在第2级中,差值块714(图7B)通过指令mux 716选择输入Eab(其为Eb)作为输出EFE而对OPCTL信号作出响应。指数递增块902使EFE信号不加修改地直通至路径443。
在第6级中,移位控制块1110(图11)在路径443上接收移位量Eb作为信号EFE2,并产生一反应该量的LshAmt信号。在某些实施例中,如果Eb过大,则移位控制块1110可将LshAmt信号钳制为例如31位。响应于LshAmt信号,左移电路1112将运算数A(结果R5)左移恰当的位数,较佳根据需要插入后随的0。将经左移的结果R6传播至路径425上。在某些实施例中,指数递增块432将移位量信号EFE2作为最终指数E0不加修改地进行传播。
在第7级中,较佳不加修改地提供结果R6作为最终结果OUT。在某些实施例中,第7级还包括在移位量超过31时将结果钳制至0的逻辑;该逻辑可并入饱和逻辑1216内,饱和逻辑1216可接收移位量作为最终指数E0。
SHR运算利用第4级(图9)中的右移电路912。SHR运算可实施为既支持其中在每一新MSB中插入0的逻辑移位模式,也支持其中将符号位扩展至新MSB中的算术移位模式;操作码较佳为每一SHR运算选择一种模式。
如上文所述,提供所要移位的运算数作为运算数A,并使用fp32运算数B的指数位来提供移位量。如上文在第II.J部分中所述,使运算数A直通过第3级的输出(结果R3a)。
移位量Eb并行地传播至Rshift计数电路804。更具体而言,在第1级中,通过选择mux 628(图6B)的操作使移位量Eb旁通过指数乘积块424而到达路径431。在第2级中,差值块714(图7B)指令mux 716选择Eab值作为差值Ediff。可忽略EFE信号,并可根据需要选择任一候选值;在某些实施例中,提供Eab值作为EFE值。
在第3级中,Rshift计数电路428产生对应于Ediff信号(即Eb)的RshAmt信号。可将RshAmt信号钳制至例如31位。在某些实施例中,Rshift计数电路408根据其所接收OPCTL信号来判定所请求的是逻辑移位还是算术移位,并在RshAmt信号中包含对应的“移位类型”位。
在第4级中,小的交换mux 904(图9)将运算数A指引至小运算数路径908上。在大运算数路径910上,由条件0电路920将结果R4b清零。在小运算数路径908上,右移电路912接收RshAmt信号,并将运算数A右移规定的位数。在某些实施例中,右移电路912检测RshAmt信号中的移位类型位(逻辑移位或算术移位),并在将运算数右移时相应地在新MSB中插入0或1。
在第5级中,由加1加法器1002(图10)将结果R4a(经右移的运算数A)加至R4b(0),并选择其作为结果R5。在第6级中,结果R5传播过正规化块423而不进行进一步移位。在第7级中,较佳将结果R6不加修改地用作最终结果OUT。在某些实施例中,第7级还包括用于在移位量Eb超过31时将结果钳制至0的逻辑;该逻辑可并入饱和逻辑1216中,饱和逻辑可如上文针对左移运算所述接收Eb。
D.格式转换运算
MMAD单元220还支持各种整数格式与浮点格式之间的转换。在某些实施例中,格式转换不与上文所述的算术运算同时实施,但可将某些其他运算与格式转换相结合。例如,可将各种转换运算与以2N进行换算(其中N为整数)及/或与确定运算数的绝对值或求反相结合。下文将说明各种浮点格式之间及各种整数格式之间的转换。
1.浮点至浮点转换(F2F)
所支持的浮点至浮点(F2F)转换运算包括从fp16直接转换至fp32,或者反之;这些转换还可包含绝对值、求反、及/或2N换算。另外,还支持从fp16至fp16及从fp32至fp32的整数-舍入转换。在所有情形中,均将所要转换的数作为运算数A提供至MMAD单元220,且当要进行2N换算时,使用fp32的运算数B的八个指数位Eb来提供换算因数N。对于fp16及fp32格式,提供符号位,并可通过操纵符号位来实施绝对值及求反。这些操纵方式在所属领域中众所周知,且不再加以赘述。
从fp16至fp32的直接转换使用第0级中的上转换器512(图5)来产生运算数A的fp32表示形式。上转换器512调节指数偏置量以对应于fp32(例如通过加上127-15=112)并对小数附加13个后随的0。只要运算数A不是fp16非正规数,该转换便是正确的。在第1级中,特殊数检测块414判定运算数A是否是fp16非正规数、INF、或NaN,并在路径SPC上产生恰当的信号。
如上文在第II.J部分中所述,运算数A的尾数部分直通至第5级的输出(结果R5)。运算数A及B的指数部分Ea、Eb分别递送至第1级中的指数乘积块424;在此种情形中,指数Eb是指数换算因数N。在指数乘积块424中对指数Ea与Eb相加,从而实现2N换算,其中将结果Eab传播至路径431。在第2级中,指数和块426将结果Eab作为有效最终指数EFE进行传播。在第3级中,Rshift计数电路428通过产生进行0移位的信号、忽略可存在于路径725上的任何Ediff信号而对OPCTL信号作出响应。在第4级中,指数递增块430将指数EFE不加修改地转接至路径433上(作为EFE2)。
第6级用于处理fp16非正规数,所有fp16非正规数均可表示为fp32形式的正规数。如上文所述,将非正规数解释为具有最小所允许指数且在尾数中不具有隐含的整数1。在第6级中,优先权编码器1108(图11)确定前导1在运算数A的尾数部分中的位置。如果特殊数信号SPC指示运算数A是fp16非正规数,则移位控制电路1110根据前导1的位置产生LshAmt信号;否则,移位控制电路1110产生对应于0移位的LshAmt信号。左移电路1112对尾数R5应用规定的移位,从而产生正规化尾数R6。指数递减块432(图4)使指数EFE2递减对应的量。
第7级用于处理其中输入是fp16INF或NaN的情形。具体而言,如果特殊数信号SPC指示此种值,则最终结果选择逻辑1214(图12)根据需要选择典范fp32 INF或NaN值。此外,由于2N换算可使指数饱和,因而饱和逻辑1216较佳还用于检测此种饱和并使得选择恰当的特殊数(例如INF)作为最终结果。
从fp32至fp16的直接转换涉及到将指数从八位减小到五位并将有效数字从23位减小至10位。可根据需要对有效数字进行舍入或截断。此种舍入利用第4级中的对齐单元420(图9)及第5级中的舍入逻辑1008(图10)。如上文在第II.J部分中所述,运算数A的尾数部分(较佳包含显式的前导1)直通至第3级的输出(结果R3a)。
在第1级中,运算数A的指数部分Ea直通过指数乘积块424;可如上文所述通过加上运算数B的指数部分Eb来应用2N换算。使结果Eab在路径431上传播。
在第2级中,指数和块426例如通过使用差值电路714(图7B)减去112,将指数重新偏置至fp16偏置量,并提供结果作为有效最终指数EFE。在其他实施例中,也可使用偏置量β及指数乘积块424(图6B)的加法器624来实施重新偏置。指数和块426较佳还检测fp16指数溢出(INF或NaN)及下溢(非正规数)。对于溢出情况,将指数钳制至其最大值。对于下溢情况,指数和块426对差值Ediff进行设定以指示下溢量(例如112-Eab),并将有效最终指数EFE设定为0(最小指数)。对于除下溢以外的其他情况,可将差值Ediff设定为0。
在第3级中,Rshift计数电路428使用Ediff信号来确定所要应用的右移量并产生适合的RshAmt信号。对于fp32至fp16转换,缺省的移位是移13位(从而使结果R4a的11个LSB载送fp16尾数)。将差值Ediff加至该缺省值,以使fp16非正规数可最多右移24位。移位量多于24位会得到一fp160;相应地,Rshift计数电路804可在该运算中将移位量钳制至24位。
在第4级中,交换mux 904(图9)将运算数A的尾数指引至小运算数路径908上。在大运算数路径910上,由条件0单元920将结果R4b清零。在小运算数路径908上,右移电路912根据RshAmt信号对尾数进行右移,且粘附位逻辑914较佳产生粘附位SB4。
在第5级中,由加1加法器1002(图10)将结果R4a(运算数A的尾数)加至R4b(0)。舍入逻辑1008接收粘附位SB4并根据所需舍入模式在Sum与Sum+1输出之间进行选择;如同其他运算一样,可选择任何IEEE舍入模式。舍入逻辑1008所选的结果R5a传播至路径1011上。
在第6级中,正规化块423使结果R5不加修改地直通过。
在第7级中,格式块1210(图12)使用最终指数E0及尾数R6将fp16结果格式化。指数饱和逻辑1216检测fp16指数溢出,且最终结果选择逻辑1214通过以fp16INF覆盖所述结果而对此种溢出作出响应。此外,由第1级中的特殊数检测块438检测到的fp32INF或NaN输入可使fp16INF或NaN成为输出。
F2F整数舍入运算是针对其中输入格式与输出格式相同(fp32至fp32或fp16至fp16)的情形来实施。整数舍入会消除由运算数所表示的数的小数部分,且舍入可使用任一种标准IEEE舍入模式(顶限、底限、截取及最近)。如同fp32至fp6转换一样,MMAD单元220利用第4级的右移电路912及第5级的舍入逻辑1008来支持整数舍入。可将以2N进行换算与该运算相结合。
如上文在第II.J部分中所述,运算数A的尾数直通至第3级的输出(结果R3a)。为支持整数舍入,使用第1及2级中的指数逻辑来确定二元点的位置。在第1级中,除应用任何2N换算之外,指数乘积块424(参见图6B)还减去偏置量β(例如对于fp32为127,或者对于fp16为15)并提供结果作为Eab。如果结果Eab小于0,则该数为纯小数。在第2级中,指数和块426将结果Eab提供至路径725(作为信号Ediff)及723(作为信号EFE)。
在第3级中,Rshift计数电路428根据信号Ediff来确定右移量RshAmt。较佳将移位量选择成使得对于经移位的尾数,真正的二元点恰好位于LSB的右侧。例如,对于fp32输入,当Eab≤23时,移位量将为(23-Eab)位,而当Eab>23时,移位量将为0位。Rshift计数电路428比较该量,并向对齐块420提供恰当的RshAmt信号。
在第4级中,小的交换mux 904(图9)将运算数A指引至小运算数路径908上;在大运算数路径910上,条件0电路920将结果R4b清零。在小运算数路径908上,右移电路912根据RshAmt信号实施右移,且粘附位逻辑914产生粘附位SB4。
在第5级中,加1加法器1002(图10)对结果R4a(运算数A的尾数)与R4b(0)相加,且舍入逻辑1008根据舍入模式与路径504上的粘附位在Sum与Sum+1结果之间进行选择。
在第6级中,将结果R5重新正规化回至输入格式。优先权编码器1108(图11)检测前导1的位置,且移位控制电路1110产生对应的LshAmt信号,所述LshAmt信号指令左移电路1112将尾数左移恰当的位数,并插入后随的0。指数递减块432(图4)较佳配置成忽略LshAmt信号,并不加修改地提供指数EFE2作为最终指数E0。
在第7级中,将结果格式化并作为输出进行传播。较佳使指数饱和逻辑1216运行,因为2N换算可能会引起饱和。可检测特殊数输入(例如INF或NaN),并如上文所述返送回对应的特殊数结果。
2.浮点至整数转换(F2I)
类似于上文所述的整数舍入F2F转换,在MMAD单元220中实施浮点至整数转换(F2I)。将所要转换的浮点数以fp16或fp32格式作为运算数A提供至MMAD单元220。可如上文所述通过在fb32运算数B的指数位中提供换算参数N来实施以2进行的换算。在一个实施例中,目标整数格式可为16位或32位,带符号或不带符号,其中所述目标格式是通过操作码加以规定。
在第0级中,如果运算数A为fp16格式,则上转换器512(图5)如上文所述将其提升至fp32格式。在该级中也可应用绝对值及求反。对于绝对值而言,将符号位设定为正。对于求反而言,将符号位翻转。如果在进行可适用的求反之后,符号位为负且请求得到带符号的整数表示形式,则由条件反相器518使尾数部分反相并还传播一请求得到负结果的符号控制信号(在图4中未显示)。
对于F2F整数舍入运算,第1-4级如上文所述进行,其中第3级的Rshift控制电路428产生一移位量RshAmt,当对尾数进行右移并使用第4级的右移电路912(图9)来应用移位时,所述移位量RshAmt将二元点刚好置于LSB的右侧。粘附位逻辑914可产生粘附位SB4。
在第5级中,加1加法器1002(图10)将结果R4a(运算数A的尾数)与R4b(0)相加,从而产生Sum与Sum+1输出。舍入逻辑1008根据可适用的舍入模式且对于带符号的整数格式而言,根据来自第0级的符号控制信号是否指示负的结果,在Sum与Sum+1输出之间进行选择,以便获得正确的2补数表示形式。
在第6级中,使经过右移的尾数R5不加修改地直通过。
在第7级中,指数饱和逻辑1216(图12)判定输入浮点值是否超过目标整数格式中的最大值。如果是,则最终结果选择逻辑1214可将结果钳制至最大值(例如所有位均设定为1)。当输入运算数为INF时,可将输出钳制至最大整数值;类似地,当输入运算数为NaN时,也可将输出钳制至所需值,例如0。递送经过正确格式化的整数作为最终结果OUT。对于具有少于32位的整数格式,可根据需要使结果在32位字段内右对齐或左对齐。
3.整数至浮点转换(I2F)
在一个实施例中,支持整数至浮点(I2F)转换运算,以将任何带符号或不带符号的整数格式转换成fp32,以及将八位及十六位带符号或不带符号的格式转换成fp16。如同其他转换一样,支持可选的求反、绝对值及2N换算。将运算数A以整数格式提供至MMAD单元220,并可如上文所述在浮点运算数B的指数位中提供换算参数N。
在第0级中,在需要时,由上转换器504、508(图5)将运算数A上转换成32位。所述上转换可使用符号扩展或0扩展。如果运算数A是负的,则由条件反相器518将其反相,并传播一指示A是否反相的符号控制信号。该信号可用于设定浮点结果的符号位。(如果请求绝对值,则始终将符号位设定为其正的状态。)
将浮点数的指数初始化以对应于231,然后根据前导1在整数中的实际位置将其向下调整。对于尾数,将整数的32位右移至为将该整数放于浮点尾数字段(在fp32情况下为24位,在fp16情况下为11位)内所需的程度。具体而言,在其中该整数的八个MSB中任一者为非0的情形中进行从32位整数向fp32的转换期间,以及在其中该整数的五个MSB中的任一者为非0的情形中进行从16位整数向fp16的转换期间,实施右移。当进行右移时,可使用任何IEEE舍入模式对浮点结果进行舍入。
更具体而言,在第1级中,I2F字节电路444根据输入格式从运算数A中提取八个MSB。对于32位整数输入,提取32位字段的八个MSB;对于在32位字段中右对齐的16位整数格式,丢弃所述32位字段中的前16位,并提取接下来的八个MSB。对于8位的整数,可提取最后八个位;然而,如在下文中将显而易见,I2F字节电路444的结果不用于8位整数输入。如在上文中所述,I2F字节电路444还包括AND树,其测试是否其余位全部为1;该测试的结果(信号And24)在路径437上传播。指数乘积块424并行地将信号Eab设定为31加上fp16(15)或fp32(127)的恰当偏置量。当使用2N换算时,指数乘积块424还如上文所述加上换算参数N。
在第2级中,指数和块426(图7B)的优先权编码器718确定前导1在运算数A的MSB内的位置。差值电路714选择优先权编码器结果作为指数差值Ediff并选择指数Eab作为有效最终指数EFE。在某些实施例中,差值电路714使用信号And24来判定对运算数加上1来求解2补数是否将在所述八个MSB中得到非0位,并相应地调节优先权编码器结果。也可将类似的逻辑并入优先权编码器718内。如上文在第II.J部分中所述,将运算数A旁通至乘法器块414的输出(结果R2a)。
在第3级中,如果在第0级中将运算数A反相(此可根据上文所述的符号控制信号加以确定),则使用mux 812(图8A)将运算数B强制至1并由IP加法器804将其加至运算数A,从而完成2补数反相。否则,将运算数A旁通至路径421。因此,根据需要为fp16或fp32格式的尾数保证结果R3a为正的。
还在第3级中,Rshift计数电路428使用信号Ediff来判定是否应对尾数进行移位,且在应对尾数进行移位时确定移位量。如果为表示整数(不包括前导0)所需的位数超过浮点格式中的有效数字位数,则较佳使用右移。例如,在从32位整数格式转换成fp32期间,如果前导1处于第1至第8位位置中的任一者上,则应对尾数进行右移;在从16位整数格式转换成fp16期间,如果前导1处于第1至第5位位置中的任一者上,则应对尾数进行右移。如上文所示,来自优先权编码器718的信号Ediff即反映该信息,且Rshift计数电路428产生恰当的信号RshAmt。
在第4级中,小的交换mux 904(图9)将尾数(结果R3a)指引至小运算数路径908上。右移电路912根据RshAmt信号对尾数进行右移。粘附位逻辑908产生粘附位SB4。在大运算数路径910上,条件0电路920将结果R4b清零。
在第5级中,加1加法器1002(图10)将R4a(尾数)与R4b(0)相加,且舍入逻辑1008根据舍入模式与粘附位SB4在Sum与Sum+1之间进行选择。
在第6级中,将尾数R5正规化成浮点表示形式。正规化块423对尾数进行左移,以将前导1置于MSB位置,且指数递减块432相应地向下调节指数E0。
在第7级中,尾数R6及指数E0由格式块1210(图12)格式化成fp32或fp16数,并提供至最终选择mux 1212。饱和逻辑1216可现用,且在某些情形中,例如在从u16转换成fp16时,可出现饱和。当出现饱和时,可选择恰当浮点格式的溢出值(例如INF)。
应注意,由于优先权编码器718(图7B)是八位编码器,因而在该实施例中不支持从32位整数向fp16的I2F转换。所属领域的一般技术人员将知,优先权编码器的大小是设计选择问题,且可通过提供一更大的优先权编码器(例如21位)来支持此种转换。
在另一实施例中,在已实施2补数反相之后,优先权编码器718可移动至管线中的一点(例如在IP加法器804之后)。在此种情形中,将不需要使用AND数来检测加1运算的效果。
4.整数至整数(I2I)转换
支持整数至整数(I2I)转换运算,以将任意整数格式转换成任何其他整数格式,包括将带符号格式转换成不带符号格式,以及反之。支持求反(2补数)及绝对值选项。
在该实施例中,应用下面的规则来处理I2I转换中的溢出。首先,为将带符号格式转换成不带符号格式,将所有负值钳制至0。第二,为将较大格式(即具有更多位的格式)转换成较小格式(即具有较少位的格式),将溢出钳制至较小格式中的最大允许值。第三,为将较小格式转换成较大的不带符号格式,对正值进行0扩展;而为转换成较大的带符号格式,则使用符号扩展。
在第0级中,接收运算数A。如果输入格式小于32位,则使用符号扩展(或对于不带符号的输入格式而言使用0扩展)将运算数A上转换成32位(参见图5)。然后,如上文在第II.J部分中所述,将运算数A直通至第3级的输出(结果R3a)。在第4级中,小的交换mux 904(图9)将运算数A指引至小运算数路径908上;在大运算数路径910上,条件0电路920将结果R4b清零。在小运算数路径908上,条件反相器918根据是请求求反还是请求绝对值以及在请求绝对值的情况下运算数A是正还是负来将运算数A反相或不反相。
在第5级中,加1加法器1002(图10)将R4a(运算数A)与R4b(0)相加。如果在第4级中将运算数A反相,则选择Sum+1输出,从而使结果为2补数形式。所述结果R5不加修改地直通过第6级。
在第7级中,在格式化块1210(图12)中将输出格式化。为转换成较大的带符号格式,格式化块1210较佳应用符号扩展。格式化块1210还将结果钳制至给定格式的最大允许整数;例如,对于正数,如果在目标格式的MSB位置的左侧存在1,则将输出设定为全1。
5.小数(FRC)运算
小数(FRC)运算返送回浮点(例如fp32)运算数A的小数部分。在FRC运算期间,MMAD单元320使用运算数A的指数部分来确定二元点在运算数A的尾数内的位置,并应用一掩码,所述掩码将二元点左侧的所有位(整数位)设定为0并保留二元点右侧的位(小数位)。
在第0级中,接收浮点(例如fp16或fp32)运算数A,并可在需要时将其上转换成fp32。将运算数C作为(或可强制至)一全0字段进行输入。如上文在第II.J部分中所述,使运算数A直通至第3级的输出(结果R3a)。
在第1级中,在使运算数A直通过的同时,逐位逻辑块434中的条件反相器635(图6C)将运算数C反相,以获得一全1字段,且选择mux 636选择该字段作为结果R1。在其他实施例中,可使用选择mux 636或另一电路来选择例如来自恰当寄存器(未显示)的全1字段。如上文在第II.J部分中所述,所述结果R1(全1字段)直通至第3级的输出(结果R3b)。
还是在第1级中,指数乘积块424从运算数A的指数部分Ea中减去指数偏置量(例如对于fp32运算数而言为127),并将该值作为指数Eab进行转接。在第2级中,指数和块426提供Eab作为指数差值Ediff及作为有效最终指数EFE。
在第3级中,Rshift计数电路428根据A的未偏置的指数(Eab)及用于将结果R3a及R3b分别指引至大运算数路径及小运算数路径上的恰当SwapCtl信号,产生移位信号RshAmt。
在第4级中,大的交换mux 906(图9)将运算数A(结果R3a)指引至大运算数路径910上,且小的交换mux 904将所述由1形成的字段(结果R3b)指引至小运算数路径908上。响应于RshAmt信号,右移电路912通过将所述由1形成的字段右移而形成掩码;较佳使用逻辑右移。所述掩码作为结果R4a在路径909上直通过条件反相器918。应注意,如果运算数A的未偏置的指数为0或负值,则RshAmt信号较佳对应于0移位。对于正的指数,适合进行非0移位,并可将移位限制至例如24位。
大的运算数路径910使运算数A作为结果R4b在路径911上不加修改地直通过。并行地,指数递增块430(图4)使有效最终指数EFE作为EFE2不加修改地直通过。
在第5级中,AND2电路1004(图10)运行以对运算数A应用掩码R4a(作为R4b接收到)。所述掩码将运算数A的整数位清零,而对小数位则没有影响。选择mux1010选择来自AND2电路1004的输出-其是A的小数位。
在第6级中,正规化块423对结果R5进行优先权编码及正规化,且指数递减块432对有效最终指数EFE2进行相应调整,以获得最终指数E0。
在第7级中,包含指数E0的结果R6通过格式块1210(图12)被格式化为fp32(或fp16)数,并提供至最终选择mux 1212以共选择。如果需要,可在运算数A为INF或NaN的情形中,使用特殊数逻辑来覆盖所计算结果。
E.域映射(RRO)
域映射运算-也称作自变数归约或值域归约(RRO)-也在MMAD单元220中实施。这些运算支持在单独算术单元中计算各种超越函数,所述单独算术单元可例如构建为图2中的另一功能单元222。在一个实施例中,MMAD单元220实施域映射运算,所述域映射运算将三角函数(例如sin(x)及cos(x))及指数函数(2x)的浮点自变数x减小至一受限值域。因此,对于RRO,MMAD单元220是作为运算数A提供的fp32数x。
1.三角函数的RRO
计算sin(x)及cos(x)的功能单元一般通过要求首先将自变数x减小至2πK+x0(其中K为整数且0≤x0≤2π)来利用这些函数的周期性。然后,可使用x0来计算三角函数。在某些实施方案中,将x0规定为小数xR=x0/2π,其中0≤xR≤1。
在本发明的一个实施例中,MMAD单元220通过如下方式来计算三角RRO的xR:利用MAD管线的乘法级(图4中的第1-3级)来执行乘以1/2π的浮点乘法,且其余级提取所述结果的小数部分。由于乘法的有限数值精度,结果是近似值,但所述近似值对于其中一般不出现非常大的x值的应用(例如图形)而言足以满足要求。
以特殊32位定点格式提供三角RRO的输出,所述定点格式包含符号位、一位的特殊数旗标、五个预留位及25个小数位。当将特殊数旗标设定为逻辑真时,结果是特殊数,且可使用所述预留位或小数位中的某些或全部来指示那种特殊数(例如INF或NaN)。
在第0级中,以fp32格式提供自变数x作为运算数A0并使其作为运算数A直通过。
在第1级中,指数乘积块424使运算数A的指数部分Ea作为指数Eab直通过。在左乘法器电路416中,乘法器616(图6A)选择来自寄存器618的1/2π的所存储Booth3编码表示形式作为路径BB上的乘数。
在第2级中,指数和块426选择指数Ea作为有效最终指数EFE及差值Ediff。乘法器块614计算A*(1/2π)并提供所述乘积的和字段及进位字段作为结果R2a及R2b。
在第3级中,Rshift计数电路428根据信号Ediff来判定是否应实施右移,以使定点结果的二元点正确对齐。例如,如果指数为负,则可能需要进行右移。如果需要进行右移,则Rshift计数电路428提供恰当的移位量信号RshAmt。还在第3级中,IP加法器804(图8A)对所述和字段与进位字段(R2a,R2b)相加,以产生所述乘积。mux 814选择上部32位作为结果R3a。粘附位逻辑808可产生粘附位SB3以供此后在舍入中使用。
在第4级中,指数递增块430可在需要时调整指数以反映IP加法器804中的进位,如在上文所述的FMUL及FMAD运算期间所作的调整。在对齐单元420中,小的交换mux 904(图9)将乘积R3a指引至小运算数路径908上,其中右移电路912应用由Rshift计数电路428所确定的任何右移量。将结果R4a传播至路径909。如果应用右移,则粘附位逻辑914可产生新的粘附位SB4;反之,粘附位逻辑914可转接粘附位SB3作为粘附位SB4。在大运算数路径910中,条件0单元920将结果R4b清零。
在第5级中,加1加法器1002(图10)将结果R4a(乘积)与R4b(0)相加。在某些实施例中,不使用舍入逻辑1008;在其他实施例中,舍入逻辑1008可对来自路径SB4的粘附位进行处理。(由于RRO是近似值,因而进行舍入未必会提高结果的精确度。)
在第6级中,正规化块423在需要时应用左移,以对二元点进行正确定位(例如如果指数是正的)。路径EFE2上的有效最终指数由移位控制电路1110用于确定左移量,并由左移电路1112实施移位。将该移位结果R6提供于路径425上。指数递减块432可在需要时相应地递减最终指数E0,尽管在第7级中将忽略该指数。
在第7级中,由格式块1210(图12)使用路径R6上的结果的符号位及25个位来产生上文所述格式的最终32位结果Rdata。较佳响应于来自第1级中特殊数检测块439的特殊数信号SPC而设定结果Rdata中的特殊数旗标;当检测到特殊数时,可使用某些小数位或预留位来指示为那种特殊数。
2.指数函数EX2的RRO
如在所属领域中所知,可通过如下方式在算术功能单元中实施以2为基数的指数函数(EX2(x)=2x),分解x=M+f,其中M是整数且f处于间隔[0.0,1.0)中,然后计算2M*2f。计算2M是很平常的(移位及指数加法),且计算2f可使用查找表来实现。
在一个实施例中,MMAD单元220通过提取自变数x的小数部分来对EX2函数实施RRO。该RRO有些类似于上文在F2F转换的上下文中所述的整数舍入运算,但在此种情形中,保留二元点右侧的位。
指数RRO的输出是特殊32位格式,其带有一符号位、一位的特殊数旗标、七个整数位及23个小数位。当特殊数旗标设定为逻辑真时,结果是特殊数,且可使用某些或所有整数位或小数位来指示为那种特殊数。
在第0级中,将自变数x以fp32格式提供至MMAD单元作为运算数A0并作为运算数A直通过。
在第1级中,指数乘积块424自指数Ea中减去127(fp32偏置量),从而产生结果Eab。如下文所述,结果Eab将在后续级中用于使二元点对齐,以便在其右侧存在23个位且在左侧存在7个位。在左乘法器电路416(参见图6A)中,mux 616选择来自寄存器620的经Booth3编码的表示形式。
在第2级中,指数和块426使Eab作为有效最终指数EFE及差值Ediff直通过。乘法器块414将运算数A乘以1.0并提供所述乘积的和字段及进位字段作为结果R2a及R2b。
在第3级中,Rshift计数电路428根据差值信号Ediff判定是否需要进行右移以使二元点对齐;例如根据Ediff是正还是负来进行判定。如果需要进行右移,则Rshift计数电路428产生RshAmt信号来反映移位量-其是根据Ediff的量值加以确定。同样在第3级中,IP加法器804(图8A)将所述和字段与进位字段R2a与R2b相加,以产生所述乘积,且mux 814选择上部32位作为结果R3a。粘附位逻辑808可产生粘附位SB3。
在第4级中,指数递增块430调整指数以反映IP加法器804的任何进位。在对齐单元420中,小的交换mux 904(图9)将乘积结果R3a指引至小运算数路径908上,其中右移电路912应用由Rshift计数电路804所确定出的任何右移量,从而产生结果R4a。如果应用右移,则粘附位逻辑914可根据右移量产生新的粘附位SB4;反之,可传播粘附位SB3作为粘附位SB4。在大运算数路径910中,条件0单元920将结果R4b清零。
在第5级中,加1加法器1002(图10)将结果R4a(乘积A*1)与R4b(0)相加。在某些实施例中,舍入逻辑1008选择Sum输出作为结果R5;在其他实施例中,舍入逻辑1008可使用粘附位SB4在Sum与Sum+1输出之间进行选择。
在第6级中,正规化块423应用左移(如果需要)使二元点正确对齐(例如,如果指数为正的)。有效最终指数EFE2由移位控制电路1110用于确定左移量,且由左移电路1112实施移位。将该移位结果R6提供于路径425上。如果需要,指数递减块432可相应地递减所述指数。
在第7级中,格式块1210(图12)将结果R6转换成具有七个整数位及23个小数位的定点表示形式。可使用指数饱和逻辑1216来检测饱和,在此种情形中,可选择INF(呈上文所述的特殊输出格式)作为结果。
IV.其他实施例
尽管上文参照具体实施例来说明本发明,然而所属领域中的技术人员将知,也可存在诸多修改形式。例如,可将MMAD单元构建成支持更多、更少的功能或相组合的不同功能,及支持任意格式或格式组合的运算数及结果。
也可改变本文所述的各种旁通路径及直通路径。一般而言,当描述任一电路块的旁通路径时,该路径可由该块中的恒等运算(即对其运算数不具有任何影响的运算,例如加上0)来代替,反之亦然。在给定运算期间被旁通过的电路块可置于空闲状态(例如降低功率的状态)或者正常运行,使下游的块忽略其结果,例如通过选择mux或其他电路的运行。
将MMAD管线划分成各个级是任意进行的。所述管线可包含任意数量的级,且可根据需要而改变每一级中组件的组合。在本文中归属于特定块的功能也可分散于各管线级中;例如,一乘法器数可占据多个级。
也可修改各种块的功能。例如,在某些实施例中,可使用不同的加法器电路或乘法器电路,且并不要求使用Booth3编码(或任何其他编码)进行乘法。
此外,为便于理解,上文是以电路块形式来说明MMAD单元;所属领域的技术人员将知,可使用各种各样的电路组件及布局来实施这些块,且在本文中所述的块并不仅限于特定的一组组件或实体布局。可根据需要使各个块在实体上相组合或相分离。
处理器可在执行核心中包含一个或多个MMAD单元。例如,当需要发出超级标量指令(即在每一循环中发出多于一个指令)时,可构建多个MMAD单元,且不同的MMAD单元可支持不同的功能组合。处理器也可包含多个执行核心,且每一核心可具有其自身的MMAD单元。
此外,尽管上文参照图形处理器来说明本发明,然而所属领域的技术人员将了解,本发明也可用于其他处理器中,例如数字协处理器、矢量处理器或通用处理器中。
因此,尽管上文参照具体实施例来说明本发明,然而应了解,本发明旨在涵盖归属于上文权利要求书范围内的所有修改及等价形式。

Claims (28)

1.一种用于处理器的多用途功能单元,其包括:
输入段,其经配置以接收第一、第二及第三运算数及一指示所要实施的多个所支持运算中的一者的操作码,且进一步经配置以响应于所述操作码而产生多个控制信号;
乘法管线,其耦接至所述输入段并可响应于所述控制信号而进行配置,以计算所述第一与第二运算数的乘积并选择所述所计算乘积作为第一中间结果;
测试管线,其耦接至所述输入段并可响应于所述控制信号而进行配置,以对所述第一、第二、及第三运算数中的一者或多者实施比较及选择所述比较的结果作为第二中间结果;
加法管线,其耦接至所述乘法段及所述测试管线并可响应于所述控制信号而进行配置,以计算所述第一与第二中间结果的和并选择所述所计算的和作为运算结果;
指数管线,其耦接至所述输入段并可响应于所述控制信号而进行配置,以对所述第一、第二及第三运算数中的一者或多者实施指数计算及选择所述指数计算的结果作为指数结果;及
输出段,其经耦接以接收所述运算结果及所述指数结果,并可响应于所述控制信号而进行配置,以产生由所述操作码指定的所述所支持运算中的所述一者的最终结果,
其中所述多个所支持的运算包括浮点乘法-加法(FMAD)运算、整数乘法-加法(IMAD)运算、及至少一个比较测试运算。
2.如权利要求1所述的多用途功能单元,其中所述加法管线可响应于所述控制信号而进一步配置,以便在所述操作码指定所述比较测试运算的情况下,在将所述第一与第二中间结果相加之前以0值取代所述第一中间结果。
3.如权利要求5所述的多用途功能单元,其中所述至少一个比较测试运算包括选自由如下运算组成的群组中的一种或多种运算:最大(MAX)运算,最小(MIN)运算,及三元比较(CMP)运算。
4.如权利要求3所述的多用途功能单元,其中所述至少一个比较测试运算包括所述MAX运算、所述MIN运算、及所述CMP运算,且其中所述测试管线可响应于所述控制信号而进一步配置以使:
在所述操作码指定所述MAX运算的情况下,所述第二中间结果对应于所述第一运算数与所述第二运算数中的较大者;
在所述操作码指定所述MIN运算的情况下,所述第二中间结果对应于所述第一运算数与所述第二运算数中的较小者;及
在所述操作码指定所述CMP运算的情况下,所述第二中间结果在所述第三运算数小于0时对应于所述第二运算数,反之则对应于所述第一运算数。
5.如权利要求1所述的多用途功能单元,其中所述至少一个比较测试运算包括选自由如下运算组成的群组中的一种或多种二元测试(SET)运算:大于运算,小于运算,相等性运算,及无序运算,其中所述一种或多种二元测试运算中的每一者均得到布尔结果。
6.如权利要求5所述的多用途功能单元,其进一步包括:
辅助结果路径,其耦接于所述测试管线与所述输出段之间,并经配置以将布尔辅助结果从所述测试管线递送至所述输出段,
其中所述输出段可响应于所述控制信号而进一步配置,以在所述操作码指定所述SET运算中的一者的情况下,根据所述布尔辅助结果来产生所述最终结果。
7.如权利要求1所述的多用途功能单元,其中所述多个所支持的运算进一步包括逐位布尔逻辑运算。
8.如权利要求7所述的多用途功能单元,其中所述逐位布尔逻辑运算可选自由AND运算、OR运算及XOR运算组成的群组,且其中所述测试管线包括:
AND电路,其经配置以产生所述第一与第二运算数的逐位逻辑AND作为第一输出;
OR电路,其经配置以产生所述第一与第二运算数的逐位逻辑OR作为第二输出;
XOR电路,其经配置以产生所述第一与第二运算数的逐位逻辑XOR作为第三输出;及
选择电路,其可响应于所述控制信号而进行配置,以便在所述操作码指定所述AND、OR及XOR运算中的一者的情况下,所述第二中间结果是所述第一、第二及第三输出中对应的一者。
9.如权利要求1所述的多用途功能单元,其中所述多个所支持的运算进一步包括浮点加法(FADD)运算及整数加法(IADD)运算,其中所述加法管线可响应于所述控制信号而进一步配置以实施所述FADD运算及所述IADD运算。
10.如权利要求9所述的多用途功能单元,其中所述乘法管线可响应于所述控制信号而进一步配置,以便在所述操作码指定所述FADD运算或所述IADD运算的情况下,选择所述第一运算数作为所述第一中间结果。
11.如权利要求1所述的多用途功能单元,其中所述多个所支持的运算进一步包括浮点乘法(FMUL)运算及整数乘法(IMUL)运算,其中所述乘法管线可响应于所述控制信号而进一步配置,以实施所述FMUL运算及所述IMUL运算。
12.如权利要求11所述的多用途功能单元,其中所述加法管线可响应于所述控制信号而进一步配置,以便在所述操作码指定所述FMUL运算或所述IMUL运算的情况下,在将所述第一与第二中间结果相加之前以0值来取代所述第二中间结果。
13.如权利要求1所述的多用途功能单元,其中所述多个所支持的运算进一步包括将所述第一运算数从输入格式转换成目标格式的格式转换运算。
14.如权利要求1所述的多用途功能单元,其中所述多个所支持运算进一步包括域映射(RRO)运算。
15.如权利要求14所述的多用途功能单元,其中所述RRO运算减小供用于计算三角函数的所述第一运算数。
16.如权利要求14所述的多用途功能单元,其中所述RRO运算减小供用于计算指数函数的所述第一运算数。
17.如权利要求1所述的多用途功能单元,其中所述多个所支持运算进一步包括返送回所述第一运算数的小数部分的小数(FRC)运算。
18.如权利要求1所述的多用途功能单元,其中所述加法管线包括:
对齐电路,其可响应于所述控制信号而进行配置,以便在所述操作码指定所述FMAD运算的情况下,根据来自所述指数管线的对齐信号对所述第一及第二中间结果中的一者进行右移;及
正规化电路,其可响应于所述控制信号而进行配置,以便在所述操作码指定所述FMAD运算的情况下,对所述第一与第二中间结果之和进行左移。
19.如权利要求18所述的多用途功能单元,其中所述多个所支持运算进一步包括分别将所述第一运算数左移及右移的左移(SHL)运算及右移(SHR)运算,且其中:
在所述操作码指定所述SHL运算的情况下,所述正规化电路应用所述左移;及
在所述操作码指定所述SHR运算的情况下,所述对齐电路应用所述右移。
20.一种用于处理器的多用途功能单元,所述功能单元包括:
输入段,其经配置以接收第一、第二及第三运算数及一指示所要实施的多个所支持运算中一者的操作码,且进一步经配置以响应于所述操作码而产生多个控制信号;
乘法管线,其耦接至所述输入段并可响应于所述控制信号而进行配置,以计算所述第一与第二运算数的乘积并选择所述所计算的乘积作为第一中间结果;
加法管线,其耦接至所述乘法段及所述测试管线并可响应于所述控制信号而进行配置,以计算所述第一与第二中间结果的和并选择所述所计算的和作为运算结果;及
输出段,其经耦接以接收所述运算结果并可响应于所述控制信号而进行配置,以产生由所述操作码指定的所述所支持运算中的所述一者的最终结果,
其中所述多个所支持运算包括对所述第一、第二及第三运算数进行运算的浮点乘法-加法(FMAD)运算及整数乘法-加法(IMAD)运算,及
其中所述乘法管线及所述加法管线可响应于所述控制信号而进一步配置,以使得对于所述FMAD运算,所述最终结果代表浮点值,且对于所述IMAD运算,所述最终结果代表整数值。
21.如权利要求20所述的多用途功能单元,其中所述乘法管线包括:
乘法器树,其经配置以计算两个因数的乘积;及
指数逻辑块,其可响应于所述控制信号而进行配置,以根据所述第一与第二运算数各自的指数来计算乘积指数并计算所述乘积指数与所述第三运算数的指数的和指数,
其中在所述操作码指定所述FMAD运算的情况下,所述乘法器树将所述第一与第二运算数各自的尾数相乘且所述指数逻辑块计算所述乘积指数与所述和指数。
22.如权利要求20所述的多用途功能单元,其中所述多个所支持运算进一步包括对所述第一及第三运算数进行运算的浮点加法(FADD)运算及整数加法(IADD)运算。
23.如权利要求22所述的多用途功能单元,其中所述乘法管线包括:
乘法器树,其经配置以计算第一因数与第二因数的乘积;及
左乘法选择电路,其可响应于所述控制信号而进行配置,以选择所述第一运算数作为所述第一因数及选择所述第二运算数或对应于1的值作为所述第二因数,
其中在所述操作码指定所述FADD或IADD运算的情况下,所述左乘法选择电路使用所述对应于1的值来覆盖所述第二运算数。
24.如权利要求22所述的多用途功能单元,其中所述乘法管线进一步包括:
旁通路径,其经配置以便在所述操作码指定所述FADD或IADD运算的情况下,提供所述第一运算数作为所述第一中间结果及提供所述第三运算数作为所述第二中间结果。
25.如权利要求20所述的多用途功能单元,其中所述多个所支持运算进一步包括对所述第一及第二运算数进行运算的浮点乘法(FMUL)运算及整数乘法(IMUL)运算。
26.如权利要求25所述的多用途功能单元,其中所述加法管线包括:
加法器电路,其经配置以计算第一加数与第二加数的和;及
对齐块,所述对齐块具有:
导引电路,其可响应于所述控制信号而进行配置,以选择所述第一及第二中
间结果中的一者作为小运算数及选择所述第一及第二中间结果中的另一者作为大运算数;
右移电路,其可响应于所述控制信号而进行配置,以对所述小运算数应用右移及选择所述经移位的小运算数作为所述第一加数;
条件0电路,其可响应于所述控制信号而进行配置,以选择所述大运算数或0值作为所述第二加数,
其中在所述操作码指定所述FMUL或IMUL运算的情况下,选择所述第一中间结果及所述0值作为所述第一及第二加数。
27.如权利要求20所述的多用途功能单元,其中所述乘法管线包括:
乘法器树,其经配置以计算具有第一及第二字段的冗余表示形式的第一与第二因数的乘积;
左乘法选择电路,其可响应于所述控制信号而进行配置,以选择所述第一及第二运算数作为所述第一及第二因数;
中间乘积加法器,其经配置以计算两个输入值的整数和及提供所述整数和作为所述第一中间结果;及
右乘法选择电路,其耦接于所述乘法器树与所述中间乘积加法器之间,并可响应于所述控制信号而进行配置,以可选择地将所述第一字段及所述第二字段或者所述第一运算数及所述第二运算数提供至所述中间乘积加法器。
28.如权利要求27所述的多用途功能单元,其中所述多个所支持运算进一步包括绝对差的整数和(ISAD)运算,且其中在所述操作码指定所述ISAD运算的情况下:
所述输入段将所述第一运算数及所述第二运算数的反相型式提供至所述乘法管线;
所述右乘法选择电路将所述第一运算数及所述第二运算数的反相型式提供至所述中间乘积加法器;及
所述加法管线计算所述第一中间结果与所述第三运算数的和。
CN2005800424120A 2004-11-10 2005-11-09 多用途乘法-加法功能单元 Active CN101133389B (zh)

Applications Claiming Priority (9)

Application Number Priority Date Filing Date Title
US10/985,695 US7240184B2 (en) 2004-11-10 2004-11-10 Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations
US10/986,531 US20060101244A1 (en) 2004-11-10 2004-11-10 Multipurpose functional unit with combined integer and floating-point multiply-add pipeline
US10/985,674 US7428566B2 (en) 2004-11-10 2004-11-10 Multipurpose functional unit with multiply-add and format conversion pipeline
US10/985,291 US7225323B2 (en) 2004-11-10 2004-11-10 Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
US10/985,674 2004-11-10
US10/986,531 2004-11-10
US10/985,291 2004-11-10
US10/985,695 2004-11-10
PCT/US2005/040852 WO2006053173A2 (en) 2004-11-10 2005-11-09 Multipurpose multiply-add functional unit

Publications (2)

Publication Number Publication Date
CN101133389A true CN101133389A (zh) 2008-02-27
CN101133389B CN101133389B (zh) 2011-06-01

Family

ID=36317709

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2005800424120A Active CN101133389B (zh) 2004-11-10 2005-11-09 多用途乘法-加法功能单元

Country Status (2)

Country Link
US (1) US20060101244A1 (zh)
CN (1) CN101133389B (zh)

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103365624A (zh) * 2009-10-26 2013-10-23 威盛电子股份有限公司 判断系统及方法
CN104657107A (zh) * 2013-11-21 2015-05-27 三星电子株式会社 浮点加法器、通过浮点加法器执行的方法和信息处理系统
CN107291420A (zh) * 2017-06-27 2017-10-24 上海兆芯集成电路有限公司 整合算术及逻辑处理的装置
CN107315710A (zh) * 2017-06-27 2017-11-03 上海兆芯集成电路有限公司 全精度及部分精度数值的计算方法及装置
CN109521994A (zh) * 2017-09-19 2019-03-26 华为技术有限公司 乘法硬件电路、片上系统及电子设备
TWI673648B (zh) * 2017-04-03 2019-10-01 美商谷歌有限責任公司 向量縮減處理器
CN112241251A (zh) * 2019-07-19 2021-01-19 想象技术有限公司 用于处理浮点数的设备和方法
CN112579519A (zh) * 2021-03-01 2021-03-30 湖北芯擎科技有限公司 数据运算电路和处理芯片

Families Citing this family (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8161090B2 (en) * 2008-12-05 2012-04-17 Crossfield Technology LLC Floating-point fused add-subtract unit
SG172162A1 (en) * 2009-01-27 2011-07-28 Mitsubishi Electric Corp State display device and method for display in state display device
US8316071B2 (en) * 2009-05-27 2012-11-20 Advanced Micro Devices, Inc. Arithmetic processing unit that performs multiply and multiply-add operations with saturation and method therefor
KR101735677B1 (ko) 2010-11-17 2017-05-16 삼성전자주식회사 부동 소수점의 복합 연산장치 및 그 연산방법
US9274750B2 (en) * 2012-04-20 2016-03-01 Futurewei Technologies, Inc. System and method for signal processing in digital signal processors
US9829956B2 (en) * 2012-11-21 2017-11-28 Nvidia Corporation Approach to power reduction in floating-point operations
GB2511314A (en) 2013-02-27 2014-09-03 Ibm Fast fused-multiply-add pipeline
US10089073B2 (en) * 2015-01-30 2018-10-02 Huawei Technologies Co., Ltd. Method and apparatus for converting from integer to floating point representation
KR20160098581A (ko) 2015-02-09 2016-08-19 홍익대학교 산학협력단 얼굴 인식 및 화자 인식이 융합된 인증 방법
US10282169B2 (en) * 2016-04-06 2019-05-07 Apple Inc. Floating-point multiply-add with down-conversion
JP2017199167A (ja) * 2016-04-27 2017-11-02 ルネサスエレクトロニクス株式会社 半導体装置
US9846579B1 (en) 2016-06-13 2017-12-19 Apple Inc. Unified integer and floating-point compare circuitry
US10073676B2 (en) 2016-09-21 2018-09-11 Altera Corporation Reduced floating-point precision arithmetic circuitry
US10489877B2 (en) * 2017-04-24 2019-11-26 Intel Corporation Compute optimization mechanism
US10409614B2 (en) 2017-04-24 2019-09-10 Intel Corporation Instructions having support for floating point and integer data types in the same register
US10474458B2 (en) 2017-04-28 2019-11-12 Intel Corporation Instructions and logic to perform floating-point and integer operations for machine learning
US10726514B2 (en) * 2017-04-28 2020-07-28 Intel Corporation Compute optimizations for low precision machine learning operations
US11281463B2 (en) * 2018-03-25 2022-03-22 Intel Corporation Conversion of unorm integer values to floating-point values in low power
EP4024223A1 (en) 2019-03-15 2022-07-06 Intel Corporation Systems and methods for cache optimization
AU2020241262A1 (en) 2019-03-15 2021-11-04 Intel Corporation Sparse optimizations for a matrix accelerator architecture
US12013808B2 (en) 2019-03-15 2024-06-18 Intel Corporation Multi-tile architecture for graphics operations
US11934342B2 (en) 2019-03-15 2024-03-19 Intel Corporation Assistance for hardware prefetch in cache access
US11347511B2 (en) * 2019-05-20 2022-05-31 Arm Limited Floating-point scaling operation
US10790830B1 (en) 2019-05-20 2020-09-29 Achronix Semiconductor Corporation Fused memory and arithmetic circuit
US11256476B2 (en) * 2019-08-08 2022-02-22 Achronix Semiconductor Corporation Multiple mode arithmetic circuit
US11288220B2 (en) 2019-10-18 2022-03-29 Achronix Semiconductor Corporation Cascade communications between FPGA tiles
US11663746B2 (en) 2019-11-15 2023-05-30 Intel Corporation Systolic arithmetic on sparse data
US11861761B2 (en) 2019-11-15 2024-01-02 Intel Corporation Graphics processing unit processing and caching improvements
US11907713B2 (en) * 2019-12-28 2024-02-20 Intel Corporation Apparatuses, methods, and systems for fused operations using sign modification in a processing element of a configurable spatial accelerator
GB2607364B (en) * 2021-11-18 2023-05-24 Imagination Tech Ltd Floating point adder

Family Cites Families (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS5776634A (en) * 1980-10-31 1982-05-13 Hitachi Ltd Digital signal processor
US4800516A (en) * 1986-10-31 1989-01-24 Amdahl Corporation High speed floating-point unit
US4969118A (en) * 1989-01-13 1990-11-06 International Business Machines Corporation Floating point unit for calculating A=XY+Z having simultaneous multiply and add
US5224064A (en) * 1991-07-11 1993-06-29 Honeywell Inc. Transcendental function approximation apparatus and method
EP0622727A1 (en) * 1993-04-29 1994-11-02 International Business Machines Corporation System for optimizing argument reduction
US5450607A (en) * 1993-05-17 1995-09-12 Mips Technologies Inc. Unified floating point and integer datapath for a RISC processor
US5339266A (en) * 1993-11-29 1994-08-16 Motorola, Inc. Parallel method and apparatus for detecting and completing floating point operations involving special operands
CN103345380B (zh) * 1995-08-31 2016-05-18 英特尔公司 控制移位分组数据的位校正的装置
JP3790307B2 (ja) * 1996-10-16 2006-06-28 株式会社ルネサステクノロジ データプロセッサ及びデータ処理システム
US5793655A (en) * 1996-10-23 1998-08-11 Zapex Technologies, Inc. Sum of the absolute values generator
US5887160A (en) * 1996-12-10 1999-03-23 Fujitsu Limited Method and apparatus for communicating integer and floating point data over a shared data path in a single instruction pipeline processor
US6490607B1 (en) * 1998-01-28 2002-12-03 Advanced Micro Devices, Inc. Shared FP and SIMD 3D multiplier
JP3600026B2 (ja) * 1998-08-12 2004-12-08 株式会社東芝 浮動小数点演算器
US6480872B1 (en) * 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
US6401108B1 (en) * 1999-03-31 2002-06-04 International Business Machines Corp. Floating point compare apparatus and methods therefor
US6912557B1 (en) * 2000-06-09 2005-06-28 Cirrus Logic, Inc. Math coprocessor
US7054898B1 (en) * 2000-08-04 2006-05-30 Sun Microsystems, Inc. Elimination of end-around-carry critical path in floating point add/subtract execution unit
US6904446B2 (en) * 2001-08-24 2005-06-07 Freescale Semiconductor, Inc. Floating point multiplier/accumulator with reduced latency and method thereof
CN1220935C (zh) * 2001-09-27 2005-09-28 中国科学院计算技术研究所 提高半规模双精度浮点乘法流水线效率的部件
JP3845009B2 (ja) * 2001-12-28 2006-11-15 富士通株式会社 積和演算装置、及び積和演算方法
US7392273B2 (en) * 2002-12-20 2008-06-24 International Business Machines Corporation High-sticky calculation in pipelined fused multiply/add circuitry
US7058830B2 (en) * 2003-03-19 2006-06-06 International Business Machines Corporation Power saving in a floating point unit using a multiplier and aligner bypass

Cited By (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103365624A (zh) * 2009-10-26 2013-10-23 威盛电子股份有限公司 判断系统及方法
US10108398B2 (en) 2013-11-21 2018-10-23 Samsung Electronics Co., Ltd. High performance floating-point adder with full in-line denormal/subnormal support
CN104657107A (zh) * 2013-11-21 2015-05-27 三星电子株式会社 浮点加法器、通过浮点加法器执行的方法和信息处理系统
CN104657107B (zh) * 2013-11-21 2018-11-06 三星电子株式会社 浮点加法器、通过浮点加法器执行的方法和信息处理系统
US10706007B2 (en) 2017-04-03 2020-07-07 Google Llc Vector reduction processor
US11061854B2 (en) 2017-04-03 2021-07-13 Google Llc Vector reduction processor
US11940946B2 (en) 2017-04-03 2024-03-26 Google Llc Vector reduction processor
TWI673648B (zh) * 2017-04-03 2019-10-01 美商谷歌有限責任公司 向量縮減處理器
CN107291420A (zh) * 2017-06-27 2017-10-24 上海兆芯集成电路有限公司 整合算术及逻辑处理的装置
CN107315710B (zh) * 2017-06-27 2020-09-11 上海兆芯集成电路有限公司 全精度及部分精度数值的计算方法及装置
CN107315710A (zh) * 2017-06-27 2017-11-03 上海兆芯集成电路有限公司 全精度及部分精度数值的计算方法及装置
CN109521994B (zh) * 2017-09-19 2020-11-10 华为技术有限公司 乘法硬件电路、片上系统及电子设备
US11249721B2 (en) 2017-09-19 2022-02-15 Huawei Technologies Co., Ltd. Multiplication circuit, system on chip, and electronic device
CN109521994A (zh) * 2017-09-19 2019-03-26 华为技术有限公司 乘法硬件电路、片上系统及电子设备
CN112241251A (zh) * 2019-07-19 2021-01-19 想象技术有限公司 用于处理浮点数的设备和方法
CN112241251B (zh) * 2019-07-19 2022-07-26 想象技术有限公司 用于处理浮点数的设备和方法
CN112579519A (zh) * 2021-03-01 2021-03-30 湖北芯擎科技有限公司 数据运算电路和处理芯片
CN112579519B (zh) * 2021-03-01 2021-05-25 湖北芯擎科技有限公司 数据运算电路和处理芯片

Also Published As

Publication number Publication date
CN101133389B (zh) 2011-06-01
US20060101244A1 (en) 2006-05-11

Similar Documents

Publication Publication Date Title
CN101133389B (zh) 多用途乘法-加法功能单元
CN101452571B (zh) 积和熔加功能单元
CN107273090A (zh) 面向神经网络处理器的近似浮点乘法器及浮点数乘法
CN100472392C (zh) 对数处理系统和方法
US7428566B2 (en) Multipurpose functional unit with multiply-add and format conversion pipeline
US7225323B2 (en) Multi-purpose floating point and integer multiply-add functional unit with multiplication-comparison test addition and exponent pipelines
CN101847087A (zh) 一种支持定浮点可重构的横向求和网络结构
KR20130079511A (ko) Scale, round, getexp, round, getmant, reduce, range 및 class 명령어들을 실행할 수 있는 곱셈 덧셈 기능 유닛
TWI389028B (zh) 多用途之乘加法功能單元
US9588736B2 (en) Modal interval processor
CN101692202A (zh) 一种64比特浮点乘加器及其浮点运算流水节拍处理方法
CN103180820A (zh) 用于执行浮点除法的方法和装置
US10585972B2 (en) Apparatus for performing modal interval calculations based on decoration configuration
US20020184283A1 (en) Floating point system with improved support of interval arithmetic
CN108139912A (zh) 在浮点运算期间计算和保留误差边界的装置和方法
CN101770355B (zh) 兼容双精度和双单精度的浮点乘加器及其兼容处理方法
CN114461176B (zh) 一种算术逻辑单元、浮点数处理方法、gpu芯片、电子设备
CN117648959B (zh) 支持神经网络运算的多精度操作数运算装置
CN117111881A (zh) 支持多输入多格式的混合精度乘加运算器
CN116700666B (zh) 一种浮点数处理方法及装置
US7240184B2 (en) Multipurpose functional unit with multiplication pipeline, addition pipeline, addition pipeline and logical test pipeline capable of performing integer multiply-add operations
KR101084581B1 (ko) 고정 소수점 지수함수 연산 방법, 장치 및 기록매체
KR940008610B1 (ko) 고속 수렴 인자 결정 방법 및 프로세서
CN117270813A (zh) 运算器、处理器和电子设备
Cowlishaw et al. Part VIII: DECIMAL FLOATING-POINT ARITHMETIC

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant