CN100414493C - 用于并行数据转换的方法、设备及指令 - Google Patents

用于并行数据转换的方法、设备及指令 Download PDF

Info

Publication number
CN100414493C
CN100414493C CNB200480025519XA CN200480025519A CN100414493C CN 100414493 C CN100414493 C CN 100414493C CN B200480025519X A CNB200480025519X A CN B200480025519XA CN 200480025519 A CN200480025519 A CN 200480025519A CN 100414493 C CN100414493 C CN 100414493C
Authority
CN
China
Prior art keywords
register
group
value
format
floating
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.)
Active
Application number
CNB200480025519XA
Other languages
English (en)
Other versions
CN1846193A (zh
Inventor
G·拉马努亚姆
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.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN1846193A publication Critical patent/CN1846193A/zh
Application granted granted Critical
Publication of CN100414493C publication Critical patent/CN100414493C/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding
    • G06F9/384Register renaming
    • 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/82Architectures of general purpose stored program computers data or demand driven
    • 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
    • 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/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/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/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30109Register structure having multiple operands in a single register
    • 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
    • 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/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

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

Abstract

执行转换的方法、设备及程序部件。在一个实施例中,所公开的设备包括对应于第一体系结构寄存器的目标存储单元。功能部件响应控制信号来操作,将从一组压缩第一格式值选择的第一压缩第一格式值转换为多个第二格式值。每个第一格式值具有多个包含第一位数的子元素。第二格式值具有更多的位数。功能部件将多个第二格式值存储到体系结构寄存器中。

Description

用于并行数据转换的方法、设备及指令
技术领域
[0001]本公开涉及处理设备和相关软件以及执行数学运算的软件序列的领域。
背景技术
[0002]提高计算机或其它处理系统的性能一般会提高整体吞吐量和/或提供更好的用户体验。一个所关注的领域是图像数据的处理。由于计算机和其它处理系统要处理更大量的视频或图像数据,加速此类处理的技术越来越重要。
[0003]视频数据可表示为像素的形式。像素的一个示例格式为红、绿、蓝(RGB)格式。用于表示像素的位数可根据特定系统而有所不同。例如,24位RGB表示法可能将八位专用于每个分量。RGBA格式是另一种流行的格式,其中包括“α”信息,即透明度指示符。α通道数字指定特定像素的透明度,范围从0(完全不透明)到255(完全透明)。也可以使用其它格式,如亮度(YUV)格式或任何其它已知或可用的格式。
[0004]像素的处理可能会用其像素(如整数)表示以外的格式进行。例如,要对像素值进行某些数学运算,可能需要先转换成浮点表示。各种高级语言(例如C、Java等)可能提供可用于将像素值从整数格式转换成另一种格式类型的指令。但是,这些高级语言会按其性质分解为本机指令序列,并在进行转换时可能不保证并行性或效率。
[0005]另一方面,可以编写以处理装置的本机语言编写的软件序列来进行此类像素的处理。但是,此类本机语言序列受限于处理装置的指令集。如果处理装置不提供有效地处理如像素值之类的值的指令,则可能难以构建高效的软件序列。某些先有技术处理器包含各种转换指令。例如,Intel Pentium
Figure C20048002551900081
4处理器包含诸如“IA-32IntelArchitecture Software Developer′s Manual:Vo1.2:Instruction SetReference”(文档编号2454761)中详细介绍的指令之类的转换指令。但是,在某些情况下以及对于某些应用,比如图像数据的转换和处理,其它转换可能很有用。
发明内容
本发明提供了一种能够将数据在不同数据格式之间进行转换的技术。根据本发明的一个方面,提供了一种设备,所述设备包括:对应于第一体系结构寄存器的目标存储位置;功能部件,响应控制信号,将从第一组多个经过压缩的第一格式值中选择的第一个经过压缩的第一格式值转换为第一组多个第二格式值,所述第一个经过压缩的第一格式值具有多个各自具有第一位数的子元素,所述第一组多个第二格式值中的每一个是以第二格式表示的数字,并且具有大于所述第一位数的第二位数,所述功能部件将所述第一组多个第二格式值全部存储到所述第一体系结构寄存器中。
根据本发明的另一个方面,提供了一种设备,所述设备包括:接收第一指令并将所述第一指令解码为控制信号的解码器;连接到解码器以接收控制信号的功能部件,所述功能部件响应地将具有第一位数的第一浮点格式的第一组多个浮点值转换为包含多个各自具有少于第一位数的第二位数的子元素的第一整数值,并将所述第一整数值存储到第一寄存器中的第一位置,第一寄存器能够将多个整数值存储在多个可单独访问的位置。
根据本发明的又一个方面,提供了一种方法,所述方法包括:取第一指令,它从经过压缩的数据的多个第一格式值当中指定一个第一格式值的位置,所述第一格式值具有多个子元素,每个子元素具有第一位数;将所述第一格式值转换为第一组多个第二格式值,所述第一组多个第二格式值中的每一个具有第二格式并且对应于多个子元素之一,所述第二格式具有所述第一位数的倍数;将所述第一组多个第二格式值存储到第一寄存器中。
根据本发明的再一个方面,提供了一种系统,所述系统包括:存储器,存储第一指令和操作第二格式的图像数据的图像处理序列;连接到存储器的处理器,根据第一指令,通过将多个经过压缩的整数数据值之一转换为第二格式的第一组多个值来处理包含多个经过压缩的整数数据值的第一操作数,并将所述第二格式的第一组多个值存储到对应于体系结构寄存器的寄存器中,所述第二格式的第一组多个值作为图像的一部分由所述图像处理序列进行处理;连接到处理器的图形接口,从所述处理器接收表示图像的图形数据;显示所述图像的显示器。
附图说明
[0006]在附图的各图中通过举例而不是限制的方式来说明本发明。
[0007]图1说明具有转换功能的处理器的一个实施例。
[0008]图2a说明根据一个实施例的处理设备的更多细节。
[0009]图2b说明可以根据一个实施例进行转换的功能部件的详细信息。
[0010]图2c说明根据一个实施例的指令格式。
[0011]图2d说明根据一个实施例的处理设备。
[0012]图2e说明根据一个实施例的浮点格式。
[0013]图3a说明根据第一整数类型到浮点转换指令的一个实施例进行的转换。
[0014]图3b说明根据第一整数类型到浮点转换指令的另一个实施例进行的转换。
[0015]图4a说明根据浮点到第一整数类型转换指令的一个实施例进行的转换。
[0016]图4b说明根据一个实施例、根据浮点到第一整数类型转换指令的另一个实施例进行的转换。
[0017]图5说明根据第二整数类型到浮点转换指令的一个实施例进行的转换。
[0018]图6说明根据浮点到第二整数类型转换指令的一个实施例进行的转换。
[0019]图7a说明根据备选的转换到浮点指令的一个实施例进行的转换。
[0020]图7b说明根据备选的从浮点转换指令的一个实施例进行的转换。
[0021]图8a说明根据另一个备选的转换到浮点指令的一个实施例进行的转换。
[0022]图8b说明根据另一个备选的从浮点转换指令的一个实施例进行的转换。
[0023]图9说明可以利用各种公开的转换指令的系统的一个实施例。
[0024]图10说明根据一个实施例利用各种公开的转换指令的序列。
具体实施方式
[0025]以下说明描述用于并行数据转换的技术的实施例。在以下说明中,提出了诸如处理器类型、数据类型、数据格式、寄存器类型、寄存器配置、系统配置等许多特定细节,以便更透彻地了解本发明。但是,本领域的技术人员将会知道,本发明可在没有此类特定细节的情况下实施。此外,某些熟知的结构、电路等未详细说明,以免不必要地影响对本发明的理解。
[0026]本公开详细说明在某些环境中可能对某些数据类型有利的各种转换和处理技术。例如,在某些情况下,图像处理、尤其是像素处理可以使用所公开的技术来加速。在某些此类情况下,可以使用整数到浮点的转换。在其它情况下,所公开的转换技术可用于从不同的第一格式(除整数之外)转换为第二格式(除浮点之外),反之亦然。例如,冗余数字格式或不同的科学、数学或其它编码形式可用作源或目标格式。此外,预计所公开的转换技术还可适用于各种各样的信号处理情况和/或许多不同的处理环境。
[0027]图1说明处理器100的一个实施例,它执行从第一格式(F1)到第二格式(F2)的转换,反之亦然。处理器可以是执行指令的各种不同类型的处理器中任一种。例如,处理器可以是通用处理器,如Pentium
Figure C20048002551900111
处理器系列或Itanium
Figure C20048002551900112
处理器系列或Intel公司的其它处理器系列中的处理器或来自其它公司的其它处理器。因此,处理器可以是精简指令集计算(RISC)处理器、复杂指令集计算(CISC)处理器、超长指令字(VLIW)处理器、或者任何混合或备选的处理器类型。此外,专用处理器,诸如网络或通信处理器、协处理器、嵌入式处理器、压缩引擎、图形处理器等,可以使用所公开的技术。
[0028]在图1的实施例中,第一寄存器120和第二寄存器125作为寄存器文件122的一部分提供。在不使用寄存器重命名技术的实施例中,单个物理寄存器可以对应于或有效地用作体系结构寄存器。在使用寄存器重命名技术的实施例中,通常不同的物理寄存器可在不同时间点保存体系结构寄存器的值。因此,一组重命名的寄存器中的各种物理寄存器可以在不同时间对应于体系结构寄存器,并通过寄存器重命名电路跟踪对应关系。
[0029]在某些实施例中,第一寄存器120和第二寄存器可以是单个寄存器集的组成部分。寄存器集或寄存器组是由指令集以相似方式访问的多个寄存器(可以是或不是重命名的)。例如,寄存器集中的第一寄存器(r0)和最后一个寄存器(r15)可以通过只在操作数说明符中更改寄存器编号来以同样方式寻址。在Intel公司的某些微处理器产品(例如IA-32微处理器)中,寄存器集包括整数寄存器(例如EAX、EBX等)、MMX寄存器(mm1、mm2等)、XMM寄存器(xmm1、xmm2等)以及浮点寄存器。
[0030]寄存器集可适用于存储经过压缩的数据。经过压缩的数据是包含至少两个子元素的数据元素。通过允许访问寄存器的一个或各个子元素,寄存器集可适用于存储经过压缩的数据元素。在不同的时间,寄存器集中的特定寄存器可以保存不同大小的经过压缩的数据元素,不同的各个大小的所有经过压缩的元素可以或不可以全部分别被访问。在图1的实例中,示出寄存器集122存储四个经过压缩的数据元素,每个消耗寄存器的总位数的四分之一。
[0031]图1的实施例还包括响应控制信号进行操作的功能部件130。如以下进一步论述的,控制信号可以是包含多个位或信号行的复合信号和/或可以是微操作或其它来自诸如解码器、转换器、译码器等电路的输出。如图所示,功能部件130可接收以箭头135表示的控制信号。对控制信号135作出响应,功能部件可以访问寄存器125的四个经过压缩的数据元素之一。要访问的特定数据元素之一可以由控制信号的一部分指定。在所示的实例中,元素B被访问并被路由到功能部件130,如箭头135’所示。在某些实施例中,源元素B也可以从存储位置中检索。
[0032]功能部件将值B从第一格式(F1)转换为第二格式(F2)的多个值。然后,这多个值存储在第二寄存器120中,如箭头135″所示。多个值中的每一个可对应于以不同格式表示的B的子元素(例如B1、B2、B3和B4)。在一些实施例中,来自寄存器125的值B可以具有仅以位位置(例如位位置1到N是子元素1,位位置N+1到2N是子元素2,等等)描绘的子元素。在另一些实施例中,整个数字到以数学方法从总数得出的四个不同分量的特定转换是可能的。
[0033]在各种应用中,将第一格式的较小子元素的集合分解为更扩展或更详细格式的同样数量的元素可能是有利的。例如,像素数据可能包含多个分量,但像素通常可作为一个单位来处理或移动。因此,寄存器125中的元素A、B、C和D可以是单独的像素。处理这些像素的子元素可能是有利的。因此,根据所公开的技术的转换操作可用于提取像素子元素(分量)信息以便在另一种格式中进一步处理。在某些情况下,响应单个控制信号进行像素的所有各个子元素的转换可以大大加速像素处理序列。
[0034]同样,在第二格式中处理之后将数据、如像素数据转换回紧凑格式可能是有利的。同样地,功能部件130可以进行这样的转换以响应以箭头140表示的第二控制信号。响应第二控制信号,功能部件130从寄存器120提取第二格式的值B的四个分量(箭头140’),将这四个分量转换为第一格式,并将组合值(B)存储在寄存器125中,如箭头140”所示。在这种情况下,来自多个经过压缩的数据元素中每一个的较大位组被缩小成较小组(较少位数)并存储在可以保存经过压缩的数据的多个元素的寄存器的一个位置。
[0035]图2a说明根据一个实施例的处理器200的更详细视图。图2a还说明连接到处理器200的存储器270。存储器270可以是本领域的技术人员所知或可用的各种各样存储器中任一种(包括存储器分层结构中的各个层)。处理器200按照包括至少一个转换指令的程序序列。转换指令进入前端部分210并由一个或多个解码器220处理。解码器可以产生微操作、如预定格式的固定宽度的微操作,作为其输出,或者可产生其它反映原始转换指令的指令、微指令或控制信号。前端210还包括寄存器重命名逻辑225以及通常分配资源和把对应于转换指令的操作排队以供执行的调度逻辑230。
[0036]处理器200被表示为包括具有一组执行部件255-1到255-N的执行逻辑250。一些实施例可能包括专用于特定功能或功能组的多个执行部件。另一些实施例可能只包括一个执行部件或一个可执行特定功能的执行部件。执行逻辑执行由转换指令指定的操作,如以下参照图2b的进一步论述。
[0037]一旦指定的操作的执行完成,后端逻辑260使指令退役。在一个实施例中,处理器200允许无序执行,但要求指令有序退役。退役逻辑265可以采取本领域的技术人员所知的各种形式(例如重排序缓冲器等)。
[0038]图2b说明执行部件262和寄存器文件268之间交互的更多细节。执行部件262包括算术逻辑单元(ALU)264以及饱和电路266。取决于转换,ALU可以根据收到的微操作或控制信号从整数转换为浮点或反之。此外,取决于操作,输入可以是带符号的或无符号的,且算术可以适当地调整。
[0039]在一个实施例中,有多个ALU部分可用于执行并行或同时转换。可以采用一个ALU运算较大操作数或并行运算多个较小操作数。在分派到处理器的单个时钟周期中时,转换被视为同时执行。例如,图1所示的四个转换可以一起分派到ALU逻辑以便快速产生结果。在其它实施例中,可能提供较少逻辑电路,相应地,通过顺序地执行少于整组转换的一个或多个迭代来再用逻辑。
[0040]转换结果可能是饱和的,例如在从浮点值转换到整数值的情况下。使用同样的位数,浮点值通常能够表示比整数格式更大的值范围。如果浮点表示具有比整数格式更多的位数,浮点值具有更多超出整数格式范围的可能性。因此,在从浮点转换为整数时,可能需要使值饱和,意味着,如果浮点值超出整数格式的范围,则使用整数范围的相应极值。例如,如果浮点数为超出整数格式范围的负数,则在饱和处理下使用最小负整数。同样,如果浮点数为大于根据整数格式可用的最大整数的正数,则使用最大整数。在备选实施例中,可以使用备选技术,例如绕回(忽略高阶位)或截断(去除低阶位)。
[0041]图2c说明处理器293的一个备选实现。在图2c的实施例中,第一模块295接收(和/或取得)第一指令集体系结构(ISA)、如CISCISA中的指令。然后,二进制译码部件297将指令从第一ISA转换为第二ISA。二进制译码部件297通常包含从一个ISA转换为另一个ISA的软件程序。二进制译码软件程序可在处理器上执行以将第一ISA指令转换为第二ISA。或者,可以使用硬件、固件或任何硬件、固件及软件结构的混合来提供译码层。然后,用于第二ISA 299的执行资源执行第二ISA中的指令。如果使用二进制译码程序,执行资源299可以是执行二进制译码软件程序的同样资源。
[0042]图2d说明可以配合所公开的转换指令使用的指令格式的一个实施例。此格式包括操作码、MOD R/M字节和立即操作数。MODR/M字节包括mod字段(位7:6)、寄存器/操作码字段(位5:3)和r/m字段(位2:0)。mod字段结合r/m字段以形成32个可能值,8个寄存器和24种寻址模式。寄存器/操作码字段指定寄存器编号或操作码信息的另三位。寄存器/操作码字段的用途在主操作码中指定。r/m字段可以将寄存器指定为操作数,或者可以结合mod字段来对寻址模式进行编码。因此,MOD r/m字段提供源和目标说明符。在源存储器操作数的情况下,除MOD r/m字段外,还指定额外的地址信息。当然,也可以使用其它指令格式,因为可能特别适合特定实现或应用或符合不同ISA,因而可以使用其它编码作为源和目标说明符。
[0043]图2e说明一个实施例使用的二进制浮点格式。此格式可以符合IEEE标准(例如,854-1987IEEE标准,用于“与基数无关的浮点算术”1987)。符号是指出数为正(0)或负(1)的二进制值。有效位有两个部分:1位二进制整数,亦称作J位;以及二进制小数。在其它实施例中,J位未明确表示,而是隐含值。指数是二进制整数,表示有效位增加到的底为2的幂。
[0044]图3a说明根据转换指令的一个实施例进行的转换。在此实例中,每个箭头表示一个整数到浮点的转换。因此,在此实例中,第二个经过压缩的数据元素(B1G1R1A1)的每个子元素B1、G1、R1、A1转换为浮点数,每个浮点数占用与整个整数元素相同的位数。源寄存器310中第二个经过压缩的数据元素的四个子元素按照四个子元素在寄存器310中的位置所定义的顺序被转换并存储在目标寄存器320中作为四个经过压缩的数据元素。
[0045]数据子元素的RGB&A标签表明数据可以是像素的红、绿、蓝以及α分量的整数表示。在一个实施例中,专用于各RGBA分量的一个字节转换为32位浮点表示(可称作“单精度”浮点表示)。因此,RBGA 32位数据的四个8位字节可以转换为四个32位浮点数。
[0046]一般来讲,根据这样的指令,具有M个元素的经过压缩的数据的单个元素的M个子元素被转换,扩展并存储为经过压缩的数据的目标存储位置的M个元素,其中每个元素具有子元素的位数的2的幂倍。例如,每个元素可具有N位,子元素可具有N/M位,其中M为2的幂(即M=2K,其中K为正整数值)。本领域的技术人员显然知道,这些元素的宽度可以按比例增加。例如,每个子元素可以是16或32位,因此像素可以分别包含64或128位。相应的浮点数可以扩展到256或512位寄存器中,或不同位数(如果在浮点表示中使用了不同位数)。此外,关于以下更多实施例,显然,经过压缩的数据元素和子元素的数量不需要相同。
[0047]在图3a所示的实施例中,第二个经过压缩的数据元素(B1G1R1A1)被转换。通过提供立即操作数给转换指令,可以选择第二元素用于转换。立即操作数可以对应该转换的经过压缩的数据的数据元素进行编码。在一些实施例中,也可以使用其它技术、例如通过在另一个存储位置(例如另一个寄存器)中设置值来指定位置。或者,可以提供专用的转换指令,使操作码直接对要转换的数个经过压缩的数据元素之一进行编码。
[0048]例如,图3b的实施例说明类似于图3a的转换,其中来自第一寄存器330的一个元素的RGBA数据被转换并存储到第二寄存器340的四个元素中,不同之处是经过压缩的数据的第一元素被转换。这可以通过具有自动转换源寄存器中的第一元素的专门指令来完成。另外三个专门指令可用于转换经过压缩的数据的其余三个元素。但是,另一个方法是使用移位指令将数据移到第一位置,然后可以再次使用自动转换源寄存器中的第一元素的专门指令来转换每个后续元素。这种移位和转换方法有利地使用更少操作码并避免使用立即数,但通过使用额外的移位指令扩展代码。
[0049]图4a说明根据另一个转换指令的一个实施例进行的转换。在此实例中,每个箭头表示一个浮点到整数的转换。来自第一寄存器410的四个分量B1、G1、R1、A1的每一个从浮点格式转换为整数格式并存储在第二寄存器420中作为一个元素的子元素。在这种情况下,寄存器420中的第二元素是子元素的目标。经过压缩的数据的哪个元素成为四个子元素的目标可再次由指令提供的立即操作数来选择,或者如上所述由指令本身或其它间接方式建立。四个子元素在目标寄存器420的所选元素中的顺序由数据元素在源寄存器410中的位置决定。如上所述,RGBA数据只是说明可以根据此类指令处理的数据的一种类型和格式,可以使用数据的其它形式或其它类型。
[0050]图4b说明类似于图4a的实例,其中由来自第一寄存器430的多个浮点数组成的经过压缩的数据被转换为经过压缩的数据元素的多个整数子元素并存储到第二寄存器440的位置的子集中。但是,在图4b的情况下,寄存器440中的第一元素由指令填充。这可以是使用不同立即操作数的情况,或者可以是提供此类单个专用转换指令并依靠移位将数据移到其它经过压缩的数据元素位置的情况。
[0051]图5说明根据另一个转换指令的一个实施例进行的转换。图5的实施例类似于图4a的实施例,只是整数形式的数据元素精度更高。在此实例中,每个箭头表示一个浮点到整数的转换。因此,在图5的实施例中,浮点格式的RGBA分量从第一寄存器510读取,从浮点转换为整数,并存储在第二寄存器520中。同样,目标寄存器中的定位可以按以上所述来指定。
[0052]在图5的实施例中,目标中的每个RGBA像素消耗目标寄存器520的一半,因为每个单独的子元素具有浮点表示的位数的一半。例如,在一个实施例中,每个整数分量为16位,而每个浮点分量为具有32位的单精度浮点数。在另一个实施例中,每个整数分量可以是32位,而每个浮点值可以是64位(例如采用256位寄存器)。各种其它置换对本领域的技术人员是明显的。
[0053]图6说明根据另一个转换指令的一个实施例进行的转换。在此实例中,每个箭头表示一个整数到浮点的转换。来自第一寄存器610的一个元素的四个分量B1、G1、R1、A1中的每一个从浮点格式转换为整数格式,并存储在第二寄存器620中作为一个元素的子元素。在这种情况下,寄存器620中的第二元素是子元素的目标。经过压缩的数据的哪些元素成为四个子元素的目标可再次由指令提供的立即变量来选择,或者如上所述由指令本身或其它间接方式建立。四个子元素在目标寄存器620的所选元素中的顺序由数据元素在源寄存器610中的位置决定。
[0054]图6的实例类似于图3a的实例,只是整数形式的数据元素精度更高。因此,在单个寄存器中只存储两个像素,且两个像素之一可扩展为填充整个目标寄存器。在一个实施例中,每个整数分量为16位,而每个浮点分量为具有32位的单精度浮点数。在另一个实施例中,每个整数分量可以是32位,而每个浮点值可以是64位(例如采用256位寄存器)。各种其它置换对本领域的技术人员是明显的。
[0055]下表概述一个示例转换指令集。
示例指令
助记符 功能   源大小   源寄存器   目标大小   目标寄存器
CVTB2PS 将字节转换为经过压缩的单精度浮点值   4个8位整数   Xmm或m32   4个32位FP   Xmm
CVTUB2PS 将无符号字节转换为经过压缩的单精度浮点值   4个8位无符号整数   Xmm或m32   4个32位FP   Xmm
CVTW2PS 将字转换为经过压缩的单精度浮点值   4个16位整数   Xmm   4个32位SPFP   Xmm
CVTUW2PS 将无符号字转换为经过压缩的单精度浮点值   4个16位无符号整数   Xmm   4个32位SPFP   Xmm
CVTPS2PB 将经过压缩的单精度浮点值转换为字(使用饱和或不同的舍入模式版本)   4个32位SPFP   Xmm或m128   4个8位整数   Xmm
CVTPS2UPW 将经过压缩的单精度浮点值转换为无符号字(使用饱和或不同的舍入模式版本)   4个32位SPFP   Xmm   4个16位无符号整数   Xmm
[0056]将字节转换为经过压缩的单精度浮点的实例
[0057]CVT[U]B2PS xmm1,xmm2/m128,imm8
if {imm8==0)
{
    //convert xmm2 pixel 0′s r,g,b,a channels to SP FP
    DEST[31-0]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[7-0]);
    DEST[63-32]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[15-8]);
    DEST[95-64]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[23-16]);
    DEST[127-96]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[31-24]);
}
else if (imm8==1)
{
    //convert xmm2 pixel 1′s r,g,b,a channels to SP FP
    DEST[31-0]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[39-32]);
    DEST[63-32]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[47-40]);
    DEST[95-64]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[55-48]);
    DEST[127-96]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[63-56]);
}
else if (imm8==2)
{
    //convert xmm2 pixel 2′s r,g,b,a channels to SP FP
    DEST[31-0]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[71-64]);
    DEST[63-32]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[79-72]);
    DEST[95-64]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[87-80]);
    DEST[127-96]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[95-88]);
}
else if (imm8==3)
{
    //convert xmm2 pixel 3′s r,g,b,a channels to SP FP
    DEST[31-0]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[103-96]);
    DEST[63-32]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[111-104]);
    DEST[95-64]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[119-112]);
    DEST[127-96]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[127-120]);
}
[0058]将字转换为经过压缩的单精度浮点的实例
[0059]CVT[U]W2PS xmm1,xmm2/m128,imm8
if (imm8==0)
{
    //convert xmm2 pixel 0′s r,g,b,a channels to SP FP
    DEST[31-0]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[15-0]);
    DEST[63-32]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[31-16]);
    DEST[95-64]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[47-32]);
    DEST[127-96]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[63-48]);
}
else if (imm8==1)
{
    //convert xmm2pixel 1′s r,g,b,a channels to SP FP
    DEST[31-0]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[79-64]);
    DEST[63-32]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[95-80]);
    DEST[95-64]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[111-96]);
    DEST[127-96]=Convert_Integer_To_Single_Precision_Floating_Point(SRC[127-112]);
}
[0060]CVTPS2[U]PB xmm1/m128,xmm2,imm8
if (imm8==0)
{
   //convert xmm2 pixel 0′s r,g,b,a channels to SP FP
   DEST[7-0]=Convert_Single_Precision_Floating_Point_To_Integer (SRC[31-0]);
   DEST[15-8]=Convert_Single_Precision_Floating_Point_To_Integer SRC[63-32]);
   DEST[23-16]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[95-64]);
   DEST[31-24]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[127-96]);
}
else if (imm8==1)
{
   //convert xmm2 pixel 1′s r,g,b,a channels to SP FP
   DEST[39-32]=Convert_Single_Precision_Floating_Point_To_Integer (SRC[31-0]);
   DEST[47-40]=Convert_Single_Precision_Floating_Point_To_Integer SRC[63-32]);
   DEST[55-48]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[95-64]);
   DEST[63-56]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[127-96]);
}
else if (imm8==2)
{
   //convert xmm2 pixel 2′s r,g,b,a channels to SP FP
   DEST[71-64]=Convert_Single_Precision_Floating_Point_To_Integer (SRC[31-0]);
   DEST[79-72]=Convert_Single_Precision_Floating_Point_To_Integer SRC[63-32]);
   DEST[87-80]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[95-64]);
   DEST[95-88]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[127-96]);
}
else if (imm8==3)
{
   //convert xmm2 pixel 3′s r,g,b,a channels to SP FP
   DEST[103-96]=Convert_Single_Precision_Floating_Point_To_Integer (SRC[31-0]);
   DEST[111-104]=Convert_Single_Precision_Floating_Point_To_Integer SRC[63-32]);
   DEST[119-112]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[95-64]);
   DEST[127-120]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[127-96]);
}
[0061]CVTPS2[U]PWxmm1/m128,xmm2,imm8
      if (imm8==0)
      {
         //convert xmm2 pixel 0′s r,g,b,a channels to SP FP
         DEST[15-0]=Convert_Single_Precision_Floating_Point_To_Integer (SRC[31-0]);
         DEST[31-16]=Convert_Single_Precision_Floating_Point_To_Integer SRC[63-32]);
         DEST[47-32]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[95-64]);
         DEST[63-48]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[127-96]);
      }
      else if (imm8==1)
      {
         //convert xmm2 pixel 1′s r,g,b,a channels to SP FP
         DEST[79-64]=Convert_Single_Precision_Floating_Point_To_Integer (SRC[31-0]);
         DEST[95-80]=Convert_Single_Precision_Floating_Point_To_Integer SRC[63-32]);
         DEST[111-96]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[95-64]);
         DEST[127-112]=Convert_Single_Precision_Floating_Point_To_Integer(SRC[127-96]);
      }
[0062]图7a说明为单个指令添加进一步功能性的一个备选转换指令。在通常使用单元素转换指令的多个示例对整个寄存器的SIMD值来回转换时,这样的实施例对进一步缩减代码大小可能有用。在图7a的实施例中,存储在第一寄存器710中的四个值(例如像素值)被转换并存储在四个分开的寄存器720、725、730和735中。虽然在此实例中这些转换响应单个指令(例如宏指令)而进行,但是在一些情况下可能没有足够的并行硬件可用以并行执行转换。因此,可能产生多个微操作以响应这样的宏指令,而且可能依次使用转换硬件以执行16个转换。
[0063]在图7a的实施例中,每个箭头表示一个整数到浮点的转换。这样,源寄存器710中整数格式的第一数据元素(B0G0R0A0)被转换为目标寄存器735中的四个浮点值。元素的排序也按照源子元素。此外,可以按照以上所述使用各种大小的元素和子元素。同样,源寄存器710中整数格式的第二数据元素(B1G1R1A1)被转换为目标寄存器730中的四个浮点值,源寄存器710中整数格式的第三数据元素(B2G2R2A2)被转换为目标寄存器725中的四个浮点值,并且源寄存器710中整数格式的第四数据元素(B3G3R3A3)被转换为目标寄存器720中的四个浮点值。
[0064]图7b说明与图7a相反的情况,其中包含浮点值的四个寄存器被压缩为包含整数值的单个寄存器。因此,在图7b的实施例中,每个箭头表示一个浮点到整数的转换。来自第一源寄存器750的四个分开的浮点值B0、G0、R0、A0被转换为整数格式并存储在目标寄存器770中的第一元素位置。同样,来自第二源寄存器755的四个分开的浮点值B1、G1、R1、A1被转换为整数格式并存储在目标寄存器770的第二元素位置,来自第三源寄存器760的四个分开的浮点值B2、G2、R2、A2被转换为整数格式并存储在目标寄存器770的第三元素位置,并且来自第四源寄存器765的四个分开的浮点值B3、G3、R3、A3被转换为整数格式并存储在目标寄存器770的第四元素位置。
[0065]图8a说明类似于图7a的另一个转换指令的操作,只是整数元素与浮点元素成比例地比图7a中的更大。为了清楚说明,图8a中的每个箭头表示一个整数到浮点的转换。以整数格式存储在源寄存器810中的经过压缩的数据的第一元素(B0G0R0A0)被转换为浮点值并存储在第一目标寄存器830中。以整数格式存储在源寄存器810中的经过压缩的数据的第二元素(B1G1R1A1)被转换为浮点值并存储在第二目标寄存器820中。在此实施例中,两个转换都响应单个指令来完成,并且在相应目标寄存器中元素的排序按照源子元素的排序。
[0066]图8b说明类似于图7b的另一个转换指令的操作,只是整数元素与浮点元素成比例地比图7b中的更大。图8b中的每个箭头表示浮点到整数的转换。来自第一源寄存器860的四个分开的浮点值B0、G0、R0、A0被转换为整数格式并存储在目标寄存器870中的第一元素位置。同样,来自第二源寄存器850的四个分开的浮点值B1、G1、R1、A1被转换为整数格式并存储在目标寄存器870中的第二元素位置。在此实施例中,两个转换都响应单个指令来完成,并且在目标寄存器中子元素的排序按照源元素的排序。
[0067]在以上许多实例中,源和目标存储位置有相同的大小。实际上,源和目标可以都是单个体系结构寄存器(例如Intel的Pentium
Figure C20048002551900231
处理器之类的处理器中的xmm寄存器)组中的寄存器。但是,在其它实施例中,源和目标寄存器不一定有同样的大小或在同一寄存器组中。在某些情况下,使用具有比整数寄存器组更多的位数的浮点寄存器组可能是有利的。
[0068]图9说明使用所公开的转换技术的系统的一个实施例。在此实施例中,处理器900连接到存储控制器990。存储控制器可以是与处理器900结合的组件,或者在不同实施例中可以是分立组件。存储控制器990通过总线992连接至主存储器994。总线可以是任何通信总线,包括但不限于任何一个或多个并行信号传送总线、串行总线、多点总线、点到点总线等。主存储器包括第一转换序列995、像素处理序列996、第二转换序列997以及显示序列998。
[0069]处理器900包括前端逻辑910、带有多个ALU电路925-1到925-N的执行逻辑920以及后端逻辑930。处理器900执行从存储器提取的指令序列,诸如第一转换序列995、像素处理序列996、第二转换序列997以及显示序列998。该系统还包括通信/网络接口950。接口950在操作上连接到处理器900,这样处理器可以发送命令到接口950并通过网络(可以是有线或无线网络)或通信媒体收发数据。该接口可以接收任何一个或多个电子格式的软件序列组。在软件序列的任何表示中,指令可以以机器可读介质的任何形式存储或发送。机器可读介质可以是经调制或以其它方式产生以发送此类信息的光或电波、存储器、磁或光存储装置、如盘。这些介质中的任一种均可存储或携带指令信息。
[0070]该系统还包括具有帧缓冲器957和显示部件960的图形接口955。图形接口955在操作上连接到处理器(可以是涉及此连接的一个或多个接口或桥接组件),这样处理器可以发送命令和数据到图形接口955。在一些实施例中,图像数据可以写入帧缓冲器957以通过显示器960显示数据。
[0071]图9的系统的进一步操作可以参照图10的流程图来理解。如框1010所示,一组像素(例如N个像素)从SIMD整数格式转换为SIMD浮点格式。在图9的实施例中,此转换可通过处理器900执行第一转换序列995完成。第一转换序列可包括N个转换指令,如图3a、3b和6所示,或者可包括单个转换指令,如图7a或8a所示。转换指令将转换的结果值存储到体系结构寄存器中,如框1020所示。例如,在类似于图3a和3b所示的实施例的实施例中,四个转换指令可用于转换单个寄存器中的四个经过压缩的数据元素。
[0072]在某些情况下,已转换的值可以直接在转换后在适当的位置被操作。可选地,现在浮点格式的已转换像素值可以移动,如框1030所示。像素可以移动到其它存储位置进行处理或在处理之前临时存储。在执行所有N个转换之前,某些目标值可以在转换过程中被移动,以限制在N个像素转换过程中所用的寄存器数量。
[0073]如框1040所示,浮点操作可以在像素值上进行。本领域的技术人员知道各种各样不同的像素处理技术。适当的例程取决于所需效果,这对本领域的技术人员是明显的。但是,使用所公开的技术可以更有效地完成到和自浮点的转换过程。
[0074]一旦完成所需的处理,则结果浮点值可以被反向转换。如框1050所示,N个像素从其SIMD浮点格式转换回到SIMD整数格式,以响应一个或多个转换指令。类似于第一转换例程,第二转换例程497可以通过N个指令的序列(例如图4a、4b、5的实施例)或通过单个指令(例如图7b、8b的实施例)完成此反向转换。
[0075]最后,像素可以显示,如框1060所示。显示序列998可以包括将像素数据移至帧缓冲器957的指令,或者可以包括显示用于特定系统的像素的其它适当指令。
[0076]一个示例的使用所公开的转换指令优化的指令序列如下表2所示。从此例中可以容易理解,新的转换指令可为某些序列实现短得多的并在某些情况下更快速执行的代码。
表2:示例指令序列改进
  旧序列   新序列
  _asm{   _asm{
  pxor xmm0,xmm0//ZEROI   //
  movdqu xmm7,SRC   movdqu xmm7,SRC
  movdqa xmm6,xmm7   //
  Punpcklbw xmm7,xmm0//P   //
  Punpckhbw xmm6,xmm0//Q   //
  movdqa xmm5,xmm7   //
  movdqa xmm4,xmm6   //
  Punpcklwd xmm7,xmm0//P0   //
  Punpckhwd xmm5,xmm0//P1   //
  Punpcklwd xmm6,xmm0//P2   //
  Punpckhwd xmm4,xmm0//P3   //
  cvtdq2ps xmm3,xmm7//F0   cvtb2ps xmm3,xmm7,0//F0
  cvtdq2ps xmm2,xmm5//F1   cvtb2ps xmm2,xmm5,1//F1
  cvtdq2ps xmm1,xmm6//F2   cvtb2ps xmm 1,xmm7,2//F2
  movdqa F0,xmm3   movdqa F0,xmm3
  movdqa F1,xmm2   movdqa F1,xmm2
  cvtdq2ps xmm3,xmm4//F3   cvtb2ps xmm3,xmm7,3//F3
  movdqa F2,xmm1   movdqa F2,xmm1
  movdqa F3,xmm3   movdqa F3,xmm3
  }   }
[0077]处理器设计可能要经过各种阶段,从创建到模拟到制造。表示设计的数据可以用多种方式表示设计。首先,硬件可以使用硬件描述语言或另一种功能描述语言表示,这对模拟有用。此外,在设计过程的某些阶段可以制作带有逻辑和/或晶体管门电路的电路层模型。而且,大多数设计在某个阶段会达到数据表示各种装置在硬件模型中的物理布置的水平。在使用传统半导体制造工艺的情况下,表示硬件模型的数据可以是为用于制造集成电路的掩模指定在不同掩模层是否存在各种特征件的数据。在设计的任何表示中,数据可以存储在任何形式的机器可读介质中。机器可读介质可以是经调制或以其它方式产生以传送此类信息的光或电波、存储器、磁或光存储装置、如盘。这些介质中任一种均可“携带”或“指明”设计或软件信息。在传送指明或携带代码或设计的电子载波时,在执行电信号的复制、缓冲或重传的情况中,会制作新的拷贝。因此,通信提供商或网络提供商可以制作体现本发明的技术的物品(载波)的拷贝。
[0001]这样,公开了用于并行数据转换的技术。虽然已经在附图中描述和显示某些示范实施例,但是应该理解,这些实施例对广义发明只是说明性而不是限制性的,并且本发明不限于所显示和描述的特定结构和配置,因为本领域的技术人员可以通过研究本公开想到各种其他修改。在类似这样的发展迅速且难以预见进一步改进的技术领域中,所公开的实施例可以通过允许技术改进来方便地在配置和细节上进行修改,而不背离本公开的原理或所附权利要求的范围。

Claims (31)

1. 一种设备,包括:
对应于第一体系结构寄存器的目标存储位置;
功能部件,响应控制信号,将从第一组多个经过压缩的第一格式值中选择的第一个经过压缩的第一格式值转换为第一组多个第二格式值,所述第一个经过压缩的第一格式值具有多个各自具有第一位数的子元素,所述第一组多个第二格式值中的每一个是以第二格式表示的数字,并且具有大于所述第一位数的第二位数,所述功能部件将所述第一组多个第二格式值全部存储到所述第一体系结构寄存器中。
2. 如权利要求1所述的设备,其特征在于,所述第二位数是所述第一位数的2的幂倍。
3. 如权利要求2所述的设备,其特征在于,源说明符指定第二体系结构寄存器或存储器位置作为源存储位置,而目标说明符指定第一体系结构寄存器作为目标存储位置。
4. 如权利要求3所述的设备,其特征在于,所述第一格式是整数格式,而所述第二格式是浮点格式。
5. 如权利要求4所述的设备,其特征在于,还包括:
接收单个转换指令的解码器,所述解码器产生所述控制信号以响应单个转换指令。
6. 如权利要求1所述的设备,其特征在于,所述功能部件选择所述第一组多个经过压缩的第一格式值之一以根据立即操作数值来转换。
7. 如权利要求5所述的设备,其特征在于,所述单个转换指令的操作码部分指定要转换所述第一组多个经过压缩的第一格式值中的哪一个。
8. 如权利要求5所述的设备,其特征在于,所述控制信号包含由解码器响应单个转换指令而产生的微操作。
9. 如权利要求5所述的设备,其特征在于,还包括寄存器重命名电路,其中所述源存储位置和所述目标存储位置是物理寄存器,每个具有与体系结构寄存器的对应关系,所述对应关系通过寄存器重命名电路来跟踪。
10. 如权利要求9所述的设备,其特征在于,所述单个转换指令包含操作码和操作数说明符,其中操作数说明符是MOD R/M格式的。
11. 如权利要求9所述的设备,其特征在于,所述第一组多个经过压缩的第一格式值是N位整数值,而且所述第一个经过压缩的第一格式值是N位整数值,所述多个子元素是M个子元素,而且M个子元素中的每一个具有N/M位,而且所述第一组多个第二格式值中的每一个是N位浮点结果。
12. 如权利要求1所述的设备,其特征在于,还包括第二目标存储位置,其中所述功能部件还响应第二控制信号,将具有第二位数的第二组多个第二格式值转换为第二个第一格式值,并将所述第二个第一格式值存储到所述第二目标存储位置中的多个经过压缩的第一格式值位置之一中,其中所述第二个第一格式值包含第一格式的所述第二组多个第二格式值的饱和表示。
13. 如权利要求3所述的设备,其特征在于,所述第一体系结构寄存器和所述第二体系结构寄存器是第一组体系结构寄存器的组成部分,第一组体系结构寄存器具有第一容量。
14. 如权利要求12所述的设备,其特征在于,所述第一体系结构寄存器和所述第二目标存储位置是一组xmm寄存器中的寄存器。
15. 一种设备,包括:
接收第一指令并将所述第一指令解码为控制信号的解码器;
连接到解码器以接收控制信号的功能部件,所述功能部件响应地将具有第一位数的第一浮点格式的第一组多个浮点值转换为包含多个各自具有少于第一位数的第二位数的子元素的第一整数值,并将所述第一整数值存储到第一寄存器中的第一位置,第一寄存器能够将多个整数值存储在多个可单独访问的位置。
16. 如权利要求15所述的设备,其特征在于,所述第一指令包含操作码、第一操作数说明符、立即操作数以及第二操作数说明符,其中第一操作数说明符指定功能部件要从中检索所述第一组多个浮点数的源,第二操作数说明符从多个寄存器中指定第一寄存器,而立即操作数指定存储所述第一整数值的第一寄存器中的多个位置之一。
17. 如权利要求16所述的设备,其特征在于,所述解码器对第二指令进行解码并响应地产生第二信号,而且所述功能部件响应所述第二信号,将第二整数值转换为第一浮点格式的第二组多个浮点值,并将所述第二组多个浮点值存储到第二寄存器中。
18. 如权利要求17所述的设备,其特征在于,所述第一寄存器和所述第二寄存器是第一组体系结构寄存器的组成部分,而且所述多个子元素包含所述第一组多个浮点值的饱和表示。
19. 如权利要求18所述的设备,其特征在于,第二立即操作数指定从中检索所述第二整数值的寄存器内的第二组多个位置中的一个位置。
20. 一种方法,包括:
取第一指令,它从经过压缩的数据的多个第一格式值当中指定一个第一格式值的位置,所述第一格式值具有多个子元素,每个子元素具有第一位数;
将所述第一格式值转换为第一组多个第二格式值,所述第一组多个第二格式值中的每一个具有第二格式并且对应于所述多个子元素之一,所述第二格式具有所述第一位数的倍数;
将所述第一组多个第二格式值存储到第一寄存器中。
21. 如权利要求20所述的方法,其特征在于,所述位置是第二寄存器,所述第一寄存器和所述第二寄存器是单个体系结构寄存器组中的寄存器。
22. 如权利要求21所述的方法,其特征在于,还包括:
取第二指令,它指定第二组多个第二格式值的第二位置;
将所述第二组多个第二格式值转换为第二个第一格式值;
将所述第二个第一格式值存储到第三寄存器中,其中所述第三寄存器也在所述单个体系结构寄存器组中。
23. 如权利要求22所述的方法,其特征在于,还包括:
指定所述多个第一格式值中哪一个要由立即操作数来转换;
使用第二立即操作数为所述第二个第一格式值指定经过压缩的数据的多个目标位置之一。
24. 如权利要求22所述的方法,其特征在于,所述第一格式是整数格式,而所述第二格式是浮点格式。
25. 如权利要求24所述的方法,其特征在于,还包括:
使所述第二组多个第二格式值中的每一个饱和,以产生所述第二个第一格式值的多个限定子元素。
26. 一种系统,包括:
存储器,存储第一指令和操作第二格式的图像数据的图像处理序列;
连接到存储器的处理器,根据第一指令,通过将多个经过压缩的整数数据值之一转换为第二格式的第一组多个值来处理包含多个经过压缩的整数数据值的第一操作数,并将所述第二格式的第一组多个值存储到对应于体系结构寄存器的寄存器中,所述第二格式的第一组多个值作为图像的一部分由所述图像处理序列进行处理;
连接到处理器的图形接口,从所述处理器接收表示图像的图形数据;
显示所述图像的显示器。
27. 如权利要求26所述的系统,其特征在于,所述第二格式的所述第一组多个值具有比所述多个经过压缩的整数数据值中所述的一个的位数更大的总位数。
28. 如权利要求26所述的系统,其特征在于,所述存储器存储第二指令,以使处理器将作为所述图像处理序列对所述第二格式的第一组多个值的处理结果的第二格式的第二组多个值转换为第二个整数数据值,并将所述第二个整数数据值存储到对应于第二体系结构寄存器的第二寄存器中,而且所述第二个整数数据值作为像素值被写入图形接口。
29. 如权利要求28所述的系统,其特征在于,所述第一指令是第一转换指令,所述多个经过压缩的整数数据值中的每一个具有多个子元素,每个子元素具有第一位数,所述第一组多个值中的每一个对应于所述多个子元素之一并且具有含有第一位数的倍数的第一浮点格式。
30. 如权利要求26所述的系统,其特征在于,所述第一指令指定多个经过压缩的整数数据值中的第一个,所述多个经过压缩的整数数据值包含N个整数数据值,存储器存储包括所述第一指令的N个转换指令,以将所述N个整数数据值转换为由N个多个浮点值组成的集合。
31. 如权利要求30所述的系统,其特征在于,所述图像处理序列操作所述由N个多个浮点值组成的集合以产生第二组N个多个浮点值作为图像的组成部分,而且所述存储器存储第二组多个N个转换指令以将所述第二组N个多个浮点值中的每一个转换回到压缩格式的整数数据值。
CNB200480025519XA 2003-09-08 2004-08-25 用于并行数据转换的方法、设备及指令 Active CN100414493C (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/658,612 US7899855B2 (en) 2003-09-08 2003-09-08 Method, apparatus and instructions for parallel data conversions
US10/658,612 2003-09-08

Publications (2)

Publication Number Publication Date
CN1846193A CN1846193A (zh) 2006-10-11
CN100414493C true CN100414493C (zh) 2008-08-27

Family

ID=34226810

Family Applications (1)

Application Number Title Priority Date Filing Date
CNB200480025519XA Active CN100414493C (zh) 2003-09-08 2004-08-25 用于并行数据转换的方法、设备及指令

Country Status (4)

Country Link
US (15) US7899855B2 (zh)
CN (1) CN100414493C (zh)
DE (1) DE112004001648T5 (zh)
WO (1) WO2005026944A2 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI760880B (zh) * 2020-10-07 2022-04-11 瑞昱半導體股份有限公司 與儲存裝置相關的傳輸控制電路、資料傳輸系統及操作資料傳輸系統的方法

Families Citing this family (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7899855B2 (en) 2003-09-08 2011-03-01 Intel Corporation Method, apparatus and instructions for parallel data conversions
JP2006154979A (ja) * 2004-11-25 2006-06-15 Sony Corp 浮動小数点数演算回路
CN100573443C (zh) * 2004-12-30 2009-12-23 英特尔公司 从混合源指令集架构到单一目标指令集架构的二进制代码转换中的多格式指令的格式选择
US7644115B2 (en) * 2005-01-07 2010-01-05 Sas Institute Inc. System and methods for large-radix computer processing
US7792814B2 (en) * 2005-09-30 2010-09-07 Sap, Ag Apparatus and method for parsing unstructured data
US8280936B2 (en) * 2006-12-29 2012-10-02 Intel Corporation Packed restricted floating point representation and logic for conversion to single precision float
US8744198B1 (en) * 2007-11-20 2014-06-03 Lucasfilm Entertainment Company Ltd. Image compression and decompression
US8281109B2 (en) 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
EP2360926A1 (en) * 2010-01-19 2011-08-24 Fraunhofer-Gesellschaft zur Förderung der Angewandten Forschung e.V. Image encoder and image decoder
JP5367020B2 (ja) * 2011-06-24 2013-12-11 株式会社ソニー・コンピュータエンタテインメント 情報処理装置、情報処理方法、プログラム及び情報記憶媒体
CN104081340B (zh) * 2011-12-23 2020-11-10 英特尔公司 用于数据类型的下转换的装置和方法
US9329861B2 (en) 2011-12-29 2016-05-03 International Business Machines Corporation Convert to zoned format from decimal floating point format
US9335993B2 (en) * 2011-12-29 2016-05-10 International Business Machines Corporation Convert from zoned format to decimal floating point format
EP2868097A4 (en) * 2012-06-28 2016-03-23 Ericsson Ab METHOD AND SYSTEM FOR ADVERTISING INSERTION IN OTT (OVER THE TOP) DISTRIBUTION OF LIVE MULTIMEDIA CONTENT
JP2015012305A (ja) * 2013-06-26 2015-01-19 ソニー株式会社 コンテンツ供給装置、コンテンツ供給方法、プログラム、端末装置、およびコンテンツ供給システム
US10228941B2 (en) * 2013-06-28 2019-03-12 Intel Corporation Processors, methods, and systems to access a set of registers as either a plurality of smaller registers or a combined larger register
US10061581B2 (en) * 2014-01-31 2018-08-28 Qualcomm Incorporated On-the-fly conversion during load/store operations in a vector processor
US9916130B2 (en) 2014-11-03 2018-03-13 Arm Limited Apparatus and method for vector processing
US20160283242A1 (en) * 2014-12-23 2016-09-29 Intel Corporation Apparatus and method for vector horizontal logical instruction
US10282109B1 (en) * 2016-09-15 2019-05-07 Altera Corporation Memory interface circuitry with distributed data reordering capabilities
US10489204B2 (en) 2017-01-31 2019-11-26 Samsung Electronics Co., Ltd. Flexible in-order and out-of-order resource allocation
US11140242B2 (en) 2017-12-15 2021-10-05 New Relic, Inc. System for processing coherent data
CN111078286B (zh) * 2018-10-19 2023-09-01 上海寒武纪信息科技有限公司 数据通信方法、计算系统和存储介质
CN112395004A (zh) * 2019-08-14 2021-02-23 上海寒武纪信息科技有限公司 运算方法、系统及相关产品
CN110837719A (zh) * 2019-11-15 2020-02-25 广州健飞通信有限公司 数据参考模块整合系统
CN114372009A (zh) * 2020-10-15 2022-04-19 瑞昱半导体股份有限公司 传输控制电路、数据传输系统及操作数据传输系统的方法
US20230350678A1 (en) * 2022-04-28 2023-11-02 Qualcomm Incorporated Instruction Set Architecture for Neural Network Quantization and Packing
EP4318224A1 (en) * 2022-08-03 2024-02-07 Intel Corporation Instructions to convert from fp16 to fp8

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5995122A (en) * 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format
US6247116B1 (en) * 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
US20010016902A1 (en) * 1998-04-30 2001-08-23 Abdallah Mohammad A.F. Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US6405306B2 (en) * 1997-11-29 2002-06-11 Ip First Llc Instruction set for bi-directional conversion and transfer of integer and floating point data

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5819101A (en) 1994-12-02 1998-10-06 Intel Corporation Method for packing a plurality of packed data elements in response to a pack instruction
CN100412786C (zh) 1994-12-02 2008-08-20 英特尔公司 可以对复合操作数进行压缩操作的微处理器
US5959636A (en) 1996-02-23 1999-09-28 Intel Corporation Method and apparatus for performing saturation instructions using saturation limit values
US5835782A (en) * 1996-03-04 1998-11-10 Intel Corporation Packed/add and packed subtract operations
US5793654A (en) 1996-09-30 1998-08-11 Intel Corporation Saturating alignment shifter
US6292815B1 (en) * 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6282554B1 (en) 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US6266769B1 (en) 1998-04-30 2001-07-24 Intel Corporation Conversion between packed floating point data and packed 32-bit integer data in different architectural registers
US7051060B2 (en) * 2001-09-28 2006-05-23 Intel Corporation Operand conversion optimization
US20050026944A1 (en) * 2003-07-24 2005-02-03 Patrick Betschmann Thienopyridine and furopyridine kinase inhibitors
US7899855B2 (en) 2003-09-08 2011-03-01 Intel Corporation Method, apparatus and instructions for parallel data conversions

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6405306B2 (en) * 1997-11-29 2002-06-11 Ip First Llc Instruction set for bi-directional conversion and transfer of integer and floating point data
US5995122A (en) * 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format
US6247116B1 (en) * 1998-04-30 2001-06-12 Intel Corporation Conversion from packed floating point data to packed 16-bit integer data in different architectural registers
US20010016902A1 (en) * 1998-04-30 2001-08-23 Abdallah Mohammad A.F. Conversion from packed floating point data to packed 8-bit integer data in different architectural registers

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI760880B (zh) * 2020-10-07 2022-04-11 瑞昱半導體股份有限公司 與儲存裝置相關的傳輸控制電路、資料傳輸系統及操作資料傳輸系統的方法

Also Published As

Publication number Publication date
US20130218936A1 (en) 2013-08-22
US20170109319A1 (en) 2017-04-20
US9952873B2 (en) 2018-04-24
US20050055389A1 (en) 2005-03-10
US20130080742A1 (en) 2013-03-28
CN1846193A (zh) 2006-10-11
US20130024664A1 (en) 2013-01-24
US20150301801A1 (en) 2015-10-22
WO2005026944A2 (en) 2005-03-24
US9852109B2 (en) 2017-12-26
US20110106867A1 (en) 2011-05-05
US9824062B2 (en) 2017-11-21
US9824063B2 (en) 2017-11-21
US9824061B2 (en) 2017-11-21
US20170109318A1 (en) 2017-04-20
US9026570B2 (en) 2015-05-05
US20170300335A1 (en) 2017-10-19
US20130024665A1 (en) 2013-01-24
US8533244B2 (en) 2013-09-10
US9032004B2 (en) 2015-05-12
DE112004001648T5 (de) 2006-07-13
US20170109320A1 (en) 2017-04-20
US20130238879A1 (en) 2013-09-12
US20160350111A1 (en) 2016-12-01
US9026569B2 (en) 2015-05-05
US20130326194A1 (en) 2013-12-05
US20170109321A1 (en) 2017-04-20
US9032003B2 (en) 2015-05-12
WO2005026944A3 (en) 2006-04-06
US9047081B2 (en) 2015-06-02
US9436433B2 (en) 2016-09-06
US9002914B2 (en) 2015-04-07
US7899855B2 (en) 2011-03-01
US9715384B2 (en) 2017-07-25

Similar Documents

Publication Publication Date Title
CN100414493C (zh) 用于并行数据转换的方法、设备及指令
CN100541422C (zh) 用于执行具有取整和移位的组合型高位乘法的方法和装置
CN113762490B (zh) 使用列折叠和挤压的稀疏矩阵的矩阵乘法加速
CN101620525B (zh) 混洗数据的方法和装置
CN110321525A (zh) 用于稀疏-密集矩阵乘法的加速器
CN104838357B (zh) 向量化方法、系统及处理器
TW201820125A (zh) 執行複數的熔合乘-加指令的系統與方法
CN117724766A (zh) 用于执行将矩阵变换为行交错格式的指令的系统和方法
CN105612509A (zh) 用于提供向量子字节解压缩功能性的方法、设备、指令和逻辑
CN101187861A (zh) 用于执行点积运算的指令和逻辑
CN104011662A (zh) 用于提供向量混合和置换功能的指令和逻辑
TWI514269B (zh) 用於大整數算術之向量指令的設備與方法
CN110321159A (zh) 用于实现链式区块操作的系统和方法
CN104137059A (zh) 多寄存器分散指令
CN110457067A (zh) 利用弹性浮点数的系统、方法和设备
CN104094221A (zh) 基于零的高效解压缩
CN104137061A (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