CN103793201B - 提供向量压缩和旋转功能的指令和逻辑 - Google Patents

提供向量压缩和旋转功能的指令和逻辑 Download PDF

Info

Publication number
CN103793201B
CN103793201B CN201310524909.2A CN201310524909A CN103793201B CN 103793201 B CN103793201 B CN 103793201B CN 201310524909 A CN201310524909 A CN 201310524909A CN 103793201 B CN103793201 B CN 103793201B
Authority
CN
China
Prior art keywords
vectorial
vector
value
units
instruction
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
Application number
CN201310524909.2A
Other languages
English (en)
Other versions
CN103793201A (zh
Inventor
T·乌利尔
E·乌尔德-艾哈迈德-瓦勒
R·瓦伦丁
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
Priority to CN201710568910.3A priority Critical patent/CN107729048B/zh
Publication of CN103793201A publication Critical patent/CN103793201A/zh
Application granted granted Critical
Publication of CN103793201B publication Critical patent/CN103793201B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/084Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • 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/30018Bit or string instructions
    • 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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
    • 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/30101Special purpose registers
    • 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/30112Register structure comprising data of variable length
    • 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/3012Organisation of register space, e.g. banked or distributed register file
    • G06F9/3013Organisation of register space, e.g. banked or distributed register file according to data content, e.g. floating-point registers, address registers
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • 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
    • 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
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • 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
    • G06F9/3888Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple threads [SIMT] in parallel
    • 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
    • G06F9/3889Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by multiple instructions, e.g. MIMD, decoupled access or execute
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/62Details of cache specific to multiprocessor cache arrangements

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)
  • Complex Calculations (AREA)

Abstract

指令和逻辑提供向量压缩和旋转功能。对指定向量源、掩码、向量目的地和目的地偏移的指令做出响应,一些实施例读取所述掩码并且将相对应的未掩蔽向量元素从所述向量源拷贝到所述向量目的地中在所述向量目的地偏移单元处开始的相邻顺序单元。在一些实施例中,将来自所述向量源的未掩蔽向量元素拷贝到以所述向量目的地中的元素单元的总数量为模的相邻顺序元素单元。在一些可选实施例中,每当所述向量目的地为满时,就停止拷贝,并且在将未掩蔽向量元素从所述向量源拷贝到所述向量目的地中的相邻顺序元素单元时,将所述掩码中的相对应字段的值改变到掩蔽值。可选实施例使其中没有拷贝来自所述向量源的元素的向量目的地的元素归零。

Description

提供向量压缩和旋转功能的指令和逻辑
技术领域
本公开涉及处理逻辑、微处理器和相关联的指令集架构的领域,当由所述处理器或其它处理逻辑执行时,所述相关联的指令集架构执行逻辑、算术或其它功能操作。具体地说,本公开涉及用于提供向量压缩和旋转功能的指令和逻辑。
背景技术
现代处理器经常包括用于提供操作的指令,这些操作是计算密集的,但是提供能够经过使用例如以单指令多数据(SIMD)向量寄存器为例的各种数据存储设备的有效实现来开发的高级数据并行性。中央处理单元(CPU)可以然后提供并行硬件以支持处理向量。向量是保持多个连续数据元素的数据结构。具有尺寸M的向量寄存器可以包含具有尺寸O的N个向量元素,其中N=M/O。例如,可以将64字节向量寄存器划分为(a)64个向量元素,每一个元素保持占据1个字节的数据项,(b)32个向量元素以保持每一个占据2个字节(或一个“字”)的数据项,(c)16个向量元素以保持每一个占据4个字节(或一个“双字”)的数据项,或(d)8个向量元素以保持每一个占据8个字节(或一个“四倍字”)的数据项。
使应用或软件代码向量化可以包括使应用在例如以宽的或大的宽度向量架构为例的特定系统或指令集架构上编译、安装和/或运行。
计算行业发展了各种编程基准以测试架构和诸如向量化、同时多线程、预测等等的计算技术的效率。一组这样的基准来自标准性能评估公司(SPEC)。SPEC基准广泛用于“检测”处理器和平台架构的性能。构成SPEC基准的程序由行业专业人员进行描绘和分析,试图发现新的编译和计算技术以改善计算机性能。被称为CPU2006的SPEC基准组之一包括被选择以强调系统的处理器、存储器子系统和编译器的整数和浮点CPU密集的基准。CPU2006包括根据NAMD的数据布局和内环推导的被称为444.NAMD的程序,一种用于模拟由伊利诺伊大学厄巴纳-尚佩恩分校的理论和计算生物组的Jim Phillips开发的大生物分子系统的并行程序。将NAMD的几乎所有运行时间都花费在计算小组功能中的原子间交互上。这一组与大量代码分离以形成对于CPU2006的紧凑基准。计算核心在宽范围的机器架构上实现良好的性能,但是不包含平台特定的优化。
程序NAMD是2002年Gordon Bell并行可扩展性奖金的获胜者,但是串行性能同样重要。在人们例如对基准的大多数并行部分中的全部进行向量化之后,不可向量化的串行部分典型地代表基准的运行时间的甚至更显著的部分。这一情况是对于具有高并行可扩展性的计算密集程序的通常情况的典型示例。在使用向量化来加速大多数并行部分之后,还存在移除性能限制问题和瓶颈以改善程序的另外的不可向量化或串行部分的性能的艰难工作。
目前为止,还没有充分探究对于这样的性能限制问题和瓶颈的潜在解决方案。
附图说明
在附图中通过示例而非限制的方式说明了本发明。
图1A是执行用于提供向量压缩和旋转功能的指令的系统的一个实施例的方框图。
图1B是执行用于提供向量压缩和旋转功能的指令的系统的另一实施例的方框图。
图1C是执行用于提供向量压缩和旋转功能的指令的系统的另一实施例的方框图。
图2是执行用于提供向量压缩和旋转功能的指令的处理器的一个实施例的方框图。
图3A说明了根据一个实施例的压缩数据类型。
图3B说明了根据一个实施例的压缩数据类型。
图3C说明了根据一个实施例的压缩数据类型。
图3D说明了根据一个实施例用于提供向量压缩和旋转功能的指令编码。
图3E说明了根据另一实施例用于提供向量压缩和旋转功能的指令编码。
图3F说明了根据另一实施例用于提供向量压缩和旋转功能的指令编码。
图3G说明了根据另一实施例用于提供向量压缩和旋转功能的指令编码。
图3H说明了根据另一实施例用于提供向量压缩和旋转功能的指令编码。
图4A说明了用于执行提供向量压缩和旋转功能的指令的处理器微架构的一个实施例的元素。
图4B说明了用于执行提供向量压缩和旋转功能的指令的处理器微架构的另一实施例的元素。
图5是执行提供向量压缩和旋转功能的指令的处理器的一个实施例的方框图。
图6是执行提供向量压缩和旋转功能的指令的计算机系统的一个实施例的方框图。
图7是执行提供向量压缩和旋转功能的指令的计算机系统的另一实施例的方框图。
图8是执行提供向量压缩和旋转功能的指令的计算机系统的另一实施例的方框图。
图9是执行提供向量压缩和旋转功能的指令的片上系统的一个实施例的方框图。
图10是执行提供向量压缩和旋转功能的指令的处理器的实施例的方框图。
图11是提供向量压缩和旋转功能的IP核心开发系统的一个实施例的方框图。
图12说明了提供向量压缩和旋转功能的架构仿真系统的一个实施例。
图13说明了翻译提供向量压缩和旋转功能的指令的系统的一个实施例。
图14A说明了用于提供向量压缩和旋转功能的指令的一个实施例的流程图。
图14B说明了用于提供向量压缩和旋转功能的指令的另一实施例的流程图。
图15A说明了使用指令以提供向量压缩和旋转功能的处理的实施例的流程图。
图15B说明了使用指令以提供向量压缩和旋转功能的处理的另一实施例的流程图。
图16A说明了提供向量压缩和旋转功能的处理的一个实施例的流程图。
图16B说明了提供向量压缩和旋转功能的处理的可选实施例的流程图。
图17说明了提供向量压缩和旋转功能的处理的另一实施例的流程图。
图18说明了在基准应用中提供向量压缩功能的处理的实施例的流程图。
图19A说明了在基准应用中提供向量压缩和旋转功能的处理的实施例的流程图。
图19B说明了在基准应用中提供向量压缩和旋转功能的处理的可选实施例的流程图。
具体实施方式
下面的描述公开了用于在处理器、计算机系统或其它处理装置内或与该处理器、计算机系统或其它处理装置相关联地提供向量压缩和旋转功能的指令和处理逻辑。
本文公开了用于提供向量压缩和旋转功能的指令和逻辑。对指定向量源、掩码、向量目的地和目的地偏移的指令做出响应,一些实施例读取该掩码,并且将相对应的未掩蔽向量元素从向量源拷贝到向量目的地中在向量目的地偏移单元处开始的相邻顺序元素单元。可选实施例使其中没有拷贝来自向量源的元素的向量目的地的元素归零。在一些实施例中,将来自向量源的未掩蔽向量元素拷贝到以向量目的地中的元素单元的总数量为模的相邻顺序元素单元。在一些可选实施例中,每当向量目的地为满时,拷贝就停止。在将未掩蔽向量元素从向量源拷贝到向量目的地中的相邻顺序元素单元时,也可以将掩码中的相对应的字段的值改变到掩蔽值。因而,掩码值可以用于跟踪进展和/或完成,并且在将变为满的目的地存储到存储器之后,能够重新执行指令。然后,可以使用修改的掩码和为零的向量目的地偏移来重新执行指令,以仅压缩仍然需要执行向量压缩和旋转指令的元素,从而允许改善的指令吞吐量。
将认识到,SIMD压缩和旋转指令可以用于在否则不容易被向量化的应用中提供向量压缩功能,例如在以在SPEC基准组的444.NAMD的内环中为例的基准应用中,从而减少到外部存储器的昂贵顺序存储的数量,增加性能和指令吞吐量,并且降低功率使用。
在下面的描述中,阐述了诸如处理逻辑、处理器类型、微架构条件、事件、使能机制等等的各种具体细节,以便提供对本发明实施例的更加全面的理解。然而,本领域中的技术人员将认识到,可以在没有这样的具体细节的情况下来实践本发明。此外,没有详细地示出一些公知的结构、电路等等,以避免不必要地混淆本发明的实施例。
尽管参考处理器描述了下面的实施例,但是其它实施例可以应用于其它类型的集成电路和逻辑设备。本发明实施例的类似技术和教导可以适用于能够得益于较高管线吞吐量和改善的性能的其它类型的电路或半导体器件。本发明实施例的教导可以应用于执行数据操控的任何处理器或机器。然而,本发明不局限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且能够适用于其中执行数据的操控或管理的任何处理器和机器。此外,下面的描述提供示例,并且附图出于说明目的示出了各种示例。然而,不应该将这些示例以限制的意义解释为它们仅意在提供本发明实施例的示例而不是提供本发明实施例的所有可能实现的详尽列表。
尽管下面的示例在执行单元和逻辑电路的上下文中描述了指令处理和分布,但是可以通过存储在机器可读的有形介质上的数据或指令的方式来实现本发明的其它实施例,该指令在由机器执行时使该机器执行与本发明至少一个实施例一致的功能。在一个实施例中,将与本发明实施例相关联的功能体现在机器可执行指令中。所述指令可以用于使以所述指令编程的通用或专用处理器执行本发明的步骤。可以将本发明的实施例提供为可以包括机器或计算机可读介质的计算机程序产品或软件,该机器或计算机可读介质具有存储在其上的可以用于对计算机(或其它电子设备)进行编程以执行根据本发明实施例的一个或多个操作的指令。可选地,可以由包含用于执行所述步骤的固定功能逻辑的特定硬件部件或由编程的计算机部件和固定功能硬件部件的任何组合来执行本发明实施例的步骤。
可以将用于对逻辑进行编程以执行本发明实施例的指令存储在系统中的存储器内,例如DRAM、高速缓存、闪存或其它存储。而且,可以经由网络或通过其它计算机可读介质的方式来分布指令。因而,机器可读介质可以包括用于以机器(例如,计算机)可读的形式存储或传输信息的任何机制,但不局限于在经过互联网经由电、光、声或其它形式的传播信号(例如,载波、红外信号、数字信号等等)传输信息时使用的软盘、光盘、压缩盘只读存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光学卡、闪存或有形机器可读存储。因此,计算机可读介质包括适合于以机器(例如,计算机)可读的形式存储或传输电子指令或信息的任何类型的有形机器可读介质。
设计可以经历从创建到模拟到制造的各种阶段。代表设计的数据可以按照多种方式来代表设计。首先,如在模拟中有用的,可以使用硬件描述语言或另一功能描述语言来代表硬件。此外,可以在设计处理的一些阶段处产生具有逻辑和/或晶体管门的电路级模型。而且,大部分设计在某一阶段达到代表硬件模型中的各种设备的物理布置的数据水平。在使用常规半导体制造技术的情况下,代表硬件模型的数据可以是指定在用于制造集成电路的掩码的不同掩码层上的各种特征的存在或不存在的数据。在设计的任何代表中,可以在任何形式的机器可读介质中存储数据。存储器或诸如盘的磁性或光学存储可以是机器可读介质以存储经由被调制或以其它方式生成以传输这样的信息的光波或电波来传输的信息。当传输指示或携带代码或设计的电载波时,在执行电信号的拷贝、缓冲或重新传输的程度上,进行新拷贝。因而,通信提供商或网络提供商可以在有形的机器可读介质上至少临时地存储体现本发明实施例的技术的物品,例如被编码为载波的信息。
在现代处理器中,使用许多不同的执行单元来处理并执行各种代码和指令。不是等同地创建所有指令,因为一些指令完成得较快,而其它指令要花费多个时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因而,使许多指令尽可能快速地执行将是有利的。然而,存在具有较大复杂性且在执行时间和处理器资源方面要求更多的某些指令。例如,存在浮点指令、加载/存储操作、数据移动等等。
随着更多的计算机系统用于互联网、文本和多媒体应用中,已经随着时间引入了额外的处理器支持。在一个实施例中,可以将指令集与包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处理以及外部输入和输出(I/O)的一个或多个计算机架构相关联。
在一个实施例中,指令集架构(ISA)可以由包括用于实现一个或多个指令集的处理器逻辑和电路的一个或多个微架构实现。因此,具有不同微架构的处理器可以共享公共指令集的至少一部分。例如,奔腾4处理器、CoreTM处理器和来自加利福尼亚州Sunnyvale的高级微设备公司的处理器实现几乎相同版本的x86指令集(在较新版本中添加有一些扩展),但是具有不同的内部设计。类似地,由诸如ARM Holding有限公司、MIPS的其它处理器开发公司或其许可接受方或采纳者设计的处理器可以共享公共指令集的至少一部分,但是可以包括不同的处理器设计。例如,ISA的相同寄存器架构可以使用新的或公知的技术,包括专用物理寄存器、使用寄存器重命名机制(例如,寄存器别名表(RAT)的使用)的一个或多个动态分配的物理寄存器、重排序缓冲器(ROB)和撤回寄存器文件,在不同的微架构中按照不同的方式来实现。在一个实施例中,寄存器可以包括一个或多个寄存器、寄存器架构、寄存器文件或者可以或不可以由软件编程器寻址的其它寄存器组。
在一个实施例中,指令可以包括一个或多个指令格式。在一个实施例中,指令格式可以指示各种字段(位的数量、位的单元等等)以指定待执行的操作和将在其上执行操作的操作数。可以进一步由指令模板(或子格式)来零散地定义一些指令格式。例如,可以将具有给定指令格式的指令模板定义为具有指令格式的字段的不同子集和/或定义为具有被不同地解释的给定字段。在一个实施例中,使用指令格式(并且如果定义,则在该指令格式的指令模板的给定一个中)来表达指令,并且该指令指定或指示操作以及将在其上执行操作的操作数。
科学、金融、自动向量化的通用RMS(识别、挖掘和合成)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操控)会要求对大量的数据项执行相同的操作。在一个实施例中,单指令多数据(SIMD)指代使处理器对多个数据元素执行操作的指令类型。可以在能够将寄存器中的位逻辑地划分为多个固定尺寸或可变尺寸的数据元素的处理器中使用SIMD技术,这些数据元素中的每一个代表单独的值。例如,在一个实施例中,可以将64位寄存器中的位组织为包含四个单独的16位数据元素的源操作数,其中每一个数据元素代表单独的16位值。可以将这一类型的数据称为“压缩”数据类型或“向量”数据类型,并且可以将这一数据类型的操作数称为压缩数据操作数或向量操作数。在一个实施例中,压缩数据项或向量可以是存储在单个寄存器内的压缩数据元素的序列,并且压缩数据操作数或向量操作数可以是SIMD指令(或“压缩数据指令”或“向量指令”)的源或目的地操作数。在一个实施例中,SIMD指令指定要多两个源向量操作数执行的单个向量操作以生成具有相同或不同尺寸、具有相同或不同数量的数据元素和具有相同或不同的数据元素顺序的目的地向量操作数(也被称为结果向量操作数)。
例如由具有包括x86、MMXTM、流化SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集的CoreTM处理器、诸如具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM系列处理器的ARM处理器以及诸如由中国科学院的计算技术研究所(ICT)开发的Loongson系列处理器的MIPS处理器采用的SIMD技术在应用性能方面实现了显著改善(CoreTM和MMXTM是注册商标或加利福尼亚州Santa Clara的英特尔公司的商标)。
在一个实施例中,目的地和源寄存器/数据是代表相对应的数据或操作的源和目的地的一般术语。在一些实施例中,它们可以由寄存器、存储器或具有与描绘的名称或功能不同的其它名称或功能的其它存储区域实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域,等等。在其它实施例中,SRC和DEST存储区域中的两个或更多个可以与相同存储区域(例如,SIMD寄存器)内的不同数据存储元素相对应。在一个实施例中,源寄存器之一也可以用作目的地寄存器,例如通过将对第一和第二源数据执行的操作的结果写回到用作目的地寄存器的两个源寄存器之一。
图1A是形成有包括用于执行根据本发明一个实施例的指令的执行单元的处理器的示例性计算机系统的方框图。系统100包括根据本发明,例如在本文描述的实施例中,的部件,例如处理器102用于采用包括逻辑的执行单元来执行用于处理数据的算法。系统100代表以从加利福尼亚州Santa Clara的英特尔公司可获得的III、4、XeonTMXscaleTM和/或StrongARMTM微处理器为基础的处理系统,尽管也可以使用其它系统(包括具有其它微处理器、工程工作站、机顶盒等等的PC)。在一个实施例中,样本系统100可以执行从华盛顿州Redmond的微软公司可获得的一种版本的WINDOWSTM操作系统,尽管也可以使用其它操作系统(例如UNIX和Linux)、嵌入式软件和/或图形用户接口。因而,本发明的实施例不局限于硬件电路和软件的任何特定组合。
实施例不局限于计算机系统。本发明的可选实施例可以用在诸如手持设备的其它设备和嵌入式应用中。手持设备的一些示例包括手机、互联网协议设备、数码相机、个人数字助理(PDA)和手持PC。嵌入式应用可以包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(WAN)交换机或能够执行根据至少一个实施例的一个或多个指令的任何其它系统。
图1A是形成有包括一个或多个执行单元108以执行算法来执行根据本发明一个实施例的至少一个指令的处理器102的计算机系统100的方框图。可以在单个处理器桌面型计算机或服务器系统的上下文中描述一个实施例,但是可以在多处理器系统中包括可选实施例。系统100是“集线器”系统架构的示例。计算机系统100包括处理器102以处理数据信号。处理器102可以是复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集的组合的处理器或例如以数据信号处理器为例的任何其它处理器设备。处理器102耦接到能够在处理器102和系统100中的其它部件之间传输数据信号的处理器总线110。系统100的元件执行熟悉本领域的人员公知的常规功能。
在一个实施例中,处理器102包括级1(L1)内部高速缓存存储器104。取决于架构,处理器102可以具有单个内部高速缓存或多级内部高速缓存。可选地,在另一实施例中,高速缓存存储器可以驻留在处理器102的外部。取决于特定的实现和需要,其它实施例也可以包括内部和外部高速缓存二者的组合。寄存器文件106可以将不同类型的数据存储在各种寄存器中,包括整数寄存器、浮点寄存器、状态寄存器和指令指针寄存器。
执行单元108,包括用于执行整数和浮点操作的逻辑,也驻留在处理器102中。处理器102还包括存储用于某些宏指令的微代码的微代码(ucode)ROM。对于一个实施例,执行单元108包括用于处理压缩指令集109的逻辑。通过在通用处理器102的指令集中包括压缩指令集109,连同用于执行所述指令的相关联的电路,可以使用通用处理器102中的压缩数据来执行由许多多媒体应用使用的操作。因而,通过使用用于对压缩数据执行操作的处理器数据总线的全宽度,能够更加有效地加速和执行许多多媒体应用。这可以消除跨处理器的数据总线传递较小单位的数据以便一次对一个数据元素执行一个或多个操作的需要。
执行单元108的可选实施例也可以用在微控制器、嵌入式处理器、图形设备、DSP和其它类型的逻辑电路中。系统100包括存储器120。存储器120可以是动态随机存取存储器(DRAM)设备、静态随机存取存储器(SRAM)设备、闪存设备或其它存储器设备。存储器120能够存储由能够由处理器102执行的数据信号代表的指令和/或数据。
系统逻辑芯片116耦接到处理器总线110和存储器120。在说明的实施例中,系统逻辑芯片116是存储器控制器集线器(MCH)。处理器102可以经由处理器总线110与MCH 116通信。MCH 116向存储器120提供高带宽存储器路径118,用于指令和数据存储并且用于图形命令、数据和纹理的存储。MCH 116用于在处理器102、存储器120和系统100中的其它部件之间引导数据信号,并且在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可以提供用于耦接到图形控制器112的图形端口。MCH 116经过存储器接口118耦接到存储器120。图形卡112经过加速图形端口(AGP)互连114耦接到MCH116。
系统100使用专有集线器接口总线122来将MCH 116耦接到I/O控制器集线器(ICH)130。ICH 130经由本地I/O总线提供到一些I/O设备的直接连接。本地I/O总线是用于将外围设备连接到存储器120、芯片集和处理器102的高速I/O总线。一些示例是音频控制器、固件集线器(闪速BIOS)128、无线收发机126、数据存储124、包含用户输入和键盘接口的传统I/O控制器、诸如通用串行总线(USB)的串行扩展端口和网络控制器134。数据存储设备124能够包括硬盘驱动、软盘驱动、CD-ROM设备、闪存设备或其它海量存储设备。
对于系统的另一实施例,可以与片上系统一起使用根据一个实施例的指令。片上系统的一个实施例由处理器和存储器构成。用于一种这样的系统的存储器是闪存。闪存可以与处理器和其它系统部件位于相同的裸片上。此外,诸如存储器控制器或图形控制器的其它逻辑方框也可以位于片上系统上。
图1B说明了实现本发明一个实施例的原理的数据处理系统140。本领域中的技术人员将容易认识到,在不偏离本发明实施例的范围的情况下,可以与可选的处理系统一起使用本文描述的实施例。
计算机系统140包括能够执行根据一个实施例的至少一个指令的处理核心159。对于一个实施例,处理核心159代表具有任何类型的架构的处理单元,该任何类型的架构包括但不局限于CISC、RISC或VLIW型架构。处理核心159还可以适合于以一种或多种处理技术进行制造,并且通过在机器可读介质上进行足够详细地表示,可以适合于促进所述制造。
处理核心159包括执行单元142、一组寄存器文件145和解码器144。处理核心159还包括对于理解本发明实施例不必要的额外电路(未示出)。执行单元142用于执行由处理核心159接收的指令。除了执行典型的处理器指令,执行单元142还可以执行压缩指令集143中的指令,用于对压缩数据格式执行操作。压缩指令集143包括用于执行本发明实施例的指令和其它压缩指令。执行单元142通过内部总线耦接到寄存器文件145。寄存器文件145代表处理核心159上用于存储包括数据的信息的存储区域。如先前提到的,应该理解,用于存储压缩数据的存储区域不是关键的。执行单元142耦接到解码器144。解码器144用于将由处理核心159接收的指令解码为控制信号和/或微代码进入点。对这些控制信号和/或微代码进入点做出响应,执行单元142执行适当的操作。在一个实施例中,解码器用于解释指令的操作码,该指令的操作码将指示应该对在指令内指示的相对应的数据执行什么操作。
处理核心159与总线141耦接,用于与各种其它系统设备进行通信,该其它系统设备可以例如包括但不局限于同步动态随机存取存储器(SDRAM)控制146、静态随机存取存储器(SRAM)控制147、突发闪速接口148、个人计算机存储卡国际协会(PCMCIA)/紧凑闪速(CF)卡控制149、液晶显示器(LCD)控制150、直接存储器存取(DMA)控制器151和可选的总线主接口152。在一个实施例中,数据处理系统140还可以包括用于经由I/O总线153与各种I/O设备进行通信的I/O桥154。这样的I/O设备可以例如包括但不局限于通用异步接收机/发射机(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例规定移动、网络和/或无线通信以及能够执行包括文本串比较操作的SIMD操作的处理核心159。可以使用各种音频、视频、成像和通信算法来对处理核心159进行编程,这些算法包括诸如Walsh-Hadamard变换、快速傅立叶变换(FFT)、离散余弦变换(DCT)及其各自的逆变换的离散变换;诸如色彩空间变换、视频编码运动估计或视频解码运动补偿的压缩/解压缩技术;以及诸如脉冲编码调制(PCM)的调制/解调(MODEM)功能。
图1C说明了能够执行用于提供向量压缩和旋转功能的指令的数据处理系统的另一可选实施例。根据一个可选实施例,数据处理系统160可以包括主处理器166、SIMD协处理器161、高速缓存存储器167和输入/输出系统168。输入/输出系统168可以可选地耦接到无线接口169。SIMD协处理器161能够执行包括根据一个实施例的指令的操作。处理核心170可以适合于以一种或多种处理技术进行制造,并且通过足够详细地在机器可读介质上进行表示,可以适合于促进包括处理核心170的数据处理系统160的全部或部分的制造。
对于一个实施例,SIMD协处理器161包括执行单元162和一组寄存器文件164。主处理器166的一个实施例包括解码器165以识别包括根据一个实施例的指令的指令集163的指令,用于由执行单元162执行。对于可选实施例,SIMD协处理器161还包括解码器165B的至少一部分,用于对指令集163的指令进行解码。处理核心170还包括对于理解本发明实施例不必要的额外电路(未示出)。
在操作中,主处理器166执行数据处理指令的流,该数据处理指令控制一般类型的数据处理操作,包括与高速缓存存储器167和输入/输出系统168的交互。SIMD协处理器指令嵌入在该数据处理指令的流内。主处理器166的解码器165将这些SIMD协处理器指令识别为具有应该由附接的SIMD协处理器161执行的类型。因此,主处理器166在协处理器总线171上发出这些SIMD协处理器指令(或代表SIMD协处理器指令的控制信号),其中由任何附接的SIMD协处理器从该协处理器总线接收这些协处理器指令。在这一情况下,SIMD协处理器161将接受并执行意欲用于其的任何接收的SIMD协处理器指令。
可以经由无线接口169接收数据,用于由SIMD协处理器指令进行处理。对于一个示例,可以以数字信号的形式接收语音通信,该语音通信可以由SIMD协处理器指令处理以重新生成代表该语音通信的数字音频样本。对于另一示例,可以接收数字位流形式的压缩的音频和/或视频,该压缩的音频和/或视频可以由SIMD协处理器指令进行处理以重新生成数字音频样本和/或运动视频帧。对于处理核心170的一个实施例,将主处理器166和SIMD协处理器161集成到包括执行单元162、一组寄存器文件164和解码器165的单个处理核心170中,以识别包括根据一个实施例的指令的指令集163的指令。
图2是包括用于执行根据本发明一个实施例的指令的逻辑电路的处理器200的微架构的方框图。在一些实施例中,能够实现根据一个实施例的指令以对具有字节、字、双字、四倍字等等的尺寸以及诸如单精度和双精度整数和浮点数据类型的数据类型的数据元素进行操作。在一个实施例中,有序前端201是取出待执行的指令并使它们准备稍后在处理器管线中使用的处理器200的一部分。前端201可以包括几个单元。在一个实施例中,指令预取出器226从存储器取出指令并将它们馈送到指令解码器228,该指令解码器228转而对它们进行解码或解释。例如,在一个实施例中,解码器将接收的指令解码为机器能够执行的被称为“微指令”或“微操作”(也被称为微op或uop)的一个或多个操作。在其它实施例中,解码器将该指令解析为由微架构使用以执行根据一个实施例的操作的操作码和相对应的数据以及控制字段。在一个实施例中,踪迹高速缓存230采取解码的uop并将它们组装为程序排序的序列或uop队列234中的踪迹用于执行。当踪迹高速缓存230遇见复杂的指令时,微代码ROM 232提供完成该操作需要的uop。
一些指令被转换为单个微操作,而其它指令需要几个微操作来完成完整的操作。在一个实施例中,如果需要多于四个微操作来完成指令,则解码器228存取微代码ROM 232来完成该指令。对于一个实施例,可以将指令解码为用于在指令解码器228处进行处理的少量微操作。在另一实施例中,假定需要多个微操作来完成操作,则能够将指令存储在微代码ROM 232内。踪迹高速缓存230指代进入点可编程逻辑阵列(PLA)以确定用于从微代码ROM232读取微代码序列来完成根据一个实施例的一个或多个指令的正确的微指令指针。在微代码ROM 232完成指令的顺序微操作之后,机器的前端201重新开始从踪迹高速缓存230取出微操作。
无序执行引擎203是在其中制备指令用于执行的引擎。无序执行逻辑具有多个缓冲器来使指令流平滑并重排以便当它们沿着管线下行并被调度用于执行时优化性能。分配器逻辑分配每一个uop需要的机器缓冲器和资源以便进行执行。寄存器重命名逻辑将逻辑寄存器重新命名到寄存器文件中的条目上。分配器还在指令调度器的前面分配对于两个uop队列之一中的每一个uop的条目,一个uop用于存储器操作而一个用于非存储器操作:存储器调度器、快速调度器202、慢速/一般浮点调度器204和简单浮点调度器206。Uop调度器202、204、206以其依赖的输入寄存器操作数源的准备状态和该uop完成其操作需要的执行资源的可用性为基础来确定uop何时准备执行。一个实施例的快速调度器202可以在主时钟周期的每一半上进行调度,而其它调度器可以仅每主处理器时钟周期调度一次。调度器仲裁调派端口以调度uop用于执行。
寄存器文件208、210位于调度器202、204、206和执行方框211中的执行单元212、214、216、218、220、222、224之间。对于整数和浮点操作,分别具有单独的寄存器文件208、210。一个实施例的每一个寄存器文件208、210还包括旁路网络,该旁路网络可以绕过还没有被写到寄存器文件中的刚刚完成的结果或将所述结果转发到新的相关uop。整数寄存器文件208和浮点寄存器文件210也能够与另一寄存器文件传送数据。对于一个实施例,将整数寄存器文件208划分为两个单独的寄存器文件,一个寄存器文件用于低阶32位数据,而第二寄存器文件用于高阶32位数据。一个实施例的浮点寄存器文件210具有128位宽条目,因为浮点指令一般具有在宽度上从64位到128位的操作数。
执行方框211包含在其中实际地执行指令的执行单元212、214、216、218、220、222、224。这一部分包括存储微指令需要用于执行的整数和浮点数据操作数值的寄存器文件208、210。一个实施例的处理器200由多个执行单元组成:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。对于一个实施例,浮点执行方框222、224执行浮点、MMX、SIMD和SSE或其它操作。一个实施例的浮点ALU222包括执行除法、平方根和余数微操作的64位除64位浮点除法器。对于本发明的实施例,可以使用浮点硬件来处理涉及浮点值的指令。在一个实施例中,ALU操作转到高速ALU执行单元216、218。一个实施例的快速ALU 216、218可以执行具有一半时钟周期的有效时延的快速操作。对于一个实施例,大部分复杂的整数操作转到慢速ALU 220,因为慢速ALU 220包括用于诸如乘法器、移位、标记逻辑和分支处理的长时延类型操作的整数执行硬件。存储器加载/存储操作由AGU 212、214执行。对于一个实施例,在对64位数据操作数执行整数操作的上下文中描述了整数ALU 216、218、220。在可选实施例中,可以实现ALU 216、218、220以支持包括16、32、128、256等等的各种数据位。类似地,可以实现浮点单元222、224以支持具有各种宽度的位的一系列操作数。对于一个实施例,浮点单元222、224可以结合SIMD和多媒体指令来对128位宽的压缩数据操作数进行操作。
在一个实施例中,uop调度器202、204、206在父加载完成执行之前分派相关的操作。由于在处理器200中推测地调度和执行uop,因此处理器200还包括用于处理存储器遗漏的逻辑。如果在数据高速缓存中遗漏了数据加载,则在管线中可能存在飞行中的相关操作,这为调度器留下暂时不正确的数据。重放机制跟踪并重新执行使用不正确的数据的指令。只需要重放相关的操作,并且允许完成独立的操作。处理器的一个实施例的调度器和重放机制还设计为捕获提供向量压缩和旋转功能的指令。
术语“寄存器”可以指代用作识别操作数的指令的一部分的机载处理器存储单元。换句话说,寄存器可以是从处理器的外部(从程序员的角度)可以使用的寄存器。然而,实施例的寄存器不应该在含义上局限于特定类型的电路。而是,实施例的寄存器能够存储和提供数据,并且执行本文描述的功能。本文描述的寄存器可以由处理器内的电路使用任何数量的不同技术来实现,例如专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器文件还包含用于压缩数据的八个多媒体SIMD寄存器。对于下面的讨论,将寄存器理解为设计为保持压缩数据的数据寄存器,例如在使用来自加利福尼亚州Santa Clara的英特尔公司的MMX技术实现的微处理器中的64位宽MMXTM寄存器(在一些实例中也被称为“mm”寄存器)。以整数和浮点形式二者可用的这些MMX寄存器可以与伴随SIMD和SSE指令的压缩数据元素一起操作。类似地,与SSE2、SSE3、SSE4或更高(通常被称为“SSEx”)技术有关的128位宽XMM寄存器也可以用于保持这样的压缩数据操作数。在一个实施例中,在存储压缩数据和整数数据时,寄存器不需要区分开这两种数据类型。在一个实施例中,整数和浮点或者包含在相同的寄存器文件中或者包含在不同的寄存器文件中。而且,在一个实施例中,可以将浮点和整数数据存储在不同的寄存器或相同的寄存器中。
在下面附图的示例中,描述了多个数据操作数。图3A说明了根据本发明一个实施例在多媒体寄存器中的各种压缩数据类型表示。图3A说明了对于128位宽操作数的压缩字节310、压缩字320和压缩双字(dword)330的数据类型。这一示例的压缩字节格式310是128位长,并且包含16个压缩字节数据元素。这里将字节定义为8位数据。将对于每一个字节数据元素的信息存储在字节0的位7到位0、字节1的位15到位8、字节2的位23到位16、以及最后字节15的位120到位127中。因而,在寄存器中使用所有可用的位。这一存储布置增加了处理器的存储效率。并且,在访问16个数据元素的情况下,现在可以对16个数据元素并行地执行一个操作。
通常,数据元素是与具有相同长度的其它数据元素一起存储在单个寄存器或存储器单元中的单独数据段。在与SSEx技术有关的压缩数据序列中,存储在XMM寄存器中的数据元素的数量是128位除以单独数据元素的位的长度。类似地,在与MMX和SSE技术有关的压缩数据序列中,存储在MMX寄存器中的数据元素的数量是64位除以单独数据元素的位的长度。尽管图3A中说明的数据类型是128位长,但是本发明的实施例也可以利用64位宽、256位宽、512位宽或其它尺寸的操作数进行操作。这一示例的压缩字格式320是128位长,并且包含八个压缩字数据元素。每一个压缩字包含16位信息。图3A的压缩双字格式是128位长,并且包含四个压缩双字数据元素。每一个压缩双字数据元素包含32位信息。压缩四倍字是128位长,并且包含两个压缩四倍字数据元素。
图3B说明了可选的寄存器中数据存储格式。每一个压缩数据可以包括多于一个独立的数据元素。说明了三个压缩数据格式:压缩半字341、压缩单字342和压缩双字343。压缩半字341、压缩单字342和压缩双字343的一个实施例包含固定点数据元素。对于可选实施例,压缩半字341、压缩单字342和压缩双字343中的一个或多个可以包含浮点数据元素。压缩半字341的一个可选实施例是包含八个16位数据元素的128位长。压缩单字342的一个实施例是128位长并且包含四个32位数据元素。压缩双字343的一个实施例是128位长并且包含两个64位数据元素。将认识到,可以将这样的压缩数据格式进一步扩展到其它寄存器长度,例如96位、160位、192位、224位、256位、512位或更多。
图3C说明了根据本发明实施例的多媒体寄存器中的各种带符号和无符号压缩数据类型表示。无符号压缩字节表示344说明了SIMD寄存器中无符号压缩字节的存储。将每一个字节数据元素的信息存储在字节0的位7到位0、字节1的位15到位8、字节2的位23到位16等等、以及最后字节15的位120到位127中。因而,在寄存器中使用所有可用的位。这一存储布置可以增加处理器的存储效率。并且,在访问16个数据元素的情况下,现在能够按照并行的方式对16个数据元素执行一个操作。带符号压缩字节表示345说明了带符号压缩字节的存储。注意到,每一个字节数据元素的第八位是符号指示符。无符号压缩字表示346说明了如何将字7到字0存储在SIMD寄存器中。带符号压缩字表示347与无符号压缩字寄存器中表示346类似。注意到,每一个字数据元素的第16位是符号指示符。无符号压缩双字表示348示出了如何存储双字数据元素。带符号压缩双字表示349与无符号压缩双字寄存器中表示348类似。注意到,必要的符号位是每一个双字数据元素的第32位。
图3D描述了具有32位或更多位的操作编码(操作码)格式360和与一种类型的操作码格式相对应的寄存器/存储器操作数寻址模式的一个实施例,所述操作码格式在intel.com/products/processor/manuals/的万维网(www)上从加利福尼亚州Santa Clara的英特尔公司可获得的“64and IA-32Intel Architecture Software Developer’sManual Combined Volumes 2A and 2B:Instruction Set Reference A-Z”中有所描述。在一个实施例中,指令可以由字段361和362中的一个或多个进行编码。可以识别每指令多达两个操作数单元,包括多达两个源操作数标识符364和365。对于一个实施例,目的地操作数标识符366与源操作数标识符364相同,而在其它实施例中,它们是不同的。对于可选实施例,目的地操作数标识符366与源操作数标识符365相同,而在其它实施例中,它们是不同的。在一个实施例中,由源操作数标识符364和365识别的源操作数之一由该指令的结果重写,而在其它实施例中,标识符364与源寄存器元素相对应,并且标识符365与目的地寄存器元素相对应。对于一个实施例,操作数标识符364和365可以用于识别32位或64位源和目的地操作数。
图3E描述了具有40或更多位的另一可选的操作编码(操作码)格式370。操作码格式370与操作码格式360相对应,并且包括可选的前缀字节378。根据一个实施例的指令可以由字段378、371和372中的一个或多个进行编码。每指令多达两个操作数单元可以由源操作数标识符374和375并且由前缀字节378识别。对于一个实施例,前缀字节378可以用于识别32位或64位源和目的地操作数。对于一个实施例,目的地操作数标识符376与源操作数标识符374相同,而在其它实施例中,它们是不同的。对于可选实施例,目的地操作数标识符376与源操作数标识符375相同,而在其它实施例中,它们是不同的。在一个实施例中,指令对由操作数标识符374和375识别的操作数中的一个或多个进行操作,并且由操作数标识符374和375识别的一个或多个操作数由该指令的结果进行重写,而在其它实施例中,将由标识符374和375识别的操作数写到另一寄存器中的另一数据元素。操作码格式360和370允许部分地由MOD字段363和373并且由可选的因子-索引-基础(scale-index-base)和位移字节指定的寄存器到寄存器、存储器到寄存器、寄存器乘存储器、寄存器乘寄存器、寄存器乘立即数、寄存器到存储器寻址。
接下来转到图3F,在一些可选实施例中,可以经过协处理器数据处理(CDP)指令来执行64位(或128位或256位或512位或更多)单指令多数据(SIMD)算术操作。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一种这样的CDP指令。对于可选实施例,可以由字段383、384、387和388中的一个或多个对CDP指令的类型和操作进行编码。可以识别每指令多达三个操作数单元,包括多达两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可以对8、16、32和64位值进行操作。对于一个实施例,对整数数据元素执行指令。在一些实施例中,可以使用条件字段381来有条件地执行指令。对于一些实施例,源数据尺寸可以由字段383进行编码。在一些实施例中,可以对SIMD字段完成零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可以由字段384进行编码。
接下来转到图3G,阐释了根据另一实施例用于提供向量压缩和旋转功能的另一可选的操作编码(操作码)格式397,这一操作编码格式397与在intel.com/products/processor/manuals/的万维网(www)上从加利福尼亚州Santa Clara的英特尔公司可获得的“Advanced Vector Extensions Programming Reference”中描述的操作码格式的类型相对应。
原始x86指令集规定具有地址音节的各种格式的1字节操作码以及在其存在根据第一“操作码”字节已知的额外字节中包含的立即数操作数。此外,存在被保留为操作码的修改因子(被称为前缀,因为必须将它们放置在指令之前)的某些字节值。当256个操作码字节(包括这些特殊前缀值)的原始调色板被耗尽时,单个字节作为换码专用于一组新的256个操作码。在添加向量指令(例如SIMD)时,生成对于更多操作码的需要,并且“两个字节”操作码地图也是不充足的,即使当经过使用前缀进行扩展时。为此,在使用2个字节加可选的前缀作为标识符的额外地图中添加新的指令。
此外,为了促进64位模式中的额外寄存器,可以在前缀和操作码(以及确定操作码必需的任何换码字节)之间使用额外的前缀(被称为“REX”)。在一个实施例中,REX可以具有4个“有效载荷”位以指示在64位模式中额外寄存器的使用。在其它实施例中,它可以具有少于或多于4个的位。一般通过下面来说明至少一个指令集的一般格式(通常与格式360和/或格式370相对应):
[前缀][rex]换码[换码2]操作码modrm(等等)
操作码格式397与操作码格式370相对应并且包括可选的VEX前缀字节391(在一个实施例中以C4hex开始)来更换大多数其它常用的传统指令前缀字节和换码代码。例如,下面说明了使用两个字段来对指令进行编码的实施例,当在原始指令中存在第二换码代码时或当需要使用REX字段中的额外位(例如,XB和W字段)时,可以使用该指令。在下面说明的实施例中,传统换码由新的换码值表示,传统前缀被充分压缩为“有效载荷”字节的一部分,传统前缀被回收并可以用于未来的扩展,第二换码代码被压缩在“地图”字段中,未来的地图或特征空间可用,并且添加新的特征(例如,增加的向量长度和额外的源寄存器指定符)。
[前缀][rex]换码[换码2]操作码modrm[sib][disp][imm]
Vex RXBmmmmm WvvvLpp操作码modrm[sib][disp][imm]
新特征
根据一个实施例的指令可以由字段391和392中的一个或多个进行编码。每指令多达四个操作数单元可以由字段391结合源操作数标识符374和375并结合可选的因子-索引-基础(SIB)标识符393、可选的位移标识符394和可选的立即数字节395进行识别。对于一个实施例,VEX前缀字节391可以用于识别32位或64位源和目的地操作数和/或128位或256位SIMD寄存器或存储器操作数。对于一个实施例,由操作码格式397提供的功能可能与操作码格式370重复,而在其它实施例中,它们是不同的。操作码格式370和397允许部分地由MOD字段373并且由可选的(SIB)标识符393、可选的位移标识符394和可选的立即数字节395指定的寄存器到寄存器、存储器到寄存器、寄存器乘存储器、寄存器乘寄存器、寄存器乘立即数、寄存器到存储器寻址。
接下来转到图3H,阐释了根据另一实施例用于提供向量压缩和旋转功能的另一可选的操作编码(操作码)格式398。操作码格式398与操作码格式370和397相对应并且包括可选的EVEX前缀字节396(在一个实施例中以62hex开始)以代替大部分其它常用的传统指令前缀字节和换码代码并且提供额外的功能。根据一个实施例的指令可以由字段396和392中的一个或多个进行编码。每指令多达四个操作数单元和掩码可以由字段396结合源操作数标识符374和375并结合可选的因子-索引-基础(SIB)标识符393、可选的位移标识符394和可选的立即数字节395进行识别。对于一个实施例,EVEX前缀字节396可以用于识别32位或64位源和目的地操作数和/或128位、256位或512位SIMD寄存器或存储器操作数。对于一个实施例,由操作码格式398提供的功能可以与操作码格式370或397重复,而在其它实施例中,它们是不同的。操作码格式398允许部分地由MOD字段373并且由可选的(SIB)标识符393、可选的位移标识符394和可选的立即数字节395指定的具有掩码的寄存器到寄存器、存储器到寄存器、寄存器乘存储器、寄存器乘寄存器、寄存器乘立即数、寄存器到存储器寻址。通常通过下面来说明至少一个指令集的一般格式(通常与格式360和/或格式370相对应):
evex1RXBmmmmm WvvvLpp evex4操作码modrm[sib][disp][imm]
对于一个实施例,根据EVEX格式398编码的指令可以具有额外的“有效载荷”位,其可以用于利用例如以用户可配置的掩码寄存器,或额外的操作数或从128位、256位或512位向量寄存器进行的选择或要从其进行选择的更多寄存器等等为例的额外的新特征来提供向量压缩和旋转功能。
例如,在VEX格式397可以用于使用隐含掩码来提供向量压缩和旋转功能的情况下,EVEX格式398可以用于使用简明的用户可配置掩码来提供向量压缩和旋转功能。此外,在VEX格式397可以用于对128位或256位向量寄存器提供向量压缩和旋转功能的情况下,EVEX格式398可以用于对128位、256位、512位或更大(或更小)的向量寄存器提供向量压缩和旋转功能。
通过下面的示例来说明用于提供向量压缩和旋转功能的示例指令:
将认识到,如在上面的示例中,SIMD压缩和旋转指令可以在否则将不容易被向量化的应用中提供向量压缩功能,例如在诸如在SPEC基准组的444.NAMD的内环中的基准应用中,从而减少到外部存储器的昂贵的顺序存储的数量,增加性能和指令吞吐量,并降低功率使用。
图4A是说明根据本发明至少一个实施例的有序管线和寄存器重命名级、无序分发/执行管线的方框图。图4B是说明根据本发明至少一个实施例要包括在处理器中的有序架构核心和寄存器重命名逻辑、无序分发/执行逻辑的方框图。图4A中的实线框说明有序管线,而虚线框说明寄存器重命名、无序分发/执行管线。类似地,图4B中的实线框说明有序架构逻辑,而虚线框说明寄存器重命名逻辑和无序分发/执行逻辑。
在图4A中,处理器管线400包括取回级402、长度解码级404、解码级406、分配级408、重命名级410、调度(也被称为调遣或分发)级412、寄存器读取/存储器读取级414、执行级416、写回/存储器写级418、异常处理级422和委托级424。
在图4B中,箭头指代在两个或更多个单元之间的耦接,并且箭头的方向指示数据流在那些单元之间的方向。图4B示出了包括耦接到执行引擎单元450的前端单元430的处理器核心490,该前端单元430和执行引擎单元450二者均耦接到存储器单元470。
核心490可以是精简指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或替代核心类型。作为又一选择,核心490可以是专用核心,例如以网络或通信核心、压缩引擎、图形核心等等为例。
前端单元430包括耦接到指令高速缓存单元434的分支预测单元432,该指令高速缓存单元434耦接到指令翻译后备缓冲器(TLB)436,该指令翻译后备缓冲器(TLB)436耦接到指令取回单元438,该指令取回单元438耦接到解码单元440。解码单元或解码器可以对指令进行解码,并且生成从原始指令解码的、或以其它方式反映原始指令的、或根据原始指令推导的一个或多个微操作、微代码进入点、微指令、其它指令或其它控制信号,作为输出。可以使用各种不同的机制来实现解码器。适当的机制的示例包括但不局限于查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等等。指令高速缓存单元434进一步耦接到存储器单元470中的级2(L2)高速缓存单元476。解码单元440耦接到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450包括耦接到撤回单元454和一组一个或多个调度器单元456的重命名/分配器单元452。调度器单元456代表任何数量的不同调度器,包括预订站、中央指令窗口等等。调度器单元456耦接到物理寄存器文件单元458。每一个物理寄存器文件单元458代表一个或多个物理寄存器文件,其中不同的物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、压缩整数、压缩浮点、向量整数、向量浮点等等、状态(例如,作为要被执行的下一个指令的地址的指令指针)等等。物理寄存器文件单元458由撤回单元454覆盖以说明其中可以实现寄存器重命名和无序执行的各种方式(例如,使用记录器缓冲器和撤回寄存器文件,使用未来文件、历史缓冲器和撤回寄存器文件;使用寄存器地图和寄存器池;等等)。通常,架构寄存器从处理器的外侧或从程序员的角度可见。寄存器不局限于任何已知的特定类型的电路。各种不同类型的寄存器是适当的,只要它们能够存储和提供如本文描述的数据。适当的寄存器的示例包括但不局限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等等。撤回单元454和物理寄存器文件单元458耦接到执行集群460。执行集群460包括一组一个或多个执行单元462和一组一个或多个存储器访问单元464。执行单元462可以对各种类型的数据(例如,标量浮点、压缩整数、压缩浮点、向量整数、向量浮点)执行各种操作(例如,移位、加法、减法、乘法)。尽管一些实施例可以包括专用于特定功能或功能组的多个执行单元,但是其它实施例可以仅包括全部执行所有功能的一个执行单元或多个执行单元。由于某些实施例对于某些类型的数据/操作创建单独的管线(例如,分别具有其自己的调度器单元、物理寄存器文件单元和/或执行集群的标量整数管线、标量浮点/压缩整数/压缩浮点/向量整数/向量浮点管线和/或存储器访问管线,并且在单独的存储器访问管线的情况下,实现其中仅这一管线的执行集群具有存储器访问单元464的某些实施例),因此能够将调度器单元456、物理寄存器单元458和执行集群460表示为多个。也应该理解,在使用单独的管线的情况下,这些管线中的一个或多个可以是无序分发/执行,而其余是有序的。
该组存储器访问单元464耦接到存储器单元470,该存储器单元470包括耦接到数据高速缓存单元474的数据TLB单元472,该数据高速缓存单元474耦接到级2(L2)高速缓存单元476。在一个示例性实施例中,存储器访问单元464可以包括加载单元、存储地址单元和存储数据单元,其中每一个单元耦接到存储器单元470中的数据TLB单元472。L2高速缓存单元476耦接到一个或多个其它级的高速缓存并且最后耦接到主存储器。
通过示例的方式,示例性的寄存器重命名、无序分发/执行核心架构可以按照下面来实现管线400:1)指令取回438执行取回和长度解码级402和404;2)解码单元440执行解码级406;3)重命名/分配器单元452执行分配级408和重命名级410;4)调度器单元456执行调度器级412;5)物理寄存器文件单元458和存储器单元470执行寄存器读取/存储器读取级414;执行集群460进行执行级416;6)存储器单元470和物理寄存器文件单元458执行写回/存储器写级418;7)可以在异常处理级422中涉及各种单元;并且8)撤回单元454和物理寄存器文件单元458执行委托级424。
核心490可以支持一个或多个指令集(例如,x86指令集(较新的版本添加有一些扩展);加利福尼亚州Sunnyval的MIPS技术的MIPS指令集;加利福尼亚州Sunnyval的ARMHoldings的ARM指令集(具有可选的诸如NEON的额外扩展)。
应该理解,核心可以支持多线程(执行两组或更多组并行的操作或线程),并且可以按照包括时间分片多线程、同时多线程(其中单个物理核心提供逻辑核心,对于每一个线程,该物理核心同时是多线程的)或其组合(例如,时间分片取回和解码以及之后例如在超线程技术中的同时多线程)的各种方式来这样做。
尽管在无序执行的上下文中描述了寄存器重命名,但是应该理解,可以在有序架构中使用寄存器重命名。尽管处理器的说明的实施例还包括单独的指令和数据高速缓存单元434/474和共享的L2高速缓存单元476,但是可选实施例可以具有用于指令和数据二者的单个内部高速缓存,例如以级1(L1)内部高速缓存或多级内部高速缓存为例。在一些实施例中,该系统可以包括内部高速缓存和位于核心和/或处理器外部的外部高速缓存的组合。可选地,所有高速缓存可以位于核心和/或处理器的外部。
图5是根据本发明实施例具有集成存储器控制器和图形的单核心处理器和多核心处理器500的方框图。图5中的实线框说明了具有单个核心502A、系统代理510、一组一个或多个总线控制器单元516的处理器500,而虚线框的可选添加说明了具有多个核心502A-N、系统代理单元510中的一组一个或多个集成存储器控制器单元514以及集成图形逻辑508的可选处理器500。
存储器等级包括核心内的一级或多级高速缓存、一组一个或多个共享的高速缓存单元506以及耦接到该组集成的存储器控制器单元514的外部存储器(未示出)。该组共享的高速缓存单元506可以包括一个或多个中间级高速缓存,例如级2(L2)、级3(L3)、级4(L4)或其它级高速缓存、最后一级高速缓存(LLC)和/或其组合。尽管在一个实施例中,基于环的互连单元512将集成图形逻辑508、该组共享的高速缓存506和系统代理单元510互连,但是可选实施例可以使用用于使这样的单元互连的任何数量的公知技术。
在一些实施例中,核心502A-N中的一个或多个具有多线程能力。系统代理510包括协调和操作核心502A-N的那些部件。系统代理单元510可以例如包括功率控制单元(PCU)和显示单元。PCU可以是或包括调节核心502A-N和集成图形逻辑508的功率状态需要的逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核心502A-N在架构和/或指令集方面可以是同构或异构的。例如,核心502A-N中的一些核心可以是有序的,而其它核心是无序的。作为另一示例,核心502A-N中的两个或更多个可以能够执行相同的指令集,而其它核心可能只能执行该指令集的子集或不同的指令集。
处理器可以是通用处理器,例如从加利福尼亚州Santa Clara的英特尔公司可获得的CoreTM i3、i5、i7、2Duo和Quad、XeonTM、ItaniumTM、XScaleTM或StrongARMTM处理器。可选地,处理器可以来自另一公司,例如ARM Holdings有限公司、MIPS等等。处理器可以是专用处理器,例如以网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等等为例。可以将处理器实现在一个或多个芯片上。处理器500可以是一个或多个衬底的一部分和/或可以使用例如以BiCMOS、CMOS或NMOS为例的多种处理技术中的任何一种在一个或多个衬底上实现。
图6-8是适合于包括处理器500的示例性系统,而图9是可以包括一个或多个核心502的示例性片上系统(SoC)。在膝上型计算机、桌面型计算机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持设备和各种其它电子设备的领域中已知的其它系统设计和配置也是适当的。通常,能够结合如本文公开的处理器和/或其它执行逻辑的种类繁多的系统或电子设备通常是适当的。
现在参考图6,示出了根据本发明一个实施例的系统600的方框图。系统600可以包括耦接到图形存储器控制器集线器(GMCH)620的一个或多个处理器610、615。额外的处理器615的可选性质用虚线在图6中示出。
每一个处理器610、615可以是某个版本的处理器500。然而,应该注意,集成图形逻辑和集成存储器控制单元不可能存在于处理器610、615中。图6说明了可以耦接到存储器640的GMCH 620,该存储器640可以例如是动态随机存取存储器(DRAM)。对于至少一个实施例,DRAM可以与非易失性高速缓存相关联。
GMCH 620可以是芯片集或芯片集的一部分。GMCH 620可以与处理器610、615通信,并且控制处理器610、615和存储器640之间的交互。GMCH 620还可以用作处理器610、615和系统600的其它元件之间的加速总线接口。对于至少一个实施例,GMCH 620经由诸如前侧总线(FSB)695的多点总线与处理器610、615进行通信。
而且,GMCH 620耦接到显示器645(例如平板显示器)。GMCH 620可以包括集成图形加速器。GMCH 620进一步耦接到输入/输出(I/O)控制器集线器(ICH)650,该ICH 650可以用于将各种外围设备耦接到系统600。例如在图6的实施例中示出的是外部图形设备660连同另一外围设备670,该外部图形设备660可以是耦接到ICH 650的分立图形设备。
可选地,额外或不同的处理器也可以存在于系统600中。例如,额外的处理器615可以包括与处理器610相同的额外的处理器、与处理器610异构或不对称的额外的处理器、加速器(例如以图形加速器或数字信号处理(DSP)单元为例)、现场可编程门阵列或任何其它处理器。在包括架构、微架构、热、功耗特性等等的有价值的度量频谱方面,可以在物理资源610、615之间存在各种差异。这些差异可以有效地将其自身表现为处理器610、615当中的不对称性和异构性。对于至少一个实施例,各种处理器610、615可以驻留在相同的裸片封装中。
现在参考图7,示出了根据本发明实施例的第二系统700的方框图。如图7所示,多处理器系统700是点到点互连系统,并且包括经由点到点互连750耦接的第一处理器770和第二处理器780。处理器770和780中的每一个可以是与处理器610、615中的一个或多个具有相同版本的处理器500。
尽管仅示出了两个处理器770、780,但是应该理解,本发明的范围不局限于此。在其它实施例中,给定的处理器中可以存在一个或多个额外的处理器。
将处理器770和780表示为分别包括集成存储器控制器单元772和782。处理器770还包括其总线控制器单元点到点(P-P)接口776和778的一部分;类似地,第二处理器780包括P-P接口786和788。处理器770、780可以使用P-P接口电路778、788经由点到点(P-P)接口750来交换信息。如图7所示,IMC 772和782将处理器耦接到可以是本地附接到各自处理器的主存储器的部分的各自存储器,即,存储器732和存储器734。
处理器770、780可以使用点到点接口电路776、794、786、798分别经由单独的P-P接口752、754来与芯片集790交换信息。芯片集790也可以经由高性能图形接口739与高性能图形电路738交换信息。
可以将共享的高速缓存(未示出)包括在任一处理器中或在两个处理器的外侧,但是还经由P-P互连与处理器连接,以使得如果将处理器置于低功率模式中,则可以将任一或两个处理器的本地高速缓存信息存储在共享的高速缓存中。
芯片集790可以经由接口796耦接到第一总线716。在一个实施例中,第一总线716可以是外围部件互连(PCI)总线或诸如PCI Express总线的总线或另一第三代I/O互连总线,尽管本发明的范围并不局限于此。
如图7所示,可以将各种I/O设备714连同总线桥718耦接到第一总线716,该总线桥718将第一总线716耦接到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。在一个实施例中,可以将各种设备耦接到第二总线720,例如包括键盘和/或鼠标722、通信设备727和诸如可以包括指令/代码和数据730的磁盘驱动或其它海量存储设备的存储单元728。进而,可以将音频I/O 724耦接到第二总线720。注意到,其它架构是可能的。例如,代替图7的点到点架构,系统可以实现多点总线或其它这样的架构。
现在参考图8,示出了根据本发明实施例的第三系统800的方框图。在图7和图8中的相似元素使用相似的参考标记,并且从图8中省略了图7的某些方面,以便避免混淆图8的其它方面。
图8说明了处理器870、880可以分别包括集成存储器和I/O控制逻辑(“CL”)872和882。对于至少一个实施例,CL 872、882可以包括例如上面关于图5和图7描述的集成存储器控制器单元。此外,CL 872、882还可以包括I/O控制逻辑。图8说明了不仅存储器832、834耦接到CL 872、882,而且I/O设备814也耦接到控制逻辑872、882。传统I/O设备815耦接到芯片集890。
现在参考图9,示出了根据本发明实施例的SoC 900的方框图。图5中的类似元件具有类似的参考标号。并且,虚线框是在更高级的SoC上的可选特征。在图9中,互连单元902耦接到:包括一组一个或多个核心502A-N和共享的高速缓存单元506的应用处理器910;系统代理单元510;总线控制器单元516;集成存储器控制器单元514;可以包括集成图形逻辑508,用于提供静止和/或视频摄像机功能的图像处理器924,用于提供硬件音频加速的音频处理器926以及用于提供视频编码/解码加速的视频处理器928的一组一个或多个媒体处理器920;静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及用于耦接到一个或多个外部显示器的显示单元940。
图10说明了根据一个实施例可以执行至少一个指令的包含中央处理单元(CPU)和图形处理单元(GPU)的处理器。在一个实施例中,用于执行根据至少一个实施例的操作的指令可以由CPU执行。在另一实施例中,该指令可以由GPU执行。在又一实施例中,可以经过由GPU和CPU执行的操作的组合来执行指令。例如,在一个实施例中,可以接收和解码根据一个实施例的指令用于在GPU上执行。然而,在解码的指令内的一个或多个操作可以由CPU执行,并且结果返回到GPU用于指令的最后撤回。相反,在一些实施例中,CPU可以用作主处理器并且GPU用作协处理器。
在一些实施例中,得益于高度并行的吞吐量处理器的指令可以由GPU执行,而得益于处理器的性能的指令可以由CPU执行,该处理器的性能得益于深度地置有管线的架构。例如,图形、科学应用、金融应用和其它并行工作负荷可以得益于GPU的性能并且因此被执行,而诸如操作系统内核或应用代码的更多顺序应用可以更好地适合于CPU。
在图10中,处理器1000包括CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示设备1040、高清多媒体接口(HDMI)控制器1045、MIPI控制器1050、闪存控制器1055、双数据率(DDR)控制器1060、安全引擎1065和I2S/I2C(集成芯片间声音/集成电路间)接口1070。可以将其它逻辑和电路包括在图10的处理器中,包括更多的CPU或GPU以及其它外围接口控制器。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的代表性数据实现,该代表性数据代表处理器内的各种逻辑,该代表性数据在由机器读取时使该机器制造用于执行本文描述的技术的逻辑。可以将被称为“IP核心”的这样的表示存储在有形的机器可读介质(“磁带”)上并提供给各种消费者或制造设施以加载到实际上制造该逻辑或处理器的制造机器中。例如,可以将诸如由ARM Holdings有限公司开发的CortexTM系列处理器和由中国科学院的计算技术研究院(ICT)开发的Loongson IP核心的IP核心许可或销售给诸如德州仪器、高通、苹果或三星的各种消费者或被许可方,并且在由这些消费者或被许可方生产的处理器中实现。
图11示出了根据一个实施例的IP核心的开发的方框图。存储1130包括模拟软件1120和/或硬件或软件模型1110。在一个实施例中,可以经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160将代表IP核心设计的数据提供到存储1130。然后可以将由模拟工具和模型生成的IP核心信息传输到制造设施,其中它可以由第三方制造以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或多个指令可以与第一类型或架构(例如,x86)相对应,并且可以对具有不同类型或架构(例如,ARM)的处理器进行翻译或仿真。根据一个实施例的指令因此可以在包括ARM、x86、MIPS、GPU或其它处理器类型或架构的任何处理器或处理器类型上执行。
图12说明了根据一个实施例不同类型的处理器如何仿真第一类型的指令。在图12中,程序1205包含可以执行与根据一个实施例的指令相同或实质上相同的功能的一些指令。然而,程序1205的指令可以具有与处理器1215不同或不兼容的类型和/或格式,这意味着具有程序1205中的类型的指令可能不能够由处理器1215进行本地执行。然而,在仿真逻辑1210的帮助下,程序1205的指令被翻译为能够由处理器1215本地执行的指令。在一个实施例中,仿真逻辑体现在硬件中。在另一实施例中,仿真逻辑体现在包含软件的有形机器可读介质中以将具有程序1205中的类型的指令翻译为能够由处理器1215本地执行的类型。在其它实施例中,仿真逻辑是固定功能或可编程硬件和存储在有形机器可读介质上的程序的组合。在一个实施例中,处理器包含仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器的外侧并且由第三方提供。在一个实施例中,处理器能够通过执行包含在处理器中或与处理器相关联的微代码或固件来加载体现在包含软件的有形机器可读介质中的仿真逻辑。
图13是根据本发明实施例对比用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的方框图。在说明的实施例中,指令转换器是软件指令转换器,尽管可选地,该指令转换器可以实现在软件、固件、硬件或其各种组合中。图13示出了可以使用x86编译器1304来编译以高级语言1302编写的程序以生成可以由具有至少一个x86指令集核心1316的处理器本地执行的x86二进制代码1306。具有至少一个x86指令集核心1316的处理器可以代表能够通过兼容地执行或以其它方式处理(1)英特尔x86指令集核心的指令集的相当大的部分或(2)以在具有至少一个x86指令集核心的英特尔处理器上运行为目的的应用或其它软件的对象代码版本来执行与具有至少一个x86指令集核心的英特尔处理器实质上相同的功能的任何处理器,以便实现与具有至少一个x86指令集核心的英特尔处理器实质上相同的结果。X86编译器1304代表可操作地生成x86二进制代码1306(例如,对象代码)的编译器,该x86二进制代码1306可以在具有或不具有额外的链接处理的情况下在具有至少一个x86指令集核心1316的处理器上执行。类似地,图13示出了可以使用可选的指令集编译器1308来编译以高级语言1302编写的程序以生成可以由不具有至少一个x86指令集核心的处理器1314(例如,具有执行加利福尼亚州Sunnyvale的MIPS技术的MIPS指令集和/或执行加利福尼亚州Sunnyvale的ARM Holdings的ARM指令集的核心的处理器)本地执行的可选的指令集二进制代码1310。指令转换器1312用于将x86二进制代码1306转换为可以由不具有x86指令集核心1314的处理器本地执行的代码。这一转换的代码不可能与可选的指令集二进制代码1310相同,因为难于制造具有这一能力的指令转换器;然而,转换的代码将实现一般操作并且由来自可选的指令集的指令构成。因而,指令转换器1312代表软件、固件、硬件或其组合,其经过仿真、模拟或任何其它处理来允许不具有x86指令集处理器或核心的处理器或其它电子设备执行该x86二进制代码1306。
图14A说明了提供向量压缩和旋转功能的指令1401的一个实施例的流程图。指令1401的实施例可以指定向量源操作数1420、掩码寄存器1410、向量目的地操作数1440和向量目的地偏移1430。掩码寄存器1410可以包括多个数据字段,掩码寄存器1410中的多个数据字段中的每一个与诸如向量源操作数1420的向量中的元素单元相对应。在一些实施例中,例如406的解码级可以对指令1401进行解码,并且对解码的指令1401做出响应,例如450的一个或多个执行单元读取掩码寄存器1410中的多个数据字段的值,并且对于掩码寄存器1410中具有未掩蔽值(例如,一)的多个数据字段中的每一个,将相对应的向量元素从向量源操作数1420拷贝到向量目的地1440中在向量目的地偏移1430单元(例如,元素单元四)处开始的相邻顺序元素单元。对于一些实施例,将来自向量源操作数1420的相对应的向量元素拷贝到以向量目的地1440中的元素单元的总数量(例如,八)为模的相邻顺序元素单元,例如在x86处理器的256位Ymm寄存器中的八个32位元素单元。
将认识到,向量目的地1440可以仅具有两个64位元素单元,或者可选地16个32位元素单元,或者32个16位元素单元,等等。
图14B说明了提供向量压缩和旋转功能的指令1402的另一实施例的流程图。指令1402的实施例也可以指定向量源操作数1420、掩码1410、向量目的地操作数1440和向量目的地偏移1430。掩码1410也可以包括多个数据字段,掩码1410中的多个数据字段中的每一个与诸如向量源操作数1420的向量中的元素单元相对应。在一些实施例中,例如406的解码级可以对指令1402进行解码,并且对解码的指令1402做出响应,例如450的一个或多个执行单元读取掩码1410中的多个数据字段的值,并且对于掩码1410中具有未掩蔽值(例如,一)的多个数据字段中的每一个,一个或多个执行单元将相对应的向量元素从向量源操作数1420拷贝到向量目的地1440中在向量目的地偏移1430的单元(例如,元素单元四)处开始的相邻顺序元素单元。对于一些实施例,将相对应的向量元素从向量源操作数1420拷贝到在向量目的地偏移1430的单元处开始的相邻顺序元素单元,仅直到填充了最高有效向量目的地1440元素单元为止。
对于一些实施例,在将每一个相对应的向量元素从向量源操作数1420拷贝到向量目的地1440中的相邻顺序元素单元时,将掩码寄存器1410中的相对应的数据字段的值从未掩蔽值改变到掩蔽值,例如在这一示例中仅保持掩码寄存器1410中的最高位不变。将认识到,在这样的实施例中,可以通过再次执行具有修改的掩码和零偏移的指令来提供旋转功能。
图15A说明了用于使用提供向量压缩和旋转功能的指令的处理1501的实施例的流程图。通过可以包括专用硬件或由通用机器或由专用机器或由该二者的组合可以执行的软件或固件操作代码的处理方框来执行处理1501和本文公开的其它处理。
在处理1501中,将向量1510的每一个元素中的顶部值(TopVal)v与例如向量寄存器1515中的向量B[3:0]的每一个元素进行比较,以确定B的元素是否小于该顶部值v,并且生成例如掩码0 1520的掩码,以存储结果。将掩码中被设置为未掩蔽值的位的数量的计数存储到count 1530。对向量A[3:0]的元素根据掩码0 1520中的未掩蔽设置进行压缩,并且将该向量的元素存储到在例如初始为零的初始偏移R0 1535处开始的向量寄存器1575。将count 1530的值添加到偏移R0 1535的值以生成偏移R1 1545。
然后类似地,将例如向量寄存器1550中的向量TopVal的元素的顶部值v与例如向量寄存器1555中的向量B[7:4]的每一个元素进行比较,以确定B的这些元素是否小于顶部值v,并且生成例如掩码1 1560的另一掩码,以存储结果。对向量A[7:4]的元素根据掩码11560中的未掩蔽设置进行压缩,并且将该向量的元素存储到在偏移R1 1545处开始的向量寄存器1585。
对于一些实施例,将向量元素A[7:4]从向量源1565压缩到在向量目的地偏移1545单元处开始的以向量目的地1585中的元素单元的总数量为模的相邻顺序元素单元。count1530用于将所有为一的掩码1540向左移位以产生掩码1570,该掩码1570可以用于例如使用在掩码操作下的移动来将向量寄存器1575和向量寄存器1585中的压缩结果组合到向量寄存器1590中。
将认识到,可以然后将向量寄存器1590存储到存储器,并且可以以R1 1545的初始偏移加上掩码1560中被设置为未掩蔽值的位的数量减去向量目的地1585中的元素单元的总数量(即,在本例中,为一的新初始偏移)开始另一迭代(未示出)。
图15B说明了用于使用用于提供向量压缩和旋转功能的指令的处理1502的另一实施例的流程图。在处理1502中,将例如向量寄存器1510中的向量TopVal的每一个元素中的顶部值v与例如向量寄存器1515中的向量B[3:0]的每一个元素进行比较,以确定B的元素是否小于顶部值v,并且生成例如掩码0 1520的掩码,以存储结果。将掩码中被设置为未掩蔽值的位的数量的计数存储到count 1530。对向量A[3:0]的元素根据掩码0 1520中的未掩蔽设置进行压缩,并且将该向量的元素存储到在例如初始为零的初始偏移R0 1535处开始的向量寄存器1590。将count 1530的值添加到偏移R0 1535的值以生成偏移R1 1545。
然后类似地,将例如向量寄存器1550或向量寄存器1510中的向量TopVal的元素中的顶部值v与例如向量寄存器1555中的向量B[7:4]的每一个元素进行比较,以确定B的这些元素是否小于顶部值v,并且生成例如掩码1 1560的另一掩码,以存储结果。对向量A[7:4]的元素根据掩码1 1560中的未掩蔽设置进行压缩,并且将该向量的元素存储到在偏移R11545处开始的向量寄存器1590。
对于一些实施例,将向量元素A[7:4]从向量源1565压缩到在向量目的地偏移1545单元处开始的相邻顺序元素单元,仅直到填充了最高有效向量目的地1590元素单元为止。对于一些实施例,在将每一个相对应的向量元素从向量源1565拷贝到向量目的地1590中的相邻顺序元素单元时,将掩码寄存器1560中的相对应的数据字段的值从未掩蔽值改变到掩蔽值,例如仅保持掩码寄存器1560中的最高有效位不变。将认识到,在这样的实施例中,可以通过再次执行具有修改的掩码和为零的另一偏移的指令来提供旋转功能。
图16A说明了用于提供向量压缩和旋转功能的处理1601的一个实施例的流程图。通过可以包括专用硬件或由通用机器或由专用机器或由该二者的组合可以执行的软件或固件操作代码的处理方框来执行处理1601和本文公开的其它处理。
在处理1601的处理方框1610中,对压缩旋转指令进行解码。在处理方框1615中,将内部变量i设置为零(0),并且将内部变量j设置为零(0)。在处理方框1630中,读取掩码寄存器中的第一多个数据字段的值,并且对于每一个数据字段掩码[i],确定是否将该数据字段的值设置为一(1)。将认识到,任何可选的值可以用于表示掩码[i]中的未掩蔽值,包括零(0)或负一(-1)等等。如果确定没有将数据字段掩码[i]设置为一(1),则处理进行到处理方框1655,其中内部变量i递增。否则,在处理方框1645中,对于具有值一(1)的掩码寄存器中的每一个数据字段,将来自向量源的相对应的第i个向量元素拷贝并存储到向量目的地Dest中在向量目的地偏移单元rotate加上内部变量j的和以向量目的地Dest的元素单元length的总数量为模的值处开始的相邻顺序元素单元。然后,在处理方框1650中,内部变量j递增,并且在处理方框1655中,内部变量i递增。在处理方框1660中,确定压缩旋转指令的执行是否完成。如果没有完成,则处理1601在处理方框1630中开始重新迭代。否则,处理在处理方框1665中结束。
将认识到,尽管将处理1601和本文公开的其它处理说明为迭代处理,但是在每当可能的各种实施例中,也可以按照不同的顺序或同时或并行地执行它们的顺序说明的处理方框。
在一些可选实施例中,每当向量目的地为满时,就停止拷贝。当将未掩蔽向量元素从向量源拷贝到向量目的地Dest中的相邻顺序元素单元时,也可以将掩码中的相对应字段的值改变到掩蔽值。因而,掩码值可以用于跟踪进展和/或完成,并且可以在将变为满的目的地存储到存储器之后重新执行指令。然后可以使用修改的掩码和为零的向量目的地偏移来重新执行指令,以便仅压缩仍然需要执行向量压缩和旋转指令的元素,从而允许改善的指令吞吐量。
图16B说明了用于提供向量压缩和旋转功能的处理1602的另一实施例的流程图。在处理1602的处理方框1610中,对压缩旋转指令进行解码。在处理方框1615中,将内部变量i设置为零(0),并且将内部变量j设置为零(0)。在处理方框1630中,读取掩码寄存器中的第一多个数据字段的值,并且对于每一个数据字段掩码[i],确定是否将该数据字段的值设置为一(1)。将再次认识到,任何可选值可以用于表示掩码[i]中的未掩蔽值,包括零(0)或负一(-1)等等。如果确定没有将数据字段掩码[i]设置为一(1),则处理进行到处理方框1655,其中内部变量i递增。否则,在处理方框1635中,确定偏移rotate加上内部变量j的值是否小于向量目的地Dest的元素单元length的总数量。如果为否,则处理进行到处理方框1655,其中内部变量i递增。
否则,在处理方框1640中,将数据字段掩码[i]设置为零(0)。在处理方框1646中,对于掩码寄存器中具有值一(1)的每一个数据字段,将来自向量源的相对应的第i个向量元素拷贝并存储到向量目的地Dest中在向量目的地偏移单元rotate加上内部变量j处开始的相邻顺序元素单元,直到填充了向量目的地Dest的最高有效元素单元。在处理方框1650中,内部变量j递增,并且在处理方框1655中,内部变量i递增。在处理方框1660中,确定压缩旋转指令的执行是否完成。如果为否,则处理1602在处理方1630中开始重新迭代。否则,处理在处理方框1665中结束。
图17说明了用于提供向量压缩和旋转功能的处理1701的另一实施例的流程图。在处理1701的处理方框1710中,对压缩旋转指令进行解码。在处理方框1715中,将内部变量i设置为零(0),并且将内部变量j设置为零(0)。在处理方框1720中,确定是否要应用向量目的地Dest的归零。如果为是,则将零存储到向量目的地Dest中的所有元素单元。在一些可选实施例中,仅将零元素存储到其中没有拷贝来自向量源的元素的向量目的地单元。否则,如果没有应用向量目的地Dest的归零,则处理直接进行到处理方框1730。
在处理方框1730中,读取掩码寄存器中的第一多个数据字段的值,并且对于每一个数据字段掩码[i],确定是否将该数据字段的值设置为一(1)。将再次认识到,任何可选的值可以用于表示掩码[i]中的未掩蔽值,包括零(0)或负一(-1)等等。如果确定没有将数据字段掩码[i]设置为一(1),则处理进行到处理方框1745,其中内部变量i递增。否则,在处理方框1735中,对于掩码寄存器中具有值一(1)的每一个数据字段,将来自向量源的相对应的第i个向量元素拷贝并存储到向量目的地Dest中在向量目的地偏移单元rotate加上内部变量j的和以向量目的地Dest的元素单元length的总数量为模处开始的相邻顺序元素单元。然后在处理方框1740中,内部变量j递增,并且在处理方框1745中,内部变量i递增。在处理方框1750中,确定是否完成压缩旋转指令的执行。如果为否,则处理1701在处理方框1730中开始重新迭代。否则,处理在处理方框1755中结束。
将认识到,处理1601和1701可以用于在否则不容易被向量化的应用中提供向量压缩功能,例如在诸如在SPEC基准组的444.NAMD的内环中的应用中,从而减少到外部存储器的昂贵顺序存储的数量,增加性能,并且降低功率使用。
图18说明了用于在基准应用中提供向量压缩功能的处理1801的实施例的流程图。在处理1801的处理方框1810中,将变量i设置为零(0),并且将last-i设置为last减去向量寄存器的length。在处理方框1815中,将例如向量寄存器1510的向量TopVal[length:0]的每一个元素中的顶部值v与向量B[length+i:i]的每一个元素进行比较,以确定B的元素是否小于顶部值v,并且例如在掩码寄存器1520中生成掩码,以存储结果。在处理方框1820中,将掩码中被设置为未掩蔽值的位的数量的计数存储到count。在处理方框1830中,确定count是否大于零。如果为否,则处理进行到处理方框1870,其中将值length与i相加。
否则,处理进行到处理方框1835,其中将向量A[length+i:i]的元素加载到向量寄存器DestA[length:0]中。然后处理进行到处理方框1845,其中将DestA[length:0]压缩并存储到存储器中在由存储器指针操作数根据在掩码中设置的未掩蔽字段指示的存储器单元处开始的相邻顺序元素单元。在处理方框1860中,使存储器指针增加count,即,如果向量元素为八个字节长,则使存储器指针的值增加count的值的八倍。接下来,处理进行到处理方框1870,其中将值length与i相加。然后,在处理方框1875中,确定i是否大于last i。如果为是,则仅存在几个剩余的元素要考虑,以便完成该处理,这发生在处理方框1880中。否则,处理在处理方框1815中开始重新迭代。
图19A说明了用于在基准应用中提供向量压缩和旋转功能的处理1901的实施例的流程图。在处理1901的处理方框1910中,将变量i设置为零(0),将offset设置为零(0),并且将last i设置为last减去向量寄存器的length,并且将mask2设置为全一。在处理方框1915中,将诸如向量寄存器1510的向量TopVal[length:0]的每一个元素中的顶部值v与向量B[length+i:i]的每一个元素进行比较,以确定B的元素是否小于顶部值v,并且生成诸如掩码1520的掩码,以存储结果。在处理方框1920中,将掩码中被设置为未掩蔽值的位的数量的计数存储到count。在处理方框1925中,对向量A[length+i:i]的元素根据掩码中的未掩蔽设置进行压缩地填充并将其存储到在rotate处开始的DestA[length:0]。在处理方框1930处,使用mask2将DestA[length:0]中先前压缩的元素与DestR中的压缩元素进行混合。然后,在处理1935中,将count的值与rotate的值相加。
在处理方框1940中,确定rotate是否变为大于长度length,即,向量寄存器中保持DestA的元素的数量。如果为否,则处理进行到处理方框1970,其中将值length与i相加。否则,处理进行到处理方框1945,其中将DestA[length:0]存储到存储器指针。在处理方框1950中,从rotate的值中减去length的值。在处理方框1955中,将DestR[length:0]拷贝到DestA[length:0]。在处理方框1960中,使存储器指针增加length,即,如果向量元素为四个字节长,则使存储器指针的值增加length的值的四倍。在处理方框1965中,全一的掩码被通过rotate左移并被存储在mask2中。接下来,处理进行到处理方框1970,其中将值length与i相加。然后,在处理方框1975中,确定i是否大于last i。如果为是,则仅存在几个剩余的元素要考虑,以便完成处理,这发生在处理方框1980中。否则,处理在处理方框1915中开始重新迭代。
如上面讨论的,在一些可选实施例中,每当向量目的地为满时,就可以停止拷贝。在将未掩蔽向量元素从向量源拷贝到向量目的地Dest中的相邻顺序元素单元时,也可以将掩码中的相对应的字段的值改变到掩蔽值。因而,掩码值可以用于跟踪进展和/或完成,并且可以在将变为满的目的地存储到存储器之后重新执行指令。然后,可以使用修改的掩码和为零的向量目的偏移来重新执行指令,以便仅压缩仍然需要向量压缩和旋转指令的执行的元素。
图19B说明了用于在基准应用中提供向量压缩和旋转功能的处理1902的可选实施例的流程图。在处理1902的处理方框1911中,将变量i设置为零(0),将offset设置为零(0),并且将last i设置为last减去向量寄存器的length。在处理方框1915中,将诸如向量寄存器1510的向量TopVal[length:0]的每一个元素中的顶部值v与向量B[length+i:i]的每一个元素进行比较,以确定B的元素是否小于顶部值v,并且生成诸如掩码1520的掩码,以存储结果。在处理方框1920中,将掩码中被设置为未掩蔽值的位的数量的计数存储到count。在处理方框1926中,对向量A[length+i:i]的元素根据掩码中的未掩蔽设置进行压缩填充,并且将其存储到DestA[length:offset]。然后,在处理1931中,将count的值与offset的值相加。
在处理方框1941中,确定offset是否变为大于长度length,即,向量寄存器中保持DestA的元素的数量。如果为否,则处理进行到处理方框1970,其中将值length与i相加。否则,处理进行到处理方框1945,其中将DestA[length:0]存储到存储器指针。在处理方框1951中,从offset的值减去length的值。在处理方框1956中,对向量A[length+i:i]的元素根据更新的掩码中的未掩蔽设置进行压缩填充,并且将其存储到DestA[length:0]。在处理方框1960中,使存储器指针增加length,即,如果向量元素是四个字节长,则使存储器指针的值增加length的值的四倍。接下来,处理进行到处理方框1970,其中将值length与i相加。然后,在处理方框1975中,确定i是否大于last i。如果为是,则仅存在几个剩余的元素要考虑,以便完成处理,这发生在处理方框1980中。否则,处理在处理方框1915中开始重新迭代。
本发明的实施例涉及可以用于在否则不容易被向量化的应用中提供向量压缩功能的SIMD向量压缩和旋转指令,例如在诸如在SPEC基准组的444.NAMD的内环中的基准应用中,从而减少到外部存储器的昂贵顺序存储的数量,增加性能并降低功率使用。在一些实施例中,掩码值可以用于跟踪进展和/或完成,并且可以在将为满的目的地存储到存储器之后重新执行指令,该重新执行的指令使用修改的掩码和为零的偏移来仅压缩仍然需要由向量压缩和旋转指令进行压缩的元素。可选实施例使其中没有拷贝来自向量源的元素的向量目的地的元素归零。
可以将本文公开的机制的实施例实现在硬件、软件、固件或这样的实现方案的组合中。可以将本发明实施例实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行的计算机程序或程序代码。
可以将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以将输出信息以已知的方式应用到一个或多个输出设备。为了本申请的目的,处理系统包括具有例如以数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器为例的处理器的任何系统。
可以使用高级过程或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果需要,也可以使用汇编或机器语言来实现程序代码。事实上,本文描述的机制在范围上并不局限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。
可以通过存储在机器可读介质上的代表性指令来实现至少一个实施例的一个或多个方面,该代表性指令表示处理器内的各种逻辑,当由机器读取时,该代表性指令使该机器制造逻辑以执行本文描述的技术。可以将被称为“IP核心”的这样的表示存储在有形的机器可读介质上并提供给各种消费者或制造设施,以便加载到实际上制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不局限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如硬盘的存储介质,包括软盘、光盘、压缩盘只读存储器(CD-ROM)、可写入压缩盘(CD-RW)和磁光盘的任何其它类型的盘,诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)的半导体设备,磁卡或光卡,或适合于存储电子指令的任何其它类型的介质。
因此,本发明的实施例还包括包含指令或包含诸如硬件描述语言(HDL)的设计数据的非暂态有形机器可读介质,该设计数据定义本文描述的结构、电路、装置、处理器和/或系统特征。也可以将这样的实施例称为程序产品。
在一些情况下,可以使用指令转换器将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令翻译(例如,使用静态二进制翻译、包括动态编译的动态二进制翻译)、转变、仿真或以另外方式转换到要由核心处理的一个或多个其它指令。可以将指令转换器实现在软件、硬件、固件或其组合中。指令转换器可以在处理器上、处理器外或部分在处理器上且部分在处理器外。
因而,公开了用于执行根据至少一个实施例的一个或多个指令的技术。尽管在附图中描述和示出了某些示例性实施例,但是应该理解,这样的实施例仅仅是对宽泛的发明的说明而非限制,并且本发明不局限于该示出和描述的特定构造和布置,因为本领域中的普通技术人员在研究本公开时可以想到各种其它修改。在诸如成长迅速并且不容易预见进一步发展的这样的技术领域中,在不偏离本公开的原理或者所附权利要求的范围的情况下,通过技术进步的促进,能够在布置和细节上容易地修改公开的实施例。

Claims (36)

1.一种处理器,包括:
掩码寄存器,包括第一多个数据字段,其中,所述掩码寄存器中的所述第一多个数据字段中的每一个与向量中的元素单元相对应;
解码级,用于对指定向量源操作数、所述掩码寄存器、向量目的地操作数和向量目的地偏移的第一指令进行解码;以及
一个或多个执行单元,用于响应于解码的第一指令来执行以下操作:
读取所述掩码寄存器中的所述第一多个数据字段的多个值;
对于所述掩码寄存器中的所述第一多个数据字段中的第一值,将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第一相邻顺序元素单元,所述第一向量元素在所述向量目的地偏移单元处;
在将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第一相邻顺序元素单元之后,将所述掩码寄存器中的所述第一值从第一未掩蔽值改变到第一掩蔽值;
对于所述掩码寄存器中的所述第一多个数据字段中的第二值,将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第二相邻顺序元素单元;以及
在将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第二相邻顺序元素单元之后:
将所述掩码寄存器中的所述第二值从第二未掩蔽值改变到第二掩蔽值,所述第一掩蔽值和所述第二掩蔽值用于跟踪解码的第一指令的完成进展;
确定所述向量目的地操作数已满并且将所述向量目的地操作数存储到存储器中;
将所述向量目的地偏移单元设置为零;以及
使用所述第一掩蔽值、所述第二掩蔽值和所述向量目的地偏移单元来重新执行所述第一指令以压缩第三向量元素。
2.如权利要求1所述的处理器,其中,来自所述向量源操作数的相对应的第一和第二向量元素被拷贝到以所述向量目的地操作数中的元素单元的总数量为模的相邻顺序元素单元。
3.如权利要求2所述的处理器,其中,所述第一指令是向量压缩和旋转指令。
4.如权利要求1所述的处理器,其中,来自所述向量源操作数的相对应的第一和第二向量元素被拷贝到在所述向量目的地偏移单元处开始的相邻顺序元素单元,仅直到填充了最高有效向量目的地元素单元为止。
5.如权利要求4所述的处理器,其中,所述第一指令是向量压缩、填充和旋转指令。
6.如权利要求1所述的处理器,其中,所述第一未掩蔽值为一。
7.如权利要求5所述的处理器,其中,所述第二掩蔽值为零。
8.如权利要求1所述的处理器,其中,拷贝到所述向量目的地操作数中的所述第一向量元素和所述第二向量元素是32位数据元素。
9.如权利要求1所述的处理器,其中,拷贝到所述向量目的地操作数中的所述第一向量元素和所述第二向量元素是64位数据元素。
10.如权利要求1所述的处理器,其中,所述向量目的地操作数是128位向量寄存器。
11.如权利要求1所述的处理器,其中,所述向量目的地操作数是256位向量寄存器。
12.如权利要求1所述的处理器,其中,所述向量目的地操作数是512位向量寄存器。
13.一种执行第一指令的方法,包括:
读取掩码寄存器中的第一多个数据字段的多个值;
对于所述掩码寄存器中的所述第一多个数据字段中的第一值,将相对应的第一向量元素从向量源操作数拷贝到向量目的地操作数中的第一相邻顺序元素单元,所述第一向量元素在向量目的地偏移单元处;
在将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第一相邻顺序元素单元之后,将所述掩码寄存器中的所述第一值从第一未掩蔽值改变到第一掩蔽值;
对于所述掩码寄存器中的所述第一多个数据字段中的第二值,将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第二相邻顺序元素单元;以及
在将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第二相邻顺序元素单元之后:
将所述掩码寄存器中的所述第二值从第二未掩蔽值改变到第二掩蔽值,所述第一掩蔽值和所述第二掩蔽值用于跟踪所述第一指令的完成进展;
确定所述向量目的地操作数已满并且将所述向量目的地操作数存储到存储器中;
将所述向量目的地偏移单元设置为零;以及
使用所述第一掩蔽值、所述第二掩蔽值和所述向量目的地偏移单元来重新执行所述第一指令以压缩第三向量元素。
14.如权利要求13所述的方法,其中,来自所述向量源操作数的相对应的第一和第二向量元素被拷贝到以所述向量目的地操作数中的元素单元的总数量为模的相邻顺序元素单元。
15.如权利要求13所述的方法,其中,来自所述向量源操作数的相对应的第一和第二向量元素被拷贝到在所述向量目的地偏移单元处开始的相邻顺序元素单元,仅直到填充了最高有效向量目的地元素单元为止。
16.如权利要求13所述的方法,其中,存储到所述向量目的地操作数中的所述第一向量元素和所述第二向量元素是32位数据元素。
17.如权利要求13所述的方法,其中,存储到所述向量目的地操作数中的所述第一向量元素和所述第二向量元素是64位数据元素。
18.如权利要求13所述的方法,其中,所述向量目的地操作数是128位向量寄存器。
19.如权利要求13所述的方法,其中,所述向量目的地操作数是256位向量寄存器。
20.如权利要求13所述的方法,其中,所述向量目的地操作数是512位向量寄存器。
21.一种处理器,包括:
解码级,用于对指定向量源操作数、掩码寄存器、向量目的地操作数和向量目的地偏移的第一单指令多数据(SIMD)指令进行解码;以及
一个或多个执行单元,用于响应于解码的第一SIMD指令来执行以下操作:
读取所述掩码寄存器中的第一多个数据字段的多个值;
对于所述掩码寄存器中的所述第一多个数据字段中的第一值,将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中在所述向量目的地偏移单元处开始的以所述向量目的地操作数中的元素单元的总数量为模的第一相邻顺序元素单元;
在将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第一相邻顺序元素单元之后,将所述掩码寄存器中的所述第一值从第一未掩蔽值改变到第一掩蔽值;
对于所述掩码寄存器中的所述第一多个数据字段中的第二值,将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的以所述向量目的地操作数中的元素单元的总数量为模的第二相邻顺序元素单元;以及
在将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第二相邻顺序元素单元之后:
将所述掩码寄存器中的所述第二值从第二未掩蔽值改变到第二掩蔽值,所述第一掩蔽值和所述第二掩蔽值用于跟踪解码的第一SIMD指令的完成进展;
确定所述向量目的地操作数已满并且将所述向量目的地操作数存储到存储器中;
将所述向量目的地偏移单元设置为零;以及
使用所述第一掩蔽值、所述第二掩蔽值和所述向量目的地偏移单元来重新执行所述第一SIMD指令以压缩第三向量元素。
22.如权利要求21所述的处理器,其中,所述向量目的地操作数是128位向量寄存器。
23.如权利要求21所述的处理器,其中,所述向量目的地操作数是256位向量寄存器。
24.如权利要求21所述的处理器,其中,所述向量目的地操作数是512位向量寄存器。
25.一种处理器,包括:
解码级,用于对指定向量源操作数、掩码寄存器、向量目的地操作数和向量目的地偏移的第一单指令多数据(SIMD)指令进行解码;以及
一个或多个执行单元,用于响应于解码的第一SIMD指令来执行以下操作:
读取所述掩码寄存器中的第一多个数据字段的多个值;
对于所述掩码寄存器中的所述第一多个数据字段中的第一值,将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第一相邻顺序元素单元,所述第一向量元素在所述向量目的地偏移单元处;
在将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第一相邻顺序元素单元之后,将所述掩码寄存器中的所述第一值从第一未掩蔽值改变到第一掩蔽值;
对于所述掩码寄存器中的所述第一多个数据字段中的第二值,将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第二相邻顺序元素单元;以及
在将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第二相邻顺序元素单元之后:
将所述掩码寄存器中的所述第二值从第二未掩蔽值改变到第二掩蔽值,所述第一掩蔽值和所述第二掩蔽值用于跟踪解码的第一SIMD指令的完成进展;
确定所述向量目的地操作数已满并且将所述向量目的地操作数存储到存储器中;
将所述向量目的地偏移单元设置为零;以及
使用所述第一掩蔽值、所述第二掩蔽值和所述向量目的地偏移单元来重新执行所述第一SIMD指令以压缩第三向量元素。
26.如权利要求25所述的处理器,其中,所述第一掩蔽值和所述第二掩蔽值为零。
27.一种处理系统,包括:
存储器;以及
多个处理器,每一个处理器包括:
解码级,用于对指定向量源操作数、掩码操作数、向量目的地操作数和向量目的地偏移的第一SIMD指令进行解码;以及
一个或多个执行单元,用于响应于解码的第一SIMD指令来执行以下操作:
读取掩码寄存器中的第一多个数据字段的多个值;
对于所述掩码寄存器中的所述第一多个数据字段中的第一值,将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第一相邻顺序元素单元,所述第一向量元素在所述向量目的地偏移单元处;
在将相对应的第一向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第一相邻顺序元素单元之后,将所述掩码寄存器中的所述第一值从第一未掩蔽值改变到第一掩蔽值;
对于所述掩码寄存器中的所述第一多个数据字段中的第二值,将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的第二相邻顺序元素单元;以及
在将相对应的第二向量元素从所述向量源操作数拷贝到所述向量目的地操作数中的所述第二相邻顺序元素单元之后:
将所述掩码寄存器中的所述第二值从第二未掩蔽值改变到第二掩蔽值,所述第一掩蔽值和所述第二掩蔽值用于跟踪解码的第一SIMD指令的完成进展;
确定所述向量目的地操作数已满并且将所述向量目的地操作数存储到存储器中;
将所述向量目的地偏移单元设置为零;以及
使用所述第一掩蔽值、所述第二掩蔽值和所述向量目的地偏移单元来重新执行所述第一SIMD指令以压缩第三向量元素。
28.如权利要求27所述的处理系统,其中,来自所述向量源操作数的相对应的第一和第二向量元素被拷贝到以所述向量目的地操作数中的元素单元的总数量为模的相邻顺序元素单元。
29.如权利要求27所述的处理系统,其中,所述一个或多个执行单元进一步响应于所述第一SIMD指令来执行以下操作:
对于不与从所述向量源操作数拷贝的向量元素相对应的每一个向量目的地元素,使所述向量目的地元素的值归零。
30.如权利要求27所述的处理系统,其中,来自所述向量源操作数的相对应的第一和第二向量元素被拷贝到在所述向量目的地偏移单元处开始的相邻顺序元素单元,仅达到并且直到填充了最高有效向量目的地元素单元为止。
31.如权利要求27所述的处理系统,其中,所述第一掩蔽值和所述第二掩蔽值为零。
32.如权利要求27所述的处理系统,其中,存储到所述向量目的地操作数中的所述第一向量元素和所述第二向量元素是32位数据元素。
33.如权利要求27所述的处理系统,其中,存储到所述向量目的地操作数中的所述第一向量元素和所述第二向量元素是64位数据元素。
34.如权利要求27所述的处理系统,其中,所述向量目的地操作数是128位向量寄存器。
35.如权利要求27所述的处理系统,其中,所述向量目的地操作数是256位向量寄存器。
36.如权利要求27所述的处理系统,其中,所述向量目的地操作数是512位向量寄存器。
CN201310524909.2A 2012-10-30 2013-10-30 提供向量压缩和旋转功能的指令和逻辑 Expired - Fee Related CN103793201B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710568910.3A CN107729048B (zh) 2012-10-30 2013-10-30 提供向量压缩和旋转功能的指令和逻辑

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US13/664,401 2012-10-30
US13/664,401 US9606961B2 (en) 2012-10-30 2012-10-30 Instruction and logic to provide vector compress and rotate functionality

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN201710568910.3A Division CN107729048B (zh) 2012-10-30 2013-10-30 提供向量压缩和旋转功能的指令和逻辑

Publications (2)

Publication Number Publication Date
CN103793201A CN103793201A (zh) 2014-05-14
CN103793201B true CN103793201B (zh) 2017-08-11

Family

ID=49680020

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201310524909.2A Expired - Fee Related CN103793201B (zh) 2012-10-30 2013-10-30 提供向量压缩和旋转功能的指令和逻辑
CN201710568910.3A Expired - Fee Related CN107729048B (zh) 2012-10-30 2013-10-30 提供向量压缩和旋转功能的指令和逻辑

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201710568910.3A Expired - Fee Related CN107729048B (zh) 2012-10-30 2013-10-30 提供向量压缩和旋转功能的指令和逻辑

Country Status (7)

Country Link
US (2) US9606961B2 (zh)
JP (1) JP5739961B2 (zh)
KR (1) KR101555412B1 (zh)
CN (2) CN103793201B (zh)
DE (1) DE102013018238A1 (zh)
GB (1) GB2507655B (zh)
TW (1) TWI610236B (zh)

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9378560B2 (en) * 2011-06-17 2016-06-28 Advanced Micro Devices, Inc. Real time on-chip texture decompression using shader processors
US9513906B2 (en) 2013-01-23 2016-12-06 International Business Machines Corporation Vector checksum instruction
US9715385B2 (en) 2013-01-23 2017-07-25 International Business Machines Corporation Vector exception code
US9471308B2 (en) 2013-01-23 2016-10-18 International Business Machines Corporation Vector floating point test data class immediate instruction
US9823924B2 (en) 2013-01-23 2017-11-21 International Business Machines Corporation Vector element rotate and insert under mask instruction
US9778932B2 (en) 2013-01-23 2017-10-03 International Business Machines Corporation Vector generate mask instruction
US9804840B2 (en) 2013-01-23 2017-10-31 International Business Machines Corporation Vector Galois Field Multiply Sum and Accumulate instruction
US10133570B2 (en) * 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
KR102106889B1 (ko) * 2014-12-11 2020-05-07 한화디펜스 주식회사 소형통합제어장치
US20160188333A1 (en) * 2014-12-27 2016-06-30 Intel Coporation Method and apparatus for compressing a mask value
US20170177348A1 (en) * 2015-12-21 2017-06-22 Intel Corporation Instruction and Logic for Compression and Rotation
US10177782B2 (en) * 2015-12-26 2019-01-08 Intel Corporation Hardware apparatuses and methods for data decompression
GB2552153B (en) * 2016-07-08 2019-07-24 Advanced Risc Mach Ltd An apparatus and method for performing a rearrangement operation
US10891131B2 (en) 2016-09-22 2021-01-12 Intel Corporation Processors, methods, systems, and instructions to consolidate data elements and generate index updates
US10162752B2 (en) * 2016-09-22 2018-12-25 Qualcomm Incorporated Data storage at contiguous memory addresses
EP3336692B1 (en) * 2016-12-13 2020-04-29 Arm Ltd Replicate partition instruction
EP3336691B1 (en) 2016-12-13 2022-04-06 ARM Limited Replicate elements instruction
WO2018150218A1 (en) * 2017-02-17 2018-08-23 Intel Corporation Vector instruction for accumulating and compressing values based on input mask
KR102343652B1 (ko) * 2017-05-25 2021-12-24 삼성전자주식회사 벡터 프로세서의 서열 정렬 방법
CN107748674B (zh) * 2017-09-07 2021-08-31 中国科学院微电子研究所 面向比特粒度的信息处理系统
JP7004905B2 (ja) 2018-03-26 2022-01-21 富士通株式会社 演算処理装置及び演算処理装置の制御方法
US11277455B2 (en) 2018-06-07 2022-03-15 Mellanox Technologies, Ltd. Streaming system
US20200106828A1 (en) * 2018-10-02 2020-04-02 Mellanox Technologies, Ltd. Parallel Computation Network Device
GB2580068B (en) * 2018-12-20 2021-02-24 Advanced Risc Mach Ltd Generating a vector predicate summary
US10831497B2 (en) * 2019-01-31 2020-11-10 International Business Machines Corporation Compression/decompression instruction specifying a history buffer to be used in the compression/decompression of data
US11625393B2 (en) 2019-02-19 2023-04-11 Mellanox Technologies, Ltd. High performance computing system
EP3699770A1 (en) 2019-02-25 2020-08-26 Mellanox Technologies TLV Ltd. Collective communication system and methods
US11604853B2 (en) * 2019-10-18 2023-03-14 Stmicroelectronics S.R.L. System and method for performing vector rotation
US11750699B2 (en) 2020-01-15 2023-09-05 Mellanox Technologies, Ltd. Small message aggregation
US11252027B2 (en) 2020-01-23 2022-02-15 Mellanox Technologies, Ltd. Network element supporting flexible data reduction operations
US11876885B2 (en) 2020-07-02 2024-01-16 Mellanox Technologies, Ltd. Clock queue with arming and/or self-arming features
US11556378B2 (en) 2020-12-14 2023-01-17 Mellanox Technologies, Ltd. Offloading execution of a multi-task parameter-dependent operation to a network device
US12106104B2 (en) * 2020-12-23 2024-10-01 Intel Corporation Processor instructions for data compression and decompression
US11922237B1 (en) 2022-09-12 2024-03-05 Mellanox Technologies, Ltd. Single-step collective operations
CN116578343B (zh) * 2023-07-10 2023-11-21 南京砺算科技有限公司 指令编译方法及装置、图形处理装置、存储介质、终端设备

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4490786A (en) * 1981-06-19 1984-12-25 Fujitsu Limited Vector processing unit
CN101482810A (zh) * 2007-12-26 2009-07-15 英特尔公司 用于处理矢量数据的方法、设备和指令

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0731669B2 (ja) * 1986-04-04 1995-04-10 株式会社日立製作所 ベクトル・プロセツサ
JPH01284972A (ja) 1988-05-11 1989-11-16 Nec Corp ベクトル処理装置
JPH02190968A (ja) 1989-01-19 1990-07-26 Nec Corp ベクトル処理装置
JP2665111B2 (ja) * 1992-06-18 1997-10-22 日本電気株式会社 ベクトル処理装置
US5832290A (en) * 1994-06-13 1998-11-03 Hewlett-Packard Co. Apparatus, systems and method for improving memory bandwidth utilization in vector processing systems
US6091768A (en) * 1996-02-21 2000-07-18 Bru; Bernard Device for decoding signals of the MPEG2 type
US5935198A (en) 1996-11-22 1999-08-10 S3 Incorporated Multiplier with selectable booth encoders for performing 3D graphics interpolations with two multiplies in a single pass through the multiplier
US6052769A (en) * 1998-03-31 2000-04-18 Intel Corporation Method and apparatus for moving select non-contiguous bytes of packed data in a single instruction
US6621428B1 (en) * 2000-05-04 2003-09-16 Hewlett-Packard Development Company, L.P. Entropy codec for fast data compression and decompression
US7054330B1 (en) * 2001-09-07 2006-05-30 Chou Norman C Mask-based round robin arbitration
JP2004302647A (ja) 2003-03-28 2004-10-28 Seiko Epson Corp ベクトルプロセッサおよびレジスタのアドレス指定方法
US7600058B1 (en) * 2003-06-26 2009-10-06 Nvidia Corporation Bypass method for efficient DMA disk I/O
US20050289329A1 (en) * 2004-06-29 2005-12-29 Dwyer Michael K Conditional instruction for a single instruction, multiple data execution engine
US7984273B2 (en) * 2007-12-31 2011-07-19 Intel Corporation System and method for using a mask register to track progress of gathering elements from memory
US9940138B2 (en) * 2009-04-08 2018-04-10 Intel Corporation Utilization of register checkpointing mechanism with pointer swapping to resolve multithreading mis-speculations
US20120216011A1 (en) * 2011-02-18 2012-08-23 Darryl Gove Apparatus and method of single-instruction, multiple-data vector operation masking
US20120254589A1 (en) * 2011-04-01 2012-10-04 Jesus Corbal San Adrian System, apparatus, and method for aligning registers
US20120254592A1 (en) 2011-04-01 2012-10-04 Jesus Corbal San Adrian Systems, apparatuses, and methods for expanding a memory source into a destination register and compressing a source register into a destination memory location
US20130151822A1 (en) * 2011-12-09 2013-06-13 International Business Machines Corporation Efficient Enqueuing of Values in SIMD Engines with Permute Unit
CN104126172B (zh) * 2011-12-22 2018-03-20 英特尔公司 用于掩码寄存器扩充操作的装置和方法
CN107220027A (zh) * 2011-12-23 2017-09-29 英特尔公司 用于执行掩码位压缩的系统、装置以及方法
WO2013101124A1 (en) * 2011-12-29 2013-07-04 Intel Corporation Packed data operation mask comparison processors, methods, systems, and instructions
US8972697B2 (en) * 2012-06-02 2015-03-03 Intel Corporation Gather using index array and finite state machine
US8959275B2 (en) * 2012-10-08 2015-02-17 International Business Machines Corporation Byte selection and steering logic for combined byte shift and byte permute vector unit
US9411593B2 (en) * 2013-03-15 2016-08-09 Intel Corporation Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks
US20150186136A1 (en) * 2013-12-27 2015-07-02 Tal Uliel Systems, apparatuses, and methods for expand and compress
US10133570B2 (en) * 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4490786A (en) * 1981-06-19 1984-12-25 Fujitsu Limited Vector processing unit
CN101482810A (zh) * 2007-12-26 2009-07-15 英特尔公司 用于处理矢量数据的方法、设备和指令

Also Published As

Publication number Publication date
US9606961B2 (en) 2017-03-28
DE102013018238A1 (de) 2014-04-30
JP2014089699A (ja) 2014-05-15
TW201435733A (zh) 2014-09-16
CN107729048A (zh) 2018-02-23
KR101555412B1 (ko) 2015-10-06
KR20140056082A (ko) 2014-05-09
CN103793201A (zh) 2014-05-14
CN107729048B (zh) 2021-09-28
GB2507655A (en) 2014-05-07
US20170192785A1 (en) 2017-07-06
TWI610236B (zh) 2018-01-01
US20140122831A1 (en) 2014-05-01
GB201318167D0 (en) 2013-11-27
US10459877B2 (en) 2019-10-29
JP5739961B2 (ja) 2015-06-24
GB2507655B (en) 2015-06-24

Similar Documents

Publication Publication Date Title
CN103793201B (zh) 提供向量压缩和旋转功能的指令和逻辑
CN104919416B (zh) 用于提供矢量地址冲突检测功能的方法、装置、指令和逻辑
TWI731892B (zh) 用於以通道為基礎的跨步儲存操作之指令及邏輯
JP6207095B2 (ja) 条件付きループをベクトル化する命令及び論理
CN104915181B (zh) 用于条件存储器错误帮助抑制的方法、处理器和处理系统
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
CN104657113B (zh) 用于处理文本串的指令和逻辑
CN103827814B (zh) 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑
CN104937539B (zh) 用于提供推入缓冲器复制和存储功能的指令和逻辑
CN104011662B (zh) 用于提供向量混合和置换功能的指令和逻辑
TWI743064B (zh) 用於取得多重向量元素操作之指令及邏輯
CN107209722A (zh) 用于在安全飞地页面高速缓存中使安全飞地的进程分叉和建立子飞地的指令和逻辑
TWI720056B (zh) 用於設置多重向量元素操作之指令及邏輯
CN108292229A (zh) 用于重新出现的相邻聚集的指令和逻辑
CN107430508A (zh) 用于提供原子范围操作的指令和逻辑
CN108369513A (zh) 用于加载-索引-和-收集操作的指令和逻辑
CN103988173B (zh) 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑
CN108351784A (zh) 用于在乱序处理器中进行有序处理的指令和逻辑
CN107003854A (zh) 提供向量包装元组交叉比较功能的方法、装置、指令和逻辑
CN107690618A (zh) 用于提供向量紧缩直方图功能的方法、装置、指令和逻辑
CN108351785A (zh) 用于部分减少操作的指令和逻辑
CN108369518A (zh) 用于位字段寻址和插入的指令和逻辑
CN108292271B (zh) 用于向量置换的指令和逻辑
CN106575219A (zh) 针对用于处理运算的向量格式的指令和逻辑技术领域
TWI729029B (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
GR01 Patent grant
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20170811

CF01 Termination of patent right due to non-payment of annual fee