CN101359284A - 处理数个不同数据格式的乘法累加单元及其方法 - Google Patents

处理数个不同数据格式的乘法累加单元及其方法 Download PDF

Info

Publication number
CN101359284A
CN101359284A CNA2007100067548A CN200710006754A CN101359284A CN 101359284 A CN101359284 A CN 101359284A CN A2007100067548 A CNA2007100067548 A CN A2007100067548A CN 200710006754 A CN200710006754 A CN 200710006754A CN 101359284 A CN101359284 A CN 101359284A
Authority
CN
China
Prior art keywords
data
truth
matter
receives
multiplexer
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
CNA2007100067548A
Other languages
English (en)
Other versions
CN101359284B (zh
Inventor
提莫·佩塔西
柏瑞斯·柏克潘克
德瑞克·爱德华·德奥特·格兰丁
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.)
Via Technologies Inc
Original Assignee
Via Technologies Inc
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
Application filed by Via Technologies Inc filed Critical Via Technologies Inc
Publication of CN101359284A publication Critical patent/CN101359284A/zh
Application granted granted Critical
Publication of CN101359284B publication Critical patent/CN101359284B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/80Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
    • G06F15/8053Vector processors
    • G06F15/8076Details on data register access
    • 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/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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
    • G06F2207/00Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F2207/38Indexing scheme relating to groups G06F7/38 - G06F7/575
    • G06F2207/3804Details
    • G06F2207/3808Details concerning the type of numbers or the way they are handled
    • G06F2207/3812Devices capable of handling different types of numbers
    • G06F2207/382Reconfigurable for different fixed word lengths
    • 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/544Methods 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 for evaluating functions by calculation
    • G06F7/5443Sum of products

Landscapes

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

Abstract

本发明的实施例包含一乘法累加单元,用以处理多重格式浮点操作数。对于短格式操作数,乘法累加单元的实施例用以处理数据,伴随两倍于长和混合格式数据的处理能力。至少一实施例可包含一短指数计算组件用以接收短格式数据,一长指数计算组件用以接收长格式数据,以及一混合指数计算组件用以接收短指数数据。该混合指数计算组件更用以接收长格式数据。实施例也包含一底数数据路径,用以实现容纳长、混合、以及短浮点操作数。

Description

处理数个不同数据格式的乘法累加单元及其方法
技术领域
本发明涉及一种乘法累加单元(multiply-accumulate unit),特别是涉及一种可以处理不同格式浮点数据的乘法累加单元与方法。
背景技术
自从公元2000年起,固定函数的图像处理单元(Graphics ProcessingUnits,GPUs)变得愈来愈可程序化,以提供使用者直接而弹性地控制在图像芯片中的基元(primitive)、顶点(vertex)、质地(texture)、和像素的串流(pixel stream)处理。许多现今的GPU中,至少有一种着色器(shader,如基元、顶点的类)具有可程序化的能力,但是这样的GPU一般都只能处理很少数的数据类别(像是对于顶点的32位的浮点以及32位的整数)。这些在图像管线(graphics pipeline)中可程序化的着色器时常以串行的方式安排,以传递数据至固定函数单元,或当有其必要时,通过数据格式转换以传递给彼此的着色器。
通常并列多重处理器架构原则(parallel multiprocessor architectureprinciples)也会包含在GPU设计中。并列架构原则的应用时常利用数个相同型式的算术逻辑单元(Arithmetic Logic Unit,ALU),去处理在非均匀程序绪(non-uniform program thread)中的不同型式数据串流。在许多环境中,如果非均匀程序绪是交错(interleaved)的话,ALU会被要求在每个时钟周期中处理不同型式的数据。
在这样的多重处理器架构下,复杂数学函数(特别功能)的实现是许多重要课题的其中之一。通常有两种方式可以实现它们:执行在一般的ALU的特别子程序,或是依附在一般ALU的特别硬件单元(会根据一般ALU的要求而产生结果)。上述功能的软件实施会产生显著的效能下降,且可能无法被实时图像应用所接受。在多重ALU结合于单指令多数据(SingleInstruction Multiple Data,SIMD)架构中,特别的硬件单元必须依附至每个ALU,而造成明显的硬件成本增加。上述的特别功能在着色器程序中不常被用到,而且大多时间这些结合在每个ALU的特别硬件单元皆处于闲置状态。
这状况可由数个ALU共享一特别函数单元(Special Function Unit,SFU)而解决部分问题,但在SIMD架构中,一执行绪将被停顿住直到所有串流从共享的SFU得到它们的结果,而该SFU会依序处理它们的请求。着色程序中复杂的数学函数可能会多花数个额外周期在计算上。SIMD串流架构应该要有特别安排,来减少停顿等待周期,而且要提供产生最少额外周期的平滑串流处理,假如非均匀程序绪是交错的话。
当ALU用在多重处理方式时常常承受高数据通量(throughput),这些ALU应该要能分享处理较长格式的相同硬件,来处理更多短格式数据串流。一般而言,现今GPU的ALU仅用以处理一种浮点单元的格式(例如32位的IEEE标准格式),而且时常在处理低精准像素和质地数据时效能低落。此外,如果支持另一种数据格式时,所述ALU时常是不考虑数据格式,就工作在相同数量的串流,而没有(或是只有一些)通量改进,也没有SIMD系数(factor)可变性。更进一步说,现今ALU通常不能随意交错指令流(缺乏非均匀程序绪的支持)。此外,现今双格式乘法累加(Multiply Accumulate,MACC)单元通常只处理整数数据。
有固定数据格式和固定SIMD系数的向量运算器通常具有少量的硬件负担,以及,当向量串流的元素数量比一个向量单元的宽度少时,该向量运算器通常处理串流数据相对地较慢。此外,现今图像着色器架构,在相同指令里,对于处理不同格式数据,一般只有有限的指令集能力。
因此,一种迄今未被提出的需求存在于业界中,以解决上述问题的不足与不适当。
发明内容
包含在实施例中的是一乘法累加单元,用以处理数个不同数据格式。乘法累加单元的实施例包含一短格式组件以利于处理短格式数据,一长格式组件以利于处理长格式数据,一混合格式组件以利于处理短格式数据和长格式数据,以及一底数数据路径以利于处理数个不同格式操作数。
也包含在实施例中的是处理数个不同数据格式的方法。至少一实施例的方法包含接收数据以作处理,判别该接收数据是否包含短格式数据,判别该接收数据是否包含长格式数据,根据一控制讯号处理该数据,以及传送该数据至输出。
当本领域的技术人员详读下述的图示和细节描述时,本发明所披露的系统、方法、特性、和优点将变得显而易见。所有这些附加的系统、方法、特性、和优点将包含在下列叙述中,而不脱离本发明的范畴。
附图说明
本发明的许多方面经由下列图示可更易理解。图标里的组件不必然按比例绘制,重点放在清楚说明本发明的原则。此外,在这些图标里,相同的数字标明相对应的部分。当数个实施例描述这些图示时,不意指限制本发明于所述实施例。相反地,本发明意图涵盖所有替代方案、修改、和相等物。
图1A为一流程图,说明一向量处理单元的串流数据处理步骤。
图1B为一流程图,说明一纯量处理单元的串流数据处理步骤,相似于图1A所述步骤。
图1C为一串流处理SIMD架构,伴随复杂数学函数的软件实施。
图1D为一串流处理SIMD架构,伴随复杂数学函数的硬件实施,每个ALU使用个别的SFU。
图1E为一串流处理SIMD架构,伴随复杂数学函数的硬件实施,所有ALU使用一共同的SFU。
图1F为一串流处理SIMD架构,伴随复杂数学函数的硬件实施,交错存取一共同的SFU。
图1G为减少SIMD系数的一个例子,在一个共同SIMD架构下的顶点和三角形处理。
图2A为一流程图,说明一纯量处理单元,相似于图1的流程图,伴随SIMD系数为4。
图2B为一流程图,说明一纯量处理单元,相似于图1的流程图,伴随SIMD系数为1。
图2C为一流程图,说明一纯量处理单元,相似于图1的流程图,伴随SIMD系数为8且数据为短格式。
图2D为一流程图,说明一纯量处理单元,相似于图1的流程图,伴随SIMD系数为4且数据为长格式。
图3为可处理双格式的偶对ALU的逻辑架构,说明图1和图2的处理特征,也说明串流ALU的功能。
图4为一串流处理单元,其偶对纯量ALU在长格式处理模式下,相似于图3的架构,以及显示出更高阶的控制电路和存储器。
图5A为一表格,说明偶对纯量ALU的算术功能,可以当作数值处理指令集的基础发展,如图3和图4的ALU。
图5B为一图像处理单元架构,以串流处理器为运算核心,串流处理器为可调整大小的架构,且可包含2至16个ALU以及减少数量的SFU。
图6为一流程图,以及有四个纯量ALU和一个SFU的一串流处理器的逻辑架构,相似于图3为图4的ALU。
图7A为一流程图,说明向量ALU处理正规化向量差。
图7B为一流程图,说明提议的结合一SFU的一串流纯量ALU的处理例行程序。
图7C为图7B的延续。
图8为一ALU模块,实施图6ALU的功能。
图9为一串流处理器模块,伴随结合四个ALU,相似于图3和图4的ALU。
图10A-10C为一逻辑架构和乘法累加(Multiply Accumulate,MACC)单元的数据格式,如图8的乘法累加单元。
图11为一乘法累加单元架构,相似于图8的乘法累加单元。
图12说明一短指数计算,相似于图11的短指数计算。
图13说明一短指数计算,结合一混合指数,相似于图11的短指数计算。
图14说明许多通道的一短底数路径,详述图11的底数路径。
图15说明一长指数计算,详述图11指数计算方块。
图16说明另一对偶的ALU的长指数计算,详述图11长指数计算方块。
图17说明一长底数数据路径,详述图11数据路径。
图18说明另一对偶的ALU的长底数数据路径,相似于图11的数据路径。
图19说明一混合指数计算,详述图11混合指数计算。
图20说明另一对偶的ALU的混合指数计算,相似于图19的混合指数计算。
图21说明一混合底数数据路径,详述图11的数据路径。
图22说明另一对偶的ALU的混合底数数据路径,相似于图21的数据路径。
图23说明合并的底数数据路径,其中可处理短数据格式和长数据格式,详述图11可能实施的数据路径。
图24说明合并的底数数据路径,相似于第11的数据路径。
图25A说明合并的移位及控制逻辑,其可应用在图23和图24的乘法累加单元。
图25B说明符号控制逻辑,其可应用在图23和图24的乘法累加单元。
图26为一表格,说明互补移位输入和输出的格式,可应用于图11中的乘法累加单元。
图27A说明底数加法路径,可应用于图23和图24的乘法累加器。
图27B说明处理格式,可应用于图23和图24的乘加(Multiply Add,MAD)进位储存加法器(Carry Save Adder,CSA)树状单元。
图27C为图27B处理格式的延续。
图28A说明进位储存加法器的栅栏应用,其应用于图23和图24的乘法累加器。
图28B说明进位传递加法器(Carry Propagate Adder,CPA)的栅栏应用,其应用于图23和图24的乘法累加器。
图29说明互补移位单元的栅栏应用,其应用于图23和图24的乘法累加器。
图30A说明正规化移位器的栅栏应用,其应用于图23和图24的乘法累加器。
图30B更详细说明图30A的栅栏。
图31为一流程图,说明可用来传送数据至一功能上分开的ALU的处理。
附图符号说明
图1A-B
输入缓冲常规存储器102
输入缓冲4组正交存取存储器122
vector ALU 104 scalar ALU 124 SFU 106
图2A-B
ALU0 204a ALU1 204b ALU2 204c ALU3 204d
元素改组器226
图3
累加暂存器370 高速缓存输入数据模块372
ALU port P0 376 ALU port P1 378 ALU port P2 380
输入多工器382a 384a 382b 384b 延迟暂存器383
乘法器386a 388a 390a 392a 386b 388b 390b 392b
加法器396a 399a 396b 399b
乘法累加单元394a 397a 394b 397b
13位移位器和致能装置398a 398b
旁通组件395 输出CL数据组件393
图4
快取存储单元472 存储器输出多工器474
输入端口port P0 476 port P1 478 port P2 480
输入多工器闩482a 482b 延迟暂存器386 483
SIMD微码控制器488 ALU控制和寻址组件490
SFU 470 多工器484
图6
输入数据602a-d 指令译码器的控制和地址讯号602e
共同数据602f SFU 670
延迟暂存器683a-q 输出缓冲器604 多工器672
图8
双格式乘法累加单元872 多工器870 874
延迟暂存器883a-e 写回暂存器876 累加器878
区域ALU暂存表的暂存SRAM 880
状态机与地址产生器的区域控制单元882
图9
多工器970 SFU 980
图11
SECS0 1120 LECS 1040 MESEC1 1130
最终加法器和正规化单元1147
CASU 1139 1144 乘加暂存器1143
MAD CSA单元1141 MAC CSA单元1145
乘法器1131 1133 1135 1137
图12
加法器1212 1214 1204 1206 1208 1216 1218 1222 1224
1241 1244 1246
多工器1210 1226 1232 1234 1236
MAC指数暂存器1128 优先权编码器1220
零值指数侦测器1202 反相器1250 1252 1254
或电路1230 及电路1240
图13
零值指数侦测器1302 MAC暂存器1328 多工器1355
图14
乘法器1431、1433、1435、1437
CASU 1439a-h 多工器1432
进位储存加法树1441a 1441b 1445a 1445b
MAC短底数暂存器1430a 1430b
全加器和正规器1447a 1447b
乘法器1431 1433 1435 1437
图15-16
加法器1501 1503 1505 1507 1509 1257 1259
MAC指数暂存器1515 及电路1225
多工器1511 1513 1521 1523 CAT单元1517
多工器1602
图17-18
移位器1743 1749 1753 1769
乘法器1731 1733 1735 1737
CASU 1739a-g 加法器1741a 1741b 1745
MAC底数暂存器1747 全加器和正规器1747
多工器1805
图19-20
加法器1903 1905 1907 1909 1911 1915 1917 1919 1921 1949 1947 1945
多工器1913 1923 1935 1937 1939 2001 编码器1920
反相器1929 1931 1933
MAC指数暂存器1943 或电路1925 及电路1941
图21-22
乘法器2131 2133 2135 2137 暂存器2143
13位移位器2105 2107 2109 多工器2202
CASU 2139a-g 1/2MAD CSA树2141a
MAD CSA树2141b 2145 全加器和正规器2147
图23-24
乘法器2331 2333 2337 2339
CASU 2339a-g 暂存器2342a 2342b
多工器2308 2310 2312 2316 2318 2323 2325 2326 2402
13位移位器2302 2304 2306 2320
MAC CSA树2345 1/2MAD CSA树2341a
MAD CSA树2341b CPA 2347a 2347b
LZD 2328 2330 2332 输出闩2340
移位器2334a 2334b CPA 2336a 2336b
栅栏电路2338
图25A-B
多工器2550 2552 2554 2556 2558 2560 2562 2564 2566 2568 2570 25722574 2576 2578 2580 2582 2584 2586 2588 2590 2592 2594 2596 2598 25992597 2595
图27A-B
1/2MAD CSA树2741a MAD CSA树2741b
MAC CSA树 2745a 2745b 栅栏电路2746
多工器2750 2754 2756
图28A-B
半加器2875a-c 全加器2876a-k
图29
CASU 2939a 2939b 栅栏电路2940
模式多工器2908a 2908b 2914a 2914b
多工器3:1 2906a 2906b 移位数据多工器2912a
函数方块2901a 2901b 2902a 2902b
反相器2904a 2904b 柱形移位器2910a 2910b
图30A-B
CPA 3047a 3047b 栅栏电路3048
LZD 3028a 3028b 3030a 3030b 3032a 3032b
移位器3034a-d 模式多工器3041 3049
移位数据多工器3045 输出闩3040
具体实施方式
图1A为一流程图,说明结合一向量ALU与一SFU的一作为例子的处理单元的串流数据处理步骤。更特别的是,图1A显示了伴随一常规的架构100的一串流向量处理单元。如图所示,3维图像数据向量的输入串流传送至输入缓冲常规存储器102。输入缓冲常规存储器102在此例子中传递向量数据至向量ALU(vector ALU)104。如接连的指令周期所示,每个向量包含四个成份:X、Y、Z、和W。如图所示,向量从输入缓冲常规存储器102传送至vector ALU 104,所述向量安排成每个向量彼此相连。vector ALU 104和SFU 106可以执行想要的操作以针对现有向量每个元素来产生输出。一个SFU设计来处理许多操作型式,如正弦函数、余弦函数、平方根函数、分数、指数等等。
图1B为一流程图,相似于图1A的步骤,说明可以运用在一作为一例子的纯量处理单元的执行步骤。图1B说明一向量数据处理,使用有四个纯量ALU(scalar ALU)124的串流处理器。更特别的是,3维图像数据向量串流输入至输入数据缓冲4组正交存取存储器122。此例子中的存储器122用以提供数据读取的垂直存取型式和数据写入的水平存取型式。这种型式的存储器,对于一个或多个存储器组而言,有特别的向量元素多工器和地址产生器,如申请于2003年9月19日的美国专利申请20040172517所揭示并讨论,在此考虑其整体并整合至此。
输入数据缓冲4组正交存取存储器122可传送重组过的(垂直的)向量数据至纯量ALU(scalar ALU)124a-124d。更特别的是,输入数据缓冲4组正交存取存储器122接连地传送第一向量数据元素(W1,Z1,Y1,X1)至scalar ALU1 124a;接连地传送第二向量数据元素(W2,Z2,Y2,X2)至scalar ALU2 124b;接连地传送第三向量数据元素至scalar ALU3 124c;以及,接连地传送第四向量数据元素至scalar ALU4 124d。scalar ALU 124a-124d和SFU 126因此可处理向量数据而且分别传送处理过的数据至缓冲器S1、S2、S3、和S4。输出缓冲器S1-S4接着传送数据至输出正交转换器130,其可转换接收的数据至水平向量格式。更进一步说,输出正交转换器130可设计来将处理过的数据,从纯量序列或垂直表示转换至水平向量表示。于是数据可以输出成如图上所示的Xout、Yout、Zout、Wout。
值得注意的一点是,虽然具有常规架构100的向量处理单元一次处理向量数据中的一个向量,而使用具有四个纯量ALU的串流处理器120的向量数据处理却没有这项要求。如图所示,向量数据的元素可以依照任何顺序来处理且接着被重新整理而输出。此外,虽然具有四个纯量ALU的串流处理器120和有常规架构的向量处理单元100都接收向量数据来视为一数据组,然而这不是一个必要条件。向量数据的元素可以以任何顺序的纯量来被接收,而且可以SIMD方式来被处理。
如先前所提,SIMD串流处理器可设计来执行复杂的数学运算(特别功能)如平方根、正弦、余弦、和其它运算,以提供当代GPU中的图像数据处理。向量ALU可有一附加的(或其它可存取的)SFU。每当一适当的指令到达ALU时,SFU便开始工作。SFU可视为ALU的独立通道。
图1C为一串流处理SIMD架构,伴随复杂数学函数的软件实施。在SIMD纯量ALU的条件下,特别函数的实施可有一些选择。每个ALU有特别的附加查值表以及稍微修改的数据路径,以执行特别常规里的特别函数计算序列(例如计算平方根的Newton-Raphson算法)。在此例子的特别函数计算的时间延迟,将等同于每个特别函数常规的指令数目乘以SIMD纯量ALU的指令执行周期。此个实施上的问题是,延迟时间显著取决于每个ALU的指令数目。
图1D为一串流处理SIMD架构,伴随复杂数学函数的硬件实施,每个ALU使用各别的SFU。如图1D所示,每个纯量ALU享有一各别的SFU硬件。此应用的问题是过多的硬件,而且这些过多的硬件很少被使用到。然而,特别函数计算的时间延迟将是最少的,且通常等于平均指令执行周期。
图1E为一串流处理SIMD架构,伴随复杂数学函数的硬件实施,所有ALU使用一共同的SFU。如图所示,其藉由使用可处理多重ALU的请求的一共同SFU硬件,可降低硬件成本。此实施的一问题在于,当SFU接连地处理所有ALU的请求和计算所有串流的值时,所有ALU的明显地停顿等待时间。一般而言,所有ALU将一直停顿等待,直到最后一个ALU从SFU接收到一个回传值为止。这种操作的总延迟等同于SFU的处理周期乘以连接至SFU的纯量ALU总数。
图1F为一串流处理SIMD架构,伴随复杂数学函数的硬件实施,交错存取一共同的SFU。该SFU每个串流的时间延迟,可藉由数个ALU交错存取该SFU而降低。更特别的是,图1F为使用共同SFU的串流处理SIMD架构的一实施例。在此设定中,来自不同纯量ALU的请求,利用特别的延迟暂存器在时间上被分隔,因而在不同的ALU中重新安排相同的SIMD指令执行。每个串流的延迟将等同于各别SFU的延迟,而相较于先前架构的剩下的延迟,将可藉由延迟暂存器所弥补。
当处理不同输入串流型式时,影响SIMD纯量串流处理器效率的另一问题是SIMD系数。这些串流可能包含顶点、三角形、和(或)像素数据,而储存需要的输入数据的累积可能导致显著的延迟,也会在区域存储器里增加数据生命时间(data life span)。
图1G为减少SIMD系数的一个例子,在一个共同共享SIMD架构下的顶点和三角形处理。如图所示,图1G说明当四个ALU处理串流数据且SIMD系数为4时,一个系数为4的相同SIMD架构的顶点和三角形串流处理。要处理的顶点分组包含四个顶点的数据。要处理的三角形分组包含12个顶点,且可能因为要累积完整分组之后置时间,而在三角形顶点开始处理时就造成显著延迟。这便是为什么在以四个ALU的相同架构下处理三角形时,SIMD系数从4、2、减为1会变成现今图像处理单元的重要课题的原因。
图2A为一流程图,说明一纯量处理单元,相似于图1的流程图,伴随SIMD系数为4。如图所示,图2A用纯量ALU处理向量串流数据,伴随SIMD系数为4且数据为长格式。相似于图1B的数据流,向量数据不受限于以一组数据流来流动的方式。当每个数据元素抵达各别的ALU(ALU0 204a、ALU1 204b、ALU2 204c、以及ALU3 204d),ALU可以根据伴随数据传递的延迟而同步传达的ALU指令来处理数据。此外,如图所示,在ALU0 204a接收数据早于ALU1 204b接收数据。同样地,ALU2 204c相较于ALU1 204b是延迟的。ALU3 204d相较于ALU2 204c是延迟的。当数据处理过后,该处理过的数据传送至缓冲器S1、S2、S3、以及S4,且有各别的同步延迟。
值得注意的是图2A的SIMD系数为4,因为四个ALU实质上执行相同的操作。此外,如图2A所示,每个ALU是用以处理36位的长格式数据。
图2B为一流程图,说明一纯量处理单元,相似于图1的流程图,伴随SIMD系数为1,且将四个ALU的运算结果迭合至ALU3的运算结果。如图所示,图2B说明数个纯量ALU处理向量串流数据,且SIMD系数为1而数据为长格式。当图2A的结构显示了向量数据以不同于向量元素数据组的方式送至这些ALU时,图2B中的结构显示了向量数据以向量数据组的方式传送至这些ALU。更特别的是,图2B的数据X1送至ALU0。ALU0可处理数据且传送至少一部分的处理结果至ALU1,ALU0也输出数据传至元素改组器(component shuffle)226。ALU1被延迟的去接收从ALU0的输出数据以及数据Y1。ALU1传送输出数据至元素改组器226以及ALU2。ALU2接收数据Z1和来自ALU1的数据。ALU2传送输出数据至元素改组器226和ALU3。ALU3接收数据W1和来自ALU2的数据。ALU3传送输出数据至元素改组器226。元素改组器226可传送数据至下列输出的一个或数个:Xout、Yout、Zout、和Wout。以此例来看,假如是向量内积的操作时,此模式最好能在较少的时钟周期内,处理一少量的串流,譬如三角形和顶点分组。
值得注意的是图2B的SIMD系数为1,因为每个ALU执行相同的指令但不同操作数数目。更特别的是,因为每个ALU自前一ALU接收数据,这些ALU依其所在位置执行不同运算。如上所述,用ALU实现内积指令的实施例有下述功能:
ALU0:D0=A0*B0+0,实现X1*X2
ALU1:D1=A1*B1+D0,实现Y1*Y2+X1*X2
ALU2:D2=A2*B2+D1,实现Z1*Z2+Y1*Y2+X1*X2
ALU3:D3=A3*B3+D2,实现W1*W2+Z1*Z2+Y1*Y2+X1*X2
实际结果可能在ALU3的输出中并且可移转至任何向量位置作为以后使用。此外,如图2A所示,于每个ALU,图2B处理36位的长格式数据。
图2C为一流程图,说明一纯量处理单元,相似于图2A的流程图,伴随SIMD系数为8且数据为短格式。此纯量处理单元包含与图2A相同数量的ALU,然而,在图2C每个ALU分开处理两短格式数据串流(辟如说是18位的元素,而非36位的元素)。如图所示,图2C包含向量串流数据处理,伴随处理短格式数据且SIMD系数为8的数个纯量ALU。这表示每个ALU可基于不同延迟时间的同一指令,处理八组输入数据且产生八个结果。更特别的是,向量数据可为18位(短格式),而不同于前述的36位(长格式)。更特别的是,先前例子中的向量元素W1现在分为两个短格式元素W1.0和W1.1。同样地,X、Y、和Z,还有其它数据组2、3、和4也都以短格式数据表示。此外,图2B也表示,输入所述ALU的数据不必然与一个向量元素数据组相关。更特别的是,如同输入每个ALU的数据不必要相互相关,所述ALU也不受限于处理向量数据组。
此实施例中也包含有数个分离或分歧的ALU,可以更有效率处理短格式数据。更特别的是,数据X1.0输入至ALU0的左半部(ALU0.0),而ALU0的右半部(ALU0.1)接收数据X1.1。输入ALU0.0和ALU0.1的数据经过处理后分别传送至输出缓冲器S1.0和S1.1。同样地,数据X2.0和X2.1分别送至ALU1的左半部(ALU1.0)与右半部(ALU1.1)。如图所示,当相较于ALU0.0和ALU0.1处理数据时,ALU1.0和ALU1.1处理数据时间较晚。当数据在处理后,ALU1.0和ALU1.1分别送输出数据至输出缓冲器S2.0和S2.1。
以同样的方式,ALU2.0和ALU2.1分别接收数据X3.0和X3.1。在处理完接收数据后,ALU2.0和ALU2.1分别传送输出数据至输出缓冲器S3.0和S3.1。此外,ALU2.0和ALU2.1的数据处理比先前的ALU的数据处理时间较晚。如同先前的操作,ALU3.0和ALU3.1分别接收数据X4.0和X4.1。ALU3.0和ALU3.1处理完接收的数据(来自ALU2.0和ALU2.1)后,分别传送输出数据至输出缓冲器S4.0和S4.1。
因为所有八个ALU(实体上可视为四个双信道的ALU,每个逻辑上分离成两半)都执行相同指令,图2C的SIMD系数为8。此外,在图2C的ALU可用以接收和处理18位(短格式)数据,以及36位(长格式)数据。
图2D为一流程图,说明一纯量处理单元,相似于图2A的流程图,伴随SIMD系数为4且数据为长格式。图2D包含短格式纯量ALU的向量串流数据处理。如图所示,输入至ALU的数据类似于图2C,可为一数据组的架构或不是一数据组的架构。此外,如同前面的例子,数据X1.0和X1.1输入至ALU0.0和ALU0.1。然而在此例子中,相较于ALU0.0,ALU0.1是稍微延迟的,且使用ALU0.0的运算结果。此外,ALU0.1不只从X1.1接收输入数据,也从ALU0.0的输出接收数据。同样地,ALU1.0接收数据X2.0,处理该接收数据,且输出处理过的数据至ALU1.1。ALU1.1接收由ALU1.0的输出数据以及数据X2.1。处理接收到的数据后,ALU1.1输出处理过的数据至输出缓冲器S2.1。ALU2.0接收数据X3.0,处理接收数据,并输出结果至ALU2.1。ALU2.1接收ALU2.0的输出数据,也接收数据X3.1。ALU2.1处理接收数据并输出结果至输出缓冲器S3.1。ALU3.0接收输入数据X4.0。ALU3.0处理该接收数据并输出处理过的数据至ALU3.1。ALU3.1从ALU3.0接收输出数据,也接收数据X4.1。ALU3.1处理接收的数据并传送处理过的数据至输出缓冲器S4.1。
这样ALU的实施例可用以实施下列功能:
ALU0.0:d0.0=a0.0*b0.0+0
ALU0.1:d0.1=a0.1*b0.1+d0.0
ALU1.0:d1.0=a1.0*b1.0+0
ALU1.1:d1.1=a1.1*b1.1+d1.0
ALU2.0:d2.0=a2.0*b2.0+0
ALU2.1:d2.1=a2.1*b2.1+d2.0
ALU3.0:d3.0=a3.0*b3.0+0
ALU3.1:d3.1=a3.1*b3.1+d3.0
如同有八个ALU处理数据但只有四个输出成运算结果,图2D的逻辑电路的SIMD系数为4。此外,当ALU0.0传送数据至ALU0.1,ALU0.1相较于ALU0.0有些微的处理延迟。ALU0.1可等待ALU0.0处理数据X1.0后,才接收并处理ALU0.0的输出数据和数据X1.1。相似的延迟和处理也在剩余的ALU被执行。
图3为可处理双格式的一偶对纯量ALU的逻辑架构,说明图1和图2A-2D的处理特征。更特别的是,图3包含一串流数据处理器的数个实施例,可以设定来处理数种格式中的任一种的数据。至少有一实施例包含,因应接收指令集的一短格式控制讯号,用以处理数个第一组短格式浮点数据。该第一纯量ALU,因应接收指令集中的一长格式控制讯号,也用以处理第一组长格式浮点数据。此外,一些实施例包含有第二ALU,用以因应接收指令集的一短格式控制讯号,而处理数个第二组短格式浮点数据;因应接收指令集的一长格式控制讯号,而处理第二组长格式浮点数据;接收来自第一ALU的处理后数据;以及,根据指令集的一控制讯号,处理输入数据和来自第一ALU的处理后数据。一些实施例包含一SFU,用以提拱额外计算功能至第一ALU和第二ALU。更进一步说,一些实施例被设计来,因应接收短格式数据时,使串流处理器设计可以功能上分隔至少一对ALU,以利短格式和长格式这样的双格式处理,也就是其SIMD系数是可变的。一些实施例用的指令集包含至少一指令,以处理至少下列模式其中之一:短格式操作数模式,长格式操作数模式,和混合格式迟算元模式。一些实施例的指令集设计以控制可变的SIMD迭合模式,用以处理当第一ALU的输出数据当成长格式模式的操作数传送至第二ALU时,以及,当第一ALU的输出数据当成短格式模式的操作数传送至第二ALU时,两个不同的情形。
更特别的是,图3的两个ALU 310和ALU 320可分别以SIMD系数为2和4的状态下处理长数据格式和短数据格式。该描述的架构显示数据路径,其包含区域乘法器,以及加法器,并结合可处理短格式和长格式数据的区域乘法累加(Multiply Accumulate,MACC)暂存器。在此例子中,来自SFU的数据被接收在ALU0和ALU1的累加暂存器(accumulator registor)370。耦合至该累加器的是高速缓存输入数据模块372,以及ALU输入端口(port)P0 376。ALU输入端口P0 376可以将72位处理成四段。耦合至高速缓存输入数据372的是ALU输入端口P1 378。相似于ALU输入端口P0 376,ALU输入端口P1 378也可以将72位数据处理成四段18位。耦合至ALU输入端口P1 378是ALU输入端口P2 380,可用以将72位数据处理成四段18位。
耦合至ALU输入端口P0 376、ALU输入端口P1 378、和ALU输入端口P2 380是ALU0 310,其包含输入多工器382a和输出多工器384a。输入多工器382a包含输出端口CH、A1H、B0L、A1L、和B1L,输入多工器384a包含输出端口A0H、B0H、A0L、B1H、和CL。输出端口CH耦合至加法器396a,输出端口A1H和B0L耦合至乘法器386a。乘法器386a也耦合至加法器396a。输出端口A1L和B1L耦合至乘法器388a,乘法器388a耦合至13位移位器371a,13位移位器371a耦合至加法器396a。
从输入多工器384a,输出端口A0H和B0H耦合至乘法器392a。乘法器392a也耦合至加法器399a。输出端口A0L和B1H耦合至乘法器390a,乘法器390a耦合至13位移位器373a,13位移位器373a耦合至加法器399a。输出端口CL耦合至加法器399a。加法器396a和399a经由13位移位器和致能装置398a而耦合在一起。乘法累加单元(MACC)394a和397a分别耦合至加法器396a和399a。加法器396a和399a的输出分别耦合至低输出端口DL和高输出端口DH。
输入端口ALU port P0 376、ALU port P1 378、和ALU port P2 380也经由延迟暂存器383耦合至ALU1 320。延迟暂存器383耦合至输入多工器382b和384b。输入多工器382b的输出端口CH耦合至加法器396b。输出端口A1H和B0L耦合至乘法器386b,其耦合至加法器396b。输出端口A1L和B1L耦合至乘法器388b,其经由13位移位器371b,而位移位器371b耦合至加法器396b。
输入多工器384b的输出的包含A0H和B0H,其耦合至乘法器392b。乘法器392b耦合至加法器399b。输出端口A0L和B1H耦合至乘法器390b,乘法器390b经由13位移位器373b,13位移位器373b耦合至加法器399b。输出端口CL耦合至加法器399b。加法器396b和399b经由13位移位器和致能装置398b而耦合在一起。乘法累加单元(MACC)394b和397b分别耦合至加法器396b和399b。加法器396b耦合至低输出端口DL,而加法器399b耦合至高输出端口HL。在此例子中具有旁通组件395和输出CL数据组件393,其耦合在ALU310和ALU320之间,利用ALU1 320操作的一个时钟周期延迟。
值得注意的一点是,图3里所绘的组件说明操作的逻辑架构。更特别的是,图3所绘的架构说明有分岐数据路径和可变SIMD系数的ALU的设计原则。
图4说明有对偶纯量ALU的串流处理单元,相似于图3的架构。如图所示,数据输入至快取存储单元472,其中包含L0、L1、S0、S1、S2、S3、等等。快取存储单元472传送储存数据至存储器输出多工器474,其耦合至输入端口port P0 476、port P1 478、和port P2 480。port P0 476、port P1 478、和port P2 480也耦合至输入多工器闩482a,其耦合至ALU0。ALU0在此例中计算A0*B0+C0等于D0,其结果输出至D0L。
port P0 476、port P1 478、和port P2 480耦合至延迟暂存器483,延迟暂存器483耦合至输入多工器482b,再连接至ALU1。ALU1在此例中计算A1*B1+C1+D0等于D1,其结果输出至D1L。ALU0的输出端口D0L也耦合到ALU1。本领域的技术人员将了解,此特别例子在ALU1里计算处理ALU0的输出值。更特别的是,ALU0计算出D0的值,其紧接传送至延迟暂存器386。D0从延迟暂存器386传送至ALU1以计算D1。
耦合至ALU0和ALU1的输出的是多工器484,其耦合至ALU0和ALU1共享的SFU 470。SFU 470也耦合至ALU0的输入和(经由延迟暂存器483)ALU1的输入。ALU0和ALU1的输出也耦合至快取存储单元472和其它单元。
图4也包含了SIMD微码控制器488,用以决定和传递所需的操作控制讯号至ALU0和ALU1。耦合至SIMD微码控制器488的是ALU控制和寻址组件490。延迟暂存器483耦合在ALU控制和定位组件490与ALU1之间。
值得注意的是,图3是针对短格式数据处理的实施例,而图4是针对长格式数据处理的实施例。更特别的是,尽管本发明披露的实例施包含能处理短格式、长格式、和混合格式、等等的能力,其中许多例子也可包含重排数据的处理。
图5A为一图表,说明偶对ALU的算术功能,这样的ALU已描述于图3与图4。本表说明ALU0和ALU1所有可能的操作。这些操作可执行短18位、长36位、和混合18-36位浮点数据。所有操作分别三大群:常规、混合、与交叉操作。每个群中有正常操作和18/36位数据的四倍/两倍型式操作。四倍/两倍型式使用传递在相同ALU的区块间或是ALU0和ALU1之间的数据。图表的顶端,有跟图3中ALU0和ALU1的输入相同名字的数行,以及与图标相同的数据路径控制讯号。
每个操作藉由两列来描述:第一列表示来自ALU端口P0、P1、和P2的输入数据(特别元素如P0.0、P0.1等等),以及一些数据路径控制讯号的状态;第二列描述公式,而公式的运算结果会传送至输出端口dl和dh。最后一行包含有关在特别操作下的偶对ALU的SIMD系数信息。这样的偶对ALU可复制数次以增加整体的SIMD系数。表格的右边包含操作的缩写附注,ALU硬件的算术函数使用乘法符号「S」和加法符号「s」,同时也包含在特别的操作时的乘加暂存器(MAC)的作用。以下详细的指令集叙述可以说明串流处理器的整体功能。
图5B包含一GPU,其中之一个SIMD串流处理器当成计算核心。此例中包含四个串流处理器且每个处理器包含四对ALU和两个SFU。串流处理器的实施例是用以处理不同类型的数据(几何和像素/纹素);通过使用指令集里不同指令,可以提供可变SIMD系数给所用的不同类型的数据。
串流处理器指令可能有3至9字节的长度,取决于指令类型和地址模式。指令包含下列部分:(1)主体(一般指令和流程控制指令);(2)指令前置词,可传递一般指令的结果至SFU、或是重复一般指令的执行;以及(3)修饰指令词,可变动操作数大小、设置旗标和控制结果写回。指令编码原则列出如下:
Figure A20071000675400221
表1
基于此格式,串流处理器有下列依功能性分类的指令集。串流处理器指令集举例如下表所述:
Figure A20071000675400231
Figure A20071000675400241
Figure A20071000675400251
表2
附注:1-取决于当下操作数B、C、和目的地的操作数长度
2-假如指令格式是短格式,「S」字段只影响数据交换(swap)而不影响写入屏蔽(write masking)
3-假如指令格式是短格式或混合格式,「S」字段只影响数据交换而不影响写入屏蔽
4-假如内积和外积指令符号用于二次微分
5-假如内积4指令符号用于二次微分和四次微分;操作数C的地址的默认值为操作数A的地址加1
Figure A20071000675400252
Figure A20071000675400261
Figure A20071000675400281
表3
附注:1-取决于现存操作数B、C、和目的地的操作数长度
2-假如指令格式是短格式,「S」字段只影响数据交换(swap)而不影响写入屏蔽(write masking)
1-有MACC,重复从操作数C初始化,当不重复(操作数C被忽略时)不初始化
2-没有MACC,假如位「C」设定,操作数C的地址=操作数B的地址+「cc」+1
3-有MACC且重复时以「0」初始化,「cc」字段永远选择操作数C的地址
操作数地址-以{操作数A,操作数B,操作数C,目的地}的顺序,其取决于现有的操作数和长度。
字段描述符号
  字段  描述
  A  操作数A
  B  操作数B
  C  操作数C
  D  目的地
  d  目的地至ACC写入致能
  S  交换迭合部分
  s  混杂符号,DP4和外积
  rrr(r)  重复指标
  WW   条件分支与写回控制
  II   条件循环控制(分支与写回条件相同)
表4
  D  目的地至ACC
  0  启动写入至ACC
  1  关闭写入至ACC
表5
  S   交换迭合部分
0   不交换
1   交换迭合部分
表6
  WW  条件写回控制
  00  一直写入
  01  写入,如果只有零标签设定(=0)
  10  写入,如果只有符号卷标设定(<0)
  11  写入,如果只有零或符号卷标设定(≤0)
表7
Figure A20071000675400291
Figure A20071000675400301
表8
表10:指令编码主矩阵(指令第一字节)
Figure A20071000675400312
表11:指令编码主矩阵(指令第二字节)
图6相似于图3和图4的ALU,说明有四个纯量ALU的串流处理器的逻辑架构和流程图。如图所示,输入数据送至四个ALU,分别标示成ALU0、ALU1、ALU2、和ALU3。更特别的是,输入数据602a传送至ALU0的输入端口。此外,来自指令译码器的控制和地址讯号602e输入至ALU0,还有共同数据602f也是输入至ALU0。来自SFU 670的数据也输入至ALU0。在指令执行周期1,数据在ALU0里被处理。
在执行周期1,输入数据602b存于延迟暂存器683a,然后再传送至ALU1的输入端口。来自指令译码器602e的控制和地址讯号存于延迟暂存器683d,然后再传送至ALU1的输入端口。同样地,共同数据602f存于延迟暂存器683e再输入至ALU1。来自SFU670的数据没有延迟地传送至ALU1。在指令执行周期2时,ALU1处理接收数据。
在执行周期1时,输入数据602c存于延迟暂存器683b。在执行周期2时,数据存于延迟暂存器683p。然后输入数据602c传送至ALU2。ALU2也经由延迟暂存器683d和683g从指令译码器602e接收控制和地址讯号。同样地,共同数据经由延迟暂存器683e和683h传送至ALU2。ALU3接收的输入数据602d,在指令执行周期1会经由延迟暂存器683c,在指令执行周期2会经由延迟暂存器683q,在指令执行周期3会经由延迟暂存器683f。同样地,ALU3接收的指令译码器的控制和地址讯号602e,在指令执行周期1会经由延迟暂存器683d,在指令执行周期2会经由延迟暂存器683g,在指令执行周期3会经由延迟暂存器683i。ALU3接收的共同数据,在指令执行周期1会经由延迟暂存器683e,在指令执行周期2会经由延迟暂存器683h,在指令执行周期3会经由延迟暂存器683j。ALU3的输出传送至有宽度M的四槽输出缓冲器604和多工器672,其耦合至SFU 670的一输入端口。从ALU0、ALU1、ALU2的输出传送至多工器672。ALU2的输出经由延迟暂存器683o传送至输出缓冲器4×M 604。ALU1的输出经由延迟暂存器6831和683n传送至输出缓冲器4×M 604。ALU0的输出经由延迟暂存器683r、683k和683m传送至输出缓冲器4×M 604。值得注意的一点是在至少一实施例中,图6可设计来具有逻辑电路,以从数据路径移除至少一延迟。
图7A为一流程图,说明向量ALU中的正规化的向量差处理。更特定的说,正规化的向量差的计算执行在传统向量ALU和串流SIMD纯量ALU时,可以当成一实施例。图7A表示正规化的向量差计算的数据流。举例而言,向量正规化的差(向量V1和V2)计算的向量架构实施如下:
//数据配置:V1->r0.xyzw V2->r1.xyzw(x,y,z,w是图形数据向量的元素)
//向量ALU的程序
SUB r2,r0,r1//所有元素的减法
DP3 r3.x,r2,r2//三个元素的内积产生x元素
RSQ r3.x,r3.x//产生x元素的倒数平方根
MUL r2,r2,r3.x//利用RSQ的结果调整所有元素的值
为了处理4组数据,此流程可重复4次,花费16个指令周期。利用图7B-C的纯量ALU,在SIMD串流处理器也可达成相同任务:
例子:向量正规化的差(向量V1和V2)
比较传统的作法与SIMD串流纯量ALU架构。纯量ALU的SIMD应用:V1->r0.xyzw=r0[0],r0[1],r0[2],r0[3]V2->r1.xyzw=r1[0],r1[1],r1[2],r1[3]。(x、y、z、和w为图像数据向量的元素,r[0-3]表示分开的纯量)
  向量ALU   串流SIMD纯量ALU   批注
  SUB r2,r0,r1   Repl(j<3)SUB r2[j],r0[j],r1[j]   所有元素的减法
  DP3 r3.x,r2,r2   Repl(j<3)MAC Null,r2[j],r2[j]   所有元素的内积产生至x元素,以乘法累加来实现
  RSQ r3.x,r3.x   Repl(j<3)RSQ ACC,FWD   产生x元素的倒数平方根,传递至有MAC的SFU
  MUL r2,r2,r3.x   Repl(j<3)MUL r2[j],r2[j],ACC   由RSQ值调整所有元素大小
  Repl(j<3)SUB r2[j],r0[j],r1[j]   尺寸地址偏移j=0,j=j+1,....
表12
图7B为一流程图,说明本发明披露的一串流纯量ALU结合一SFU的处理例行程序,图7C为图7B的延续。根据图7B和图7C,有纯量ALU的SIMD串流处理器可以同时处理四组图像向量数据,而需花费10(9+1)个指令周期,然而传统向量架构则需16个周期。效率的提升伴随着向量尺寸的减少,藉由两元素向量,同一笔数据可在8个周期内被处理完毕,然而传统向量ALU则需16个周期。
作为例子的图8为一ALU模块,实现了图6ALU的功能性。更特别的是,图8可视为图6ALU0的一实施例。ALU的实施例包含四部分:一数据路径,具有双格式乘法累加单元872和必要的输入与输出多工器870、874;一暂存器库,包含延迟暂存器883a,写回暂存器876,以及针对每个执行绪的数个累加器878;一暂存SRAM,具有区域ALU暂存表880;以及一区域控制单元,具有必要的状态机与地址产生器882。
如图所示,输入数据IN0在ALU的部分数据路径中传送至多工器870。输入数据IN1、IN2、和IN3分别传送至延迟暂存器883c、延迟暂存器883d、和延迟暂存器883e,然后被输出。控制和地址讯号CAI传送至延迟暂存器883a然后输出,也传送到ALU的区域控制部分中的控制状态机和地址产生器882。共同数据输入CDI传送至延迟暂存器883b。从延迟暂存器883b,共同数据CDI传送至输出端口,也输入多工器870。
多工器870也接收来自SRAM暂存表880的数据RD0和RD1、写回暂存器876的数据、以及执行绪累加暂存器878的数据。在图示中,多工器870有三个输出端口,每个用以传送M位的数据。多工器870的输出端口耦合至双格式乘法累加单元(MACC)872,其详述如下。双格式MACC单元872的输出端口耦合至多工器874的第二输入端口,也耦合至写回暂存器876的输入端口。如同先前所述的,写回暂存器876的输出端口耦合至多工器870的输入端口,也耦合至SRAM暂存表880的输入端口WDATA、输出端口O0、以及输出端口FW。多工器874的输出端口耦合至执行绪累加暂存器878,执行绪累加暂存器878再耦合至多工器870的输入端口。如上述,控制和地址讯号CAI经由延迟暂存器883a耦合至控制状态机和地址产生器882。控制状态机和地址产生器882输出数据至SRAM暂存表880的输入端口RA0、RA1、WA、以及WE。
图9相似于图3、4的ALU,说明有四个ALU的串流处理器模块,且以图8所述的纯量处理器模块来建立。此架构显示使用与图8相同的纯量处理器模块的SIMD串流多重处理器。此方式简化设计和验证的工作,其可应用于建立尺寸可大可小的SIMD串流处理器的机器模块。同样的,相似于图8,控制与地址讯号(图8的CAI)输入至ALU0的CAI。共同数据(图8的CDI)输入至ALU0的CDI。如图9所示,ALU0从输入缓冲器4×M接收数据输入直接至IN0。ALU0接着处理接收数据,但处理后的数据再输入至三个延迟暂存器(如图6的延迟暂存器683r、683k、和683m)。在图9中,这些延迟可通过连接ALU0的输出端口至输入端口来实现。进一步来说,从IN0接收的数据,处理后输出至O0。O0耦合至IN3,IN3延迟该数据(第一延迟)后再输出至O3。O3耦合至IN2,IN2延迟该数据(第二延迟)后再输出至O2。O2耦合至IN1,IN1延迟该数据(第三延迟)后再输出至O1。O1的输出耦合至输出缓冲器4×M。
至于ALU1,控制和地址讯号以及共同数据讯号分别在ALU1的CAI和CDI接收。如图6、8所示,这些讯号在ALU1接收前受到一个延迟。此延迟分别藉由经过ALU0输出至CAO和CDO,再传送至ALU1的CAI和CDI来表示。来自输入缓冲器4×M的输入数据在ALU1的IN1接收。如图6所示,输入数据在ALU1处理前受到一个延迟(如图6的延迟暂存器683a)。此延迟在图9藉由耦合输出端口O1至IN0达成。该数据处理后输出至O0。输出端口O0耦合至IN3以创造输出延迟,如图6所示。两个输出延迟藉由IN3至O3的延迟(延迟暂存器6831)和IN2至O2的延迟(延迟暂存器683n)创造出来。经过所述延迟后,输出数据可传送至输出缓冲器4×M。
至于ALU2,控制和地址讯号以及共同数据讯号在ALU2接收前受到二个延迟,然后分别在ALU2的CAI和CDI接收。来自输入缓冲器4×M的输入数据在ALU2的IN2接收。如图6所示,为了达成输入数据在ALU2处理前受到二个延迟,接收讯号处理(在图6的延迟暂存器683b)后输出至O2。此讯号在IN1接收,处理(延迟暂存器683p)后输出至O1。此讯号在IN0接收,处理(延迟暂存器683p)后输出至O0。为了实现输出延迟,输出数据传送至IN3,处理(延迟暂存器683o)后再传送至输出缓冲器4×M。
至于ALU3,控制和地址讯号以及共同数据讯号在受到三个延迟后(ALU0、ALU1、和ALU2),在ALU3的CAI和CDI接收。输入数据传送至IN3再受到三个输入延迟。第一输入延迟经由ALU3的IN3和O3间的延迟(延迟暂存器683c)。该输入数据由O3传送至IN2,然后在ALU3受到第二延迟(延迟暂存器683q)。该输入数据由O2传送至IN1。该输入数据延迟后(延迟暂存器683f)输出至O1。该输入数据传送至IN0,处理后输出至O0,接着传送至输出缓冲器4×M。
此外,如图8所示,输出数据耦合至输出端口FW以传送至SFU 980。输出数据可传送至多工器970。多工器970耦合至SFU 980,其可进一步处理输出数据,以输入至每个ALU的输入端口SF。
该串流ALU模块的一部分为乘法累加单元,其可用以支持可变SIMD系数处理,其可运算双浮点数据格式和具有堆栈(减少)SIMD系数以及平行处理数据的能力。在本发明书中值得注意的是,缩写「MAC」是指乘法累加暂存器,而「MACC」和「Multiply Accumulate Unit」意指双格式乘法累加单元,如图8的组件872。
此外,如图9所示,ALU0、ALU1、ALU2、和ALU3的实施例可接收来自SFU的运算数据,而运算数据用以指示接收数据执行的运算。同样地,在一些实施例中,ALU0可传送共同数据至ALU1、ALU1可传送共同数据至ALU2、ALU2可传送共同数据至ALU3。
图10A-C说明如同图8的MACC单元MACC的数据流和格式。更特别的是,请参考图8,MACC单元872可用以处理长格式数据(浮点、整数等等),短格式数据(浮点、整数等等),和混合格式数据(浮点、整数等等),且当处理短格式数据时其效能会增加。
图10A说明MACC单元的数据程流逻辑架构,以及说明运算两不同数据格式(也就是长浮点和短浮点格式)的能力。下述步骤可根据浮点算术算法,处理浮点数据:
短和/或长指数(exponent)处理,当被乘数的指数相加以及加法操作数的指数相减时。
短和/或长操作数在区域乘法器的底数(mantissas)乘法。
短和/或长尾数的补码运算,根据运算符号和定义加法或减法的操作数修饰语(operand modifier)。
在加法/减法之后的短和/或长底数校准(alignment),其根据指数不同而移位。
针对多重加法操作数的短和/或长底数的加法/减法。
具有前置对齐(pre-aligned)MACC暂存器内容的短和/或长底数的加法/减法。
结果的正规化,其在传送至输出暂存器之后,可能需要相关指数更新的底数移位。
如图10B所示,长浮点数据可为36位,其中第35-31位为高指数位e8-e4。第30-18位表示低底数字元m12-m0。第17位表示指数值e9,第16-13位表示低指数e3-e0。第12位表示底数符号ms,其为高底数的一部分,第11-0位m24-m13也是。
图10C说明短浮点数据,针对信道1的短浮点数据。此两短格式数据可放于图10B长格式数据的位置。更特别的是,第35位为指数位e4。第34-31位为高指数位e3-e0。底数符号ms为第30位,第29-18位为高底数m11-m0。至于信道0的短浮点数据,第17位为指数位e4。第16-13位为低指数e3-e0。底数符号ms为第12位,而第11-0位为低底数字元m11-m0。
图11相似于图8的MACC单元且实现图10A的数据流,详细说明MACC单元的浮点数据路径的内部逻辑架构。更特别的是,MACC单元872,如同图8所示,同时处理短和长浮点数据。图11的浮点数据路径包含下述主要部分,而这些主要部分可用以处理一组长操作数(ABC)或两组短操作数(2×abc)。
指数处理部分,在适当的通道处理长指数和短指数;
底数处理部分,处理长指数和短底数。图11的浮点数据路径根据有额外累加单元的浮点乘加算法而实现。
MACC单元872可针对信道0的短指数运算和大小调整单元(ShortExpoent Calculation and Scale unit for chennale 0,SECS0)1120。SECS0 1120从通道1接收操作数A(之后称为「a1」)的五个高指数位。此外,SECS01120从通道0接收操作数B(之后称为「b0」)的五个低指数位、操作数a1的五个底指数位、操作数b1的五个底指数位、以及第三操作数c1(c1表示为ab+c的操作数)的五个指数位。SECS0 1120也接收操作数C、B、和A的尺寸系数(scale factor)scal_c、scal_h、和scal_l。SECS0 1120的输出包含6位的短指数,其传送至补码与对齐移位单元(Complement and AlignmentShifter Unit,CASU)1139,在加法之后将底数对齐。SECS0 1120也输出6位短指数至最终加法器(CPA或CLA)和正规化单元1147,以输出指数的最终值以及从浮点数据路径提供最终输出。
长指数计算和调整尺寸单元(Long Exponent Calculation and Scale unit,LECS)1140接收结合操作数a0和a1的10位指数数据、结合操作数b0和b1的10位指数数据、以及结合操作数ch和cl的10位。一并接收的也有操作数尺寸系数scal_c和scal_h。LECS 1040的输出包含三个至CASU 1139的11位输出,以及至最终加法器和正规化单元1147的11位长指数输出。
混合指数和短指数计算和调整尺寸单元信道1(Mixed Exponent andShort Exponent calculation and scale unit Channel 1,MESEC1)1130接收操作数a0的五个低指数位。此外,MESEC1 1130也接收操作数b1的高指数五个位、操作数a0的高指数、操作数b0的高指数、操作数ch_e、操作数b0的低指数、以及操作数b1的低指数来的五位、以及b0和b1的高指数十个位、还有cat(ch_e,cl_e)。MESEC1 1130也接收scal_c、scal_h、和scal_l。MESEC1 1130输出三组数据(6位或11位,取决于特别操作数)至CASU1139,也输出6位短指数至最终加法器和正规化单元1147。
至于通道0的底数部分,乘法器1131接收操作数a1低底数(13位)和操作数b1高底数(13位)。乘法器1133接收操作数a1高底数(13位)和操作数b0低底数(13位)。乘法器1131和1133两者皆输出26位至CASU1139。此外,信道0的cl_m(13位)在CASU 1139被接收,还有符号位sign_h、sign_l、和sing_c也是。同样地,对于通道1,乘法器1135接收操作数a0高底数(13位)和操作数b0高底数(13位)。乘法器1137接收操作数a0低底数(13位)和操作数b1高底数(13位)。符号位sign_h、sign_l、和sing_c(长格式),操作数修饰语abs_c和neg_c都在通道1中由CASU1139接收。
针对短格式操作数,CASU 1139输出六个26位至多重输入加法器(MADCSA单元)1141,其实现乘加运算(Multiply-Add,MAD)步骤。MAD CSA单元1141可用含有四个37位讯号(长格式操作数)输入和两个39位讯号输入的数个进位储存加法器(Carry-Save Adder,CSA)加以实现。MAD CSA单元1141输出两个2+26位输出或一个2+40位(长格式)输出至乘法累加进位储存加法器(Multiply-Accumulate Carry Save Adder unit,MAC CSA unit)单元1145。MAC CSA单元1145可用以输出两个5+26位短格式输出和一个5+40位长格式输出至最终加法器和正规化单元1147。MAC CSA单元1145也输出5+40位(长格式)和两组5+26位(短格式)至乘加暂存器1143,其耦合至补码和对齐移位器CASU(complement and alignment shifter)1144。CASU 1144输出两个5+26位讯号和一个5+40位长格式讯号回MAC CSA单元1145。最终加法器和正规化单元1147输出两个短格式结果,各含有一个符号位、五个指数位、以及十三个底数字元(s5e13m)。此外,于至少一个实施例中,最终加法器和正规化单元1147可以s10e26m的型式输出一长格式操作数。
下列描述图11中的双格式乘加累加运算的两个可能实现方式:一个是,当我们使用分离电路以处理不同数据格式且共享唯一输出数据/结果缓冲器时,分离短格式数据和长格式数据的数据路径;另一个是,当我们使用相同电路伴随额外逻辑电路以交错处理短格式和长格式数据时,结合短格式数据和长格式数据的数据路径。
图12相似于图11的短指数计算信道,说明分离的短指数计算。该短指数通道接收三个短操作数的指数和MACC的指数以计算结果的指数部分,以及操作数底数对齐所需的移位位数。短通道包含四个阶层的指数加法器:乘法的加法器1212和1214,加法的加法器1204、1206、和1208,乘法累加的加法器1216、1218、1222、和1224,以及调整操作数尺寸的加法器1241、1244、和1246(2x、4x等等)。短通道也包含多工器1210、1226、1232、1234、和1236,以帮上述加法器和MAC指数暂存器1128选择正确的输入。此外,短信道包含优先权编码器(priority encoder)1220,其基于选择的加法器的输出为正值或负值,产生控制讯号给数个多工器。短底数信道的运算结果产生一些讯号以用在短底数通道。运算结果后,短底数信道产生少量的信号给予短底数信道。这些讯号如下所述:通道0的指数部分,和一群对齐底数的移位讯号。移位讯号包含短操作数c的位移、短操作数a和b的位移、以及MACC暂存器值的位移。表13描述进位传递加法器(Carry PropagateAdder,CPA)1208符号输出的输出控制功能,其定义每个输出讯号的路线走法(见图12编码表x1x2x3的输入):
  条件0 x1CPA 1208A   条件1 x2CPA 1208B   条件2 x3CPA 1208C   输出句柄
  NOT(cl>a1h*b0l)   NOT(a1l*b1h>a1h*b0l)   a1h*b0l>a1l*b1h   0
  NOT(cl>a1h*b0l)   a1l*b1h>a1h*b0l   NOT(a1h*b0l>a1l*b1h)   0
  NOT(cl>a1h*b0l)   a1l*b1h>a1h*b0l   a1h*b0l>a1l*b1h   0
  cl>a1h*b0l   NOT(a1l*b1h>   a1h*b0l>a1l*b1h   1
  a1h*b0l)
  cl>a1h*b0l   a1l*b1h>a1h*b0l)   NOT(a1h*b0l>a1l*b1h)   1
  cl>a1h*b0l   a1l*b1h>a1h*b0l   a1h*b0l>a1l*b1h   1
  NOT(cl>a1h*b0l)   NOT(a1l*b1h>a1h*b0l)   NOT(a1h*b0l>a1l*b1h)   2
  cl>a1h*b0l   NOT(a1l*b1h>a1h*b0l)   NOT(a1h*b0l>a1l*b1h)   2
  只有MAC运算   只有MAC运算   只有MAC运算   3
表13
更特别的是,如上所述,SECS0 1120接收操作数cl_e、操作数b1_e高指数部分(5位)、操作数a1_l低指数部分(5位)、操作数b0_e低指数部分(5位)、以及操作数al_e高指数部分(5位)。这些输入耦合至零值指数侦测器(zero exponent detector)1202。假如指数部分为零时,零值指数侦测器1202可用以输出讯号。此外,零值指数侦测器1202输出cl_e中的5位至CPA(carry propagate adder)1204,其为部分的CPA加法,同时也输出至多工器1210的输入端口「1」。两组5位也传送至另一CPA 1212,另两组5位从零值指数侦测器1202传送至CPA 1214。CPA 1212传送数据(6位)至加法的加法器(CPA for addition)1204、乘法累加的加法器(CPA for MAC)1218、以及多工器1210的输入端口「0」。乘法的加法器(CPA formultiplication)1214传送输出至加法的加法器(CPA for addition)1206、1208、乘法累加的加法器(CPA for MAC)1222、以及多工器1210的输入端口「2」。
加法的加法器(CPA for addition)1204传送6位数据至多工器1232的输入端口「0」以及反相器1250,反相器1250将讯号反相和传送该反相讯号至多工器1234的输入端口「1」。CPA for addition 1204也产生一负值讯号(<0)至编码器1220,编码器1220控制多工器1232、1234、和1236。CPAfor addition 1206传送6位至多工器1232的输入端口「2」和反相器1254,反相器1254将讯号反相和传送该反相讯号至多工器1236的输入端口「1」。CPA for addition 1206也产生一负值讯号(<0)至编码器1220,CPA foraddition 1208产生产生一负值讯号(<0)至编码器1220,和6位讯号至多工器1234的输入端口「2」,以及经由反相器1252至多工器1236的输入端口「0」。多工器控制输入1210耦合至「或」电路1230和编码器1220。此外,多工器1210输出6位至「及」电路1240和信道1。
CPA for MAC 1216传送6位数据至多工器1232的输入端口「3」。CPAfor MAC 1218传送6位数据至多工器1234的输入端口「3」。CPA for MAC1222传送6位至多工器1236的输入端口「3」。CPA for MAC 1224传送6位至「及」电路1240。多工器1226从多工器1210接收6位至输入端口「1」,以及从MAC指数暂存器1228接收6位至输入端口「0」。多工器1226的输出传送至MAC指数暂存器1228的输入,以及通道0的输出。
多工器1232输出6位至调整操作数尺寸的加法器(CPA for operandscale)1242,CPA for operand scale 1242也接收scale_c,而scale_c表示尺寸操作数2x、4x,scale_l表示在c_l的加法前的乘法结果尺寸2x、4x等等。CPA for operand scale 1242输出底数shift_cl的数据,其可用在对齐移位器上。CPA for operand scale 1244接收scale_1(调整乘法器X_l结果的尺寸)以及多工器1234的输出,并输出6位至底数shift_l0。CPA for operand scale 1246接收scale_h(调整乘法器X_h结果的尺寸)以及多工器1236的输出,并输出6位至底数shift_h0,其可用在底数对齐移位器上。「及」闸1240自CPAfor MAC 1224以及多工器1210接收6位输出。「及」闸1240输出6位至底数shift_macc0输出,其可用于MAC对齐移位器。
图13相似于图11的短指数计算,说明短指数计算。短指数通道1几乎对称于图12的指数通道0以及有相似的功能性,除了增加信道0短指数值至最后输出指数的可能性。此特性能支持可变SIMD系数在短操作数处理模式。更特别的是,如图所示,输入值包含操作数a0高指数(5位)、操作数b0高指数(5位)、操作数a0低指数(5位)、操作数b1高指数(5位)、以及短操作数指数ch_e。虽然短指数计算信道0的电路(图12)和图13的短指数计算通道1(结合混合指数信道)相似,一个显著的不同在于图13出现有多工器1355。多工器1355从通道0(图12的输出)接收指数,也从MAC暂存器1328的输出接收。多工器1355输出数据至图12的数个CPA forMAC。输入数据可处理以提供信道1的指数值,以及底数移位Mantissashift_macl、Mantissa shift_h1、Mantissa shift_l1、和Mantissa shift_ch的讯号。
图14显示提供多种通道的一短底数路径,详细地说明图11的底数路径。本架构的目的在提供短浮点操作数的底数运算。本架构可用以实现d=a*b+c+MAC的相同运算,且包含必要的硬件区块。该短底数数据路径包含两个几乎对称的部分:短底数信道0和信道1(分别为图14的左半部和右半部)。它们包含区域乘法器1431、1433、1435、1437,而它们的输出传送至补码和对齐移位器单元(表示成+/-/>>)CASU 1439a、b、c、d、e、f、g、和h,其可根据选择的指数值对齐操作数底数。这些单元也根据运算符号(加法或减法)补码化或负值化输入底数值。这些单元结合实现进位储存加法树(carry-save adder tree)的加法器1441a、1441b、1445a、1445b,其把乘法的结果和操作数c_low和c_high加起来,以及相加macc_low和macc_high。MAC短底数暂存器1430a和1430b包含累加短底数值。全加器和正规器1447a、1447b产生两通道的短底数和短指数最终值。
更特别的是,如上所述,乘法器X0L 1431接收13位的操作数b1低底数,以及13位的操作数a1低底数。乘法器X0H 1433接收13位的操作数b0低底数和13位的操作数a1高底数。CASU 1439a接收6位的shift cl、13位的操作数a1高底数、以及1位的sign_c。CASU 1439b接收来自乘法器1431的26位输出、6位的预先对齐移位控制讯号shift l0(其为图12短指数信道的输出)、以及符号值sign_l。CASU 1439c接收来自乘法器X0H 1433的26位底数乘积、来自短指数信道的6位预先对齐移位控制讯号shift h0、以及符号值sign_h。
CASU 1439a、1439b、1439c的输出输入至MAD CSA树1441a(有相关的表显示CSA的阶层及额外位)。MAD CSA树1441a输出2+26位的数据至MAC CSA树1445a以及多工器1432。额外位用以在对齐和正规化前避免底数在MAC循环的溢位。全加器和正规化单元1447a接收来自MAC CSA树1445a的5+26位底数数据,以及来自短指数信道0的指数数据。额外增加的5位以避免可能在MAC循环中的底数溢位。全加器和正规化单元1447a将底数从CSA格式转换至一般位编码格式、将结果正规化、以及将结果输出。该结果包含1位符号,5位指数,和13位底数(s5e13m),而该结果传送至输出dl。
也如上所述,乘法器X1H 1435接收操作数a0高底数和操作数b0高底数。乘法器X1L 1437接收操作数a0低底数和操作数b1高底数。CASU 1439d接收来自乘法器X1H 1435的输出(26位底数乘积)以及用来底数对齐运算的6位shift l1(指数信道的输出),和1位符号值sign_h。CASU 1439e接收来自乘法器1437的26位、6位的shift h1、以及1位的sign_l。CASU 1439f接收13位的ch_m、6位的shift ch、以及1位的sign_c。MAD CSA树1441b用以接收来自CASU 1439d的预先对齐26位底数、来自CASU 1439e的26位底数、以及CASU 1439f的26位底数。
此外,MAC_h暂存器1430b从MAC CSA树1145b接收5+26位数据。多工器1432从MAC_h 1430b接收5+26位数据,以及从信道0的MAD CSA树1441a接收数据。CASU 1439h从多工器1432接收5+26位,以及从指数信道接收底数移位讯号matissa shift_macc1讯号。MAC CSA树1445b从CASU 1439h接收5+26位数据,也从MAD CSA树1441b接收2+26位数据。全加器和正规器1447b从指数信道1接收指数数据,也从MAC CSA树1445b接收5+26位数据。全加器和正规器1447b传送s5e13m的结果数据至输出dh。
图15说明长指数计算ALU0,相似于图11的指数计算。图15的例子包含有适当多工器的四个加法器阶层,相似于图11、12的短指数通道。差异点在于此信道处理一组10位长指数,而图11、12处理一组5位短指数。长指数处理信道用以产生所有操作数移位讯号以用在底数处理通道的底数对齐,以及产生进一步的正规化指数结果。
表14示长指数信道的路径安排功能
  条件0CPA 1503符号输出   条件1CPA 1509符号输出   针对C移位量和A*B移位量,输出多工器的控制信号
  NOT(C>A*B)   NOT((A*B or C)>MAC)   0
  NOT(C>A*B)   (A*B or C)>MAC   1
  C>A*B   NOT((A*B or C)>MAC)   2
  C>A*B   (A*B or C)>MAC   3
表14
乘法的加法器(CPA for MUL)1505接收10位被乘数A和B当作操作数a0高指数和操作数a1高指数的结合,以及操作数b0高指数和操作数b1高指数的结合。乘加的加法器(CPA for MAD)1503接收操作数C的10位指数当作ch_e和cl_e的结合,以及11位CPA for MUL 1505的指数结果。多工器1511从CPA for MUL 1505接收数据,也接收操作数C的指数部分,其包含ch_e和cl_e的结合。乘法累加的加法器(CPA for MAC)1501从ch_e和cl_e的结合接收操作数C的指数,也接收MAC指数暂存器1515的输出。CPA for MAC 1507从MAC指数暂存器1515接收数据,也从CPA for MUL1505接收数据。多工器1513从暂存器1515以及多工器1511接收数据。多工器1511的数据也传送至输出指数至ALU1。多工器1513的输出传送至暂存器1515和指数输出端口。CAT单元1517传送数据至CPA for MAD 1503、多工器1511、多工器1513、CPA for MAC 1509、多工器1523、以及多工器1523的时钟输入。CAT单元1517合并两位栏成一个(h和l结合成一个两倍宽度字段,此例从加法器1509的负值结果旗标和从加法器1503来的相同旗标)。多工器1523在输入端口「0」接收讯号「0」,在输入端口「1」接收来自CPA for MAD 1503的反相移位量,以及在输入端口「2」和「3」接收CPA for MAC 1507的输出。调整操作数尺寸的加法器(CPA for scale)1527从多工器1523接收11位输出,也接收系数scale_h,然后输出A*B的结果移位量。多工器1521从输入端口「3」和「2」接收CPA for MAC 1501输出,从输入端口「1」接收讯号「0」,在输入端口「0」接收CPA for MAD 1503的输出。多工器1521输出11位至CPA for scale 1529,其也接收scale_c。CPA for scale 1529输出操作数C移位量。
图16说明长指数计算ALU1,相似于图11的长指数计算。虽然图15的ALU0长指数计算相似于图16ALU1的长指数计算,值得注意的相异的处在图16的多工器1602接收ALU0的指数输入,伴随输入ch_e和cl_e的结合。此外,ALU1的长指数计算产生指数、MAC移位量、A*B移位量、以及C移位量的输出。值得注意的是图16的菜单相同于图15的菜单。
图17说明长底数数据路径ALU0,详述图11的数据路径。本架构的目的在提供长浮点操作数的底数运算。此架构可用以实现D=A*B+C+MAC的底数值运算以及包含必要的硬件区块。长底数数据路径有两个几乎对称的架构:图17的ALU0长底数数据路径和图18的ALU1长底数数据路径。ALU0的长底数数据路径包含有预先移位器1743、1749、1753的四个区域乘法器1731、1733、1735、1737;补码和对齐移位器CASU 1739a、b、c、d、e、f、g,以(+/-/>>)标示,其根据选择的指数值对齐操作数底数。这些单元也根据运算符号(加法或减法)而补码化或负值化输入底数值。这些单元结合加法器1741a、1741b、和1745以实现CSA(carry-save adder)树,其将乘法结果和操作数C相加,以及与MAC暂存器的值相加。MAC底数暂存器1759内含有accumulated长底数值。全加器和正规器1747产生短底数和短指数两通道的最终值。
更特别的是,与上述相似的,乘法器1731接收操作数a1高底数和操作数b0低底数。乘法器1733接收操作数a1低底数和操作数b1低底数。乘法器1735接收操作数b1高底数和操作数a0低底数。乘法器1739接收操作数b0高底数和操作数a0高底数。
乘法器1731传送26位数据至CASU 1739a,CASU 1739a也接收sign_h和底数shift_h。CASU 1739b从乘法器1735经由13位移位器1743接收39位数据。CASU 1739c经由13位移位器1749接收39位输入数据cl_m。此架构的特性在于其包含一具有两阶段的MAD加法器,其具有两部分:1/2MAD加法器和MAD加法器。此特性来自使用区域乘法器处理长底数。1/2MAD CSA树1741a从CASU1739a、1739b、和1739c接收数据。MAD CSA树1741b从1/2MAD CSA树1741a经由13位移位器1769接收1+40位数据、从CASU 1739d接收37位数据、从CASU 1739e接收经由区域乘法器1735再经由13位移位器1753的39位数据。此外,MAD CSA树1741b从从CASU1739f,接收自乘法器1737来的37位数据。
MAD CSA树1741b传送ALU0底数数据至ALU1底数输出,以及至MAC CSA树1745。MCA CSA树1745经由CASU 1739g接收底数移位讯号mantissa shift_macc数据。MAC CSA树1745传送5+40位数据至全加器和正规器1747,其也可计算指数部分以在正规化时作进一步调整。底数的额外1位可用以避免底数在MAC循环溢位。全加器和正规器1747传送s10e26m的长格式操作数数据至输出端口cat(dh,dl),其结合dh和dl两半部至D。
图18说明长底数数据路径,相似于图17的数据路径。更特别的是,除了少数例外,ALU1的长底数数据路径对称于ALU0的长底数数据路径。值得注意的是,多工器1805接收来自于ALU0通道的底数。此外,多工器1705接收ch_m,其为ALU1操作数C的底数的部分。
图19说明混合指数计算ALU0,详述图11的混合指数计算。混合指数的考虑会在当有一指令中使用两不同操作数格式时出现。举例而言,被乘数其中之一可能为短格式而所有其它操作数为长格式(见表5)。本架构非常相似于短格式指数计算,只是它同时也可以处理长格式指数。本架构的实施例为有由编码器控制数个适当多工器的四个相同阶层的指数加法器/减法器。MAC指数暂存器的尺寸也是11位的长指数值。更特别的是,CPA 1903接收结合操作数b0底指数和操作数b1高指数的数据。CPA 1903也接收操作数a0低指数。CPA 1905接收结合操作数b0高指数和b1高指数的数据,以及短格式的a0高指数。CPA 1907接收结合ch_e和cl_e的数据,以及CPA1903的输出数据。CPA 1909接收来自CPA 1905的输出数据,以及输入数据ch_e和cl_e。CPA 1911接收来自CPA 1903的输出数据,以及来自CPA1905的输出数据。编码器1920提供时钟讯号给CPA 1907、1909、和1911,以及提供控制讯号给多工器1913,和经由「或」电路1925至多工器1923、1935、1937、与1939。
多工器1913从CPA 1903接收数据至输入端口「0」,接收ch_e和cl_e至输入端口「1」,以及从CPA 1905接收数据至输入端口「2」。CPA 1915接收输入数据ch_e和cl_e,以及从暂存器1943接收数据。CPA 1917从CPA1913和暂存器1943接收数据。CPA 1919从暂存器1943和CPA 1905接收数据。CPA 1921从暂存器1943和多工器1913接收数据。多工器1923从多工器1913和暂存器1943接收数据,以及输出结果指数。MAC指数暂存器1943从多工器1923接收数据。多工器1935从CPA 1915接收数据至输入端口「3」、从CPA 1909接收至输入端口「2」、接收讯号「0」至输入端口「1」、以及从CPA 1907接收至输入端口「0」。相同地,多工器1937接收讯号「0」至输入端口「0」、经由反相器1929接收CPA 1907输出至输入端口「1」、从CPA 1911接收至输入端口「2」、以及从CPA 1917接收至输入端口「3」。多工器1939经由反相器1931接收CPA 1911的输出至输入端口「0」、经由反相器1933接收CPA 1909输出至输入端口「1」、接收讯号「0」至输入端口「2」、接收CPA 1919输出至输入端口「3」。CPA 1949从多工器1935接收数据,也接收系数scale_c,再输出至操作数底数移位讯号mantissa shiftC。CPA 1947从多工器1937接收数据,也接收系数scale_l,再输出半乘积底数移位讯号mantissa shift L。CPA 1945从多工器1939接收数据,也接收系数scale_h,再输出半乘积底数移位讯号mantissa shift H。
图20说明混合指数计算ALU1,相似于图11的混合指数计算。图20的电路图对称于图19的电路,除了一些不同点。一个显著的不同在于图20的电路包含多工器2001,其可用以接收结合ch_e和ch_l的数据以及来自ALU0指数通道的结果指数。
图21说明混合的底数数据路径ALU0,详述图11的数据路径。混合底数数据路径相似于图17的长底数数据路径。更特别的是,相似于图17,乘法器2131接收短格式输入数据a1高底数以及b0低底数。乘法器2133接收a1低底数和b1低底数。乘法器2135接收b1高底数和a0低底数。乘法器2137接收b0高底数和a0高底数。CASU 2139a从乘法器2131接收数据,也接收符号位底数移位讯号mantissa shift A*B high。CASU 2139b从乘法器2133接收由13位移位器2105移位过的数据。也接收底数移位讯号mantissashift c和sign_c。CASU 2139c接收由13位移位器2109移位过的数据,以及接收mantissa shift c和sign_c。CASU 2139d也接收sign_c和底数移位讯号mantissa shift C以及ch_m。CASU 2139e从乘法器2135接收由13位移位器2107移位过的数据,以及接收底数移位讯号mantissa shift A*B low和sign_l。CASU 2139f从乘法器2137接收数据,也接收底数移位讯号mantissa shiftA*B high和sign_h。1/2MAD CSA树2141a从CASU 2139a、2139b、2139c接收数据。MAD CSA树2141b从1/2MAD CSA树2141a以及CASU 2139d、2139e、2139f接收数据。MAD CSA树传送底数数据至ALU1和MAC CSA树2145。MAD CSA树2145也从CASU 2139g接收从暂存器2143来的数据。全加器和正规器2147接收输入指数以及MAC CSA树2145。全加器和正规器2147出结果底数至结合的dh和dl。
图22说明混合底数数据路径ALU1,对称于图21的数据路径。图22的电路相似于图21的电路,除了一些相异点。值得注意的是,图22的ALU1混合底数数据路径包含多工器2202,其接收ch_m和来自图20ALU0的底数数据。图21的电路输出结果底数至dh和dl。
为了在相同的硬件架构上处理双格式浮点数据,我们可以使用分离的指数计算通道,因为它们相对较小的尺寸。此外,我们可以合并短底数和长底数处理路径在单一硬件架构,因为我们难以复制同时具有短底数和长底数数据路径的硬件而没有显著硬件耗费。我们通常可以合并大多数用于短底数和长底数数据路径的硬件区块,以及增加一些额外的逻辑电路以提供正确的短模式、长模式、和混合模式运算执行。
此设计的潜在修改可能包含(但不限制一定要):
选择长指数数据路径修改的基本架构。
在操作数和结果路径上增加额外的多工器,以选择每个处理模式下的正确数据。
使用由数据格式控制的特别栅栏逻辑电路,分离所有补码和对齐移位单元至两部分。
分离MACC暂存器至两部分。
藉由特别栏栏逻辑电路,分离MAC CSA和有正规器的最终加法器至两部分。
此外,下面的数个图描述潜在的修改以实现双模式ALU。
图23说明合并的底数数据路径,相似于图11的数据路径。更特别的是,乘法器2333接收操作数a1高底数和操作数b0低底数。乘法器2331接收操作数a1低底数和操作数b1低底数。乘法器2337接收操作数b1高底数和操作数a0低底数。乘法器2335接收b0高底数和a0高底数。CASU 2339a从乘法器2333接收输出,以及接收shift H0和sign_h0。CASU 2339b从多工器2308接收数据,多工器2308从乘法器2331和13位移位器2306接收数据。CASU 2339c从多工器2310接收数据,多工器2310从cl_m和13位移位器2302接收数据。CASU 2339c也接收sign_cl和shift CL。CASU 2339d接收ch_m、shift CH和sign_ch。CASU 2339e从多工器2312接收数据,也接收shift L1和sign_l1。多工器2312从乘法器2337和13位移位器2304接收数据。CASU 2339f乘法器2335接收数据,也接收shift H1和sign_h1。CASU 2339g藉由栅栏电路分离成高端和低端两部分。CASU 2339g高端接收shift ACCH讯号以及来自暂存器2342a的数据。CASU 2339g低端接收shiftACCL讯号以及来自暂存器2342b的数据。暂存器2342接收MAC,以及来自MAC CSA树02345的数据和来自MAC CSA树12345的时钟讯号。
1/2MAD CSA树2341a从CASU 2339a、2339b、和2339c接收数据,传送处理过的数据至13位移位器2320。多工器2322接收移位过的数据以及未移位的数据,再输出至多工器2316。多工器2316也接收数据「0」。MAD CSA树2341b接收来自多工器2316以及CASU 2339d、2339e、和2339f的数据,再输出处理过的数据至MAC CSA树1 2345。MAC CSA树1 2345也接收来自CASU 2339g低端的数据。
针对短格式,MAC CSA树0(2345)藉由栅栏电路与MAC CSA树1分离。MAC CSA树0(2345)从CASU 2339g的高端以及多工器2318接收数据。多工器2318从1/2MAD CSA树2341a接收数据,以及ALU0传送至ALU1的底数数据。MAC CSA树0 2345传送数据至CPA0 2347a,其针对短格式,藉由栅栏电路与CPA1 2347b分离。CPA1 2347b从MAC CSA树1 2345接收数据。CPA1 2347b输出数据至领导零侦测器(Leading Zero Detector,LZD)L 2330和LZD1 2332,以及移位器1 2334b。CPA0 2347a输出数据至LZDL2330、LZD0 2328和移位器0 2334a。LZD0 2328和LZDL 2330传送数据至移位器0 2334a。LZD0 2328也传送数据至多工器2325。LZDL 2330也传送数据至移位器1 2334b和多工器2325与2326。LZD1 2332也传送数据至移位器1 2334b和多工器2326。移位器0 2334a和移位器1 2334b传送数据至输出闩2340。
CPA 2336a从指数多工器2324接收数据,多工器2324从短指数通道0和1、长指数信道、以及混合指数信道接收数据。CPA 2336a也从多工器2325和CPA 2336b接收数据。栅栏电路2338分离CPA 2336a和CPA 2336b。CPA2336a和CPA 2336b传送数据至输出闩2340。输出闩2340输出s5e13m数据至dl,s10e26m数据至(dh,dl),以及s5e13m数据至dh。
此外,许多控制讯号以表15当例子,用以设定多工器L0、CL、L1、和MUX1-5。表15的输出可因为在ALU处理的不同数据格式而切换。
  模式/多工器   L0   CL   L1   Mux1   Mux2   Mux3   Mux4   Mux5   ExpMX
  长模式   0   0   0   0   0   0   0   0   0
  混合模式   0   0   0   1   0   0   0   0   1
  短模式   1   1   1   1   1   2
表15
图24说明ALU1的合并底数数据路径,对称于图23的ALU0数据路径。更特别的是,图24的电路相似于图23的电路,除了一些例外。图24的不同点在于多工器2302,其接收ALU0的结果底数以及操作数ch_m。此电路输出结果(dh,dl)。多工器的控制一般相同于针对合并的ALU0的表所示。这些多工器可用以因为在ALU1合并底数数据路径处理的不同数据格式而选择特别输入,如表16所述。
  模式/多工器  Mode/Mux   L0   CL   L1   Mux1   Mux2   Mux3   Mux4   Mux5   ExpMX
  长模式  Long   0   0   0   0   0   0   0   0   0
  混合模式  Mixed   0   0   0   1   0   0   0   0   1
  短模式  Short   1   1   1   1   1   1   1   1   2
表16
图25A说明合并的移位与控制逻辑电路,其可用在图23、24的合并底数路径的指数和移位控制讯号。如上述,许多的其中所做的改变引进数个特别多工器,提供从分离的短格式、长格式、或混合格式指数处理信道安排路径至合并的底数处理。更特别的是,多工器2550接收shift h0和底数移位讯号mantissa shift h。多工器2552也接收shift l0和底数移位讯号mantissa shifth。多工器2554接收shift cl和底数移位讯号mantissa shift c。多工器2556接收Shift MAC 0和底数移位讯号mantissa shift MAC。多工器2558接收shiftch和底数移位讯号mantissa shift c。多工器2560接收shift l1和底数移位讯号mantissa shift h。多工器2562接收shift h1和底数移位讯号mantissa shift h。多工器2564接收Shift MAC 0和底数移位讯号mantissa shift MAC。
多工器2566接收shift h1和来自多工器2550的输出。多工器2566输出Shift H0。多工器2568接收shift h1和来自多工器2552的输出,再输出ShiftL0。多工器2570接收shift ch和来自多工器2554的输出,再输出Shift CL。多工器2572接收Shift MAC1和来自多工器2556的输出,再输出Shift AccH。多工器2574接收shift ch和来自多工器2558的输出,再输出Shift CH。多工器2576接收Shift l1和来自多工器2560的输出,再输出Shift L1。多工器2578接收Shift h1和来自多工器2562的输出,再输出Shift H1。多工器2580接收Shift MAC1和来自多工器2564的输出,再输出Shift AccL。
表17说明多工器控制讯号,其用以每个通道的移位控制。可以见到的是,这些讯号长度相当平均,所以我们可调整两条线以从指令译码状态机控制所述多工器。
  模式   ShiftH0   ShiftL0   ShiftCL   ShiftAccH   ShiftCH   ShiftL1   ShiftH1   ShiftAccL
  短模式   2550:02566:1   2552:12568:0   2554:12570:0   2556:12572:0   2558:12574:0   2560:12578:0   2562:12578:0   2564:12580:0
  混合模式   2550:x2566:1   2552:x2568:1   2554:x2570:1   2556:x2572:1   2558:x2574:1   2560:x2578:1   2562:x2578:1   2564:x2580:1
  长模式   2550:02566:0   2552:02568:0   2554:02570:0   2556:02572:0   2558:02574:0   2560:02578:0   2562:02578:0   2564:02580:0
表17
图25B说明符号路径逻辑电路,其可用以转换由分离信道产生的符号讯号至图23合并的双格式底数数据路径的符号讯号。多工器2582接收sign h0和sign h。多工器2584接收sign l0和sing l。多工器2586接收sign cl和signC。多工器2588接收sign ch和sign C。多工器2590接收sing l1和sign l。多工器2592接收sign h1和sign h。
多工器2594接收sign h1和来自多工器2582的输出,再输出sign H0。多工器2596接收sign l1和来自多工器2584的输出,再输出Sign L0。多工器2598接收Sign ch和来自多工器2586的输出,再输出Sign CL。Sign AccH来自Sign MAC。多工器2599接收Sign ch和来自多工器2588的输出,再输出Sign CH。多工器2597接收sign l1和来自多工器2590的输出,再输出SignL1。多工器2595接收Sign h1和来自多工器2592的输出,再输出Sign H1。Sign AccL来自Sign MAC。
为了产生多工器的切换讯号,我们需要提供为每个多工器在特别指令以及在处理不同数据格式时,产生切换讯号的特别状态机,如表18所示。可以见到的是,所有多工器可能由相同状态机的相同讯号而控制。
  模式   Mode   ShiftH0   ShiftL0   ShiftCL   ShiftAccH   ShiftCH   ShiftL1   ShiftH1   ShiftAccL
  短模式   Short   2550:02566:1   2552:12568:0   2554:12570:0   2556:12572:0   2558:12574:0   2560:12578:0   2562:12578:0   2564:12580:0
  混合   Mixed   2550:x2566:1   2552:x2568:1   2554:x2570:1   2556:x2572:1   2558:x2574:1   2560:x2578:1   2562:x2578:1   2564:x2580:1
  模式
  长模式   Long   2550:02566:0   2552:02568:0   2554:02570:0   2556:02572:0   2558:02574:0   2560:02578:0   2562:02578:0   2564:02580:0
表18
图26说明补码移位输出与输出格式表,其可用于图23、24的合并底数数据路径。此表说明实际输出或输入数据如何被对待、延伸、解译,和/或修改成短、长、和混合模式。数据格式的叙述由左至右由上至下。所有讯号名称相对于图23、24的合并数据路径。输入-输出数据格式的使用是提供在数据路径中CSA的数据适当处理。
实际上乘法器的26位H0和H1输出可以延伸零值的11个最低重要位(Least Significant Bits,LSBs)。另外两个乘法器的输出L0和L1可延伸13个LSB且可右移13位,伴随最高重要位(Most Significant Bits,MSBs)填入零值。加法器的数据输入CH可藉24LSB延伸以供后续使用。第二列显示短模式、长模式、和混合模式的补码移位单元输入-输出数据路径的数据格式。
图27A放大图23、24的部分底数加法数据路径。如图所示,数据格式转换在数个单元和多工器之间,在栅栏MAC CSA树的最终端提供不同数据格式的正确处理。更特别的是,图26的电路包含1/2MAD CSA树2741a。1/2MAD CSA树2741a接收37位H0、39位L0、和37位CL。1/2MAD CSA树2741a输出2+26位或1+40位至13位移位器2752。接收数据经过移位后,13位移位器2752传送数据至多工器2754,其也从1/2MAD CSA树2741a接收数据。多工器2750从多工器2754接收数据,也从其它输入端口接收讯号「0」。多工器2750传送输出数据至MAD CSA树2741b,其也接收37位CH、39位L1、和37位H1。MAD CSA树2741b传送5+26或5+40位的MSB至ALU1底数,以及2+40的MSB至多工器2756。多工器2756也从1/2MAD CSA 2741a接收数据。多工器2756输出数据至MAC CSA树02745a,多工器2756也从MACC输出接收数据。短格式栅栏电路2746分离MAC CSA树0 2475a和MAC CSA树1 2745b,以取代一长格式操作数而提供处理两短格式操作数。MAC CSA树1 2745b从MAD CSA树2741a和MACC输出接收数据。
图27B说明短模式、长模式、和混合模式的处理格式,可以使用于图27A的CSA单元中。更特别的是,图2780a说明1/2MAD CSA的短模式处理。如图所示,数据H0包含26+l1位且输入至1/2MAD CSA树2741a,L0包含26+13位,CL包含13+13+11位。1/2MAD CSA树2741a输出2+26有效位和13无效位。图2780b说明MAD CSA 2741b的短模式处理。如图所示,H0包含26+11位输入至MAD CSA树2741b,L0包含26+13位,CL包含13+13+11位。此外,1/2MAD包含00+00+00+0位。MAD CSA树2741b输出2+26有效位和13无效位。
图2780c说明长模式处理格式。更特别的是,H0包含26+11+0输入至1/2MAD CSA树2741a,L0包含13+26位,CL包含13+13+11+0位。1/2MADCSA树2741a输出2+39有效位。图2780d说明长模式处理格式。更特别的是,H0包含26+11+0输入至1/2MAD CSA树2741a,L0包含13+26位,CL包含13+13+11+0位,以及1/2MAD包含13+X+X+26位。MAD CSA树2741a输出3+39有效位。
图2780e说明混合模式处理格式。更特别的是,H0包含26+11+0位输入至1/2MAD CSA树2741a,L0包含13+26位,CL包含13+13+11+0位。1/2MAD CSA树2741a输出2+39有效位。图2780f说明混合模式处理格式。更特别的是,H0包含26+11+0位输入至1/2MAD CSA树2741a,L0包含13+26位,CL包含13+13+11+0位,以及1/2MAD CSA包含X+X+39位。MAD CSA树2741a输出3+39有效位。
图27C继续说明图27B的处理格式。图2780g说明MAC CSA的短模式处理格式。更特别的是,MAC CSA树0和1(2745a、2745b)从MAD接收X+X+26位,以及从MACC接收5X+26位。MAC CSA树0和1(2745a、2745b)输出5+26位×2信道。图2780h说明长模式处理格式。更特别的是,MAD传送14+3X+11MSB至MAC CSA树0 2745a。MAC传送12+5X+11MSB至MAC CSA树0 2745a。MAC CSA树0 2745a输出结果12+5X+11MSB,其中5+11是有效位。图2780i包含MAD传送2+26LSB至MAC CSA树12745b。MAC传送0+0+0+2+26LSB至MAC CSA树12745b。MAC CSA树12745b输出0+0+0+2+26LSB,其中2+26是有效位。值得注意的是,为了在相同的硬件上提供短和长底数处理模式,我们可利用栅栏逻辑电路,其可用以分离一些CSA和CPA,如图23、24所示,以及增加一些逻辑电路至正规器单元。
图28A说明CPA中的栅栏电路,其可使用在图24、27的MACC。使用控制于模式位的一特别多工器,我们可以分离长加法器成两个短部分。在长格式下,我们可传递进位讯号从加法器的一部分至加法器的另一部分。在短格式下,我们可只传递零值。更特别的是,半加器2875a从全加器2876a接收数据。全加器2876a传送数据至半加器2875a和全加器2876d。全加器2876c从多工器2877a与全加器2876d接收数据。多工器2877a接收讯号「0」以及从全加器2876e接收数据。栅栏电路2878a分离多工器2877a和全加器2876e。半加器2875b从全加器2876e接收数据。全加器2876e也传送数据至全加器2876f。全加器2876g传送数据至全加器2876h。
图28B说明CPA中的栅栏电路,其可使用在图22、23的全加器与正规器单元。更特别的是,全加器2876i从全加器2876j接收数据,全加器2876j从多工器2878b接收数据。多工器2878b接收讯号「0」和来自全加器2876k的输出。栅栏电路2878b分离多工器2877b和全加器2876k。全加器2876k从半加器2875c接收数据。
图29说明补码移位单元的栅栏电路,其可用于图22、23、和26的数据路径。左上角是栅栏电路应用在MAC CSA补码移位单元的俯视图。更特别的是,图29详述CASU high 2939a、栅栏电路2940、CASU low 2939b、以及模式多工器2914a。信道0模式多工器2914a接收长操作数数据,也从信道0模式多工器2914b接收数据。模式多工器提供输入至函数方块2901和2902a。函数方块2901a计算预定函数(如图所举例)和输出N位至函数方块2902a。函数方块2902a计算预定函数(如图所举例))和输出NZ位至多工器3:1 2906a。多工器2906a也接收讯号「0」、底数M_H、和底数M_H的反相。多工器2906a输出5+26位数据至柱形移位器(barrel shifter)H 2910a。柱形移位器H 2910a也从模式多工器2908a接收操作数移位数据,模式多工器2908a接收长数据及信道0的数据。柱形移位器H 2910a输出5+26位的数据至CSA树,以及shift out H讯号至移位数据多工器2912a。移位数据多工器2912a也接收讯号「0」和输出数据至柱形移位器L 2910b。栅栏电路2940分离CASU 2939a和2939b。
模式多工器2914b接收信道1数据和长操作数。模式多工器2914b提供数据给函数方块2901b和2902b。函数方块2901b计算预定函数(如图所示),以及提供N位至函数方块2902b。函数方块2902b输出NZ位至多工器3:12906b。多工器2906b也接收讯号「0」和底数M_L及反相的底数M_L。多工器2906b传送数据至柱形移位器L 2910b。柱形移位器L 2910b也从模式多工器2908b接收操作数移位讯号,再输出数据至CSA树。模式多工器2908b接收长操作数和信道1数据。
图30A说明正规移位器,其可用于图23、24的合并底数处理数据路径。更特别的是,CPA 0 3047a接收5+26位或5+40位数据。CPA 0 3047a藉由栅栏电路3048与CPA 1 3047b分离。CPA 1 3047b接收5+26位数据。领导零侦测器LZD0 3029a从CPA 0 3047a接收数据,以及传送数据至移位器H3034a。领导零侦测器LZDL 3030a从CPA 0 3047a和CPA 1 3047b接收数据,再输出数据至移位器H 3034a和移位器L 3034b。领导零侦测器LZD13032a从CPA 1 3047b接收数据,再输出数据至移位器L 3034b。移位器L3034b也接收LZDL 3030a、LZD1 3032a、和CPA1 3074b的数据。移位器L3043b输出ML13。同样地,移位器H 3034a接收LZD0 3028a、LZDL 3030a和CPA0 3047a的数据。移位器H 3034a输出数据MH13。
图30B详细说明图30的栅栏电路。在此例子中,增加两移位量控制多工器至移位数据传递多工器,以实现栅栏电路并允许单元处理两短操作数或一长操作数。更特别的是,模式多工器3049从LZDL 3030b和LZD0 3028b接收数据。模式多工器3049输出移位量数据至移位器H 3034c,移位器H3034c也接收2+13位数据以及输出数据至移位数据多工器3045。移位器H3034c输出13位至输出闩3040。
模式多工器3041从LZD1 3032b和LZDL 3030b接收数据。模式多工器3041传送移位量数据至移位器L 3034d,移位器L 3034d也接收2+13位数据。移位器L 3034d传送数据至移位数据多工器3045,移位数据多工器3045也接收讯号「0」和输出至移位器H 3034c。移位器L 3034d传送数据至输出闩3040。输出闩输出dl、(dh,dl)、和dh。
图31说明传送数据至功能性分离的ALU的处理流程图。更特别的是,如图31所示,计算系统可判别接收数据是否为短格式浮点数据(方块3132)。判别数据为短格式浮点数据后,计算系统可根据一指令集,功能性分离第一ALU成数个信道以作处理(方块3134)。计算系统可根据该指令集,功能性分离一第二ALU成数个信道以作处理(方块3136)。计算系统可传送处理过的数据至有数个短格式数据信道的第二功能性分离ALU(方块3138)。于一些计算处理的实施例,可能包含有在一SFU处理数据,其中SFU用以从第一ALU和第二ALU接收数据。
应该注意的是,本发明的实施例可能包含一乘法累加单元,用以处理不同数据格式,该乘法累加单元包含一短格式指数数据路径以便于处理第一组短格式数据,以及一长格式指数数据路径以利于处理长格式数据。此外,该乘法累加单元的实施例包含一混合指数数据路径以利于处理第二组短格式数据和长格式数据,以及一底数数据路径以利处理数个不同格式操作数,且数组短格式数据和一组长格式数据利用一共同硬件架构处理。此外,一些乘法累加单元的实施例中,该底数数据路径还包含有数个可重设输出的一区域乘法器,这些输出用以处理至少下列其中之一:数组短底数数据和一组长底数数据。此外,一些乘法累加单元的实施例中,该底数数据路径还包含区域补码逻辑电路和一对齐移位器单元,该对齐移位器用以从一指数数据路径接收控制讯号数据,该对齐移位器更用以从区域乘法器和输入操作数接收数据。
此外,一些乘法累加单元的实施例中,该对齐移位器单元用以接收至少下列其中之一:数组短指数数据,一组长指数数据,数组混合指数数据,数组短底数数据,一组长底数数据,以及数组混合底数数据。此外,一些乘法累加单元的实施例中,该底数数据路径更包第一阶MAD CSA单元,用以接收至少数个不同格式的一的数据,更用以处理该接收数据和输出该处理数据至第二阶MAD单元。第二阶MAD单元用以从半MAD CSA树接收数据。该半MAD CSA树用作第一阶加法器,以及把来自有可设定输出的区域乘法器的部分结果相加。
在一些实施例中,如权利要求1所述的乘法累加单元,包含至少下列其一,以利于处理短格式数据和长格式数据:有可重设输出的一区域乘法器,区域补码逻辑电路,一个对齐移位单元,一个有栅栏电路的实现的二阶CPA,以及有栅栏化(fenced)指数加法器和栅栏化底数加法器的一个正规器单元。一些实施例中,乘法累加单元还包含一区域乘法器用以运算短数据格式和长数据格式,一MAC加法器用以当成CSA树操作,以及一全加器和正规器单元用以从CSA冗余格式转换数据至正常格式。
一些实施例中,乘法累加单元还包含一合并底数通,用以处理短格式数据和长格式数据。相同地,在一实施例中,该乘法累加单元还包含一MACCSA树单元,用以接收任何数个不同格式的数据。该MAC CSA树单元处理接收数据后再输出处理过的数据至正规器单元。
此外,本发明包含用以处理数个不同数据格式的乘法累加单元的实施例。至少一个乘法累加单元的实施例包含一短格式指数数据路径,该短格式指数数据路径包含第一信道和第二信道,也包含处理短格式指数数据的逻辑电路。此实施例也包含一合并底数数据路径,该合并底数数据路径包含第一信道和第二信道,也包含处理短格式底数数据和长格式底数数据的逻辑电路。此实施例也包含有可重设输出的一区域乘法器,其可处理至少下列其中之一:数组短格式数据和一组长格式数据,利用一共同硬件架构。
此外,本发明包含处理数个不同数据格式的方法的实施例。至少一个此方法的实施例包含在一合并底数数据路径接收数据,判别接收数据是否包含短格式数据,以及判别接收数据是否包含长格式数据。在判定接收数据包含短格式数据后根据一控制讯号处理该短格式数据,以及在判定接收数据包含长格式数据后根据一控制讯号处理该长格式数据。最后传送处理过的数据至输出。
本发明也包含用以处理任何数个不同格式数据的串流处理器。至少一串流处理器的实施例包含第一ALU,根据接收指令集的短格式控制讯号处理数个第一组短格式数据,以及根据接收指令集的长格式控制讯号处理第一组长格式数据。此外,串流处理器的实施例包含第二ALU,根据接收指令集的短格式控制讯号处理数个第二组短格式数据,根据接收指令集的长格式控制讯号处理第二组长格式数据,以及接收第一ALU处理过的数据。此外,串流处理器的实施例包含处理输入数据和来自第一ALU处理过的数据,根据指令集的一控制讯号。
此外,串流处理器的实施例包含一SFU,用以提供额外的计算功能至第一ALU和第二ALU。一些串流处理器的实施例中,第一ALU是纯量ALU。相同地,一些串流处理器的实施例中,第二ALU也是纯量ALU。
在一些实施例中,串流处理器因应接收短格式数据,该串流处理器功能性分割至少一对ALU以利有短长格式可变SIMD系数的双格式处理。一些串流处理器的实施例中,指令集包含一指令以在数个不同模式下处理可变格式数据。
在一些串流处理器的实施例中,指令集包含至少下列其中之一:正常型式指令,混合型式指令,和交叉型式指令用以短格式数据处理和长格式数据处理。在一些实施例中,指令集包含至少一指令以处理下列模式其中之一:短格式操作数模式,长格式操作数模式,以及混合格式操作数模式。在一些实施例中,当第一ALU的输出数据以长格式模式操作数传送至第二ALU时,指令集用以控制可变SIMD迭合模式。其中,第一ALU的第一信道以短格式模式操作数输出至第一ALU的第二通道。同样地,一些串流处理器的实施例中,SFU耦合至第一ALU和第二ALU。
本发明的实施例还包含一种方法,以处理任何数个不同数据格式。至少一个此方法的实施例包含判别接收数据是否为短格式数据。判定接收数据为短格式数据后,根据指令集功能性分离第一ALU成数个信道以作处理。根据指令集功能性分离第二ALU成数个信道以作处理。在第一ALU处理数据,以及传送处理过的数据至功能性分离的第二ALU,其中第二ALU有数个短数据信道。
本发明也包含串流处理器模块的实施例,用以处理不同数据格式的数据。至少一串流处理器模块的实施例包含第一ALU,用以接收第一输入数据和控制数据,该控制数据用以指示接收数据的格式,该第一ALU根据控制讯号处理短格式输入数据和长格式输入数据。一些实施例包含第二ALU,用以从第一ALU接收控制数据,第二ALU更用以接收第二输入数据,该第二输入数据与第一输入数据有关。第二ALU更根据控制数据处理短格式数据和长格式数据。还有一些实施例包含第三ALU,用以从第二ALU接收控制数据,第三ALU更用以接收第三输入数据,该第三输入数据与第一输入数据和第二输入数据有关。第三ALU更根据控制数据处理短格式数据和长格式数据。还有一些实施例包含第四ALU,用以从第三ALU接收控制数据,第四ALU更用以接收第四输入数据,该第四输入数据与第一输入数据、第二输入数据、以及第三输入数据有关。第三ALU更根据控制数据处理短格式数据和长格式数据。
在此讨论的数个流程图说明许多逻辑电路架构、功能性、和运算的可能实现情形。因此,每个区块可代表一个模块、片段、或是一段程序代码,其可能包含一个或数个可执行的指令以实现特别的逻辑功能、电路、或其它型式的逻辑电路。值得注意的是在一些实施例中,区块里所述的功能可能不按照举例的顺序而出现。本发明不限制于所述的数据格式大小,亦可以实现相似功能性,如处理34/68、64/128位等等的数据格式。基本上,任何两相关格式可以用上述原则处理。假如长格式不是短格式的整数倍,一些额外的电路可创造于数据路径如果一些位未被使用时。此外,一些实施例可能有数个短格式数据信道和/或一个长格式数据信道。
在此特别强调的是以上所述的实施例仅是实现本发明的例子,仅在此提出以阐明本发明的原则。许多变化和修改可以用在上述的实施例,而基本上不脱离本发明的权利要求的精神与范畴。上述所有的修改和变化包含在本发明的范畴之内。

Claims (19)

1.一乘法累加单元,用以处理数个不同数据型式,该乘法累加单元包含:
一短格式指数数据路径,用以便于一第一组短格式数据处理;
一长格式指数数据路径,用以便于长格式数据处理;
一混合格式指数数据路径,用以便于一第二组短格式数据和长格式数据的处理;以及
一底数数据路径,用以便于数个不同格式操作数的处理;
其中,数组短格式数据和一组长格式数据利用一共同硬件架构作处理。
2.如权利要求1所述的该乘法累加单元,其中,该底数数据路径还包含具有数个可重设输出的一区域乘法器,所述输出用以处理至少下列其中之一:数组短底数数据和一组长底数数据。
3.如权利要求1所述的该乘法累加单元,其中,该底数数据路径还包含一区域补码逻辑电路和一对齐移位器单元,该对齐移位器单元用以从一指数数据路径接收数据,该对齐移位器单元还用以从区域乘法器和输入操作数接收数据。
4.如权利要求3所述的该乘法累加单元,其中,该对齐移位器单元用以接收至少下列其中之一:数组短指数数据、一组长指数数据、数组混合指数数据、数组短底数数据、一组长底数数据、以及数组混合底数数据。
5.如权利要求1所述的该乘法累加单元,其中,该底数数据路径还包含:
一第一阶乘法累加进位储存加法器单元,用以接收至少数个不同数据格式其中之一的数据,以及还用以处理该接收数据和输出该处理数据至一第二阶乘加单元;以及
一第二阶乘加单元,用以从一半乘法累加进位储存加法器树接收数据,该半乘法累加进位储存加法器用以相加数组有可设定输出的区域乘法器的部分结果。
6.如权利要求1所述的该乘法累加单元,还包含至少下列其中之一,以利处理短格式数据和长格式数据:
有可重设输出的一区域乘法器、一区域补码逻辑电路、一对齐移位器单元、有栅栏电路的实现的一二阶进位储存加法器、有栅栏电路实现的一进位传递加法器、以及有栅栏化指数加法器和栅栏化底数移位器的一正规器单元。
7.如权利要求1所述的该乘法累加单元,还包含:
一区域乘法器,用以运算短格式和长格式数据;
一乘法累加加法器,用以当成进位储存加法器树来运算;以及
一全加器和正规器单元,用以从一进位储存加法器冗余格式转换数据至一正常格式。
8.如权利要求1所述的该乘法累加单元,还包含一合并底数通道,用以处理短格式数据和长格式数据。
9.如权利要求1所述的该乘法累加单元,还包含一乘法累加进位储存加法器单元,用以接收数个不同数据格式的数据,该乘法累加进位储存加法器单元处理该接收数据和输出该处理数据至一正规器单元。
10.一乘法累加单元,用以处理数个不同数据格式,该乘法累加单元包含:
一短格式指数数据路径,包含一第一信道和一第二信道,该短格式指数数据路径也包含处理短格式指数数据的逻辑电路;
一合并底数数据路径,包含一第一信道和一第二信道,该合并底数数据路径也包含处理短格式底数数据和长格式底数数据的逻辑电路;以及
一区域乘法器,有可重设的输出,利用一共同硬件架构,能处理至少下列其中之一:数组短格式数据和一组长格式数据。
11.如权利要求10所述的该乘法累加单元,还包含一长指数数据路径,该长指数数据路径包含一第一信道和一第二信道,该长指数数据路径也包含处理长格式指数数据的逻辑电路。
12.如权利要求10所述的该乘法累加单元,还包含一栅栏电路以利处理短格式数据。
13.如权利要求10所述的该乘法累加单元,其中,该短格式指数数据包含长格式指数数据的一半位数。
14.如权利要求10所述的该乘法累加单元,其中,该短格式底数数据包含至少长格式底数数据的一半位数。
15.一种处理数个不同数据格式的方法,该方法包含:
在一合并底数数据路径接收数据;
判别该接收数据是否包含短格式数据;
判别该接收数据是否包含长格式数据;
于判定该接收数据包含短格式数据后,根据一控制讯号处理该短格式数据;
于判定该接收数据包含长格式数据后,根据一控制讯号处理该长格式数据;以及
传送该处理数据至输出。
16.如权利要求15所述的该方法,其中,处理过程包含传送数据至一区域乘法器。
17.如权利要求15所述的该方法,其中,处理过程包含:
传送数据至一乘法累加进位储存加法器单元;以及
传送数据至一补码和对齐移位器单元。
18.如权利要求15所述的该方法,其中,处理过程包含传送数据至一乘法累加进位储存加法器单元。
19.如权利要求15所述的该方法,其中,处理过程包含传送数据至一全加器和正规器单元。
CN2007100067548A 2006-02-06 2007-02-06 处理数个不同数据格式的乘法累加单元及其方法 Active CN101359284B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US76557106P 2006-02-06 2006-02-06
US60/765,571 2006-02-06

Publications (2)

Publication Number Publication Date
CN101359284A true CN101359284A (zh) 2009-02-04
CN101359284B CN101359284B (zh) 2011-05-11

Family

ID=40331740

Family Applications (2)

Application Number Title Priority Date Filing Date
CN2007100067548A Active CN101359284B (zh) 2006-02-06 2007-02-06 处理数个不同数据格式的乘法累加单元及其方法
CN2007100067533A Active CN101615173B (zh) 2006-02-06 2007-02-06 处理任何数个不同格式数据的串流处理器及其方法及模块

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN2007100067533A Active CN101615173B (zh) 2006-02-06 2007-02-06 处理任何数个不同格式数据的串流处理器及其方法及模块

Country Status (3)

Country Link
US (3) US20070186082A1 (zh)
CN (2) CN101359284B (zh)
TW (1) TWI361379B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105027109A (zh) * 2013-03-13 2015-11-04 高通股份有限公司 具有用于提供多模向量处理的可编程数据路径配置的向量处理引擎、以及相关向量处理器、系统和方法
CN108076666A (zh) * 2014-12-26 2018-05-25 英特尔公司 计算机指令的降功率实现
CN114625035A (zh) * 2020-12-14 2022-06-14 北京晶视智能科技有限公司 混合精度的人工智能处理器及其操作方法
TWI776645B (zh) * 2021-03-17 2022-09-01 神盾股份有限公司 乘積和運算裝置

Families Citing this family (51)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8766995B2 (en) * 2006-04-26 2014-07-01 Qualcomm Incorporated Graphics system with configurable caches
US20070268289A1 (en) * 2006-05-16 2007-11-22 Chun Yu Graphics system with dynamic reposition of depth engine
US8884972B2 (en) * 2006-05-25 2014-11-11 Qualcomm Incorporated Graphics processor with arithmetic and elementary function units
US8869147B2 (en) * 2006-05-31 2014-10-21 Qualcomm Incorporated Multi-threaded processor with deferred thread output control
US8644643B2 (en) 2006-06-14 2014-02-04 Qualcomm Incorporated Convolution filtering in a graphics processor
US8766996B2 (en) * 2006-06-21 2014-07-01 Qualcomm Incorporated Unified virtual addressed register file
US8321489B2 (en) 2006-09-15 2012-11-27 National Semiconductor Corporation Software reconfigurable digital phase lock loop architecture
US8650231B1 (en) 2007-01-22 2014-02-11 Altera Corporation Configuring floating point operations in a programmable device
US8661226B2 (en) * 2007-11-15 2014-02-25 Nvidia Corporation System, method, and computer program product for performing a scan operation on a sequence of single-bit values using a parallel processor architecture
US8280941B2 (en) * 2007-12-19 2012-10-02 HGST Netherlands B.V. Method and system for performing calculations using fixed point microprocessor hardware
US20090164544A1 (en) * 2007-12-19 2009-06-25 Jeffrey Dobbek Dynamic range enhancement for arithmetic calculations in real-time control systems using fixed point hardware
US8633936B2 (en) * 2008-04-21 2014-01-21 Qualcomm Incorporated Programmable streaming processor with mixed precision instruction execution
US8495121B2 (en) * 2008-11-20 2013-07-23 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US20100125621A1 (en) * 2008-11-20 2010-05-20 Advanced Micro Devices, Inc. Arithmetic processing device and methods thereof
US8645449B1 (en) 2009-03-03 2014-02-04 Altera Corporation Combined floating point adder and subtractor
US8706790B1 (en) * 2009-03-03 2014-04-22 Altera Corporation Implementing mixed-precision floating-point operations in a programmable integrated circuit device
US9600278B1 (en) 2011-05-09 2017-03-21 Altera Corporation Programmable device using fixed and configurable logic to implement recursive trees
US9098332B1 (en) 2012-06-01 2015-08-04 Altera Corporation Specialized processing block with fixed- and floating-point structures
US8996600B1 (en) 2012-08-03 2015-03-31 Altera Corporation Specialized processing block for implementing floating-point multiplier with subnormal operation support
US20140280407A1 (en) * 2013-03-13 2014-09-18 Qualcomm Incorporated Vector processing carry-save accumulators employing redundant carry-save format to reduce carry propagation, and related vector processors, systems, and methods
US9275014B2 (en) 2013-03-13 2016-03-01 Qualcomm Incorporated Vector processing engines having programmable data path configurations for providing multi-mode radix-2x butterfly vector processing circuits, and related vector processors, systems, and methods
US9189200B1 (en) 2013-03-14 2015-11-17 Altera Corporation Multiple-precision processing block in a programmable integrated circuit device
US10313433B2 (en) 2013-03-14 2019-06-04 Thoughtwire Holdings Corp. Method and system for registering software systems and data-sharing sessions
US9348795B1 (en) 2013-07-03 2016-05-24 Altera Corporation Programmable device using fixed and configurable logic to implement floating-point rounding
US9292298B2 (en) 2013-07-08 2016-03-22 Arm Limited Data processing apparatus having SIMD processing circuitry
US9383968B2 (en) * 2013-09-27 2016-07-05 Nvidia Corporation Math processing by detection of elementary valued operands
US9391621B2 (en) * 2013-09-27 2016-07-12 Silicon Mobility Configurable multiply-accumulate
EP2887207B1 (en) * 2013-12-19 2019-10-16 Teknologian tutkimuskeskus VTT Oy Architecture for long latency operations in emulated shared memory architectures
US10261939B2 (en) * 2014-08-20 2019-04-16 Nxp Usa, Inc. Performing lookup table operations on a single-instruction multiple data processor
US10769746B2 (en) * 2014-09-25 2020-09-08 Apple Inc. Data alignment and formatting for graphics processing unit
US9916130B2 (en) 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing
US9684488B2 (en) 2015-03-26 2017-06-20 Altera Corporation Combined adder and pre-adder for high-radix multiplier circuit
DE102015209123A1 (de) * 2015-05-19 2016-11-24 Robert Bosch Gmbh Recheneinrichtung und Betriebsverfahren hierfür
US10169043B2 (en) 2015-11-17 2019-01-01 Microsoft Technology Licensing, Llc Efficient emulation of guest architecture instructions
US20170185402A1 (en) * 2015-12-23 2017-06-29 Intel Corporation Instructions and logic for bit field address and insertion
US10162632B1 (en) * 2016-05-27 2018-12-25 Cadence Design Systems, Inc. System and method for a low-power processing architecture
US10089110B2 (en) 2016-07-02 2018-10-02 Intel Corporation Systems, apparatuses, and methods for cumulative product
CN107977192A (zh) * 2016-10-21 2018-05-01 超威半导体公司 用于执行低功率和低延时多精度计算的方法和系统
US10747711B2 (en) * 2018-03-20 2020-08-18 Arizona Board Of Regents On Behalf Of Northern Arizona University Dynamic hybridized positional notation instruction set computer architecture to enhance security
US10528346B2 (en) * 2018-03-29 2020-01-07 Intel Corporation Instructions for fused multiply-add operations with variable precision input operands
US11176104B2 (en) * 2018-04-16 2021-11-16 Bank Of America Corporation Platform-independent intelligent data transformer
US11842169B1 (en) * 2019-09-25 2023-12-12 Amazon Technologies, Inc. Systolic multiply delayed accumulate processor architecture
US11456855B2 (en) * 2019-10-17 2022-09-27 Arm Limited Obfuscating data at-transit
US11816446B2 (en) 2019-11-27 2023-11-14 Amazon Technologies, Inc. Systolic array component combining multiple integer and floating-point data types
US11467806B2 (en) 2019-11-27 2022-10-11 Amazon Technologies, Inc. Systolic array including fused multiply accumulate with efficient prenormalization and extended dynamic range
EP4085354A4 (en) * 2019-12-30 2024-03-13 Star Ally International Limited PROCESSOR FOR CONFIGURABLE PARALLEL CALCULATIONS
US11348622B2 (en) 2020-05-06 2022-05-31 Micron Technology, Inc. Conditional write back scheme for memory
US11263291B2 (en) * 2020-06-26 2022-03-01 Intel Corporation Systems and methods for combining low-mantissa units to achieve and exceed FP64 emulation of matrix multiplication
US11308027B1 (en) 2020-06-29 2022-04-19 Amazon Technologies, Inc. Multiple accumulate busses in a systolic array
TWI777231B (zh) * 2020-08-28 2022-09-11 國立中正大學 向量內積計算裝置
US11880682B2 (en) 2021-06-30 2024-01-23 Amazon Technologies, Inc. Systolic array with efficient input reduction and extended array performance

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4128880A (en) * 1976-06-30 1978-12-05 Cray Research, Inc. Computer vector register processing
US4338675A (en) * 1980-02-13 1982-07-06 Intel Corporation Numeric data processor
US4893268A (en) * 1988-04-15 1990-01-09 Motorola, Inc. Circuit and method for accumulating partial products of a single, double or mixed precision multiplication
JP2803237B2 (ja) * 1989-11-07 1998-09-24 ダイキン工業株式会社 データ伝送方法およびその装置
US5197140A (en) * 1989-11-17 1993-03-23 Texas Instruments Incorporated Sliced addressing multi-processor and method of operation
US5289577A (en) * 1992-06-04 1994-02-22 International Business Machines Incorporated Process-pipeline architecture for image/video processing
US5268855A (en) * 1992-09-14 1993-12-07 Hewlett-Packard Company Common format for encoding both single and double precision floating point numbers
CN1103467C (zh) * 1994-10-13 2003-03-19 北京南思达科技发展有限公司 宏指令集对称式并行体系结构微处理器
US5631859A (en) * 1994-10-27 1997-05-20 Hewlett-Packard Company Floating point arithmetic unit having logic for quad precision arithmetic
US5764558A (en) * 1995-08-25 1998-06-09 International Business Machines Corporation Method and system for efficiently multiplying signed and unsigned variable width operands
US5892698A (en) * 1996-04-04 1999-04-06 Hewlett-Packard Company 2's complement floating-point multiply accumulate unit
US5815688A (en) * 1996-10-09 1998-09-29 Hewlett-Packard Company Verification of accesses in a functional model of a speculative out-of-order computer system
US6292886B1 (en) * 1998-10-12 2001-09-18 Intel Corporation Scalar hardware for performing SIMD operations
US6480872B1 (en) 1999-01-21 2002-11-12 Sandcraft, Inc. Floating-point and integer multiply-add and multiply-accumulate
US6493817B1 (en) * 1999-05-21 2002-12-10 Hewlett-Packard Company Floating-point unit which utilizes standard MAC units for performing SIMD operations
US6282556B1 (en) 1999-10-08 2001-08-28 Sony Corporation Of Japan High performance pipelined data path for a media processor
US6711602B1 (en) * 2000-02-18 2004-03-23 Texas Instruments Incorporated Data processor with flexible multiply unit
US20040254965A1 (en) * 2001-03-02 2004-12-16 Eric Giernalczyk Apparatus for variable word length computing in an array processor
US20030115236A1 (en) * 2001-06-07 2003-06-19 Ajay Naini Elimination of rounding step in the short path of a floating point adder
US7107305B2 (en) 2001-10-05 2006-09-12 Intel Corporation Multiply-accumulate (MAC) unit for single-instruction/multiple-data (SIMD) instructions
JP3719509B2 (ja) * 2002-04-01 2005-11-24 株式会社ソニー・コンピュータエンタテインメント シリアル演算パイプライン、演算装置、算術論理演算回路およびシリアル演算パイプラインによる演算方法
US7146486B1 (en) * 2003-01-29 2006-12-05 S3 Graphics Co., Ltd. SIMD processor with scalar arithmetic logic units
US7284113B2 (en) * 2003-01-29 2007-10-16 Via Technologies, Inc. Synchronous periodical orthogonal data converter
CN1438574A (zh) * 2003-02-21 2003-08-27 中国航天科技集团公司第九研究院七七一研究所 一种16位微处理器指令集
US7099910B2 (en) * 2003-04-07 2006-08-29 Sun Microsystems, Inc. Partitioned shifter for single instruction stream multiple data stream (SIMD) operations
CN1591318A (zh) * 2003-09-03 2005-03-09 国际商业机器公司 二进制补码和无符号量格式的数据乘法装置
US7836284B2 (en) * 2005-06-09 2010-11-16 Qualcomm Incorporated Microprocessor with automatic selection of processing parallelism mode based on width data of instructions

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105027109A (zh) * 2013-03-13 2015-11-04 高通股份有限公司 具有用于提供多模向量处理的可编程数据路径配置的向量处理引擎、以及相关向量处理器、系统和方法
CN105027109B (zh) * 2013-03-13 2019-03-08 高通股份有限公司 具有用于提供多模向量处理的可编程数据路径配置的向量处理引擎、以及相关向量处理器、系统和方法
CN108076666A (zh) * 2014-12-26 2018-05-25 英特尔公司 计算机指令的降功率实现
CN114625035A (zh) * 2020-12-14 2022-06-14 北京晶视智能科技有限公司 混合精度的人工智能处理器及其操作方法
TWI776645B (zh) * 2021-03-17 2022-09-01 神盾股份有限公司 乘積和運算裝置

Also Published As

Publication number Publication date
CN101615173A (zh) 2009-12-30
US20070185953A1 (en) 2007-08-09
US8024394B2 (en) 2011-09-20
TWI361379B (en) 2012-04-01
TW200736990A (en) 2007-10-01
CN101359284B (zh) 2011-05-11
CN101615173B (zh) 2011-11-30
US20070186082A1 (en) 2007-08-09
US20110208946A1 (en) 2011-08-25

Similar Documents

Publication Publication Date Title
CN101359284B (zh) 处理数个不同数据格式的乘法累加单元及其方法
JP3578502B2 (ja) 単一プロセッサにおいて並列データ処理を実行する方法
US6377970B1 (en) Method and apparatus for computing a sum of packed data elements using SIMD multiply circuitry
US6009451A (en) Method for generating barrel shifter result flags directly from input data
US5272660A (en) Method and apparatus for performing integer and floating point division using a single SRT divider in a data processor
JP5089776B2 (ja) 浮動小数点演算のための再構成アレイプロセッサ
US5448509A (en) Efficient hardware handling of positive and negative overflow resulting from arithmetic operations
US9104510B1 (en) Multi-function floating point unit
TW201237743A (en) Functional unit for vector integer multiply add instruction
TW200805146A (en) Instruction set encoding in a dual-mode computer processing environment
US20090158013A1 (en) Method and Apparatus Implementing a Minimal Area Consumption Multiple Addend Floating Point Summation Function in a Vector Microprocessor
US7013321B2 (en) Methods and apparatus for performing parallel integer multiply accumulate operations
JP2002149400A (ja) 複数レジスタ指定が可能なsimd演算方式
IL169374A (en) Result partitioning within simd data processing systems
US6675286B1 (en) Multimedia instruction set for wide data paths
US6999985B2 (en) Single instruction multiple data processing
TW201721580A (zh) 用於影像處理器之多功能執行道
US7260711B2 (en) Single instruction multiple data processing allowing the combination of portions of two data words with a single pack instruction
US8219604B2 (en) System and method for providing a double adder for decimal floating point operations
TWI335550B (en) Stream processor with variable single instruction multiple data (simd) factor and common special function
US7587582B1 (en) Method and apparatus for parallel arithmetic operations
US9753690B2 (en) Splitable and scalable normalizer for vector data
US20060031272A1 (en) Alignment shifter supporting multiple precisions
US7580968B2 (en) Processor with scaled sum-of-product instructions
Tang et al. Integrated partition integer execution unit for multimedia and conventional applications

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