CN1257462C - 使得能够每寄存器处理多个带符号独立数据元的装置、方法和编译器 - Google Patents
使得能够每寄存器处理多个带符号独立数据元的装置、方法和编译器 Download PDFInfo
- Publication number
- CN1257462C CN1257462C CNB018195857A CN01819585A CN1257462C CN 1257462 C CN1257462 C CN 1257462C CN B018195857 A CNB018195857 A CN B018195857A CN 01819585 A CN01819585 A CN 01819585A CN 1257462 C CN1257462 C CN 1257462C
- Authority
- CN
- China
- Prior art keywords
- register
- data
- unit
- data element
- processor
- 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.)
- Expired - Fee Related
Links
- 238000012545 processing Methods 0.000 title claims abstract description 53
- 238000000034 method Methods 0.000 title claims abstract description 44
- 238000012856 packing Methods 0.000 claims abstract description 33
- 238000004422 calculation algorithm Methods 0.000 claims description 19
- 238000012360 testing method Methods 0.000 claims description 6
- 238000003860 storage Methods 0.000 claims description 5
- 230000006378 damage Effects 0.000 claims 1
- 230000008569 process Effects 0.000 abstract description 17
- 229910003460 diamond Inorganic materials 0.000 description 24
- 239000010432 diamond Substances 0.000 description 24
- 238000010586 diagram Methods 0.000 description 14
- 238000004590 computer program Methods 0.000 description 7
- 230000008901 benefit Effects 0.000 description 3
- 230000000295 complement effect Effects 0.000 description 3
- 238000006073 displacement reaction Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 229910052799 carbon Inorganic materials 0.000 description 2
- 230000019771 cognition Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000014509 gene expression Effects 0.000 description 2
- 239000004615 ingredient Substances 0.000 description 2
- 238000012795 verification Methods 0.000 description 2
- 108010022579 ATP dependent 26S protease Proteins 0.000 description 1
- 241001269238 Data Species 0.000 description 1
- 238000004458 analytical method Methods 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 238000005194 fractionation Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 238000004519 manufacturing process Methods 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 238000007639 printing Methods 0.000 description 1
- 238000000926 separation method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
- 230000003442 weekly effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
- G06F9/30014—Arithmetic instructions with variable precision
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49994—Sign extension
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/441—Register allocation; Assignment of physical memory space to logical memory space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30112—Register structure comprising data of variable length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3812—Devices capable of handling different types of numbers
- G06F2207/3816—Accepting numbers of variable word length
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2207/00—Indexing scheme relating to methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F2207/38—Indexing scheme relating to groups G06F7/38 - G06F7/575
- G06F2207/3804—Details
- G06F2207/3808—Details concerning the type of numbers or the way they are handled
- G06F2207/3828—Multigauge devices, i.e. capable of handling packed numbers without unpacking them
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/38—Methods or arrangements for performing computations using exclusively denominational number representation, e.g. using binary, ternary, decimal representation
- G06F7/48—Methods 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/499—Denomination or exception handling, e.g. rounding or overflow
- G06F7/49905—Exception handling
- G06F7/4991—Overflow or underflow
- G06F7/49921—Saturation, i.e. clipping the result to a minimum or maximum value
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
一种用于数据处理的系统,包括使用这里阐述的规则(44),把每一寄存器的多个带符号数据元打包到一个处理器的寄存器中,而且使用相同的操作数(36)在单个周期内对寄存器中的数据元同时操作。所述数据元可以按照编译器指令的定义彼此独立,一个寄存器中的数据元的大小可以彼此不同。一个较大的数据元可被拆分到多个寄存器。可用处理单个图像所需的寄存器数同时处理代表两个图像的数据流。单个图像还可以以接近N倍快的速度被处理,其中N是每一寄存器中数据元的数量。
Description
技术领域
本发明涉及在计算机寄存器中并行处理数据的系统、方法和编译器。
背景技术
计算机处理器的运行是依照计算机程序提供的指令通过不同的寄存器处理数据元。寄存器的容量为2的幂。例如,一个寄存器可以具有八比特的容量,其能够在单个处理周期中处理一个八比特以下的数据元。举例来说,8比特寄存器可以在单个周期中处理一个4比特数据元。当然,寄存器的大小一般大于8比特,也就是说,寄存器的容量可以是16比特、32比特或者64比特等等。寄存器采用的操作的类型的非限定性实例包括乘以常数、加法、减法、逻辑左移、逻辑右移、“与”和“或”操作。
在数据元已经被处理之后,它们可以被发送到另一个寄存器进行进一步处理,或者它们可以被存储或输出。为了说明,在打印机领域中,依照一个计算机程序,一个服务器微处理器通过它的各寄存器处理一个输入的数据流,它可以输出一个所谓的JPEG格式打包图像数据的数据流到一个打印机处理器,然后对该数据进行合适的操作以指示打印机设备如何打印该图像。
处理器本身执行机器语言形式的指令,所述指令是有关什么数据元通过哪些寄存器处理的低级指令。然而,大部分软件是用高级编程代码例如C语言写的,高级语言具有自然人可读和能用相对较短、能快速书写的命令表达相对复杂的处理操作的优点。编译器接收高级编程代码,从许多选择中决定最好的方法把它映射成汇编语言,传递该映射到汇编程序,然后该汇编程序将该汇编语言映射成处理器可读的所谓机器语言。该高级语言可以是例如具有扩展或者宏的C或者C++程序设计语言,而低级语言可以是其中某些扩展或宏已经过解释或移除的C语言。或者,低级语言可以是机器语言或者汇编语言。有时,程序设计员可以选择直接以低级语言编写比程序的其他部分执行更频繁的部分程序。尽管写起来更麻烦,但代码的这些所谓的“手工制作”部分不需要由高级语言编译器进行翻译,从而便于在运行时更快速地处理。
不管处理器是否从编译器或者直接从手工制作程序接收机器代码,本发明进行了中肯的观测,发现情况常常是寄存器空间被浪费了。具体来说,如上所述,在每一个处理周期中,一个寄存器可能没有使用它的全部空间。例如,当一个16比特容量的寄存器被用于处理4比特数据元时,每个周期中寄存器有12比特的空间被浪费了。这减缓了处理时间,引起了额外的数据缓冲需求(从而附带产生高速缓存未中问题),从而整体上没有充分利用处理器容量。因此,本发明认识到对处理器性能可适用的可能的改进是在单个周期内在一个寄存器中处理多个数据元。
本发明还认识到实现上述认识不是没有价值的,特别是如果要处理的不仅仅是正值,而是既有正值又有负值(也就是“有符号的”),这是由于可能超出寄存器容量,和/或可能在处理期间破坏数据。换句话说,在本发明的用法中,一个“有符号的”数据元不限于非负值,并且希望在单个处理周期内通过单个寄存器处理多个带符号的数据元。此外,本发明认为:对于稳定性来说,最好处理器不要被制造商限定为每寄存器仅接受预定比特大小的多个数据元,而希望程序编制器能够灵活地定义寄存器能按照具体应用程序可能发出的命令接收的各种数据元的比特大小。在考察了上述方面后,本发明在这里提供了解决的方法。
本发明进一步认识到编译器可以被用于实现上述认识。
发明内容
本发明提供了一种处理多个带符号多比特数据元的装置,包括:寄存器;处理器,连接到所述寄存器上;和程序,可访问地存储在所述处理器中,当在所述处理器上执行时,该程序与所述处理器合作以在所述寄存器中同时处理多个带符号多比特数据元,该同时处理包括:在所述寄存器中打包至少第一和第二带符号多比特数据元;和应用所述处理器使用同样的操作同时处理该至少第一和第二带符号多比特数据元。
本发明还提供了一种编译多个带符号多比特数据元的装置,包括:处理器;编译器,与所述处理器合作,接收高级代码、输出低级代码以使所述处理器能够在单个寄存器中同时处理多个多比特数据元,所述低级代码逻辑包括:在所述寄存器中打包至少第一和第二带符号多比特数据元;和应用所述处理器使用同样的操作同时处理该至少第一和第二带符号多比特数据元。
本发明还提供了一种在数据处理装置中控制多个带符号多比特数据元的装置,该装置包括:控制把至少把第一和第二带符号多比特数据元打包到单个寄存器中的模块;控制所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元的模块。
本发明还提供了一种在数据处理装置中编译多个带符号多比特数据元的编译器,该编译器包括:把至少把第一和第二带符号多比特数据元打包到单个寄存器中的模块;使所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元的模块。
本发明还提供了一种处理多个带符号多比特数据元的装置,包括:处理器;连接到所述处理器的至少第一和第二寄存器;其特征在于,在所述第一寄存器中打包的第一和第二带符号多比特数据元,所述处理器使用同样的操作同时处理所述至少第一和第二带符号多比特数据元。
本发明还提供了一种在数据处理装置中处理多个带符号多比特数据元的方法,包括下列步骤:确定要在单个寄存器中被分配以分别保存第一和第二带符号多比特数据元的第一和第二精度;将所述第一和第二带符号多比特数据元打包到所述寄存器中;使所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元;确定要在单个寄存器中被分配以分别保存第三和第四带符号多比特数据元的第三和第四精度,至少下列之一:第一和第二精度彼此不同,第二和第四精度彼此不同;把第三和第四数据元打包到所述寄存器中;和使所述数据处理装置使用同样的操作同时处理所述第三和第四带符号多比特数据元。
将通用计算机按照本发明的步骤编程以允许在单个寄存器中使用多于一个的比特的带符号数据元。本发明可以被实现为一件产品-由数字处理装置例如计算机使用的机器部件,其有形地实现一个可以通过数字处理器装置去执行本发明的逻辑的可执行指令程序。本发明实现在使数字处理装置执行本发明的方法步骤的关键机器部件中。
因此,一个通用计算机包括采用该方法的逻辑,以在至少一个第一寄存器中建立至少第一和第二带符号多比特数据元。该逻辑同时处理多数据元。
假如需要,数据元可以是彼此独立的。第一数据元可以从一个第一数据组中提供,而第二数据元可以从一个第二数据组中提供,或者两个数据元可以从同一数据组的不同部分提供。寄存器本身可以传递内容到计算子系统,该子系统包括但不限于加法器、乘法器或移位器,在数据元上同时执行的操作可以是而不限于乘以一个常量,或乘以一个已知精度的变量,或者一个加法,或者一个逻辑左移。
此外,较大的数据元可以在寄存器之间拆分,然后在处理之后重新合并。也就是,第一数据元可以是第一部分数据元,与之有关的第二部分数据元建立在第二寄存器中,第一和第二部分数据元在处理之后合并。
如下所述,对于每一个在单个周期中在寄存器中被处理的数据元,向其寄存器分配相应的精度,使得可以由一个数据元代表的最大负数比相应的精度代表的最大负数大一值。这可以包括基于[-2N-1+1]到[+2N+1+1]确定一个用于数据元的精度边界(precision bound),其中N是数据元中的比特数。
另外,在一个优选的实施例中,在执行逻辑运算之前,确定用于任何乘法常量为达到所需精度所需的净比特数。然后,使用所述净比特数和乘法常量,确定精度的净比特数。寄存器中的空间按照确定的精度被分配。
一旦寄存器已经通过为每个寄存器分配多个带符号数据元的空间而建立,数据元的处理就通过按照精度的净比特数把多个数据元打包到(pack into)各寄存器而执行。然后,用相同的操作数对每一个寄存器中的所有数据元同时操作。然后,数据元被传递用于进一步处理、存储或输出。
当使一个寄存器中的第一和第二数据元彼此独立时,该逻辑将第一数据元中的符号位加到第二数据元中的最低有效位。或者,体现于逻辑中的方法包括屏蔽第一和第二数据元中的符号位,将符号位加回寄存器,舍弃每一个数据元中的符号位位置上的值。
此外,如下文详细所述,可以确定是否包含一个在零值附近的数据元。同样,可以这样进行右移位运算:在第一寄存器中保存用于一个打包到(packed in)第二寄存器的数据元的符号位,然后将按照右移位算法要移出数据元的至少一个最低有效位归零。第一寄存器中的符号位被恢复到第二寄存器中的数据元。另外,可在单个处理周期中对单个寄存器中的至少两个数据元确认算法相等性。通常,可以按每个数据元一个周期进行算术比较。
在另一方面,一种计算机程序装置包括一个能由数字处理装置读取的计算机程序存储装置。一个程序在该程序存储装置上,该程序包括可以由数字处理装置执行的指令,用于执行处理多比特带符号数据元的方法。该程序包括计算机可读码装置,用于把至少第一和第二数据元写入单个寄存器。计算机可读码装置同时处理所述数据元。
再一个方面,一个处理器包括至少第一和第二寄存器。至少第一和第二带符号多比特数据元在第一寄存器中,处理器使用一个操作数对第一和第二数据元同时操作。
在另一方面,一个计算机实现的方法包括,对于一个第一程序,确定将在单个寄存器中分配用于分别保存第一和第二带符号数据元的第一和第二精度。所述数据元被打包到(packed into)寄存器,然后对之操作。对于一个第二程序,确定将在单个寄存器中分配用于分别保存第三和第四带符号数据元的第三和第四精度。第一和第三精度和/或第二和第四精度可以彼此不同。第三和第四数据元被打包到寄存器,然后对之操作。
相应地,一个通用计算机包括一个编译器,用于接收高级代码,并输出低级代码以使处理器能够在单个寄存器中同时处理多个多比特数据元。由编译器输出的低级代码逻辑包括在一个第一寄存器中建立至少第一和第二带符号多比特数据元,然后同时处理所述数据元。用于这些打包的数据元(packed elements)的精度确定他们的打包结构(packing configuration)。在本说明书中,“输入精度”指在同时操作之前各数据元的初始精度,而“输出精度”指在同时操作完成之前各数据元的最终最大精度。
在一个优选的实施例中,在产生用于打包(packing)数据的指令和用于同时操作的指令之前,编译器可以访问一个标记或一个配置状态(configuration state)以决定是否由程序编制器(programmer)或者编译器从输入精度计算输出精度。当由程序编制器确定时,输出精度可以由编译器指令、变量定义或者配置文件指定给编译器。与此相反,当输出精度由编译器从输入精度确定时,编译器计算将对数据执行的操作的数量和类型,对每一个加法或减法将输入精度扩展一个比特,并扩展充分的比特数以适应乘法操作,同时当需要时通过扩展一个比特来保证可以由一个数据元代表的最大值负数比可以输出精度表示的最大负数大一。
编译器也可以产生代码以进行使处理之后的数据元彼此独立的操作,假如要执行的程序的需求如此要求的话。为此,编译器可以访问编译器指令或特定高级语言(HLL)语法以决定是否使数据元彼此独立,即何时拆分数据元。
在另一方面,一个计算机程序装置包括一个可以由数字处理装置读取的计算机程序存储设备。一个编译器程序在该程序存储装置上。该编译器程序包括产生低级代码的指令,所述低级代码可由数字处理装置执行,用于处理多比特带符号数据元。该编译程序包括一个用于输出一个低级代码的计算机可读代码装置,其把至少第一和第二数据元打包到单个寄存器中。同样,该编译器程序包括计算机可读代码装置,用于输出低级代码以同时处理数据元。
在又一方面,一个方法包括定义用于编译器的至少一个编译器指令。该编译器指令定义至少一个用于数据元的起始精度,或要打包到一个公共寄存器中,由一算法彼此同时操作的各数据元的多个数据源,或者不编译通过编译器接收的代码的预定部分的指令。
附图说明
参照随后的附图,本发明的结构和操作方面的细节可以得到更好的附图中相同的标记指相同的部件,其中:
图1是本发明的系统的示意图;
图2A是一个替代系统的示意图;
图2B是另一个替代系统的示意图;
图3是一个数据寄存器中多个独立比特的略图;
图4是本发明总体逻辑的流程图;
图5A是用于核实对于某过程本发明的规则能被满足的程序编制器/编译器逻辑的流程图;
图5B是程序初始化逻辑的流程图;
图5C是用于核实对于某过程本发明的规则能被满足的逻辑的流程图;
图6是寄存器建立逻辑的流程图;
图7是总体执行逻辑的流程图;
图8和9是用于在单个寄存器中实行独立数据元的可选逻辑流的流程图;
图10是用于确定在零附近是否包含一个数据元的逻辑的流程图;
图11是用于算术右移的逻辑的流程图;和
图12是用于算术比较的逻辑的流程图。
具体实施方式
先参考附图1和2,示出了一个总体上标记为10的系统,用于使处理器的每个单个寄存器能够同时处理多个带符号独立多比特数据元。图1和2示出多种非限制性的方法,其中可利用本发明提供的处理效率。例如,在图1中,一个可以使用一个软件实现的编译器11的服务器处理器12接收一个单源输入数据流,例如为代表图像的“TIFF”格式,该处理器对数据流的处理与不利用本发明相比快m倍,输出例如JPEG格式的打包图像数据,其中m在下面进一步按照每周期每寄存器的数据元定义。JPEG数据被发送到一个打印机微处理器14,后者命令一个打印机装置16去打印图像。应该理解,本发明通常应用到所有的数据类型,而不仅仅是图像数据,同时它也可以应用到单处理器系统或多处理器系统。例如,本发明应用到数据通信和数据处理、声音打包、纠错编码、多通道解析(multiple channel resolution)等等。因为在此可使用较少处理器进行并行处理,成本/功率/尺寸/重量可以降低。
图1和2A示出了使用编译器11的服务器微处理器。应该理解,本发明的编译器可以存在于任何地方,仅仅最终的机器代码需要被写入到微处理器用于执行。图2A示出:系统10的优点可以被进一步利用以使服务器处理器微处理器去同时处理来自第一和第二数据组的两个独立数据流,以输出相应的第一和第二输出流到单个打印机微处理器18,或者到相应的第一和第二打印机微处理器18、20。接下来,每个打印机处理器18、20可以控制自己的打印机装置(在图2A中仅仅示出装置22),或者,单个打印机微处理器可以控制两个打印机装置。无论如何,不同的图像(其是不同数据流的实例)或者相同图像(数据流)的不同部分可以同时通过系统10处理,这样,处理代码的核心保持不变。
图2B示出,合并图像数据输出1&2可以从一个服务器微处理器12A发送到一个编程为拆分所述数据的打印机微处理器14A,以节省在微处理器12A、14A之间网络连接的带宽。在这种情况下,例如,数据输出1&2可以是到相应的打印机装置16A中的相应的色彩引擎(color engine)的两个彩色分量。
在一个预定的实施例中,处理器12可以是由纽约Armonk的国际商用机器公司(IBM)制造的个人计算机,或者处理器12可以是任何的计算机,包括在诸如AS400等商标下售出的具有附随的IBM网络站的计算机。或者,该处理器12可以是UNIX服务器,或者OS/2服务器,或者Windows NT服务器,或者IBM工作站,或者一个IBM便携式计算机。另外,实现本发明寄存器的本发明处理器可以是一个数字信号处理器(DSP),专门的硬件、依照标准程序库建立的用于处理子系统和算术逻辑部件(ALU)的芯片。这里使用的术语“计算机寄存器”指所有这些数据处理单元中的寄存器。
考虑到本发明结构的上述概述,应该理解本发明的逻辑依照下面讨论的流程图在图1所示的结构上被执行。这里的流程图描述了实现在计算机程序软件中和/或编程步骤的本发明的逻辑的结构。本领域技术人员能明白,所述流程图描述了按本发明运作的逻辑部件,例如计算机程序代码部件或电子逻辑电路的结构。显然,本发明在其实质性的实施例中通过一个机器部件实现,使逻辑部件指令一个数字处理装置(也就是计算机)去执行与图中所示相应的功能步骤序列。
换句话说,部分逻辑可以通过一个编译器程序11实现,该程序作为一系列计算机可执行指令通过处理器12执行。这些指令可以例如存在处理器12的RAM中,或一个硬盘上,或处理器12的光驱中,或者指令可以被存储在一个DASD阵列、磁带、电子只读存储器中,或者其它合适的数据存储器中。
现在参看图3,处理器12的寄存器24被示意性的示出。在该实例中,寄存器24是一个16比特寄存器,并且它包括第一和第二数据元26、28。这里参照寄存器用于描述的术语“左”和“右”是与图3的顺序和标记一致的。最低有效位和最高有效位的另外的寄存器顺序需要另一种协议(convention)。
对于在图3中示出的说明性的实例,第一(最右)数据元包括两个保护位和八个数据位,因此总体“精度”为+(10),同时第二(左)数据元28具有两个保护位和4个数据位,因而精度为六(6)。按照专注于二进制补码计算的本发明,最左边的保护位是一个“符号位”,因为它只描述数据元的符号。
应该理解,按照本发明的原理,寄存器24可以是任何足以容纳“m”个数据元的大小,同时数据元可以具有相同或不同的大小。因此,本发明的寄存器可以是容纳两个16比特数据元的32比特寄存器,或者它可以容纳两个以上的N比特数据元,或者他可以是一个容纳4个16比特数据元的64比特寄存器等等。无论如何,每一个数据元是一个多比特数据元,其既可以是正的,也可以是负的,因此,它是一个“带符号”的数据元,数据元26、28的大小在处理器28的制造期间没有被约束为单一的、预定的大小,而是可依据特定应用由程序编制器定义。应该进一步理解,寄存器24存储数据元,当适当的时候,该寄存器发送数据元到计算子系统,该子系统包括但不限于加法器、乘法器或移位器。
图4示出了在此考虑四个发展阶段。按照本发明,编译器11可以采用逻辑,或者如母申请公开的那样,部分逻辑可以由程序员采用。第一步,在方框30,是算法设计,这里确定考虑中的特定处理是否可以符合本发明。当通过编译器11采用时,在下详细所述,方框30的步骤对应于读取诸如C等高级语言代码的编译器11,并决定如何把高级语言代码翻译成低级代码。
框32代表的第二步是程序初始化,其中在本发明的寄存器中执行本发明的细节通过编译器11确定,这样就产生了合适地初始化代码。然后,在框33中进行寄存器设置(register set up),这里编译器产生用于把输入数据打包到目标处理器寄存器中的代码。第四个阶段是执行,由框34表示,其中产生的代码在目标处理器由操作员、自动脚本程序或者其它能使产生的代码运行的其它装置执行。按照本发明,所有的这些阶段下面进一步讨论,使用框32、33和34代表编译器11如何实际地使高级语言转为汇编语言。如上所述,编译器另一方面可产生由传统的编译器编译的传统的高级语言指令。
对于第一阶段(算法设计),现在参考图5A。在框36开始,每一个原始数据元指示的所需精度所需的比特数被确定。然后在框38,对于每一个将被操作的数据元,对数据元将经历的每一操作可能需要的附加精度位数被确定。例如,将两个数据元加到一起可能引起输出数据元比输入数据元大一位。
从框38,逻辑移到判定菱形框40,这里确定在框38中分配的精度是否满足最大负数规则(maximum negative number rule)。“最大负数”的意思是具有最大绝对值的负数。特别的,在判定菱形框40,判断可由数据元代表的最大负数是否比以相应的精度代表的最大负数,例如以N位的二进制补码表示的-2N-1大一。若否,则在框42,对数据元分配一个附加精度位。在框44,充分的空间被分配到寄存器中用于数据元的最优打包,例如确定如何用将被与其它数据元一起同时保存在一个寄存器中的可用数据元最有效地填充可用寄存器,从而使未使用寄存器容量最低。例如,对于一个8比特的原始数据元,其将经历最多6个加法操作,分配到该数据元的精度将是(8+6)=14。
图5B示出了程序初始化逻辑,在判定菱形框45.1,它确定是否进行等同性比较。若有,在框45.2,在对齐数据元(element alignments)上打包等同性比较项,即,将要比较的项打包到相应寄存器中的相同寄存器位置,图5B的流程还描述了:在判定菱形框45.3,接下来判断是否进行范围比较,若有,用于每一个这种比较的下界将在框45.4中确定。然后,在框45.5,在对齐数据元(element alignments)上打包下界项。从框45.5,逻辑将移到框45.6去打包比较范围。
从框45.6,或当判断为否时从判定菱形框45.3,逻辑流到判定菱形框45.65,在此确定是否需要知道数据元的符号位置。假如是的话,一个掩码在框45.7产生,用于屏蔽下面讨论的符号位位置。从框45.7,或当判断为否时从判定菱形框45.65,逻辑流到判定菱形框45.8,在此确定是否进行逻辑右移操作。假如是的话,在框45.9产生一个掩码,用于清除下面讨论的被移位的比特位置。
关于第一阶段(算法逻辑),现在参照图5C,其第一部分(直到框39)是代表程序员采用的逻辑。从框35开始,将被编译的程序用高级语言写成。在框35.1,识别出可按照下面的说明被并行化(parallelized)的程序部分。移动到框35.2,编译器指令被插入到程序中,识别所述“可并行化的”部分。
举例来说,如下讨论的图7-9描述了各种执行逻辑,所述逻辑提供对两个或更多独立数据流的同时操作,例如在两个或更多将被并行打印的不同图像上执行相同的算法。当情况是这样时,编译器11必须在算法调用点和算法定义上知道这种情况可能发生,编译器指令被用于传送这种情况到编译器11。下面是这样的指令的一个实例:
/*在调用算法时*/
#begin parallel_algorithm_calls
signal_processing_algorithm(data_pointer_1);
signal_processing_algorithm(data_pointer_2);
signal_processing_algorithm(data_pointer 3);
signal_processing_algorithm(data_pointer_4);
#end parallel_algrithm_calls
/*在算法定义上*/
#parallel_algorithm
void_signal_processing_algorithm(int*data_pointer)
{
/*......*/
}
一个内嵌可平行化计算(in-line parallelizable computation)可以以相同方式规定,例如编译指令内部的说明来规定。还有另一个编译指令可以被定义为阻止编译器11对程序员不希望优化的代码(例如,假如代码是由程序员(以机器语言)手写的)执行并行化优化逻辑。可以应用到一个循环的这样一个指令的实例是:
#begin optimization_keepout
while(condition){
/*......*/
}
#end optimization_keepout
下一步,在框36,确定由每一个原始数据元支配的所需精度所需的比特数,例如,对将被操作的每一个数据元确定输入精度。在判定菱形框37,它确定编译器是否确定输出精度,若是,程序员(程序编制器,programmer)在框38.4使用编译器指令,或通过定义合适的变量类型,或通过使用配置文件,来指定输入精度。下面示出一个举例的编译器指令。这里所有示出的实例使用用于“C”编程语言的语法,对于本领域技术人员来说,向其它编程语言的扩展将是显而易见的。可以扩展的其它编程语言包括但不仅仅限于RORTRAN,Pascal,Ada和Java。例如,假如支持编译器的指令是依如下所示的举例的语法,程序员可以写出以下所示的编译器指令以定义一个初始精度:
#fixed_precision 9
int variable_name
为了定义一个9比特定点变量。或者假如编译器支持变量说明语法,例如在下面实例中显示的,上述步骤同样可以通过定义一个新的整数类型作为定点(9)变量名称(variable_name)而进行。如上所述,定义初始精度的第三种方法可以是在编译时包括一个指定用于选定值的变量范围、名称和精度的配置文件。
另一方面,假如编译器11不确定输出精度,程序员必定这样做,因此在这种情况下,逻辑从判定菱形框37移动到框38。在框38,对于每一个将被操作的数据元,确定数据元将经历的每一个操作可能需要的附加精度位数。例如,将两个数据元加在一起可以导致输出数据元比输入信元大一个比特。
从框38,逻辑转到判定菱形框38.1,在此确定在框38中分配的精度是否满足最大负数规则。“最大负数”的意思是具有最大绝对值的负数。具体地,在判定菱形框38.1,确定可以由数据元代表的最大负数是否比可以相应精度表示的最大负数,例如以N位二进制补码表示的-2N-1大一。若否,则在框38.2中为数据元分配一个附加精度位。所得输出精度在框38.3中以编译器指令、变量类型或配置文件的形式规定。
应该注意,这里,当输出精度由编译器确定时,与由程序员确定输出精度相比,系统更能耐受对程序员的错误。但是,当输出精度由程序员确定时,则编译器11具有两种选择。首先,编译器可以产生指令以执行精度的运行期检查以保证不发生下溢(可能包括最大值负数的发生)和上溢,假如发生的话则提供环绕式运算和饱和式运算(wrapand saturation)。或者,编译器11可以假定程序设计者已经正确的提供了足够的精度,其优点是比运行期检查消耗更少的执行周期,但是其缺点是潜在地允许下溢和上溢,这可能会破坏整个寄存器的内容。因此,按照预想,程序员可以使用较慢但更稳定的方法:使编译器产生指令去执行运行期检查以校验执行情况,然后在执行校验之后的编译期间禁止运行期检查以加速执行。
无论如何,来自框38.3的输出精度或者来自框38.4的输入精度被发送到编译器11,图5C中的剩余部分代表编译器11逻辑。在框39,编译器11读取上面提到的文件。在框39通过分析高级代码或通过读取编译器指令识别任何并行化指令。继续到判定菱形框40,编译器11确定它是否要确定输出精度(例如,通过对操作计数)。编译器通过访问一个编译器指令、一个标记、或一个配置文件作出该决定。假如该测试的结果是肯定的,将被并行操作的数据元的输入精度在框41.1读出,然后由编译器11在框41.2基本上重复上面结合框38.1、38.2、38.3讨论的逻辑,以生成输出精度。相反,当编译器11不确定数据元的输出精度时,这意味着来自框38.3的精度在框41.3中读出。
继续到框42,将被并行处理的变量被分组。下一步,在框43,编译器11在寄存器中分配足够的空间用于数据元的最优打包,即确定如何用将与其它数据元一起同时保存在一个寄存器中的可用数据元最有效地填充可用寄存器,从而使未使用寄存器容量最小。例如,对于将经历最多六个加法操作的8比特原始数据元的紧密打包,分配给该数据元的精度将是(8+6)=14。在框44.1,访问所产生的执行下述“并行化”方法的指令,程序的不可并行化部分在框44.2被编译/翻译。得到的低级代码在框44.3输出用于如下所述在一个处理器上运行以并行处理数据元。
图5B示出了由编译器执行的和以编译器11输出的低级代码实现的程序初始化逻辑。在判定菱形框45.1,编译器确定是否要进行相等性比较。若有,编译器产生代码以在框45.2中对齐在数据元(elementalignments)上打包相等性比较项,即,将要相互比较的项打包到相应的寄存器中,或者在相同的寄存器位置的常量或者变量中。图5A中的流程还描述了:在判定菱形框45.3,编译器确定是否要进行范围的比较,若是,则编译器确定每一个这种比较的下界,或者编译器产生用于在框45.4确定每一个这种比较的下界的代码。然后,在框45.4,编译器45.4产生用于在对齐数据元(element alignments)上打包下界项(lower boundary terms)的代码。逻辑从框45.5移到框45.6,在此编译器产生打包比较范围的代码。
逻辑从框45.6,或者当判断结果为否时从判定菱形框45.1转到判定菱形框45.65,这里确定是否需要知道数据元的符号位置。如果需要,编译器在框45.5产生一个掩码,用于如下所述屏蔽符号位位置。逻辑从框45.7,或者当判断结果为否时从判定菱形框45.65转到判定菱形框45.8,这里确定是否要执行逻辑右移操作。如果是,编译器在框45.9产生一个掩码,用于如下所述清除移位比特位置。
图6示出了由编译器11的输出代码执行的寄存器设置逻辑。具体地,应该理解,剩余的图的逻辑由编译器11产生的代码执行。从框46开始,对于一个具有“m”个值的寄存器,将第m个值左移(同样按照图3中描述的方向)一个其右边的值的宽度,例如1,……,(m-1)个值的宽度。在框48,包括在框46中移位的值的数据元被加到指定的寄存器。框50表示框46和48的处理被循环,直到将要打包到寄存器中的所有数据被加到该寄存器中。逻辑在位置55结束。应该理解原始数据元可以被分成在不同的寄存器中作为其自身中的和自身的数据元处理的子数据元,然后在处理之后进行合并。例如,假如两个完整的数据元加上特定处理可能需要的两组额外精度不能放入一个寄存器中,则一个完整的数据元加上一个部分数据元连同两组额外精度可以通过一个寄存器处理,同时剩余的子数据元可以通过目标处理器的另一个寄存器处理。当所有的数据元已知为正,并且已经被打包,不具有保护位时,该打包处理(packing process)可以是更简单,可以由每隔一个选择一个数据元的移位屏遮蔽操作组成,将结果留在两个寄存器中,保护位等于数据元的输入精度。
当依照本发明要处理的所有数据元都满足上述条件时,没有发生预先借位的左进位传送(依照图3中示出的举例寄存器24)可能从不发生。这是所希望的,因为不然的话没有预先借位的左进位传送会指出数据元上溢到邻近数据元中。此外,满足最大负数测试保证了借位仅仅遵从下溢情况下的借位。因为它提供紧邻受影响的数据元右侧的数据元变号所需的借位。于是在任何一个处理周期中,寄存器中的每一个数据元至多有一个借位,而且该借位由相邻(右侧)数据元的符号位(符号位是一个数据元的最高有效位)中出现的“1”位表示。
一旦寄存器设置处理已经完成,则输入数据流可以通过执行图7中示出的逻辑进行处理,其中编译器产生用于图中所示逻辑的低级代码。在框56,按照前述的空间分配,数据元被打包到处理器12的寄存器中。特别的,在框56中,多个多比特带符号的数据元被打包到处理器12的至少一个寄存器中。然后,在每一个处理周期中,在每一个保持多个数据元的寄存器中,通过同样的操作,即,通过由程序实现的操作,同时处理所述数据元。一个周期的操作包括两个寄存器的相加/相减,立即值的相加/相减,逻辑左移,单个值或已知精度的变量的正或负乘法(positive or negative multiplication),等同运算,带符号位的“与”操作,符号位的“或”操作。同样,寄存器中最高位(最左)比特上的数据元的算术比较可以针对单个周期内的预定量执行,假如该最高位比特在比较后可以被舍弃,寄存器中低位数据元(lower-order elements)的这种比较需要一个额外的周期以复制该数据元并将其移位到另一个寄存器或同一寄存器中的最高位(highest-order bit)。算术右移,逻辑右移、某些比较和非操作都要求额外的周期,但是对于所有的数据元都可以在多个周期中完成。对于独立寄存器中将被彼此比较、彼此相加或彼此相减的数据元,相应数据元必须对齐,即,第一寄存器中将与第二寄存器的第二数据元比较、相加或相减的第一数据元在第一寄存器中占据的位置必须与第二数据元在第二寄存器中的位置相同。
在同时操作之后,逻辑转移到判定菱形框59,其中判断数据元是否要拆分。特别的,单个寄存器中将被同时操作的数据元按照上述的编译器指令的定义或在一并行执行模块结束后可能需要是彼此独立的。在编译器产生的代码中,在该代码执行同时操作之后,假如数据元需要被拆分,则编译器必须插入低级代码以执行该拆分。该逻辑反映在判定菱形框59中,其表示在生成同时在单个寄存器中对打包的独立数据元进行操作的指令之后,生成指令以依照下面讨论的图8或图9的逻辑分离数据元。通常,对于独立的数据元,逻辑移到框62,其中在一个寄存器中的被处理的数据元被拆分并发送到独立的寄存器或存储器。在框64,作为一个大的数据元的子数据元的数据元被彼此合并。从框64,或在寄存器中的打包数据元不需要彼此独立的情况下从判定菱形框59,数据元被发送用于存储、输出、或在框66中进一步处理。
图8-12描述了在编译器11的输出中实现的本分明的各种优选的细节。参看图8,示出了使一个寄存器中的数据元彼此独立的第一逻辑流。从框68开始,在图7的框58操作数据元之后,最右数据元(同样以图3中所示的寄存器24为例)的符号位被加到左边紧邻的数据元的最低有效位。框70表示当超过两个数据元被包含在一个寄存器中时,递归执行框68的步骤,有效的消除数据元之间的所有借位。
或者,图9的逻辑可以被调用以使数据元独立。从图9的框72开始,当一个寄存器中的数据元必须在处理之后完全独立,且紧随一个数据元的符号位的比特与符号位相同(意味着符号位可以被舍弃)时,将一个选择寄存器中所有符号位的掩码应用到该寄存器的一个拷贝上,并在框74加回寄存器中。这清除了所有的符号位,直到一个进位或借位,数据元的被清除的符号位位置的数据元从它的右相邻位获取进位或借位。“屏蔽符号位”的意思是使用在符号位位置上为“1”、在别处为“0”的模板(pattern)对寄存器执行按位“与”操作。最左数据元的符号位的屏蔽和舍弃可以进行也可以不进行,因为最左数据元在它的左边没有其他的数据元与其相互作用。
然后,在框76,在传递数据元之前,每一个数据元的最左(或前符号位)位置上的值被舍弃或忽略。尽管上述的操作导致每一数据元精度的减少,与图8所示的递归方法相比,能在更少的周期中使数据元彼此独立,而且符号位位置上被破坏的数据被舍弃。该舍弃可以这样进行:作为寄存器中为比较而进行的左侧调整的一部分,进行一个额外的左移,或者用掩码选择性地剔除每一个被破坏的位。
现在参看图10,其中示出了用于确定一个数据元是否被包含在零点附近(例如量化到零的JPEG)、以编译器产生的低级代码实现的逻辑。在框80,范围的打包下界(packed lower boundaries of therange)在一个周期内从寄存器中减去。移到判定菱形框82,其中确定被检测(例如进行比较)的数据元的符号位是否可以依照前述讨论的原则舍弃。若是,在框84,加上上述的符号位掩码以屏蔽符号位。然后,在框88,被检测数据元与单个逻辑测试中的相应范围进行比较。因为已经为数据元提供了一个额外的未使用精度位,符号位在每一个数据元的左起第二位置上仍然存在。在框88,来自框84的处理被循环,直到所有的数据元都已被比较。
相反,当判定菱形框82的判断为否时,在框86,符号位被加入到邻近数据元。然后,在框88,被测试数据元与单个逻辑测试中的上界比较,框86和88的处理被循环,直到所有的数据都已被比较。
与图10的讨论相关,在框88的比较之后,数据元应被屏蔽为零,或者一次左移一位,这样,对于寄存器中最左侧非屏蔽数据元,总是针对边界进行比较。
图11示出了用于算术右移的由编译器产生的低级代码实现的逻辑。从框92开始,每一个数据元的符号位被保存在一个独立的寄存器中。移到框94,如上述图8和图9讨论的那样使数据元独立,然后在框96,算术右移一个位置。下一步,在框97,一个寄存器中的数据元的符号位位置在一个周期中被清除。在框98,每一个数据元的符号位被“或”回到寄存器,如框99所示重复框96和98中的步骤,直到移位完成。假如在框99中确定要执行更多的操作,打包格式可以通过从右到左一次减去一个新符号位而恢复,使它们在寄存器中行波式行进(ripple)。如图11所示,这是这样完成的:在框99.2中将符号位自加,然后在框99.3将符号位“或”回到数据元中。
图12示出了如何使用一个附加精度位去进行算术比较。从框100开始,本分明定义了一个作为正确值的4位数据元xxxx0值,xxxx1值表示右侧相邻值的符号位已经从该值借用。然后在框102,该值与所述附加精度位比较。
虽然在此图示的和详细描述的特定系统、方法和编译器技术完全能够实现本发明上面描述的目的,应该理解,这是本发明目前最优的实施例,因而代表了本发明的预期比较宽的主题,本发明的范围完全包括对于本领域的技术人员来说很明显的其他的实施例,而且本分明的范围仅由所附的权利要求加以限制。权利要求中,单数的元素意指“至少一个”。对于本领域普通技术人员来说,上述最佳实施例中描述的数据元的已知或将来的所有结构和功能上的等同物明确地包含于此并为权利要求所包括。此外,对于某一个装置和某个方法,不需要针对本分明试图解决的每个问题,因为这将通过本分明的权利要求包括。此外,不管数据元、组成部分或方法步骤是否在权利要求中明确记述,本分明的公开中的数据元、组成部分或者方法步骤都不是用来贡献于公众。任何权利要求中的元素都不应依据U.S.C.§112第六段进行解释,除非该元素明确地用“用于...的装置”这样的用语记述。
Claims (39)
1.一种处理多个带符号多比特数据元的装置,包括:
寄存器,
处理器,连接到所述寄存器上,和
程序,可访问地存储在所述处理器中,当在所述处理器上执行时,该程序与所述处理器合作以在所述寄存器中同时处理多个带符号多比特数据元,该同时处理包括:
在所述寄存器中打包至少第一和第二带符号多比特数据元;和
应用所述处理器使用同样的操作同时处理该至少第一和第二带符号多比特数据元。2.按照权利要求1的装置,其中所述至少第一和第二带符号多比特数据元是彼此独立的。
3.按照权利要求1或2所述的装置,其中当在处理器上执行时,所述程序和所述处理器合作以将多个数据元同时从所述寄存器发送到至少一个计算子系统。
4.按照权利要求1或2所述的装置,其中当在处理器上执行时,所述程序和所述处理器合作以通过从下述操作中选出的一个操作来处理数据元:(a)乘以一个常量或乘以一个已知精度的变量,或者(b)加法,或者(c)逻辑左移,(d)减法,或(e)按位与,或(f)按位或。
5.按照权利要求1或2所述的装置,其中第一数据元包括第一部分数据元和相关的第二部分数据元,第二部分数据元被建立在第二寄存器中,其中,当在处理器上执行时,所述程序和所述处理器合作以在处理之后合并第一和第二部分数据元。
6.按照权利要求1或2所述的装置,包括多个寄存器,其中,当在处理器上执行时,所述程序与处理器合作,在所述寄存器中的单个寄存器中同时处理多个多比特数据元。
7.按照权利要求6的装置,其中当在处理器上执行时,所述程序与处理器合作,在多个所述寄存器中的一系列的每一个中同时处理多个多比特数据元。
8.按照权利要求1或2所述的装置,当在处理器上执行时,所述程序和所述处理器合作,对要在单个周期内在寄存器中被处理的数据元在寄存器中分配相应的精度,使得可由一个数据元代表的最大负数比可以以所述相应的精度表示的最大负数大一。
9.按照权利要求8的装置,其中当在处理器上执行时,所述程序和所述处理器合作,基于[-2N-1+1]到[2N+1-1]确定用于数据元的精度边界,其中N是所述数据元中的比特数。
10.按照权利要求1或2所述的装置,其中当在处理器上执行时,所述程序和所述处理器合作,将多个数据元打包到至少一个单个寄存器中;对该单个寄存器中的所有数据元同时操作;在该操作动作之后,传递该数据元以进一步处理、存储或输出。
11.按照权利要求10的装置,其中当在处理器上执行时,所述程序和所述处理器合作,对于一个单个寄存器中要彼此独立的至少第一和第二数据元,将第一数据元中的符号位加到第二数据元中的最低有效位上。
12.按照权利要求10的装置,其中当在处理器上执行时,所述程序和所述处理器合作,将至少一个相对较大的数据元拆分成两个或更多的子数据元,将所述子数据元打包到独立的相应寄存器中;在处理之后重新合并所述子数据元。
13.按照权利要求1或2所述的装置,其中当在处理器上执行时,所述程序和所述处理器合作,在单个处理周期中在单个寄存器中对至少两个数据元进行至少一个等同确认。
14.一种编译多个带符号多比特数据元的装置,包括处理器;
编译器,与所述处理器合作,接收高级代码、输出低级代码以使所述处理器能够在单个寄存器中同时处理多个多比特数据元,所述低级代码逻辑包括:
在所述寄存器中打包至少第一和第二带符号多比特数据元;和
应用所述处理器使用同样的操作同时处理该至少第一和第二带符号多比特数据元。
15.按照权利要求14的装置,其中所述编译器访问至少下述之一:编译器指令、标记或配置文件,以决定什么时候使数据元彼此独立。
16.按照权利要求14或15所述的装置,其中第一数据元从第一数据组提供,而第二数据元从不同于第一数据组的第二数据组提供。
17.按照权利要求14或15所述的装置,其中,对要在单个周期内在寄存器中要处理的每个数据元,编译器在寄存器中分配相应的输出精度。
18.按照权利要求17的装置,其中编译器至少部分基于输入精度确定输出精度。
19.按照权利要求17的装置,其中编译器接收输出精度作为输入。
20.按照权利要求18的装置,其中编译器至少部分基于对数据元的操作增加至少一个精度位。
21.按照权利要求14或15所述的装置,其中输出精度或输入精度借助于编译器指令、配置文件或变量定义来定义。
22.按照权利要求14的装置,其中编译器产生指令,把来自相应数据源的多个数据元打包到一个公共寄存器中,以由一个算法对其同时操作。
23.一种在数据处理装置中控制多个带符号多比特数据元的装置,该装置包括:
控制把至少把第一和第二带符号多比特数据元打包到单个寄存器中的模块;
控制所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元的模块。
24.按照权利要求23的装置,所述装置进一步控制为要在单个周期内在寄存器中被处理的每一个数据元,在寄存器中分配相应的精度,使得可由一个数据元代表的最大负数比可以以相应的精度上表示的最大负数大一的模块。
25.按照权利要求23或24所述的装置,进一步包括按照净精度位数把多个数据元打包到至少一个单个寄存器中的模块;同时,所述控制所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元的模块控制对该单个寄存器中所有数据元的同时操作;在该操作动作之后,传递所述数据元以进一步处理、存储或输出。
26.按照权利要求23或24所述的装置,进一步包括:将至少一个较大的数据元拆分成两个或更多的子数据元,将这些子数据元打包到相应的独立寄存器中的模块;和在处理之后重新合并所述子数据元的模块。
27.按照权利要求23或24所述的装置,进一步包括在单个处理周期中对单个寄存器中的至少两个数据元进行至少一个等同确认操作的模块。
28.一种在数据处理装置中编译多个带符号多比特数据元的编译器,该编译器包括:
把至少把第一和第二带符号多比特数据元打包到单个寄存器中的模块;
使所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元的模块。29.按照权利要求28的编译器,进一步包括指示是否应在至少一个周期中检验精度的标记。
30.按照权利要求28的编译器,进一步包括定义输入精度的编译器指令。
31.按照权利要求28的编译器,进一步包括定义要打包到公共寄存器中并由一个算法同时操作的各数据元的多个数据源的编译器指令。
32.按照权利要求28的编译器,进一步包括:
指示是否应检验精度装置;
响应所述指示装置,用于检查所述打包数据元上溢、下溢或达到可以所述精度表示的最大负数的装置;
当打包数据元在一个周期内上溢、下溢或达到可以所述精度表示的最大值负数时,在所述数据元中进行环绕式或饱和式运算以防止寄存器中其他数据元的破坏,或发出由程序中的错误处理例程处理的出错信号的装置。
33.一种处理多个带符号多比特数据元的装置,包括
处理器;
连接到所述处理器的至少第一和第二寄存器;
其特征在于,在所述第一寄存器中打包的第一和第二带符号多比特数据元,所述处理器使用同样的操作同时处理所述至少第一和第二带符号多比特数据元。34.按照权利要求33的装置,还包括所述第二寄存器中的第三数据元,该第一和第三数据元是第四数据元的子数据元。
35.按照权利要求33或34所述的装置,其中所述第一和第二数据元是彼此独立的。
36.按照权利要求33或34所述的装置,其中所述第一数据元具有第一大小,所述第二数据元具有不同于第一大小的第二大小。
37.按照权利要求33或34所述的装置,其中所述第一数据元来自一个第一图象数据流,而第二数据元来自一个第二图像数据流。
38.按照权利要求33或34所述的装置,其中所述第一和第二数据元来自于同一图像数据流的不同部分。
39.一种在数据处理装置中处理多个带符号多比特数据元的方法,包括下列步骤:
确定要在单个寄存器中被分配以分别保存第一和第二带符号多比特数据元的第一和第二精度;
将所述第一和第二带符号多比特数据元打包到所述寄存器中;
使所述数据处理装置使用同样的操作同时处理所述至少第一和第二带符号多比特数据元;
确定要在单个寄存器中被分配以分别保存第三和第四带符号多比特数据元的第三和第四精度,至少下列之一:第一和第二精度彼此不同,第二和第四精度彼此不同;
把第三和第四数据元打包到所述寄存器中;和
使所述数据处理装置使用同样的操作同时处理所述第三和第四带符号多比特数据元。40.按照权利要求39的方法,其中寄存器同时发送多个数据元到至少一个计算子系统。
41.按照权利要求39或40所述的方法,其中所述操作是乘以一个常数或一个已知精度的变量,或加法,或逻辑左移,或减法,或按位“与”,或按位“或”。
42.按照权利要求39或40所述的方法,其中第一数据元从第一数据组提供,而第二数据元从不同于第一数据组的第二数据组提供。
43.按照权利要求39或40所述的方法,其中第一数据元从第一数据组提供,第二数据元也从第一数据组提供。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/675,779 US6834337B1 (en) | 2000-09-29 | 2000-09-29 | System and method for enabling multiple signed independent data elements per register |
US09/675,779 | 2000-09-29 | ||
US09/693,090 | 2000-10-20 | ||
US09/693,090 US7039906B1 (en) | 2000-09-29 | 2000-10-20 | Compiler for enabling multiple signed independent data elements per register |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1478257A CN1478257A (zh) | 2004-02-25 |
CN1257462C true CN1257462C (zh) | 2006-05-24 |
Family
ID=27101408
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNB018195857A Expired - Fee Related CN1257462C (zh) | 2000-09-29 | 2001-09-26 | 使得能够每寄存器处理多个带符号独立数据元的装置、方法和编译器 |
Country Status (6)
Country | Link |
---|---|
US (1) | US7039906B1 (zh) |
EP (1) | EP1330788A4 (zh) |
JP (1) | JP4677172B2 (zh) |
KR (1) | KR100588034B1 (zh) |
CN (1) | CN1257462C (zh) |
WO (1) | WO2002029725A1 (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004054680A (ja) * | 2002-07-22 | 2004-02-19 | Fujitsu Ltd | 並列効率計算方法 |
JP4487479B2 (ja) * | 2002-11-12 | 2010-06-23 | 日本電気株式会社 | Simd命令シーケンス生成方法および装置ならびにsimd命令シーケンス生成用プログラム |
US7310594B1 (en) * | 2002-11-15 | 2007-12-18 | Xilinx, Inc. | Method and system for designing a multiprocessor |
US7668897B2 (en) * | 2003-06-16 | 2010-02-23 | Arm Limited | Result partitioning within SIMD data processing systems |
CA2443049A1 (en) | 2003-09-26 | 2005-03-26 | Ali I. Sheikh | Method for computer program optimization in a dynamic compiling environment |
JP4157016B2 (ja) * | 2003-11-05 | 2008-09-24 | 株式会社東芝 | コンパイラ装置及びコンパイル方法 |
GB2411974C (en) * | 2003-12-09 | 2009-09-23 | Advanced Risc Mach Ltd | Data shift operations |
US7653674B2 (en) * | 2004-10-07 | 2010-01-26 | Infoprint Solutions Company Llc | Parallel operations on multiple signed elements in a register |
US8255886B2 (en) * | 2008-06-30 | 2012-08-28 | Intel Corporation | Methods and apparatus for analyzing SIMD code |
US20130113809A1 (en) * | 2011-11-07 | 2013-05-09 | Nvidia Corporation | Technique for inter-procedural memory address space optimization in gpu computing compiler |
US9557993B2 (en) | 2012-10-23 | 2017-01-31 | Analog Devices Global | Processor architecture and method for simplifying programming single instruction, multiple data within a register |
CN108229668B (zh) * | 2017-09-29 | 2020-07-07 | 北京市商汤科技开发有限公司 | 基于深度学习的运算实现方法、装置和电子设备 |
Family Cites Families (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3816734A (en) * | 1973-03-12 | 1974-06-11 | Bell Telephone Labor Inc | Apparatus and method for 2{40 s complement subtraction |
US4338675A (en) * | 1980-02-13 | 1982-07-06 | Intel Corporation | Numeric data processor |
US5341506A (en) * | 1984-12-10 | 1994-08-23 | Nec Corporation | Data flow processor with a full-to-half word convertor |
JPH0762823B2 (ja) | 1985-05-22 | 1995-07-05 | 株式会社日立製作所 | デ−タ処理装置 |
US5021945A (en) | 1985-10-31 | 1991-06-04 | Mcc Development, Ltd. | Parallel processor system for processing natural concurrencies and method therefor |
DE3855524T2 (de) | 1987-06-19 | 1997-02-06 | Hitachi Ltd | Arithmetik-Parallelverarbeitungseinheit und zugehöriger Kompilator |
DE68920388T2 (de) | 1988-09-19 | 1995-05-11 | Fujitsu Ltd | Paralleles Rechnersystem mit Verwendung eines SIMD-Verfahrens. |
JPH03257579A (ja) | 1990-03-07 | 1991-11-18 | Nec Corp | コンパイラの並列化方式 |
US5418915A (en) | 1990-08-08 | 1995-05-23 | Sumitomo Metal Industries, Ltd. | Arithmetic unit for SIMD type parallel computer |
JP2834292B2 (ja) | 1990-08-15 | 1998-12-09 | 株式会社日立製作所 | データ・プロセッサ |
JP3032031B2 (ja) | 1991-04-05 | 2000-04-10 | 株式会社東芝 | ループ最適化方法及び装置 |
US5218564A (en) | 1991-06-07 | 1993-06-08 | National Semiconductor Corporation | Layout efficient 32-bit shifter/register with 16-bit interface |
US5774727A (en) | 1991-06-27 | 1998-06-30 | Digital Equipment Corporation | Parallel processing system for virtual processor implementation of machine-language instructions |
US5293631A (en) | 1991-08-06 | 1994-03-08 | Hewlett-Packard Company | Analysis and optimization of array variables in compiler for instruction level parallel processor |
US5274818A (en) | 1992-02-03 | 1993-12-28 | Thinking Machines Corporation | System and method for compiling a fine-grained array based source program onto a course-grained hardware |
US5669010A (en) | 1992-05-18 | 1997-09-16 | Silicon Engines | Cascaded two-stage computational SIMD engine having multi-port memory and multiple arithmetic units |
US5408670A (en) | 1992-12-18 | 1995-04-18 | Xerox Corporation | Performing arithmetic in parallel on composite operands with packed multi-bit components |
US5410721A (en) * | 1992-12-24 | 1995-04-25 | Motorola, Inc. | System and method for incrementing a program counter |
JP3546437B2 (ja) | 1993-03-31 | 2004-07-28 | ソニー株式会社 | 適応形ビデオ信号演算処理装置 |
US5606650A (en) * | 1993-04-22 | 1997-02-25 | Apple Computer, Inc. | Method and apparatus for storage and retrieval of a texture map in a graphics display system |
WO1994027216A1 (en) | 1993-05-14 | 1994-11-24 | Massachusetts Institute Of Technology | Multiprocessor coupling system with integrated compile and run time scheduling for parallelism |
US5390135A (en) | 1993-11-29 | 1995-02-14 | Hewlett-Packard | Parallel shift and add circuit and method |
CA2115464C (en) | 1994-02-11 | 1998-12-15 | William G. O'farrell | Concurrent processing in object oriented parallel and near parallel systems |
JP3458518B2 (ja) | 1994-08-30 | 2003-10-20 | ソニー株式会社 | 並列プロセッサ |
US5692207A (en) | 1994-12-14 | 1997-11-25 | International Business Machines Corporation | Digital signal processing system with dual memory structures for performing simplex operations in parallel |
US5689702A (en) * | 1995-06-07 | 1997-11-18 | Microtec Research, Inc. | Flexible data structure layout for data structure including bit-field data members |
US5696985A (en) * | 1995-06-07 | 1997-12-09 | International Business Machines Corporation | Video processor |
US5602769A (en) * | 1995-07-05 | 1997-02-11 | Sun Microsystems, Inc. | Method and apparatus for partially supporting subnormal operands in floating point multiplication |
CN1252587C (zh) * | 1995-08-31 | 2006-04-19 | 英特尔公司 | 移位分组数据的方法、装置和处理数字音频信号的系统 |
JPH0997178A (ja) | 1995-09-29 | 1997-04-08 | Matsushita Electric Ind Co Ltd | 飽和演算処理装置および方法 |
JP3546980B2 (ja) | 1996-03-29 | 2004-07-28 | 松下電器産業株式会社 | データ処理装置 |
US5818364A (en) | 1996-06-19 | 1998-10-06 | Hewlett-Packard Company | High bit-rate huffman decoding |
US5770894A (en) | 1996-07-10 | 1998-06-23 | International Business Machines Corporation | Parallel processing method having arithmetical conditions code based instructions substituted for conventional branches |
GB2317467B (en) | 1996-09-23 | 2000-11-01 | Advanced Risc Mach Ltd | Input operand control in data processing systems |
US5864703A (en) * | 1997-10-09 | 1999-01-26 | Mips Technologies, Inc. | Method for providing extended precision in SIMD vector arithmetic operations |
US6080204A (en) | 1997-10-27 | 2000-06-27 | Altera Corporation | Method and apparatus for contemporaneously compiling an electronic circuit design by contemporaneously bipartitioning the electronic circuit design using parallel processing |
US5958038A (en) | 1997-11-07 | 1999-09-28 | S3 Incorporated | Computer processor with two addressable memories and two stream registers and method of data streaming of ALU operation |
US6112299A (en) | 1997-12-31 | 2000-08-29 | International Business Machines Corporation | Method and apparatus to select the next instruction in a superscalar or a very long instruction word computer having N-way branching |
US6243803B1 (en) * | 1998-03-31 | 2001-06-05 | Intel Corporation | Method and apparatus for computing a packed absolute differences with plurality of sign bits using SIMD add circuitry |
JP3615399B2 (ja) * | 1998-09-22 | 2005-02-02 | 株式会社リコー | 画像処理装置および画像処理方法 |
US6038652A (en) | 1998-09-30 | 2000-03-14 | Intel Corporation | Exception reporting on function generation in an SIMD processor |
-
2000
- 2000-10-20 US US09/693,090 patent/US7039906B1/en not_active Expired - Fee Related
-
2001
- 2001-09-26 EP EP01972951A patent/EP1330788A4/en not_active Withdrawn
- 2001-09-26 WO PCT/US2001/027733 patent/WO2002029725A1/en not_active Application Discontinuation
- 2001-09-26 CN CNB018195857A patent/CN1257462C/zh not_active Expired - Fee Related
- 2001-09-26 KR KR1020037004305A patent/KR100588034B1/ko not_active IP Right Cessation
- 2001-09-26 JP JP2002533222A patent/JP4677172B2/ja not_active Expired - Fee Related
Also Published As
Publication number | Publication date |
---|---|
WO2002029725A1 (en) | 2002-04-11 |
CN1478257A (zh) | 2004-02-25 |
KR100588034B1 (ko) | 2006-06-09 |
KR20030034213A (ko) | 2003-05-01 |
US7039906B1 (en) | 2006-05-02 |
EP1330788A4 (en) | 2006-04-26 |
JP4677172B2 (ja) | 2011-04-27 |
JP2004511051A (ja) | 2004-04-08 |
EP1330788A1 (en) | 2003-07-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1257462C (zh) | 使得能够每寄存器处理多个带符号独立数据元的装置、方法和编译器 | |
Abdelfattah et al. | Gzip on a chip: High performance lossless data compression on fpgas using opencl | |
TWI406176B (zh) | 準備用於具有多個發送埠之處理器的指令群 | |
US7278137B1 (en) | Methods and apparatus for compiling instructions for a data processor | |
CN1108560C (zh) | 用于存储与多种编程语言相关的执行数据的方法和装置 | |
Auerbach et al. | A compiler and runtime for heterogeneous computing | |
CN1257454C (zh) | 用于展开计算机程序中超级块的编译装置和方法 | |
CN1922574A (zh) | 无需额外的代码分析来进行链接时代码优化的方法和系统 | |
Flegar et al. | Adaptive precision block-Jacobi for high performance preconditioning in the Ginkgo linear algebra software | |
JP2007034887A (ja) | ハイレベル合成コンパイラ用のシフトレジスタファイルを自動生成するための方法および装置 | |
CN1324469A (zh) | 提高数字图像的可移植性 | |
CN1826586A (zh) | 软件原子化 | |
CN1853164A (zh) | 用于开发dsp编译器构件块的组合方法 | |
Mendis et al. | Revec: program rejuvenation through revectorization | |
CN1295778C (zh) | 一种验证芯片硬件行为与软件模拟行为的一致性的方法 | |
US7523448B2 (en) | Optimizing compiler | |
JP2003202991A (ja) | プログラム処理装置及びプログラム処理方法、記憶媒体、並びにコンピュータ・プログラム | |
US7647368B2 (en) | Data processing apparatus and method for performing data processing operations on floating point data elements | |
Haaß et al. | Automatic custom instruction identification in memory streaming algorithms | |
CN1321276A (zh) | 可配置的硬件块 | |
Stitt et al. | Techniques for synthesizing binaries to an advanced register/memory structure | |
Kuang et al. | Dynamic pipeline design of an adaptive binary arithmetic coder | |
CN1300675C (zh) | 在寄存器中使用硬件辅助功能处理多个任意规模数据元素的系统和方法 | |
Saptono et al. | Design space exploration for a custom vliw architecture: Direct photo printer hardware setting using vex compiler | |
CN113448586A (zh) | 自动编译器数据流优化的集成 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20060524 Termination date: 20110926 |