CN108369511A - 用于基于通道的跨步存储操作的指令和逻辑 - Google Patents
用于基于通道的跨步存储操作的指令和逻辑 Download PDFInfo
- Publication number
- CN108369511A CN108369511A CN201680074272.3A CN201680074272A CN108369511A CN 108369511 A CN108369511 A CN 108369511A CN 201680074272 A CN201680074272 A CN 201680074272A CN 108369511 A CN108369511 A CN 108369511A
- Authority
- CN
- China
- Prior art keywords
- instruction
- data element
- data
- register
- channel
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
- 238000003860 storage Methods 0.000 title claims abstract description 150
- 239000013598 vector Substances 0.000 claims abstract description 539
- 230000015654 memory Effects 0.000 claims abstract description 242
- 238000000034 method Methods 0.000 claims description 85
- 238000000605 extraction Methods 0.000 claims description 84
- 230000000873 masking effect Effects 0.000 claims description 34
- 239000000284 extract Substances 0.000 claims description 27
- 230000006399 behavior Effects 0.000 claims description 9
- 241001269238 Data Species 0.000 claims description 3
- 238000012545 processing Methods 0.000 description 53
- 238000010586 diagram Methods 0.000 description 35
- 230000008569 process Effects 0.000 description 26
- 230000007246 mechanism Effects 0.000 description 23
- 238000005516 engineering process Methods 0.000 description 21
- 238000012856 packing Methods 0.000 description 20
- 238000004891 communication Methods 0.000 description 18
- 238000007667 floating Methods 0.000 description 16
- 238000004519 manufacturing process Methods 0.000 description 16
- 230000006870 function Effects 0.000 description 15
- 239000003795 chemical substances by application Substances 0.000 description 13
- 239000000872 buffer Substances 0.000 description 12
- 238000013461 design Methods 0.000 description 12
- 230000014509 gene expression Effects 0.000 description 9
- 238000007906 compression Methods 0.000 description 8
- 238000009826 distribution Methods 0.000 description 8
- 230000002093 peripheral effect Effects 0.000 description 8
- 230000006835 compression Effects 0.000 description 7
- 238000004364 calculation method Methods 0.000 description 6
- 230000000717 retained effect Effects 0.000 description 6
- 230000003068 static effect Effects 0.000 description 6
- 230000005540 biological transmission Effects 0.000 description 5
- 238000006073 displacement reaction Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 238000004088 simulation Methods 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 239000000203 mixture Substances 0.000 description 4
- 239000003607 modifier Substances 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 230000001133 acceleration Effects 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 3
- 230000008878 coupling Effects 0.000 description 3
- 238000010168 coupling process Methods 0.000 description 3
- 238000005859 coupling reaction Methods 0.000 description 3
- 238000000151 deposition Methods 0.000 description 3
- 230000005611 electricity Effects 0.000 description 3
- 230000033001 locomotion Effects 0.000 description 3
- 230000001737 promoting effect Effects 0.000 description 3
- 239000007787 solid Substances 0.000 description 3
- 230000009466 transformation Effects 0.000 description 3
- 241000208340 Araliaceae Species 0.000 description 2
- 235000005035 Panax pseudoginseng ssp. pseudoginseng Nutrition 0.000 description 2
- 235000003140 Panax quinquefolius Nutrition 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000008901 benefit Effects 0.000 description 2
- 230000003139 buffering effect Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 235000013399 edible fruits Nutrition 0.000 description 2
- 235000008434 ginseng Nutrition 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 230000014759 maintenance of location Effects 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 238000003032 molecular docking Methods 0.000 description 2
- 229910052754 neon Inorganic materials 0.000 description 2
- GKAOGPIIYCISHV-UHFFFAOYSA-N neon atom Chemical compound [Ne] GKAOGPIIYCISHV-UHFFFAOYSA-N 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000036316 preload Effects 0.000 description 2
- 238000002360 preparation method Methods 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 238000012216 screening Methods 0.000 description 2
- 239000004065 semiconductor Substances 0.000 description 2
- 238000000547 structure data Methods 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000011282 treatment Methods 0.000 description 2
- 239000010752 BS 2869 Class D Substances 0.000 description 1
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 1
- 102000001332 SRC Human genes 0.000 description 1
- 108060006706 SRC Proteins 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 230000009471 action Effects 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 229910002056 binary alloy Inorganic materials 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 239000004020 conductor Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000006837 decompression Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000012938 design process Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000009499 grossing Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 238000002156 mixing Methods 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000013442 quality metrics Methods 0.000 description 1
- 230000008707 rearrangement Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 241000894007 species Species 0.000 description 1
- 239000000758 substrate Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30101—Special purpose registers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
- G06F9/30105—Register structure
- G06F9/30109—Register structure having multiple operands in a single register
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Advance Control (AREA)
Abstract
处理器包括执行单元以执行基于通道的跨步存储指令。执行单元包括用以从源向量寄存器内的多个通道中的每个提取第一数据元素并从每个通道提取第二数据元素的逻辑。执行单元包括用以将从第二通道提取的第一数据元素紧邻从第一通道提取的第一数据元素以及从第二通道提取的第二数据元素紧邻从第一通道提取的第二数据元素放置在目的地向量中。执行单元包括用以从指令中指定的位置开始,将目的地向量存储到存储器中,使得在目的地向量中紧邻彼此放置的数据元素存储在连续位置中的逻辑。紧邻彼此放置的数据元素可以是数据结构的相应分量。
Description
技术领域
本公开涉及处理逻辑、微处理器以及关联的指令集架构的领域,所述指令集架构当由处理器或其它处理逻辑执行时执行逻辑、数学或其它功能操作。
背景技术
微处理器系统正变得越来越常见。多处理器系统的应用包括动态域分区,一直到桌面计算。为了利用多处理器系统,要执行的代码可被分成多个线程以用于由各种处理实体执行。每个线程可彼此并行执行。当指令在处理器上接收时,它们可以被解码成项或指令字(其是本机(native)或更本机的)以用于在处理器上执行。处理器可在片上系统中实现。被组织成三个或四个元素的元组的数据结构可以在媒体应用、高性能计算应用以及分子动力学应用中使用。
附图说明:
在附图的图中作为示例而非限制示出了实施例:
图1A是根据本公开的实施例用可包含执行指令的执行单元的处理器形成的示范计算机系统的框图;
图1B示出了根据本公开的实施例的数据处理系统;
图1C示出了用于执行文本字符串比较操作的数据处理系统的其它实施例;
图2是根据本公开的实施例可包含执行指令的逻辑电路的处理器的微架构的框图;
图3A示出了根据本公开的实施例的多媒体寄存器中的各种打包数据类型表示;
图3B示出了根据本公开的实施例的可能寄存器中的数据存储格式;
图3C示出了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号的打包数据类型表示;
图3D示出了操作编码格式的实施例;
图3E示出了根据本公开的实施例的具有40位或更多位的另一可能操作编码格式;
图3F示出了根据本公开的实施例的又一可能操作编码格式;
图4A是示出根据本公开实施例的有序流水线和寄存器重命名阶段、无序发布/执行流水线的框图;
图4B是示出根据本公开实施例的要包含在处理器中的有序架构核以及寄存器重命名逻辑、无序发布/执行逻辑的框图;
图5A是根据本公开实施例的处理器的框图;
图5B是根据本公开实施例的核的示例实现的框图;
图6是根据本公开实施例的系统的框图;
图7是根据本公开实施例的第二系统的框图;
图8是根据本公开实施例的第三系统的框图;
图9是根据本公开实施例的片上系统的框图;
图10示出了根据本公开的实施例的可执行至少一个指令的含有中央处理单元和图形处理单元的处理器;
图11是示出根据本公开实施例的IP核的开发的框图;
图12示出根据本公开的实施例,第一类型的指令可如何由不同类型的处理器仿真;
图13示出根据本公开的实施例的对比将源指令集中的二进制指令转换成目标指令集中二进制指令的软件指令转换器的使用的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更详细框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子装置的框图;
图18是根据本公开的实施例的用于基于通道的跨步存储操作的指令和逻辑的示例系统的说明;
图19是示出根据本公开的实施例的用以执行扩展向量指令的处理器核的框图;
图20是示出根据本公开的实施例的示例扩展向量寄存器堆的框图;
图21是根据本公开的实施例的用以执行基于通道的跨步存储操作的操作的说明;
图22A至图22C示出根据本公开的实施例的VPSTORE指令的相应形式的操作;
图23示出根据本公开的实施例的用于执行基于通道的跨步存储操作的示例方法2300;
图24示出根据本公开的实施例的用于利用基于通道的跨步存储操作来置换来自相应不同源的不同类型的数据元素的示例方法2400。
具体实施方式
以下描述描述了用于在处理设备上执行基于通道的跨步存储操作的指令和处理逻辑。此类处理设备可包括无序处理器。在以下描述中,阐述了众多特定细节,诸如处理逻辑、处理器类型、微架构条件、事件、启动(enablement)机制等,以便提供本公开的实施例的更透彻理解。然而,本领域技术人员将认识到,没有此类特定细节也可实践实施例。此外,一些众所周知的结构、电路等尚未详细示出,以避免不必要地使本公开的实施例混淆。
尽管以下实施例参考处理器进行描述,但其它实施例可应用于其它类型集成电路和逻辑装置。本公开的实施例的类似技术和教导可应用于可受益于更高流水线吞吐量和改进性能的其它类型电路或半导体装置。本公开的实施例的教导可应用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可应用于其中可执行数据操纵或管理的任何处理器和机器。此外,以下描述提供了示例,并且附图为了示出目的示出了各种示例。然而,这些示例不应被理解为限制意义,因为它们仅仅意图提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能实现的详尽列表。
尽管以下示例在执行单元和逻辑电路的上下文中描述了指令处置和分发(distribution),但本公开的其它实施例可通过存储在机器可读有形介质上的数据或指令实现,所述指令当由机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,与本公开的实施例关联的功能体现在机器可执行指令中。指令可用于使可用指令编程的通用或专用处理器执行本公开的步骤。本公开的实施例可提供为计算机程序产品或软件,该产品或软件可包括机器或计算机可读介质,其上存储有可用于编程计算机(或其它电子装置)以执行根据本公开的实施例的一个或多个操作的指令。更进一步,本公开的实施例的步骤可由包含用于执行所述步骤的固定功能逻辑的特定硬件组件执行,或者由编程的计算机组件和固定功能硬件组件的任何组合执行。
用于对逻辑编程以执行本公开的实施例的指令可被存储在系统中的存储器内,诸如DRAM、高速缓存、闪速存储器或其它存储装置内。更进一步,指令可经由网络或通过其它计算机可读介质分发。从而,机器可读介质可包含用于存储或传送由机器(例如计算机)可读形式的信息的任何机制,但其不限于软盘、光盘、紧凑盘只读存储器(CD-ROM)、以及磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪速存储器或在因特网上经由电、光、声或其它形式传播信号(例如载波、红外信号、数字信号等)传送信息中使用的有形机器可读存储装置。相应地,计算机可读介质可包含适合于存储或传送由机器(例如计算机)可读形式的电子指令或信息的任何类型有形机器可读介质。
设计从创建到模拟到制造可经过各种阶段。表示设计的数据可用多种方式表示该设计。首先,如在模拟中可能有用的,硬件可使用硬件描述语言或另一功能描述语言表示。附加地,在设计过程的某些阶段,可产生具有逻辑和/或晶体管栅的电路级模型。更进一步,设计在某一阶段可达到用硬件模型表示各种装置的物理布局的数据级。在其中使用一些半导体制造技术的情况下,表示硬件模型的数据可以是规定在用于产生集成电路的掩膜的不同掩膜层上存在或缺乏各种特征的数据。在设计的任何表示中,数据都可存储在任何形式的机器可读介质中。存储器或者磁或光存储装置(诸如盘)可以是机器可读介质,以存储经由调制或以其它方式生成以传送信息的光波或电波传送的此类信息。在传送指示或携带代码或设计的电载波时,就执行电信号的复制、缓冲或重新传送而言,可进行新的拷贝。从而,通信提供商或网络提供商可在有形机器可读介质上至少暂时存储体现本公开实施例的技术的制品,诸如被编码到载波中的信息。
在现代处理器中,可使用若干不同执行单元来处理和执行各种代码和指令。一些指令可能更快地完成,而其它指令可能花了若干时钟周期完成。指令吞吐量越快,处理器的总体性能越好。从而,使许多指令尽可能快地执行会是有利的。然而,可存在具有更大复杂性并且在执行时间和处理器资源方面要求更大的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
当在因特网、文本和多媒体应用中使用更多计算机系统时,已经随时间引入了附加处理器支持。在一个实施例中,指令集可与一个或多个计算机架构关联,包含数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可由一个或多个微架构实现,微架构可包含用于实现一个或多个指令集的处理器逻辑和电路。相应地,具有不同微架构的处理器可共享公共指令集的至少一部分。例如,Intel® Pentium 4处理器、Intel® Core™处理器以及来自加利福尼亚州,Sunnyvale 的Advanced Micro Devices, Inc的处理器实现了几乎相同版本的x86指令集(具有已经对于较新版本被添加的一些扩展),但具有不同的内部设计。类似地,由其它处理器开发公司(诸如ARM Holding, Ltd、MIPS或他们的被许可人或采纳方)设计的处理器可共享公共指令集的至少一部分,但可包含不同处理器设计。例如,ISA的相同寄存器架构可使用新或公知的技术在不同微架构中以不同方式实现,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重新排序缓冲器(ROB)和引退寄存器堆)的一个或多个动态分配的物理寄存器。在一个实施例中,寄存器可包括一个或多个寄存器、寄存器架构、寄存器堆或可以或可以不由软件程序器可寻址的其它寄存器集。
指令可包含一个或多个指令格式。在一个实施例中,除了其它之外,指令格式还可指示要规定的各种字段(位数、位的位置等)、要执行的操作以及在其上将执行操作的操作数。在另外实施例中,一些指令格式可由指令模板(或子格式)进一步定义。例如,给定的指令格式的指令模板可被定义成具有指令格式字段的不同子集,和/或定义成具有不同解释的给定字段。在一个实施例中,指令可使用指令格式(并且如果定义了,则在那个指令格式的指令模板中的给定一个模板中)表述,并且规定或指示操作以及操作将在其上进行操作的操作数。
科学、金融、自动向量化通用、RMS(识别、挖掘和合成)及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音识别算法和音频操纵)可要求对大量数据项执行相同操作。在一个实施例中,单指令多数据(SIMD)指使得处理器对多个数据元素执行操作的指令的类型。在逻辑上可将寄存器中的位划分成多个固定大小或可变大小数据元素(每个元素表示单独的值)的SIMD技术可使用在处理器中。例如,在一个实施例中,可将64位寄存器中的位组织为包含4个单独16位数据元素的源操作数,每个元素表示单独的16位值。此类型的数据可称为“打包”(packed)数据类型或“向量”数据类型,并且此数据类型的操作数可称为打包数据操作数或向量操作数。在一个实施例中,打包数据项或向量可以是在单个寄存器内存储的打包数据元素的序列,并且打包数据操作数或向量操作数可以是SIMD指令(或“打包数据指令”或“向量指令”)的源或目的地操作数。在一个实施例中,SIMD指令指定要对两个源向量操作数执行的单向量操作,以生成相同或不同大小的具有相同或不同数量的数据元素和以相同或不同的数据元素顺序的目的地向量操作数(也称为结果向量操作数)。
例如由具有包括x86、MMX™、流播SIMD扩展(SSE)、SSE2、SSE3、SSE4.1及SSE4.2指令的指令集的Intel® Core™处理器,诸如ARM Cortex®系列处理器的具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM处理器,以及诸如由中国科学院的计算技术研究所(ICT)开发的龙芯(Loongson)系列处理器的MIPS处理器所采用的SIMD技术已经在应用性能方面实现了相当大的改进(Core™和MMX™是加利福尼亚州Santa Clara的IntelCorporation的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是表示对应数据或操作的源和目的地的常规术语。在一些实施例中,它们可通过具有与描绘的那些名称或功能不同的名称或功能的寄存器、存储器或其它存储区域来实现。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其它存储区域,而“SRC1”和“SRC2”可以是第一和第二源存储寄存器或其它存储区域并以此类推。在其它实施例中,两个或更多个SRC和DEST存储区域可对应于相同存储区域(例如,SIMD寄存器)内的不同数据存储元素。在一个实施例中,例如通过将对第一和第二源数据执行的操作的结果写回到用作目的地寄存器的所述两个源寄存器中的一个,源寄存器之一也可充当目的地寄存器。
图1A是根据本公开的实施例的用可包括执行单元以执行指令的处理器形成的示范计算机系统的框图。根据本公开(例如本文描述的实施例中的),系统100可包括诸如处理器102的组件,以采用包括执行用于处理数据的算法的逻辑的执行单元。系统100可表示基于根据加利福尼亚州Santa Clara的Intel Corporation可用的PENTIUM® III、PENTIUM®4、Xeon™、Itanium®、XScale™和/或StrongARM™微处理器的处理系统,尽管也可使用其它系统(包括具有其它微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可执行从华盛顿Redmond的Microsoft Corporation可得到的Windows™操作系统的某个版本,尽管也可使用其它操作系统(例如,UNIX和Linux)、嵌入式软件和/或图形用户界面。因此,本公开的实施例不限于硬件电路和软件的任何特定组合。
实施例并不限于计算机系统。本公开的实施例可在诸如手持式装置和嵌入式应用的其它装置中使用。手持式装置的一些示例包括蜂窝电话、因特网协议装置、数码相机、个人数字助理(PDA)及手持式PC。嵌入式应用可包括微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机或可执行根据至少一个实施例的一个或多个指令的任何其它系统。
计算机系统100可包含处理器102,处理器102可包含一个或多个执行单元108以执行根据本公开一个实施例执行至少一个指令的算法。一个实施例可在单个处理器桌上型计算机或服务器系统的上下文中描述,而其它实施例可包含在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可包含用于处理数据信号的处理器102。处理器102可包含复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实现指令集组合的处理器或任何其它处理装置,诸如例如数字信号处理器。在一个实施例中,处理器102可耦合到处理器总线110,其可在处理器102与系统100中的其它组件之间传送数据信号。系统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执行的指令119和/或数据121。
系统逻辑芯片116可耦合到处理器总线110和存储器120。系统逻辑芯片116可包含存储器控制器中枢(MCH)。处理器102可经由处理器总线110与MCH 116通信。MCH 116可提供到存储器120的高带宽存储器路径118,其用于指令119和数据121的存储以及用于图形命令、数据和组织结构(texture)的存储。MCH 116可在处理器102、存储器120和系统100中的其它组件之间引导数据信号,并在处理器总线110、存储器120和系统I/O 122之间桥接数据信号。在一些实施例中,系统逻辑芯片116可提供用于耦合到图形控制器112的图形端口。MCH 116可通过存储器接口118耦合到存储器120。图形卡112可通过加速图形端口(AGP)互连114耦合到MCH 116。
系统100可使用专有中枢接口总线122将MCH 116耦合到I/O控制器中枢(ICH)130。在一个实施例中,ICH 130可经由本地I/O总线提供到一些I/O装置的直接连接。本地I/O总线可包含用于将外设连接到存储器120、芯片集和处理器102的高速I/O总线。示例可包含音频控制器129、固件中枢(闪速BIOS)128、无线收发器126、数据存储装置124、含有用户输入接口125(其可包含键盘接口)的遗留I/O控制器123、串行扩展端口127(诸如通用串行总线(USB))和网络控制器134。数据存储装置124可包括硬盘驱动器、软盘驱动器、CD-ROM装置、闪速存储器装置或其它大容量存储装置。
对于系统的另一实施例,根据一个实施例的指令可与片上系统一起使用。片上系统的一个实施例由处理器和存储器组成。用于一个此类系统的存储器可包含闪速存储器。闪速存储器可位于与处理器和其它系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器的其它逻辑块也可位于片上系统上。
图1B示出了实现本公开的实施例的原理的数据处理系统140。本领域技术人员将容易认识到,本文描述的实施例可通过备选处理系统操作,而不脱离本公开实施例的范围。
根据一个实施例,计算机系统140包括用于执行至少一个指令的处理核159。在一个实施例中,处理核159表示任何类型架构的处理单元,包含但不限于CISC、RISC或VLIW型架构。处理核159还可适合于以一个或多个工艺技术的制造,并且通过充分详细地表示在机器可读介质上,处理核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桥154以便经由I/O总线153与各种I/O装置通信。此类I/O装置例如可包含但不限于通用异步接收器/传送器(UART)155、通用串行总线(USB)156、蓝牙无线UART 157和I/O扩展接口158。
数据处理系统140的一个实施例提供移动、网络和/或无线通信以及可执行包含文本字符串比较操作的SIMD操作的处理核159。处理核159可采用各种音频、视频、成像和通信算法编程,所述算法包含:离散变换,诸如Walsh-Hadamard变换、快速傅里叶变换(FFT)、离散余弦变换(DCT)以及它们的相应逆变换;压缩/解压缩技术,诸如色彩空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)功能,诸如脉冲译码调制(PCM)。
图1C示出了执行SIMD文本字符串比较操作的数据处理系统的其它实施例。在一个实施例中,数据处理系统160可包含主处理器166、SIMD协处理器161、高速缓冲存储器167和输入/输出系统168。输入/输出系统168可选地可耦合到无线接口169。SIMD协处理器161可执行包含根据一个实施例的指令的操作。在一个实施例中,处理核170可适合于以一个或多个工艺技术的制造,并且通过充分详细地在机器可读介质上表示,处理核170可适合于促进制造所有或部分数据处理系统160(包含处理核170)。
在一个实施例中,SIMD协处理器161包括执行单元162和寄存器堆集合164。主处理器166的一个实施例包括解码器165以辨别指令集163中的指令(包含根据一个实施例的指令)以用于由执行单元162执行。在其它实施例中,SIMD协处理器161还包括至少部分解码器165(示出为165B)以解码指令集163中的指令。处理核170还可包含对理解本公开实施例可不必要的附加电路(未示出)。
在操作中,主处理器166执行数据处理指令流,其控制通用类型的数据处理操作(包含与高速缓冲存储器167和输入/输出系统168的交互)。嵌入在数据处理指令流内的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令辨别为应该由附连的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。从协处理器总线171,可由任何附连的SIMD协处理器接收这些指令。在此情况下,SIMD协处理器161可接受并执行预期用于它的任何接收的SIMD协处理器指令。
数据可经由无线接口169接收以便由SIMD协处理器指令处理。对于一个示例,语音通信可以以数字信号形式被接收,其可由SIMD协处理器指令处理以重新生成代表语音通信的数字音频样本。对于另一个示例,压缩的音频和/或视频可以数字位流形式被接收,其可由SIMD协处理器指令处理以重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可被集成到单个处理核170中,处理核170包括执行单元162、寄存器堆集合164、以及辨别指令集163中的指令(包含根据一个实施例的指令)的解码器165。
图2是根据本公开的实施例的可包含执行指令的逻辑电路的处理器200的微架构的框图。在一些实施例中,可实现根据一个实施例的指令,以对具有字节、字、双字、四字等大小以及诸如单和双精度整数和浮点数据类型的数据类型的数据元素进行操作。在一个实施例中,有序前端201可实现处理器200的一部分,该部分可获取要执行的指令,并且有序前端201准备所述指令以稍后在处理器流水线中进行使用。前端201可包含几个单元。在一个实施例中,指令预获取器226从存储器中获取指令,并将指令馈送到指令解码器228,其又解码或解释这些指令。例如,在一个实施例中,解码器将接收的指令解码成机器可执行的称为“微指令”或“微操作”(也称为微op或uop)的一个或多个操作。在其它实施例中,解码器将指令解析成操作码和对应的数据以及控制字段,它们可由微架构使用以执行根据一个实施例的操作。在一个实施例中,追踪(trace)高速缓存230可将解码的uop汇编成uop队列234中的程序排序的序列或追踪以便执行。当追踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成该操作所需的uop。
一些指令可被转换成单个微-op,而其它指令需要几个微-op来完成整个操作。在一个实施例中,如果需要多于四个微-op来完成指令,则解码器228可访问微代码ROM 232以执行指令。在一个实施例中,指令可被解码成小数量的微-op,以便在指令解码器228进行处理。在另一实施例中,指令可被存储在微代码ROM 232内,如果需要若干微-op来完成操作的话。追踪高速缓存230指的是入口点可编程逻辑阵列(PLA),其用来确定针对读取微代码序列的正确微指令指针,以完成来自微代码ROM 232的根据一个实施例的一个或多个指令。在微代码ROM 232完成对指令的微-op进行排序后,机器的前端201可恢复从追踪高速缓存230获取微-op。
无序执行引擎203可准备指令以用于执行。无序执行逻辑具有多个缓冲器,以在指令沿流水线向下并且被调度用于执行时,平滑处理和重新排序指令的流以优化性能。分配器/寄存器重命名器215中的分配器逻辑分配每个uop为了执行而所需要的机器缓冲器和资源。分配器/寄存器重命名器215中的寄存器重命名逻辑将逻辑寄存器重命名到寄存器堆中的条目上。在指令调度器(存储器调度器209、快速调度器202、慢速/通用浮点调度器204和简单浮点调度器206)前面,分配器215还为两个uop队列(一个用于存储器操作(存储器uop队列207),并且一个用于非存储器操作(整数/浮uop队列205))之一中的每个uop分配条目。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。执行单元212、214、216、218、220、222、224可执行指令。执行块211可包含存储微指令需要执行的整数和浮点数据操作数值的寄存器堆208、210。在一个实施例中,处理器200可包括若干执行单元:地址生成单元(AGU)212、AGU 214、快速ALU 216、快速ALU 218、慢速ALU 220、浮点ALU 222、浮点移动单元224。在另一实施例中,浮点执行块222、224可执行浮点、MMX、SIMD和SSE或其它运算。在又一个实施例中,浮点ALU 222可包含64位×64位浮点除法器以执行除法、平方根和余数微-op。在各种实施例中,涉及浮点值的指令可用浮点硬件处置。在一个实施例中,ALU运算可传到高速ALU执行单元216、218。高速ALU 216、218可以通过时钟周期一半的有效等待时间执行快速运算。在一个实施例中,最复杂的整数操作去到慢速ALU 220,因为慢速ALU 220可包括用于长等待时间类型操作的整数执行硬件,如乘法器、位移、标记逻辑和分支处理。存储器加载/存储操作可以由AGU 212、214执行。在一个实施例中,整数ALU 216、218、220可对64位数据操作数执行整数运算。在其它实施例中,可实现ALU 216、218、220以支持各种数据位大小,包含16、32、128、256等。类似地,可实现浮点单元222、224以支持具有各种宽度位的一系列操作数。在一个实施例中,浮点单元222、224可结合SIMD和多媒体指令对128位宽打包数据操作数进行操作。
在一个实施例中,在父负载(parent load)已经完成执行之前,uop调度器202、204、206分派相关操作。由于在处理器200中可推测性地调度和执行uop,所以处理器200还可包含处置存储器丢失的逻辑。如果数据加载在数据高速缓存中丢失,则流水线中可存在执行中(in flight)相关操作,其已经为调度器留下了暂时不正确的数据。重放机制跟踪和重新执行使用不正确数据的指令。可能只需要重放相关操作,并且可允许完成独立操作。处理器的一个实施例的调度器和重放机制也可设计成捕捉用于文本字符串比较运算的指令序列。
术语“寄存器”可指的是可用作识别操作数的指令的部分的板载处理器存储位置。换而言之,寄存器可以是从处理器的外部可使用的那些寄存器(从程序器的角度而言)。然而,在一些实施例中,寄存器可能不限于特定类型的电路。相反,寄存器可存储数据,提供数据,并且执行本文中描述的功能。本文中描述的寄存器可由处理器内的电路使用任何数量的不同技术实现,诸如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆也包含用于打包数据的8个多媒体SIMD寄存器。对于下面的讨论,可将寄存器理解为设计成保持打包数据的数据寄存器,诸如来自加利福尼亚州Santa Clara的IntelCorporation的以MMX技术实现的微处理器中的64位宽MMX™寄存器(在一些实例中也称为“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位宽或其它大小的操作数操作。此示例的打包字格式320可以为128位长,并且包含8个打包字数据元素。每个打包字包含16位的信息。图3A的打包双字格式330可以为128位长,并且包含4个打包双字数据元素。每个打包双字数据元素包含32位的信息。打包四字可以为128位长,并且包含2个打包四字数据元素。
图3B示出根据本公开的实施例的可能寄存器中的数据存储格式。每个打包数据可包括多于一个独立数据元素。示出了三个打包数据格式;打包半精度型341、打包单精度型342和打包双精度型343。打包半精度型341、打包单精度型342和打包双精度型343的一个实施例包含固定点数据元素。对于另一实施例,打包半精度型341、打包单精度型342和打包双精度型343中的一个或多个可包含浮点数据元素。打包半精度型341的一个实施例可以为128位长,其包含8个16位数据元素。打包单精度型342的一个实施例可以为128位长,并且包含4个32位数据元素。打包双精度型343的一个实施例可以为128位长,并且包含2个64位数据元素。将领会的是,此类打包数据格式可进一步扩展到其它寄存器长度,例如,96位、160位、192位、224位、256位或更多。
图3C示出根据本公开的实施例的在多媒体寄存器中的各种有符号和无符号的打包数据类型表示。无符号的打包字节表示344示出在SIMD寄存器中的无符号的打包字节的存储。每个字节数据元素的信息可存储在针对字节0的位7到位0、针对字节1的位15到位8、针对字节2的位23到位16及最后针对字节15的位120到位127中。因此,在寄存器中可使用所有可用位。此存储布置可增大处理器的存储效率。此外,利用访问的16个数据元素,现在可以并行方式对16个数据元素执行一个操作。有符号的打包字节表示345示出有符号的打包字节的存储。要注意的是,每个字节数据元素的第8位可以是符号指示符。无符号的打包字表示346示出在SIMD寄存器中可如何存储字7到字0。有符号的打包字表示347可类似于无符号的打包字寄存器中的表示346。要注意的是,每个字数据元素的第16位可以是符号指示符。无符号的打包双字表示348显示如何存储双字数据元素。有符号的打包双字表示349可类似于无符号的打包双字寄存器中的表示348。要注意的是,必需的符号位可以是每个双字数据元素的第32位。
图3D示出操作编码(操作码)的实施例。此外,格式360可包括寄存器/存储器操作数寻址模式,其与万维网(www) at intel.com/design/litcentr上从加利福尼亚州SantaClara的Intel Corporation可获得的“IA-32 Intel架构软件开发员手册第2卷:指令集参考”(IA-32 Intel Architecture Software Developer's Manual Volume 2:Instruction Set Reference)中描述的操作码格式的类型相对应。在一个实施例中,指令可通过字段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和由可选比例-索引-基础和位移字节部分地指定的寄存器到寄存器、存储器到寄存器、寄存器接(by)存储器、寄存器接寄存器、寄存器接中间物、寄存器到存储器寻址。
图3F示出根据本公开的实施例的又一可能操作编码(操作码)格式。64位单指令多数据(SIMD)算术运算可通过协处理器数据处理(CDP)指令被执行。操作编码(操作码)格式380描绘具有CDP操作码字段382和389的一个此类CDP指令。CDP指令的类型,对于另一实施例,操作可通过字段383、384、387和388的一个或多个字段编码。可识别直到每指令三个操作数位置,包括直到两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可对8、16、32和64位值进行操作。在一个实施例中,可对整数数据元素执行指令。在一些实施例中,可使用条件字段381,有条件地执行指令。对于一些实施例,源数据大小可由字段383编码。在一些实施例中,可对SIMD字段进行零(Z)、负(N)、进位(C)和溢出(V)检测。对于一些指令,饱和的类型可由字段384编码。
图4A是根据本公开的实施例的示出有序流水线和寄存器重命名阶段、无序发布/执行流水线的框图。图4B是根据本公开的实施例的示出有序架构核和寄存器重命名逻辑、无序发布/执行流水线(要被包括在处理器中)的框图。图4A中的实线框示出有序流水线,而虚线框示出寄存器重命名、无序发布/执行流水线。类似地,图4B中的实线框示出有序架构逻辑,而虚线框示出寄存器重命名逻辑和无序发布/执行逻辑。
在图4A中,处理器流水线400可包括获取阶段402、长度解码阶段404、解码阶段406、分配阶段408、重命名阶段410、调度(也称为分派或发布)阶段412、寄存器读/存储器读阶段414、执行阶段416、写回/存储器写入阶段418、异常处置阶段422及提交阶段424。
在图4B中,箭头表示在两个或更多个单元之间的耦合,并且箭头的方向指示在那些单元之间数据流的方向。图4B显示处理器核490,其包括耦合到执行引擎单元450的前端单元430,并且两者均可耦合到存储器单元470。
核490可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或者混合或备选核类型。在一个实施例中,核490可以是专用核,诸如,例如网络或通信核、压缩引擎、图形核等。
前端单元430可包括耦合到指令高速缓存单元434的分支预测单元432。指令高速缓存单元434可耦合到指令转化后备缓冲器(TLB) 436。TLB 436可耦合到指令获取单元438,其耦合到解码单元440。解码单元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可执行各种操作(例如,移位、加法、减法、乘法),并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)进行执行。虽然一些实施例可包括专用于特定功能或功能的集合的多个执行单元,但其它实施例可只包括一个执行单元或全部执行所有功能的多个执行单元。调度器单元456、物理寄存器堆单元458和执行集群460示为可能是多个,这是因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器存取流水线,每个流水线具有其自己的调度器单元、物理寄存器堆单元和/或执行集群 -并且在单独的存储器存取流水线的情况下,可实现其中仅此流水线的执行集群具有存储器访问单元464的某些实施例)。还应理解的是,在使用单独流水线的情况下,一个或多个这些流水线可以是无序发布/执行,并且其余的流水线是有序的。
存储器访问单元464的集合可耦合到存储器单元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指令集(其中对于较新版本已添加一些扩展);加利福尼亚州Sunnyvale的MIPS Technologies的MIPS指令集;加利福尼亚州Sunnyvale的ARM Holdings的ARM指令集(具有诸如NEON的可选另外扩展))。
应理解的是,核可以以多种方式支持多线程(执行两个或更多个并行的操作或线程的集合)。例如通过包括时间片多线程、同时多线程(其中,单个物理核提供用于物理核在同时进行多线程的每个线程的逻辑核)或其组合,可执行多线程支持。此类组合例如可包括时间片获取和解码及之后的同时多线程,诸如在Intel®超线程技术中一样。
虽然寄存器重命名可在无序执行的上下文中描述,但应理解的是,可在有序架构中使用寄存器重命名。虽然处理器的所示实施例也可包括单独的指令和数据高速缓存单元434/474及共享L2高速缓存单元476,但其它实施例可具有用于指令和数据两者的单个内部高速缓存,诸如例如1级(L1)内部高速缓存,或多个级的内部高速缓存。在一些实施例中,系统可包括内部高速缓存和可在核和/或处理器外的外部高速缓存的组合。在其它实施例中,所有高速缓存可在核和/或处理器的外部。
图5A是根据本公开的实施例的处理器500的框图。在一个实施例中,处理器500可包括多核处理器。处理器500可包括通信地耦合到一个或多个核502的系统代理510。此外,核502和系统代理510可通信地耦合到一个或多个高速缓存506。核502、系统代理510和高速缓存506可经一个或多个存储器控制单元552通信地耦合。此外,核502、系统代理510和高速缓存506可经存储器控制单元552通信地耦合到图形模块560。
处理器500可包括用于将核502、系统代理510和高速缓存506及图形模块560互连的任何适合机制。在一个实施例中,处理器500可包括基于环形的互连单元508以将核502、系统代理510和高速缓存506及图形模块560互连。在其它实施例中,处理器500可包括用于将此类单元互连的任何数量的公知技术。基于环形的互连单元508可利用存储器控制单元552以促进互连。
处理器500可包括存储器层级,该层级包括核内的一个或多个级的高速缓存、诸如高速缓存506的一个或多个共享高速缓存单元或耦合到集成存储器控制器单元552的集合的外部存储器(未示出)。高速缓存506可包括任何适合的高速缓存。在一个实施例中,高速缓存506可包括诸如2级(L2)、3级(L3)、4级(L4)或其它级的高速缓存的一个或多个中间级高速缓存、末级高速缓存(LLC)和/或其组合。
在各种实施例中,一个或多个核502可执行多线程。系统代理510可包括用于协调和操作核502的组件。系统代理510例如可包括功率控制单元(PCU)。PCU可以是或者包括对于调节核502的功率状态所需的逻辑和组件。系统代理510可包括用于驱动一个或多个外部连接的显示器或图形模块560的显示引擎512。系统代理510可包括用于针对图形的通信总线的接口514。在一个实施例中,接口514可通过PCI高速(PCIe)来实现。在另外的实施例中,接口514可通过PCI高速图形(PEG)来实现。系统代理510可包括直接媒体接口(DMI)516。DMI516可在计算机系统的母板或其它部分上的不同桥之间提供链路。系统代理510可包括用于提供PCIe链路到计算系统的其它元素的PCIe桥518。PCIe桥518可使用存储器控制器520和一致性逻辑522实现。
核502可以以任何适合的方式实现。核502可在架构和/或指令集方面是同构或异构的。在一个实施例中,一些核502可以是有序的,而其它核可以是无序的。在另一实施例中,两个或更多个核502可执行相同指令集,而其它核可只执行该指令集的子集或不同指令集。
处理器500可包括诸如可从加利福尼亚州Santa Clara的Intel Corporation获得的Core™ i3、i5、i7、2 Duo和Quad、Xeon™、Itanium™、XScale™或StrongARM™处理器等的通用处理器。处理器500可从诸如ARM Holdings, Ltd、MIPS等的另一公司提供。处理器500可以是专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器500可在一个或多个芯片上实现。处理器500可以是使用诸如例如BiCMOS、COMS或NMOS的多个处理技术的任何技术的一个或多个衬底的一部分,和/或可在衬底上实现。
在一个实施例中,高速缓存506的一个给定高速缓存可由核502的多个核共享。在另一实施例中,高速缓存506的一个给定高速缓存可专用于核502之一。高速缓存506到核502的指派可由高速缓存控制器或其它适合机制处理。通过实现给定高速缓存506的时间片,可由两个或更多个核502共享高速缓存506的一个给定高速缓存。
图形模块560可实现集成图形处理子系统。在一个实施例中,图形模块560可包括图形处理器。此外,图形模块560可包括媒体引擎565。媒体引擎565可提供媒体编码和视频解码。
图5B是根据本公开的实施例的核502的示例实现的框图。核502可包括通信地耦合到无序引擎580的前端570。核502可通过高速缓存层级503,通信地耦合到处理器500的其它部分。
前端570可以以任何适合的方式实现,例如,如上所述部分或完全由前端201实现。在一个实施例中,前端570可通过高速缓存层级503与处理器500的其它部分进行通信。在另外实施例中,前端570可从处理器500的部分获取指令,并且在指令传递到无序执行引擎580时准备处理器流水线中以后要使用的指令。
无序执行引擎580可以以任何适合的方式实现,例如,如上所述部分或完全通过无序执行引擎203来实现。无序执行引擎580可准备从前端570接收的指令以供执行。无序执行引擎580可包括分配模块582。在一个实施例中,分配模块582可分配处理器500的资源或诸如寄存器或缓冲器的其它资源以执行给定指令。分配模块582可在调度器中进行分配,如存储器调度器、快速调度器或浮点调度器。此类调度器可在图5B中由资源调度器584表示。分配模块582可完全或部分通过结合图2描述的分配逻辑来实现。资源调度器584可基于给定资源的源的准备度和执行指令需要的执行资源的可用性,确定指令何时准备就绪以执行。资源调度器584可例如通过如上所述的调度器202、204、206来实现。资源调度器584可对一个或多个资源调度指令的执行。在一个实施例中,此类资源可在核502的内部,并且例如可示出为资源586。在另一实施例中,此类资源可在核502的外部,并且例如可由高速缓存层级503访问。资源例如可包括存储器、高速缓存、寄存器堆或寄存器。核502内部的资源可由图5B中的资源586表示。在必需时,可例如通过高速缓存层级503,协调写入资源586或从中读取的值和处理器500的其它部分。在指令是指派的资源时,可将它们置于重新排序缓冲器588中。重新排序缓冲器588可在指令执行时追踪指令,并且可基于处理器500的任何适合准则,选择性地将其执行重新排序。在一个实施例中,重新排序缓冲器588可识别可独立执行的指令或一系列指令。此类指令或一系列指令可与其它此类指令并行执行。核502中的并行执行可通过任何适合数量的单独执行块或虚拟处理器执行。在一个实施例中,给定核502内的多个虚拟处理器可访问诸如存储器、寄存器和高速缓存的共享资源。在其它实施例中,处理器500内的多个处理实体可访问共享资源。
高速缓存层级503可以以任何适合的方式实现。例如,高速缓存层级503可包括诸如高速缓存572、574的一个或多个更低或中级高速缓存。在一个实施例中,高速缓存层级503可包括通信地耦合到高速缓存572、574的LLC 595。在另一实施例中,LLC 595可在对处理器500的所有处理实体可访问的模块590中实现。在另外的实施例中,模块590可在来自Intel, Inc的处理器的非核心模块中实现。模块590可包括对于执行核502所必需,但可能不在核502内实现的处理器500的部分或子系统。除LLC 595外,模块590例如可包括硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。通过模块590,并且更具体地说,通过LLC 595,可对可用于处理器500的RAM 599进行访问。此外,核502的其它实例可类似地访问模块590。可部分通过模块590,促进核502的实例的协调。
图6-8可示出适合于包含处理器500的示范系统,而图9可示出可包含一个或多个核502的示范性片上系统(SoC)。在本领域已知的用于膝上型计算机、桌面型计算机、手持式PC、个人数字助理、工程设计工作站、服务器、网络装置、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式装置和各种其它电子装置的其它系统设计和实现也可以是适合的。一般而言,结合处理器和/或本文所公开的其它执行逻辑的大量系统或电子装置一般可以是适合的。
图6示出了根据本公开实施例的系统600的框图。系统600可包含一个或多个处理器610、615,其可耦合到图形存储器控制器中枢(GMCH)620。在图6中用虚线表示附加处理器615的可选性质。
每个处理器610、615可以是某版本的处理器500。然而,应该指出,在处理器610、615中可能不存在集成图形逻辑和集成存储器控制单元。图6示出了GMCH 620可耦合到存储器640,存储器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,其可用于将各种外设装置耦合到系统600。外部图形装置660可包含耦合到ICH650的分立图形装置,连同另一外设装置670。
在其它实施例中,在系统600中也可存在附加的或不同的处理器。例如,附加处理器610、615可包含可与处理器610相同的附加处理器、可与处理器610异质或不对称的附加处理器、加速器(诸如例如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其它处理器。在品质度量谱(包含架构、微架构、热、功耗特性等)方面,在物理资源610、615之间可能存在各种差异。这些差异在处理器610、615之间可有效地将它们自己标明为不对称并且异质。对于至少一个实施例,各种处理器610、615可驻留在同一管芯封装中。
图7示出了根据本公开实施例的第二系统700的框图。如图7中所示,多处理器系统700可包含点对点互连系统,并且可包经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每个可以如一个或多个处理器610、615一样,是某版本的处理器500。
虽然图7可示出两个处理器770、780,但要理解,本公开的范围不限于此。在其它实施例中,在给定处理器中可存在一个或多个附加处理器。
示出处理器770和780分别包含集成存储器控制器单元772和782。处理器770还可包含点对点(P-P)接口776和778作为其总线控制器单元的一部分;类似地,第二处理器780可包含P-P接口786和788。处理器770、780可经由点对点(P-P)接口750使用P-P接口电路778、788交换信息。如图7中所示,IMC 772和782可将处理器耦合到相应存储器,即存储器732和存储器734,它们在一个实施例中可以是本地附连到相应处理器的主存储器的部分。
处理器770、780可各自经由单独P-P接口752、754使用点对点接口电路776、794、786、798与芯片集790交换信息。在一个实施例中,芯片集790还可经由高性能图形接口739与高性能图形电路738交换信息。
共享高速缓存(未示出)可被包含在任一处理器中或两个处理器外,仍经由P-P互连与处理器连接,使得任一或两个处理器的本地高速缓存信息可被存储在共享高速缓存中(如果处理器被置于低功率模式的话)。
芯片集790可经由接口796耦合到第一总线716。在一个实施例中,第一总线716可以是外设组件互连(PCI)总线,或诸如PCI高速总线的总线,或另一个第三代I/O互连总线,尽管本公开的范围不限于此。
如图7中所示,各种I/O装置714可耦合到第一总线716,连同将第一总线716耦合到第二总线720的总线桥718。在一个实施例中,第二总线720可以是低管脚计数(LPC)总线。在一个实施例中,各种装置可耦合到第二总线720,例如包含键盘和/或鼠标722、通信装置727和存储单元728,诸如盘驱动器或可包含指令/代码和数据730的其它大容量存储装置。进一步说,音频I/O 724可耦合到第二总线720。要指出,其它架构可以是可能的。例如,代替图7的点对点架构,系统可实现多点总线或其它此类架构。
图8示出了根据本公开实施例的第三系统800的框图。图7和图8中的相似的元件带有相似的附图标记,并且已经从图8中省略了图7的某些方面,以便避免使图8的其它方面混淆。
图8示出处理器770、780可分别包含集成存储器和I/O控制逻辑(“CL”) 872和882。对于至少一个实施例,CL 872、882可包含集成存储器控制器单元,诸如上面结合图5和图7所描述的。此外,CL 872、882也可包含I/O控制逻辑。图8不仅示出了存储器732、734可耦合到CL 872、882,而且I/O装置814也可耦合到控制逻辑872、882。遗留I/O装置815可耦合到芯片集790。
图9示出了根据本公开实施例的SoC 900的框图。图5中的相似元件带有相似附图标记。还有,虚线框可表示更高级SoC上的可选特征。互连单元902可耦合到:应用处理器910,其可包含一个或多个核502A-N的集合以及共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;媒体处理器集合或一个或多个媒体处理器920,其可包含集成图形逻辑908、用于提供静止和/或视频相机功能性的图像处理器924、用于提供硬件音频加速的音频处理器926以及用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(SRAM)单元930;直接存储器存取(DMA)单元932;以及用于耦合到一个或多个外部显示器的显示单元940。
图10示出了根据本公开的实施例的可执行至少一个指令的含有中央处理单元(CPU)和图形处理单元(GPU)的处理器。在一个实施例中,执行根据至少一个实施例的操作的指令可由CPU执行。在另一实施例中,指令可由GPU执行。在又一实施例中,指令可通过由GPU和CPU执行的操作组合执行。例如,在一个实施例中,根据一个实施例的指令可被接收和解码以便在CPU上执行。然而,解码指令内的一个或多个操作可由CPU执行,并且结果返回到GPU以用于指令的最后引退。相反,在一些实施例中,CPU可充当主处理器,并且GPU充当协处理器。
在一些实施例中,受益于高度并行吞吐量处理器的指令可由GPU执行,而受益于处理器的性能(其受益于深流水线架构)的指令可由CPU执行。例如,图形、科学应用、金融应用和其它并行工作负荷可受益于GPU的性能,并被相应地执行,而更多序列应用(诸如操作系统内核或应用代码)可更适合于CPU。
在图10中,处理器1000包含CPU 1005、GPU 1010、图像处理器1015、视频处理器1020、USB控制器1025、UART控制器1030、SPI/SDIO控制器1035、显示装置1040、存储器接口控制器1045、MIPI控制器1050、闪速存储器控制器1055、双数据速率(DDR)控制器1060、安全性引擎1065和I2S/I2C控制器1070。其它逻辑和电路可包含在图10的处理器中,包含更多CPU和GPU以及其它外设接口控制器。
至少一个实施例的一个或多个方面可由存储在表示处理器内的各种逻辑的机器可读介质上的代表性数据实现,其当由机器读取时使机器制造执行本文描述的技术的逻辑。称为“IP核”的此类表示可存储在有形机器可读介质(“带”)上,并供应给各种消费者或制造设施,以加载到实际上制造逻辑或处理器的制造机器中。例如,诸如由ARM Holdings,Ltd开发的Cortex™族处理器和中国科学院计算技术研究所(ICT)开发的龙芯IP核的IP核可许可或销售到各种客户或被许可人,诸如Texas Instruments、Qualcomm、Apple或Samsung,并且在由这些客户或被许可人生产的处理器中实现。
图11示出了根据本公开实施例示出IP核的开发的框图。存储装置1110可包含模拟软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可经由存储器1140(例如硬盘)、有线连接(例如因特网)1150或无线连接1160提供给存储装置1110。由模拟工具和模型生成的IP核信息然后可被传送到制造设施1165,其中它可由第三方制造以执行根据至少一个实施例的至少一个指令。
在一些实施例中,一个或多个指令可对应于第一类型或架构(例如x86),并且在不同类型或架构(例如ARM)的处理器上转化或仿真。根据一个实施例,指令因此可在任何处理器或处理器类型(包含ARM、x86、MIPS、GPU)或其它处理器类型或架构上执行。
图12示出了根据本公开实施例,可如何由不同类型的处理器仿真第一类型的指令。在图12中,程序1205含有可执行与根据一个实施例的指令相同或基本上相同功能的一些指令。然而,程序1205的指令可属于与处理器1215不同或不兼容的类型和/或格式,意味着,程序1205中的类型的指令可能不能够由处理器1215本地执行。然而,在仿真逻辑1210的帮助下,程序1205的指令可被转化成可由处理器1215本地执行的指令。在一个实施例中,仿真逻辑可实施在硬件中。在另一实施例中,仿真逻辑可实施在有形、机器可读介质中,其含有将程序1205中的类型的指令转化成由处理器1215本地可执行的类型。在其它实施例中,仿真逻辑可以是固定功能或可编程硬件以及存储在有形、机器可读介质上的程序的组合。在一个实施例中,处理器含有仿真逻辑,而在其它实施例中,仿真逻辑存在于处理器外部,并且可由第三方提供。在一个实施例中,处理器可通过执行在处理器中含有的或与处理器关联的微代码或固件来加载实施在含有软件的有形、机器可读介质中的仿真逻辑。
图13示出了根据本公开的实施例的对比使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示出的实施例中,指令转换器可以是软件指令转换器,尽管指令转换器可以用软件、固件、硬件或它们的各种组合实现。图13示出可使用x86编译器1304采用编译高级语言1302的程序以生成x86二进制代码1306,其可由具有至少一个x86指令集核的处理器1316本地执行。具有至少一个x86指令集核的处理器1316表示可通过兼容执行或以其它方式处理(1)Intel x86指令集核的指令集的实质部分或(2)定向为在具有至少一个x86指令集核的Intel处理器上运行的应用或其它软件的对象代码版本,来执行与具有至少一个x86指令集核的Intel处理器基本上相同功能,以便实现与具有至少一个x86指令集核的Intel处理器基本上相同结果的任何处理器。x86编译器1304表示可以可操作以生成x86二进制代码1306(例如对象代码)的编译器,二进制代码1306可在具有或没有附加连锁处理的情况下在具有至少一个x86指令集核的处理器1316上执行。类似地,图13示出采用高级语言1302的程序可使用备选指令集编译器1308编译以生成备选指令集二进制代码1310,其可由没有至少一个x86指令集核的处理器1314(例如,具有执行加利福尼亚州Sunnyvale的MIPS Technologies的MIPS指令集,和/或执行加利福尼亚州Sunnyvale的ARM Holdings的ARM指令集的核的处理器)本地执行。指令转换器1312可用于将x86二进制代码1306转换成可由没有x86指令集核的处理器1314本地执行的代码。这个转换的代码可能不与备选指令集二进制代码1310相同;然而,转换的代码将完成一般操作,并且由来自备选指令集的指令组成。从而,指令转换器1312表示通过仿真、模拟或任何其它过程,允许不具有x86指令集处理器或核的处理器或其它电子装置执行x86二进制代码1306的软件、固件、硬件或其组合。
图14是根据本公开实施例的处理器的指令集架构1400的框图。指令集架构1400可包含任何适合数量或种类的组件。
例如,指令集架构1400可包含处理实体,诸如一个或多个核1406、1407和图形处理单元1415。核1406、1407可通过任何适合的机制(诸如通过总线或高速缓存)通信地耦合到其余指令集架构1400。在一个实施例中,核1406、1407可通过L2高速缓存控制1408通信地耦合,L2高速缓存控制1408可包含总线接口单元1409和L2高速缓存1411。核1406、1407和图形处理单元1415可通过互连1410通信地彼此耦合,并耦合到指令集架构1400的剩余部分。在一个实施例中,图形处理单元1415可使用视频码1420(其定义其中具体视频信号将被编码和解码以便输出的方式)。
指令集架构1400还可包含任何数量或种类的接口、控制器或用于与电子装置或系统的其它部分对接或通信的其它机制。此类机制例如可促进与外设、通信装置、其它处理器或存储器的交互。在图14的示例中,指令集架构1400可包含液晶显示器(LCD)视频接口1425、订户接口模块(SIM)接口1430、引导ROM接口1435、同步动态随机存取存储器(SDRAM)控制器1440、闪存控制器1445和串行外设接口(SPI)主单元1450。LCD视频接口1425例如可从GPU 1415并且例如通过移动工业处理器接口(MIPI)1490或高清多媒体接口(HDMI)1495向显示器提供视频信号的输出。此类显示器例如可包含LCD。SIM接口1430可提供对或从SIM卡或装置的访问。SDRAM控制器1440可提供对或从诸如SDRAM芯片或模块1460的存储器的访问。闪存控制器1445可提供对或从诸如闪存存储器1465或RAM的其它实例的存储器的访问。SPI主单元1450可提供对或从诸如蓝牙模块1470、高速3G调制解调器1475、全球定位系统模块1480或实现诸如802.11的通信标准的无线模块1485的通信模块的访问。
图15是根据本公开实施例的处理器的指令集架构1500的更详细框图。指令架构1500可实现指令集架构1400的一个或多个方面。更进一步,指令集架构1500可示出用于执行处理器内指令的模块和机制。
指令架构1500可包含通信地耦合到一个或多个执行实体1565的存储器系统1540。更进一步,指令架构1500可包含通信地耦合到执行实体1565和存储器系统1540的高速缓存和总线接口单元(诸如单元1510)。在一个实施例中,将指令加载到执行实体1565可由一个或多个执行阶段执行。此类阶段例如可包含指令预获取阶段1530、双指令解码阶段1550、寄存器重命名阶段1555、发布阶段1560和写回阶段1570。
在一个实施例中,存储器系统1540可包含执行的指令指针1580。执行的指令指针1580可存储标识一批指令内最旧的、未指派的指令的值。最旧的指令可对应于最低程序指令(Program Order,PO)值。PO可包含唯一数量的指令。此类指令可以是由多个串(strand)表示的线程内的单个指令。PO可在排序指令中用于确保代码的正确执行语义。PO可通过诸如评估指令中编码的PO的增量而不是绝对值的机制来重构。此类重构的PO可被称为“RPO”。尽管本文可提到PO,但此类PO可与RPO互换使用。串可包含是取决于彼此的数据的指令序列。在编译时间,串可由二进制转化器布置。执行串的硬件可按根据各种指令的PO的次序执行给定串的指令。线程可包含多个串,使得不同串的指令可取决于彼此。给定串的PO可以是串中尚未从发布阶段分派执行的最旧的指令的PO。相应地,给定多个串的线程,每个串包含按PO排序的指令,执行的指令指针1580可存储线程中最旧的——由最低号码示出的——PO。
在另一个实施例中,存储器系统1540可包含引退指针1582。引退指针1582可存储标识最后引退的指令的PO的值。引退指针1582例如可由引退单元454设置。如果尚没有指令引退,则引退指针1582可包含空值。
执行实体1565可包含处理器通过其可执行指令的任何适合数量和种类的机制。在图15的示例中,执行实体1565可包含ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,此类实体可利用在给定地址1569内含有的信息。执行实体1565与阶段1530、1550、1555、1560、1570组合可共同形成执行单元。
单元1510可采用任何适合的方式实现。在一个实施例中,单元1510可执行高速缓存控制。在此类实施例中,单元1510从而可包含高速缓存1525。在另外实施例中,高速缓存1525可实现为具有任何适合大小(诸如0、128k、256k、512k、1M或2M字节的存储器)的L2统一高速缓存。在另一、另外的实施例中,高速缓存1525可实现在纠错代码存储器中。在另一实施例中,单元1510可执行到处理器或电子装置的其它部分的总线对接。在此类实施例中,单元1510从而可包含用于通过互连、处理器内总线、处理器间总线或其它通信总线、端口或线路通信的总线接口单元1520。总线接口单元1520可提供对接以便例如执行生成存储器和输入/输出地址,以便在执行实体1565与指令架构1500外部的系统部分之间传送数据。
为了进一步促进其功能,总线接口单元1520可包含用于生成中断和到处理器或电子装置的其它部分的其它通信的中断控制和分发单元1511。在一个实施例中,总线接口单元1520可包含处置针对多个处理核的高速缓存访问和一致性的探听控制单元1512。在另外的实施例中,为了提供此类功能性,探听控制单元1512可包含处置不同高速缓存之间信息交换的高速缓存到高速缓存传送单元。在另一、另外实施例中,探听控制单元1512可包含一个或多个探听过滤器1514,其监视其它高速缓存(未示出)的一致性,使得高速缓存控制器(诸如单元1510)不用必须直接执行此类监视。单元1510可包含用于同步指令架构1500的动作的任何适合数量的定时器1515。还有,单元1510可包含AC端口1516。
存储器系统1540可包含用于存储对于指令架构1500的处理需要的信息的任何适合的数量和种类的机制。在一个实施例中,存储器系统1540可包含用于存储信息(诸如写入到存储器或寄存器或从存储器或寄存器读回的缓冲器)的负载存储单元1546。在另一实施例中,存储器系统1540可包含转化后备缓冲器(TLB)1545,其提供了物理地址与虚拟地址之间的地址值的查找。在又一实施例中,存储器系统1540可包含用于促进访问虚拟存储器的存储器管理单元(MMU)1544。在又一实施例中,存储器系统1540可包含预获取器1543,用于在指令实际需要被执行之前从存储器请求此类指令以便减少延时。
执行指令的指令架构1500的操作可通过不同阶段执行。例如,使用单元1510指令预获取阶段1530可通过预获取器1543访问指令。检索的指令可被存储在指令高速缓存1532中。预获取阶段1530可实现用于快速环路模式的选项1531,其中执行形成环路的一系列指令,环路足够小以在给定高速缓存内拟合。在一个实施例中,执行此类执行例如可无需从指令高速缓存1532访问附加指令。预获取什么指令的确定例如可由分支预测单元1535进行,单元1535可访问全局历史1536中的执行指示、目标地址1537的指示或确定接下来将执行代码的分支1557中的哪个的返回栈1538的内容。此类分支有可能作为结果预获取。分支1557可通过如下面所描述的其它操作阶段产生。指令预获取阶段1530可提供指令及有关将来指令的任何预测到双指令解码阶段1550。
双指令解码阶段1550可将接收的指令转化成可执行的基于微代码的指令。双指令解码阶段1550每时钟周期可同时解码两个指令。更进一步,双指令解码阶段1550可将其结果传到寄存器重命名阶段1555。此外,双指令解码阶段1550可从其解码和微代码的最终执行中确定任何结果分支。此类结果可输入到分支1557中。
寄存器重命名阶段1555可将对虚拟寄存器或其它资源的引用转化成对物理寄存器或资源的引用。寄存器重命名阶段1555可包含寄存器池1556中此类映射的指示。寄存器重命名阶段1555可更改所接收的指令,并将结果发送到发布阶段1560。
发布阶段1560可向执行实体1565发布或分派命令。此类发布可按无序方式执行。在一个实施例中,多个指令可在执行之前在发布阶段1560保持。发布阶段1560可包含用于保持此类多个命令的指令队列1561。可基于任何可接受的判据,诸如用于执行给定指令的资源的可用性或适用性,由发布阶段1560向具体处理实体1565发布指令。在一个实施例中,发布阶段1560可重新排序指令队列1561内的指令,使得所接收的第一指令可能不是所执行的第一指令。基于指令队列1561的排序,附加分支信息可被提供给分支1557。发布阶段1560可将指令传到执行实体1565以用于执行。
在执行时,写回阶段1570可将数据写入到寄存器、队列或指令集架构1500的其它结构中,以传递给定命令的完成。取决于在发布阶段1560中布置的指令次序,写回阶段1570的操作可实现要被执行的附加指令。指令集架构1500的执行可由追踪单元1575监视或调试。
图16是根据本公开实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600例如可示出图15的指令架构1500的操作。
执行流水线1600可包含步骤或操作的任何适合的组合。在1605,可进行接下来要执行的分支的预测。在一个实施例中,此类预测可基于先前指令的执行及其结果。在1610,对应于预测的执行分支的指令可被加载到指令高速缓存中。在1615,可获取指令高速缓存中的一个或多个此类指令以便执行。在1620,已经获取的指令可被解码成微代码或更特定的机器语言。在一个实施例中,可同时解码多个指令。在1625,可重新指配解码指令内对寄存器或其它资源的引用。例如,可引用对应物理寄存器替换对虚拟寄存器的引用。在1630,指令可被分派给队列以便执行。在1640,可执行指令。可按任何适合的方式执行此类执行。在1650,可向适合的执行实体发布指令。其中执行指令的方式可取决于执行指令的特定实体。例如,在1655,ALU可执行算术函数。ALU可针对其操作利用单个时钟周期以及两个移位器。在一个实施例中,可采用两个ALU,并且从而在1655可执行两个指令。在1660,可进行结果分支的确定。程序计数器可用于指定分支将进行到其的目的地。1660可在单个时钟周期内执行。在1665,浮点算术可由一个或多个FPU执行。浮点操作可需要执行多个时钟周期,诸如2个到10个周期。在1670,可执行乘法和除法运算。此类运算可在4个时钟周期中执行。在1675,可执行对寄存器或流水线1600其它部分的加载和存储操作。操作可包含加载和存储地址。此类运算可在4个时钟周期中执行。在1680,写回操作可根据需要由1655-1675的结果操作执行。
图17是根据本公开的实施例的用于利用处理器1710的电子装置1700的框图。电子装置1700例如可包括笔记本电脑、超级本、计算机、塔式服务器、机架服务器、刀片服务器、膝上型计算机、桌上型计算机、平板、移动装置、电话、嵌入式计算机或任何其它适合的电子装置。
电子装置1700可包括通信地耦合到任何适合数量或种类的组件、外设、模块或装置的处理器1710。此类耦合可通过任何适合种类的总线或接口来实现,诸如I2C总线、系统管理总线(SMBus)、低引脚计数(LPC)总线、SPI、高清晰音频(HDA)总线、串行高级技术附件(SATA)总线、USB总线(版本1、2、3)或通用异步接收器/传送器(UART)总线。
此类组件例如可包括显示器1724、触摸屏1725、触摸板1730、近场通信(NFC)单元1745、传感器中枢1740、热传感器1746、高速芯片集(EC)1735、可信平台模块(TPM)1738、BIOS/固件/闪存存储器1722、数字信号处理器1760、诸如固态磁盘(SSD)或硬盘驱动器(HDD)的驱动器1720、无线局域网(WLAN)单元1750、蓝牙单元1752、无线广域网(WWAN)单元1756、全球定位系统(GPS)1775、诸如USB 3.0相机的相机1754、或例如以LPDDR3标准实现的低功率双倍数据率(LPDDR)存储器单元1715。这些组件每个可以以任何适合的方式实现。
此外,在各种实施例中,其它组件可通过上面讨论的组件通信地耦合到处理器1710。例如,加速计1741、环境光传感器(ALS)1742、罗盘1743和陀螺仪1744可以通信地耦合到传感器中枢1740。热传感器1739、风扇1737、键盘1736和触摸板1730可以通信地耦合到EC1735。扬声器1763、耳机1764和麦克风1765可以通信地耦合到音频单元1762,音频单元又可通信地耦合到DSP 1760。音频单元1762例如可包括音频编解码器和D类放大器。SIM卡1757可以通信地耦合到WWAN单元1756。诸如WLAN单元1750和蓝牙单元1752以及WWAN单元1756的组件可以以下一代规格(NGFF)实现。
本公开的实施例涉及用于执行以向量寄存器为目标的一个或多个向量操作的指令和处理逻辑,其的至少一些在存储在包含多个元素的向量寄存器中的结构上进行操作。图18是根据本公开的实施例的用于基于通道的跨步存储操作的指令和逻辑的示例系统1800的说明。
在一些应用中使用的数据结构可以包括可以单独访问的元素的元组。在一些情况下,这些类型的数据结构可以被组织为阵列。在本公开的实施例中,可以将这些数据结构中的多个数据结构存储在单个向量寄存器中。此类数据结构内的单独数据元素可以在被操作之前重新组织。例如,每个数据结构可以包括不同类型的多个数据元素。这些数据元素可以被重新组织成相似元素的多个单独向量,以便以相同的方式对相似的元素进行操作。在本公开的实施例中,每个单独的向量可以存储在向量寄存器内的不同“通道”中。在此上下文中,术语“通道”可以指保持多个数据元素的向量寄存器的固定宽度部分。例如,512位向量寄存器可包括四个128位通道。在对至少一些数据元素进行操作之后,可以调用基于通道的跨步存储指令来将单独向量中的数据元素置换回到它们的元组的原始数据结构中。通常,跨步存储操作可对地址执行一系列的存储器写入操作,所述地址彼此分开固定的距离。本文描述的基于通道的跨步存储指令可以将作为相同数据结构的分量的源向量寄存器的每个通道中的数据元素一起存储在存储器中。这可以包括将每个数据结构的数据元素写出到存储器中的连续位置中。
系统1800可以包括处理器、SoC、集成电路或其它机制。例如,系统1800可以包括处理器1804。虽然处理器1804在图18中示出和描述为示例,但是可以使用任何适合的机制。处理器1804可以包括用于执行以向量寄存器为目标的向量操作的任何适合机制,包括对存储在包含多个元素的向量寄存器中的结构进行操作的那些操作。在一个实施例中,此类机制可以在硬件中实现。处理器1804可以完全或部分地由图1-17中描述的元件实现。
要在处理器1804上执行的指令可以被包括在指令流1802中。指令流1802可以由例如编译器、即时解释器或其它适合的机制(其可以或可以不被包括在系统1800中)生成,或者可以由引起指令流1802的代码的起草者(drafter)来指定。例如,编译器可以取得应用代码并且以指令流1802的形式生成可执行代码。指令可以由处理器1804从指令流1802接收。指令流1802可以以任何适合的方式加载到处理器1804。例如,要由处理器1804执行的指令可以从存储装置、从其它机器或从诸如存储器系统1830的其它存储器加载。指令可以到达驻留存储器(例如RAM)并且在其中可用,其中从存储装置获取要由处理器1804执行的指令。指令可以通过例如预获取器或获取单元(诸如指令获取单元1808)从驻留存储器获取。在一个实施例中,指令流1802可以包括执行一个或多个基于通道的跨步存储操作的指令。例如,指令流1802可以包括“VPSTORE4”指令、“VPSTORE3”指令或“VPSTORE2”指令。注意到指令流1802可以包括除执行向量操作的那些指令以外的指令。
处理器1804可以包括前端1806,前端1806可以包括指令获取流水线阶段(诸如指令获取单元1808)和解码流水线阶段(诸如决定单元1810)。前端1806可以使用解码单元1810来接收和解码来自指令流1802的指令。解码的指令可以被分派、分配和调度以用于由流水线的分配阶段(诸如分配器1814)的执行并被分配到特定执行单元1816以用于执行。要由处理器1804执行的一个或多个特定指令可以包括在针对由处理器1804的执行而定义的库中。在另一实施例中,特定指令可以由处理器1804的具体部分作为目标。例如,处理器1804可以辨别指令流1802中的以软件执行向量操作的尝试,并且可以将指令发布到执行单元1816中的具体一个。
在执行期间,可以通过存储器子系统1820进行对数据或附加指令(包括驻留在存储器系统1830中的数据或指令)的访问。此外,来自执行的结果可以存储在存储器子系统1820中,并且可以随后被刷新到存储器系统1830。存储器子系统1820可以包括例如存储器、RAM或高速缓存层级,其可以包括一个或多个1级(LI)高速缓存1822或2级(L2)高速缓存1824,其的一些可以由多个核1812或处理器1804共享。在由执行单元1816执行之后,可以通过引退单元1818中的写回阶段或引退阶段来引退指令。此类执行流水线的各种部分可以由一个或多个核1812执行。
执行向量指令的执行单元1816可以以任何适合的方式来实现。在一个实施例中,执行单元1816可包括或可以通信地耦合到存储器元件以存储执行一个或多个向量操作所需的信息。在一个实施例中,执行单元1816可以包括用以执行基于通道的跨步存储操作的电路。例如,执行单元1816可以包括用以实现“VPSTORE4”指令、“VPSTORE3”指令或“VPSTORE2”指令的电路。这些指令的示例实现在下面更详细地描述。
在本公开的实施例中,处理器1804的指令集架构可以实现被定义为Intel®高级向量扩展512(Intel® AVX-512)指令的一个或多个扩展向量指令。处理器1804可以隐式地或通过解码和执行特定指令来辨别这些扩展向量操作中的一个要被执行。在此类情况下,可以将扩展向量操作引导至执行单元1816中的具体一个以用于指令的执行。在一个实施例中,指令集架构可以包括对512位SIMD操作的支持。例如,由执行单元1816实现的指令集架构可以包括32个向量寄存器(每个向量寄存器是512位宽),以及对高达512位宽的向量的支持。由执行单元1816实现的指令集架构可以包括用于目的地操作数的高效合并和有条件执行的八个专用屏蔽寄存器。至少一些扩展向量指令可以包括对广播的支持。至少一些扩展的向量指令可以包括对嵌入屏蔽的支持以使能预测。
至少一些扩展向量指令可以将相同的操作同时应用于存储在向量寄存器中的向量的每个元素。其它扩展向量指令可以将相同的操作应用于多个源向量寄存器中的对应元素。例如,可以通过扩展向量指令将相同的操作应用于存储在向量寄存器中的打包数据项的每个单独数据元素。在另一示例中,扩展向量指令可以指定要对两个源向量操作数的相应数据元素执行的单个向量操作,以生成目的地向量操作数。
在本公开的实施例中,至少一些扩展向量指令可以由处理器核内的SIMD协处理器执行。例如,核1812内的一个或多个执行单元1816可以实现SIMD协处理器的功能性。SIMD协处理器可以完全或部分地由图1-17中描述的元件实现。在一个实施例中,指令流1802内的由处理器1804接收的扩展向量指令可以被引导至实现SIMD协处理器的功能性的执行单元1816。
图19示出根据本公开的实施例的执行SIMD操作的数据处理系统的示例处理器核1900。处理器1900可以完全或部分地由图1-18中描述的元件实现。在一个实施例中,处理器核1900可以包括主处理器1920和SIMD协处理器1910。SIMD协处理器1910可以完全或部分地由图1-17中描述的元件实现。在一个实施例中,SIMD协处理器1910可以实现图18中所示的执行单元1816中的一个的至少一部分。在一个实施例中,SIMD协处理器1910可以包括SIMD执行单元1912和扩展向量寄存器堆1914。SIMD协处理器1910可执行扩展SIMD指令集1916的操作。扩展SIMD指令集1916可包括一个或多个扩展向量指令。这些扩展向量指令可以控制包括与驻留在扩展向量寄存器堆1914中的数据的交互的数据处理操作。
在一个实施例中,主处理器1920可以包括解码器1922,以辨别扩展SIMD指令集1916的指令以用于由SIMD协处理器1910的执行。在其它实施例中,SIMD协处理器1910可以包括解码器(未示出)的至少一部分以解码扩展SIMD指令集1916的指令。处理器核1900还可以包括对于理解本公开的实施例可能不必需的附加电路(未示出)。
在本公开的实施例中,主处理器1920可以执行控制一般类型的数据处理操作(包括与高速缓存1924和/或寄存器堆1926的交互)的数据处理指令流。嵌入在所述数据处理指令流内的可以是扩展SIMD指令集1916的SIMD协处理器指令。主处理器1920的解码器1922可以将这些SIMD协处理器指令辨别为具有应当由附连的SIMD协处理器1910执行的类型。相应地,主处理器1920可以在协处理器总线1915上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。从协处理器总线1915,这些指令可由任何附连的SIMD协处理器接收。在图19中所示的示例实施例中,SIMD协处理器1910可以接受并执行打算用于在SIMD协处理器1910上的执行的任何接收的SIMD协处理器指令。
在一个实施例中,主处理器1920和SIMD协处理器1920可以集成到单个处理器核1900中,所述单个处理器核1900包括执行单元、寄存器堆集合和解码器以辨别扩展SIMD指令集1916的指令。
图18和图19中描绘的示例实现仅仅是说明性的,并不意味着对本文所描述的用于执行扩展向量操作的机制的实现进行限制。
图20是示出根据本公开的实施例的示例扩展向量寄存器堆1914的框图。扩展向量寄存器堆1914可以包括32个SIMD寄存器(ZMM0-ZMM31),其的每个是512位宽。每个ZMM寄存器的低256位被混叠到相应的256位YMM寄存器。每个YMM寄存器的低128位被混叠到相应的128位XMM寄存器。例如,寄存器ZMM0(示出为2001)的位255至0被混叠到寄存器YMM0,并且寄存器ZMM0的位127至0被混叠到寄存器XMM0。类似地,寄存器ZMM1(示出为2002)的位255到0被混叠到寄存器YMM1,寄存器ZMM1的位127到0被混叠到寄存器XMM1,寄存器ZMM2(示出为2003)的位255到0被混叠到寄存器YMM2,寄存器ZMM2的位127至0被混叠到寄存器XMM2,等等。
在一个实施例中,扩展SIMD指令集1916中的扩展向量指令可以对扩展向量寄存器堆1914中的任何寄存器进行操作,包括寄存器ZMM0-ZMM31、寄存器YMM0-YMM15和寄存器XMM0-XMM7。在另一实施例中,在开发Intel® AVX-512指令集架构之前实现的遗留SIMD指令可以对扩展向量寄存器堆1914中的YMM或XMM寄存器的子集进行操作。例如,在一些实施例中通过一些遗留SIMD指令的访问可以限于寄存器YMM0-YMM15或寄存器XMM0-XMM7。
在本公开的实施例中,指令集架构可以支持访问高达四个指令操作数的扩展向量指令。例如,在至少一些实施例中,扩展向量指令可访问图20中所示的32个扩展向量寄存器ZMM0-ZMM31中的任何寄存器作为源或目的地操作数。在一些实施例中,扩展向量指令可以访问八个专用屏蔽寄存器中的任何寄存器。在一些实施例中,扩展向量指令可以访问16个通用寄存器中的任何寄存器作为源操作数或目的地操作数。
在本公开的实施例中,扩展向量指令的编码可以包括指定要执行的具体向量操作的操作码。扩展向量指令的编码可以包括识别8个专用屏蔽寄存器k0-k7中的任何屏蔽寄存器的编码。所识别的屏蔽寄存器的每个位可以在向量操作被应用于相应的源向量元素或目的地向量元素时支配向量操作的行为。例如,在一个实施例中,这些屏蔽寄存器中的七个(k1-k7)可以用于有条件地支配扩展向量指令的每数据元素计算操作。在此示例中,如果未设置对应的屏蔽位,则不会针对给定的向量元素执行所述操作。在另一实施例中,屏蔽寄存器k1-k7可用于有条件地支配对扩展向量指令的目的地操作数的每元素更新。在此示例中,如果未设置对应的屏蔽位,则给定的目的地元素不随操作的结果而更新。
在一个实施例中,扩展向量指令的编码可以包括指定要应用于扩展向量指令的目的地(结果)向量的屏蔽类型的编码。例如,此编码可以指定合并屏蔽或零屏蔽是否应用于执行向量操作。如果此编码指定合并屏蔽,则任何目的地向量元素(屏蔽寄存器中的其对应位未设置)的值可保留在目的地向量中。如果此编码指定了零屏蔽,则任何目的地向量元素(屏蔽寄存器中的其对应位未设置)的值可利用目的地向量中的零值替换。在一个示例实施例中,屏蔽寄存器k0不被用作向量操作的谓词(predicate)操作数。在此示例中,将否则选择屏蔽k0的编码值可以替代地选择全1的隐式屏蔽值,由此有效地禁用屏蔽。在此示例中,屏蔽寄存器k0可用于将一个或多个屏蔽寄存器作为源或目的地操作数的任何指令。
下面示出了扩展向量指令的使用和语法的一个示例:
VADDPS zmm1、zmm2、zmm3
在一个实施例中,上面所示的指令将把向量加法操作应用到源向量寄存器zmm2和zmm3的所有元素。在一个实施例中,上面所示的指令将把结果向量存储在目的地向量寄存器zmm1中。备选地,有条件地应用向量操作的指令如下所示:
VADDPS zmml {kl} {z},zmm2,zmm3
在此示例中,指令将把向量加法操作应用于源向量寄存器zmm2和zmm3的元素(针对其设置了屏蔽寄存器k1中的对应位)。在此示例中,如果{z}修饰符被设置,则存储在与屏蔽寄存器k1中的未设置的位对应的目的地向量寄存器zmm1中的结果向量的元素的值可以利用0值替换。否则,如果没有设置{z}修饰符,或者如果没有指定{z}修饰符,则存储在与屏蔽寄存器k1中的未设置的位对应的目的地向量寄存器zmm1中的结果向量的元素的值可被保留。
在一个实施例中,一些扩展向量指令的编码可以包括用以指定嵌入广播的使用的编码。如果针对从存储器加载数据并执行某一计算或数据移动操作的指令而包括指定使用嵌入广播的编码,则可以跨有效源操作数的所有元素广播来自存储器的单个源元素。例如,当要在应用于源向量的所有元素的计算中使用相同的标量操作数时,可以针对向量指令指定嵌入广播。在一个实施例中,扩展向量指令的编码可以包括指定压缩到源向量寄存器中或要压缩到目的地向量寄存器中的数据元素的大小的编码。例如,编码可以指定每个数据元素是字节、字、双字或四字等。在另一实施例中,扩展向量指令的编码可以包括指定压缩到源向量寄存器中或要压缩到目的地向量寄存器中的数据元素的数据类型的编码。例如,编码可以指定数据表示单精度整数或双精度整数,或者多个支持的浮点数据类型中的任何一个。
在一个实施例中,扩展向量指令的编码可以包括指定存储器地址或存储器寻址模式(通过其访问源或目的地操作数)的编码。在另一实施例中,扩展向量指令的编码可以包括指定作为指令的操作数的标量整数或标量浮点数的编码。虽然本文描述了若干特定的扩展向量指令及其编码,但这些仅仅是可以在本公开的实施例中实现的扩展向量指令的示例。在其它实施例中,可以在指令集架构中实现更多更少或不同的扩展向量指令,并且它们的编码可以包括更多、更少或不同的信息以控制它们的执行。
采用可以单独访问的三个或四个元素的元组组织的数据结构在许多应用中是常见的。例如,RGB(红-绿-蓝)是在媒体应用中使用的许多编码方案中的常见格式。存储此类型信息的数据结构可以由三个数据元素(R分量、G分量和B分量)组成,其连续地被存储并且具有相同的大小(例如,它们全部都可以是32位整数)。对在高性能计算应用中编码数据常见的格式包括两个或更多坐标值,所述两个或更多坐标值共同表示多维空间内的位置。例如,数据结构可以存储表示2D空间内的位置的X和Y坐标,或者可以存储表示3D空间内的位置的X、Y和Z坐标。在又一示例中,许多分子动力学应用对由XYZW数据结构阵列组成的邻居列表进行操作。具有更高数量元素的其它常见数据结构可出现在这些和其它类型的应用中。
在一些情况下,这些类型的数据结构可以组织为阵列。在本公开的实施例中,可以将这些数据结构中的多个数据结构存储在单个向量寄存器中,诸如上面描述的XMM、YMM或ZMM向量寄存器中的一个。在一个实施例中,此类数据结构内的单独数据元素可以被重新组织成可以然后在SIMD循环中使用的相似元素的向量,因为这些元素可能不彼此紧邻存储在数据结构本身中。应用可以包括以相同方式对一种类型的所有数据元素进行操作的指令,以及以不同方式对不同类型的所有数据元素进行操作的指令。在一个示例中,对于各自在RGB颜色空间中包括R分量、G分量和B分量的数据结构的阵列,与应用于阵列的每个行中的G分量或B分量的计算操作不同的计算操作可以被应用于阵列的每个行(每个数据结构)中的R分量。
在另一示例中,数据结构阵列可以包括存储3D坐标信息的多个数据结构,其中的每个包括X分量、Y分量和Z分量。为了对X值进行操作,可以使用一个或多个指令来将来自XYZ数据结构阵列的X值、Y值和Z值提取到单独向量中。作为结果,向量中的一个可以包括所有的X值,一个可以包括所有的Y值,并且一个可以包括所有的Z值。在一些情况下,在对这些单独向量内的至少一些数据元素进行操作之后,应用可包括作为整体对XYZ数据结构进行操作的指令。例如,在更新单独向量中的X、Y或Z值中的至少一些之后,应用可以包括访问数据结构中的一个以检索或对存储在数据结构中的XYZ坐标进行操作的指令。在一个实施例中,可以调用另一扩展向量指令以便将XYZ坐标存回其原始格式。例如,基于通道的跨步存储指令可以将来自单独向量的数据置换进目的地向量,其中每个数据结构的X分量、Y分量和Z分量存储在连续的位置中。在一个实施例中,基于通道的跨步存储指令可以将目的地向量存储在存储器中作为XYZ数据结构的阵列。
在本公开的实施例中,用于执行由处理器核(诸如系统1800中的核1812)或由SIMD协处理器(诸如SIMD协处理器1910)实现的扩展向量操作的指令可以包括用以执行基于通道的跨步存储操作的指令。例如,这些指令可包括一个或多个“VPSTORE”指令。在本公开的实施例中,可以使用这些VPSTORE指令来将包含数据结构的不同数据元素的向量存储在存储器中。在一个实施例中,这些指令可以用于将连续的数据结构连续地存储在存储器中。例如,它们可以用来将连续的数据结构存储在存储器中作为阵列的行。
在一个实施例中,向量寄存器内的不同“通道”可以用于保持不同类型的数据元素。例如,一个通道可以保持X值,一个通道可以保持Y值,等等。在此上下文中,术语“通道”可以指保持要以相同方式处理的多个数据元素的向量寄存器的一部分,而不是指保持单个数据元素的向量寄存器的一部分。在其中向量寄存器是512位宽的一个实施例中,可以存在四个128位通道,其中的每个存储针对3D或4D数据结构的相应类型的多个数据元素。例如,512位向量寄存器内的最低阶128位可称为第一通道,下一128位可称为第二通道,等等。在此示例中,每个128位通道可以存储两个64位数据元素、四个32位数据元素、八个16位数据元素或四个8位数据元素。在其中向量寄存器是512位宽的另一实施例中,可以存在两个256位通道,其的每个存储针对2D数据结构的相应类型的数据元素。在此示例中,每个256位通道可以存储每个高达128位的数据元素。在一个实施例中,每个通道可以保持单个类型的多个数据元素。在另一实施例中,保持在单个通道中的数据元素可以不具有相同类型,但是它们可以以相同的方式通过应用进行操作。
在一个实施例中,表示四个XYZW类型数据结构(其中X、Y、Z和W分量各自为32位)的数据可以存储在诸如ZMM寄存器的扩展向量寄存器中。ZMM寄存器可以将X值的向量存储在第一通道中,将Y值的向量存储在第二通道中,将Z值的向量存储在第三通道中,并且将W值的向量存储在第四通道中。在一个实施例中,可以使用“VPSTORE4D”指令来存储四个连续的XYZW类型数据结构,各自包含来自存储器中的ZMM寄存器的相应通道的元素。在此示例中,VPSTORE4D指令可以将来自ZMM寄存器的数据进行置换,并将其以XYZW顺序放回,并可以以XYZW顺序将其存储在存储器中。例如,由VPSTORE4D指令生成并由VPSTORE4D指令存储在存储器中的目的地向量可以采用以下顺序包括来自ZMM寄存器的四个通道的数据元素:X1Y1Z1W1、X2Y2Z2W2、X3Y3Z3W3、X4Y4Z4W4。
图21是根据本公开的实施例的用以执行基于通道的跨步存储操作的操作的说明。在一个实施例中,系统1800可以执行用以执行基于通道的跨步存储操作的指令。例如,可以执行VPSTORE指令。此指令可以包括任何适合的数量和种类的操作数、位、标志、参数或其它元素。在一个实施例中,VPSTORE指令的调用可以引用源向量寄存器。源向量寄存器可以是扩展向量寄存器,其包含表示两个或更多个数据结构的多个元素的打包数据。VPSTORE指令的调用也可以引用指针。指针可以识别存储器中的位置,在其处扩展向量寄存器中的数据应该被存储。例如,VPSTORE指令的执行可以使扩展向量寄存器中的数据被写入到存储器中的连续位置,并且指针可以识别存储器中的第一位置的地址(存储在扩展向量寄存器中的数据应该写入到其)。在一个实施例中,VPSTORE指令的调用可以指定由存储在扩展向量寄存器中的数据所表示的数据结构中的数据元素的大小。在一个实施例中,所有数据元素可以是相同的大小和类型。在另一实施例中,VPSTORE指令的调用可以指定包括在由存储在扩展向量寄存器中的数据所表示的数据结构中的数据元素的数量。在一个实施例中,VPSTORE指令的调用可以指定当将执行的结果写入到目的地位置时要应用于执行的结果的屏蔽寄存器。在又一实施例中,VPSTORE指令的调用可以指定要应用于结果的屏蔽的类型,诸如合并屏蔽或零屏蔽。又在其它实施例中,可以在VPSTORE指令的调用中引用更多、更少或不同的参数。图18中所示的VPSTORE指令的一个或多个参数可以是对于所述指令固有的。例如,在不同的实施例中,这些参数的任何组合可以被编码在针对所述指令的操作码格式的位或字段中。在其它实施例中,图18中所示的VPSTORE类型指令的一个或多个参数对于所述指令可以是可选的。例如,在不同的实施例中,可以在调用指令时指定这些参数的任何组合。
在图21中示出的示例实施例中,在(1),VPSTORE指令及其参数(其可以包括上面描述的寄存器和指针中的任何或全部、每个数据结构中的数据元素的大小的指示、每个数据结构中的数据元素的数量的指示、识别具体屏蔽寄存器的参数或者指定屏蔽类型的参数)可以由SIMD执行单元1912接收。例如,在一个实施例中VPSTORE指令可以由核1812内的分配器1814发布到在SIMD协处理器1910内的SIMD执行单元1912。在另一实施例中,VPSTORE指令可以由主处理器1920的解码器1922发布到SIMD协处理器1910内的SIMD执行单元1912。VPSTORE指令可以由SIMD执行单元1912逻辑地执行。
在此示例中,表示多个数据结构的打包数据可以存储在诸如扩展向量寄存器堆1914内的扩展向量寄存器ZMMn(2102)的源向量寄存器中。数据可以存储在扩展向量寄存器ZMMn(2102)中,使得来自不同数据结构的相同类型的元素一起存储在扩展向量寄存器中。例如,包括扩展向量寄存器ZMMn(2102)的最低阶位的第一通道可以存储第一类型的多个数据元素,包括扩展向量寄存器ZMMn(2102)的下一最低阶位的第二通道可以存储第二类型的多个数据元素,等等。
由SIMD执行单元1912对VPSTORE指令的执行可以包括,在(2),从扩展向量寄存器堆1914中的扩展向量寄存器ZMMn(2102)获得表示多个数据结构的数据元素。例如,VPSTORE指令的参数可以将扩展向量寄存器ZMMn(2102)识别为要通过基于通道的跨步存储操作存储在存储器中的数据的源,并且SIMD执行单元1912可以读存储在所识别的源向量寄存器中的多个通道中的打包数据。
由SIMD执行单元1912对VPSTORE指令的执行可以包括在(3),将从所识别的源向量寄存器中的多个通道获得的打包数据进行置换以包括在目的地向量中。在一个实施例中,对于给定的数据结构,置换数据可以包括从源向量寄存器内的每个通道提取相应的元素,并将它们彼此紧邻地汇编以包括在目的地向量中。例如,可以通过从扩展向量寄存器ZMMn(2102)中的每个通道提取第一元素来汇编第一数据结构以包括在目的地向量中。在一个实施例中,VPSTORE指令的执行可以包括对于数据结构(其数据作为打包数据存储在扩展向量寄存器ZMMn(2102)中)的每个,重复图21中所示的操作的步骤的任何或全部。例如,步骤(2)和(3)可针对要汇编并包括在目的地向量中的每个数据结构执行一次。在一个实施例中,对于每个附加迭代,在(2)和(3),SIMD执行单元1912可以分别从源向量寄存器内的每个通道提取相应的元素,并将它们彼此紧邻汇编以用于包括在目的地向量中。例如,可以通过从扩展向量寄存器ZMMn(2102)中的每个通道提取第二元素来汇编第二数据结构以包括在目的地向量中,可以通过从扩展向量寄存器ZMMn(2102)中的每个通道提取第三元素来汇编第三数据结构以包括在目的地向量中,等等。
在汇编目的地向量之后,VPSTORE指令的执行可以包括在(4),将目的地向量写入到存储器系统1830中的目的地2104,其位置由VPSTORE指令的参数识别,在这之后可以引退VPSTORE指令。在一个实施例中,如果在VPSTORE指令的调用中指定了此类屏蔽操作,则将目的地向量写入到目的地2104可以包括将合并屏蔽操作应用于目的地向量。在另一实施例中,如果在VPSTORE指令的调用中指定了此类屏蔽操作,则将目的地向量写入到目的地2104可以包括将零屏蔽操作应用于目的地向量。
在一个实施例中,当从源向量寄存器提取每个数据结构的数据元素并且彼此紧邻汇编时,它们可以被写出到存储器系统1830。例如,一旦第一数据结构已经从源向量寄存器的每个通道的第一数据元素汇编,构成第一数据结构的数据元素可以以识别为目的地2104的位置开始写出到存储器系统1830中的连续位置。随后,一旦第二数据结构已经从源向量寄存器的每个通道的第二数据元素汇编,则构成第二数据结构的数据元素可以以第一数据结构的数据元素被写入到的位置之后的下一可用位置开始写出到存储器系统1830中的连续位置,等等。在一个实施例中,可以将第二数据结构的数据元素写入到距第一数据结构的对应数据元素被写入到的位置固定距离的存储器系统1830中的位置。例如,每个数据结构的第一数据元素被写入到的位置之间的距离可以与每个数据结构的第二数据元素被写入到的位置之间的距离相同。在一个实施例中,随着任何附加数据结构被汇编并写出到存储器系统1830中的连续位置,可以将这些附加数据结构中的每个的数据元素写入到距前面的数据结构的对应数据元素被写入到的位置相同的固定距离的位置。
在一个实施例中,扩展SIMD指令集架构可以实现VPSTORE操作的多个版本或形式,包括例如下面所示的那些:
VPSTORE4 {size} {kn} {z}(REG,PTR)
VPSTORE3 {size} {kn} {z}(REG,PTR)
VPSTORE2 {size} {kn} {z}(REG,PTR)
在VPSTORE指令的这些示例形式中,“VPSTORE”标识符之后的数字(例如,4、3或2)可以指示源向量寄存器中的通道的数量。这可以对应于由存储在源向量寄存器中的打包数据所表示的每个数据结构中的数据元素的数量。在这些示例中,“大小”修饰符可以指定源向量寄存器中每个数据元素的大小和/或类型。这可以对应于由存储在源向量寄存器中的打包数据所表示的每个数据结构中的数据元素的大小和/或类型。在一个实施例中,指定的大小/类型可以是{B / W / D / Q / PS / PD}中的一个。在这些示例中,可选指令参数“kn”可以识别多个屏蔽寄存器中的具体一个。当将屏蔽要应用于VPSTORE指令的目的地(结果)向量时,可以指定此参数。在要应用屏蔽(例如,如果针对指令指定了屏蔽寄存器的话)的实施例中,可选指令参数“z”可指示是否应该应用置零屏蔽。在一个实施例中,如果此可选参数被设置,则可以应用零屏蔽,并且如果此可选参数未被设置或者如果此可选参数被省略,则可以应用合并屏蔽。
图22A示出根据本公开的实施例的形式VPSTORE4D { kn } {z}的VPSTORE指令的操作。在此示例中,存储在扩展向量寄存器ZMMn(2102)中的打包数据表示其中每个行包括四个32位双字的阵列的数据元素。在此示例中,阵列的每个行要包括X分量、Y分量、Z分量和W分量。在执行VPSTORE指令之前,数据结构中每个行的单独分量已被加载到源向量寄存器(扩展向量寄存器ZMMn 2102)的相应128位通道中。在此示例中,源向量寄存器的最低阶128位(其可以被称为源向量寄存器的第一通道)包含表示数据结构的每个行的X分量的四个32位双字:XI、X2、X3和X4。在此示例中,源向量寄存器的下一最低阶128位(其可以被称为源向量寄存器的第二通道)包含表示数据结构的每个行的Y分量的四个32位双字:Y1、Y2、Y3和Y4。类似地,源向量寄存器的下一最低阶128位(其可被称为源向量寄存器的第三通道)包含表示数据结构的每个行的Z分量的四个32位双字:Z1、Z2、Z3和Z4;并且源向量寄存器的最高阶128位(其可被称为源向量寄存器的第四通道)包含表示数据结构的每个行的W分量的四个32位双字:W1、W2、W3、W4。
在一个实施例中,可以使用VPSTORE指令来执行基于通道的跨步存储操作,其从由指令参数指定的目的地位置开始,将数据结构的每个行的四个数据元素(例如,每个行的相应X分量、Y分量、Z分量和W分量)存储在存储器中的连续位置。例如,执行指令“VPSTORE4Dkn z”可以使源向量寄存器的每个通道中的第一数据元素(第一X分量、第一Y分量、第一Z分量和第一W分量)从目的地位置2104开始,被写入到存储器系统1830中的连续位置。这四个元素可以共同表示存储器系统1830中的目的地数据结构的一个行。类似地,此指令的执行可以使源向量寄存器的每个通道中的第二数据元素(第二X分量、第二Y分量、第二Z分量和第二W分量)写入到在与目的地数据结构的第二行对应的位置的、在存储器系统1830中的连续位置,以及可以使源向量寄存器的每个通道中的第四数据元素(第四X分量、第四Y分量、第四Z分量和第四W分量)被写入到在与目的地数据结构的第四行对应的位置的、在存储器系统1830中的连续位置。
在此示例中,对目的地(结果)向量执行在指令的调用中指定的屏蔽操作。更具体地,针对此指令指定零屏蔽。指定的屏蔽寄存器(kn)包括未设置的且对应于源向量寄存器的第三通道并且因此对应于目的地数据结构的第三行的位。在此情况下,源向量寄存器的每个通道中的第三数据元素(第三X分量、第三Y分量、第三Z分量和第三W分量)将不被写入到存储器系统1830。相反,执行此指令可以使包含所有零的数据元素被写入到与目的地数据结构的第三行(第三行2202)相对应的、在存储器系统1830中的连续位置。在另一实施例中,如果针对此指令指定合并屏蔽而不是零屏蔽,则在执行指令之前与目的地数据结构的第三行(第三行2202)对应的、存储器系统1830中的连续位置的内容将会在执行指令之后被保留,而不是被源向量寄存器的每个通道中的第三数据元素或被包含全零的数据元素改写。
图22B示出根据本公开的实施例的形式VPSTORE3D的VPSTORE指令的操作。在此示例中,存储在扩展向量寄存器ZMMn(2102)中的打包数据表示多个目的地数据结构的数据元素,其的每个包括三个32位双字。在此示例中,每个目的地数据结构要包括X分量、Y分量和Z分量。在执行VPSTORE指令之前,已将每个数据结构的单独分量加载到源向量寄存器(扩展向量寄存器ZMMn 2102)的相应128位通道中。在此示例中,源向量寄存器的最低阶128位(其可以被称为源向量寄存器的第一通道)包含表示四个目的地数据结构中的每个的X分量的四个32位双字:XI、X2、X3和X4。在此示例中,源向量寄存器的下一最低阶128位(其可以被称为源向量寄存器的第二通道)包含表示四个目的地数据结构中的每个的Y分量的四个32位双字:Y1、Y2、Y3和Y4。类似地,源向量寄存器的下一最低阶128位(其可被称为源向量寄存器的第三通道)包含表示四个目的地数据结构中的每个的Z分量的四个32位双字:Z1、Z2、Z3和Z4。在此示例中,源向量寄存器的最高阶128位(可以被称为源向量寄存器的第四通道)不包含四个目的地数据结构的任何数据元素。在一个实施例中,第四通道可以包括全零或全1。在其它实施例中,第四通道可以包含任何任意数据,因为它将不通过VPSTORE指令的执行而使用(也不会受其影响)。
在一个实施例中,可以使用VPSTORE指令来执行基于通道的跨步存储操作,其从由指令参数指定的目的地位置开始,将针对四个数据结构中的每个的三个数据元素(例如,每个数据结构的相应X分量、Y分量和Z分量)存储在存储器中的连续位置。例如,指令“VPSTORE3D”的执行可以使源向量寄存器的每个通道中的第一数据元素(第一X分量、第一Y分量和第一Z分量)从目的地位置2104开始,被写入到存储器系统1830中的连续位置。这三个元素可以共同表示存储在存储器系统1830中的目的地数据结构的第一目的地数据结构。类似地,此指令的执行可以使源向量寄存器的每个通道中的第二数据元素(第二X分量、第二Y分量和第二Z分量)被写入到在与目的地数据结构中的第二目的地数据结构对应的位置的、在存储器系统1830中的连续位置;可以使源向量寄存器的每个通道中的第三数据元素(第三X分量、第三Y分量和第三Z分量)被写入到在与目的地数据结构的第三目的地数据结构对应的位置的、在存储器系统1830中的连续位置;并且可以使源向量寄存器的每个通道中的第四数据元素(第四X分量、第四Y分量和第四Z分量)被写入到在与目的地数据结构的第四目的地数据结构对应的位置的、在存储器系统1830中的连续位置。在此示例中,没有针对VPSTORE指令参数指定屏蔽。因此,在由VPSTORE指令对包含在源向量寄存器(扩展向量寄存器ZMMn 2102)中的打包数据进行置换之后,构成四个目的地数据结构的所有数据元素被写入到存储器1830。
如图22B中的示例所示的,在一个实施例中,由VPSTORE指令的执行引起的目的地数据结构在存储器1830中可以占用比如果源向量寄存器的整个内容已写出到存储器的话将会已占用的空间更少的空间。例如,由执行上面描述的VPSTORE3D指令引起的四个数据结构(其中的每个包括X分量、Y分量和Z分量)可以在存储器1830中占用十二个32位双字,而源向量寄存器(扩展向量寄存器ZMMn 2102)具有16个32位双字的容量。
图22C示出根据本公开的实施例的形式VPSTORE2D的VPSTORE指令的操作。在此示例中,存储在扩展向量寄存器ZMMn(2102)中的数据表示两个目的地数据结构的数据元素,其中的每个包括两个64位浮点元素。在此示例中,每个目的地数据结构要包括X分量和Y分量。在执行VPSTORE指令之前,已经将每个数据结构的单独分量加载到源向量寄存器(扩展向量寄存器ZMMn 2102)的相应128位通道中。在此示例中,源向量寄存器的最低阶128位(其可以被称为源向量寄存器的第一通道)包含表示两个目的地数据结构中的每个的X分量的两个64位浮点元素:XI和X2。在此示例中,源向量寄存器的下一低阶128位(其可以被称为源向量寄存器的第二通道)包含表示两个目的地数据结构中的每个的Y分量的两个64位浮点元素:Y1和Y2。在此示例中,源向量寄存器的最高阶256位未使用。
在一个实施例中,可使用VPSTORE指令来执行基于通道的跨步存储操作,其从由指令参数指定的目的地位置开始,将针对两个数据结构中的每个的两个数据元素(例如,每个数据结构的相应X分量和Y分量)存储在存储器中的连续位置。例如,执行指令“VPSTORE2D”可以使源向量寄存器的每个通道中的第一数据元素(第一X分量和第一Y分量)从目的地位置2104开始,被写入到存储器系统1830中的连续位置。这两个元素可以共同表示存储在存储器系统1830中的目的地数据结构的第一目的地数据结构。类似地,此指令的执行可以使源向量寄存器的每个通道中的第二数据元素(第二X分量和第二Y分量)被写入到在与目的地数据结构中的第二目的地数据结构对应的位置的、在存储器系统1830中的连续位置。在此示例中,没有针对VPSTORE指令参数指定屏蔽。因此,在由VPSTORE指令将包含在源向量寄存器(扩展向量寄存器ZMMn 2102)中的打包数据进行置换之后,构成两个目的地数据结构的所有数据元素被写入到存储器1830。
图22A-22C中所示的VPSTORE指令的形式仅仅是此指令可以采取的许多形式的示例。在其它实施例中,VPSTORE指令可以采取任何多种其它形式,其中指令修饰符值和指令参数值的不同组合包括在指令中,或者在调用VPSTORE指令时被指定。
图23示出根据本公开的实施例的用于执行基于通道的跨步存储操作的示例方法2300。方法2300可以通过图1-22中所示的任何元件来实现。方法2300可以由任何适合的准则发起并且可以在任何适合的点发起操作。在一个实施例中,方法2300可以在2305发起操作。方法2300可以包括比所示那些步骤更多或更少的步骤。此外,方法2300可以采用与下面所示的那些顺序不同的顺序执行其步骤。方法2300可以在任何合适的步骤终止。此外,方法2300可以在任何适合的步骤重复操作。方法2300可以与方法2300的其它步骤并行执行任何其步骤,或者与其它方法的步骤并行执行任何其步骤。此外,方法2300可以被执行多次以执行多个基于通道的跨步存储操作。
在2305,在一个实施例中,可以接收并解码用以执行基于通道的跨步存储操作的指令。在2310,指令和指令的一个或多个参数可以被引导至SIMD执行单元以用于执行。在一些实施例中,指令参数可以包括包含打包数据的源向量寄存器的标识符、识别存储器中的目的地的指针、由打包数据表示的每个数据结构中的数据元素的大小的指示、由打包数据表示的每个数据结构中的数据元素的数量的指示、识别具体屏蔽寄存器的参数或者指定屏蔽类型的参数。
在2315,可以从源向量寄存器中的通道提取数据结构的第一元素。如果在2320确定在源向量寄存器中存在包含数据结构的数据元素的更多通道,则在2325,可以从源向量寄存器中的下一通道提取数据结构的下一元素。在一个实施例中,在2325中示出的操作可以重复一次或多次以便从数据结构的所有元素驻留在其中的、源向量寄存器内的相应通道提取数据结构的所有元素。如果(在2320)确定在源向量寄存器中不存在包含数据结构的数据元素的附加通道,并且如果(在2330)确定针对通道或数据结构设置的目的地屏蔽位被设置或者还没有针对基于通道的跨步存储操作指定屏蔽,则在2335,数据结构的提取的数据元素可以存储在存储器中的连续目的地位置中。
如果(在2320)确定在源向量寄存器中不存在包含数据结构的数据元素的附加通道,如果(在2330)确定针对通道或数据结构设置的目的地屏蔽位未被设置,并且如果(在2340)确定指定了零屏蔽,则在2345可将零存储在存储器中的连续目的地位置(其否则将会已存储数据结构的提取的数据元素。如果(在2320)确定在源向量寄存器中不存在包含数据结构的数据元素的附加通道,如果(在2330)确定针对通道或数据结构设置的目的地屏蔽位未设置,以及如果(在2340)确定未指定零屏蔽(例如,如果指定了合并屏蔽或者既未指定零屏蔽也未指定合并屏蔽),则在2350,当前存储在连续目的地位置(其否则将会已存储数据结构的提取的数据元素)的值可以被保留。
虽然在源向量寄存器的每个通道中存在针对一个或多个附加数据结构的数据元素(如在2360所确定的),但方法2300可以针对每个附加数据结构从2315开始重复。一旦在源向量寄存器的通道中不存在针对任何附加数据结构的数据元素,可以在2370引退指令。
在本公开的实施例中,可以在调用VPSTORE指令之前利用打包数据元素预加载向量寄存器。在一个实施例中,可以调用一个或多个其它向量指令来加载针对VPSTORE指令的源向量寄存器。下面的示例伪代码示出了使用VPSTORE指令利用来自四个不同的XMM寄存器的数据元素将四个4D结构连续存储在存储器中。
VPINSERTI32x4 zmm5,zmm5,xmml,0
VPINSERTI32x4 zmm5,zmm5,xmm2,1
VPINSERTI32x4 zmm5,zmm5,xmm3,2
VPINSERTI32x4 zmm5,zmm5,xmm4,3
// zmm5 = xlx2x3x4yly2y3y4zlz2z3z4wlw2w3w4
VPSTORE4D zmm5,[mem]
在此示例中,使用四个向量插入指令来将具有来自四个源向量寄存器XMM1、XMM2、XMM3和XMM4的数据元素的扩展向量寄存器(ZMM5)打包。更具体地,这些向量插入指令被用于分别将来自寄存器XMM1的四个32位X值打包到ZMM5的最低有效128位,将来自寄存器XMM2的四个32位Y值打包到ZMM5的下一最低阶128位,将来自寄存器XMM3的四个32位Z值打包到ZMM5的下一最低阶128位,并将来自寄存器XMM4的四个32位W值打包到ZMM5的最高有效128位。一旦ZMM5寄存器已利用这些数据元素打包,它可以充当针对VPSTORE4D指令的源寄存器。VPSTORE指令的VPSTORE4D形式指定源向量寄存器中存在四个通道,并且每个数据元素是32位四字。VPSTORE4D指令的调用包括ZMM5寄存器的标识符作为此指令的源寄存器。VPSTORE4D指令的调用还引用识别存储器中的位置(在其处由指令生成的在目的地向量中的置换数据的存储应该开始)的指针。在此示例中,VPSTORE4D指令的执行可将与四个XYZW数据结构对应的数据元素放回到其原始的XYZW格式。例如,VPSTORE4D指令的执行可以使表示四个数据结构的数据被写入到存储器,使得对于每个数据结构,数据结构的四个元素(例如,X值、Y值、Z值和W值)存储在存储器中的连续位置。
图24示出根据本公开的实施例的用于利用基于通道的跨步存储操作(例如图23中所示的基于通道的跨步存储操作)以将来自相应不同源的不同类型的数据元素进行置换的示例方法2400。在此示例方法中,源向量寄存器利用来自四个其它向量寄存器的打包数据元素来预加载,在其之后调用基于通道的跨步存储操作来置换数据元素并将其写出到存储器。方法2400可以通过图1-23中所示的任何元件来实现。方法2400可以由任何适合的准则发起并且可以在任何适合的点发起操作。在一个实施例中,在2405,方法2400可以发起操作。方法2400可以包括比所示出的那些步骤更多或更少的步骤。此外,方法2400可以采用与下面所示的那些顺序不同的顺序执行其步骤。方法2400可以在任何适合的步骤终止。此外,方法2400可以在任何适合的步骤重复操作。方法2400可以与方法2400的其它步骤并行执行任何其步骤,或与其它方法的步骤并行执行任何其步骤。此外,可以多次执行方法2400以利用基于通道的跨步存储操作来操纵表示多个数据结构的数据元素的数据。
在2405,在一个实施例中,可以开始执行包括一个或多个扩展向量指令的指令流。在2410,向量寄存器的最低阶部分可以利用给定类型的两个或更多个数据元素来加载。每个数据元素可以表示包含不同类型的多个数据元素的相应数据结构的类似分量。在一个实施例中,数据元素可以从通用寄存器加载到向量寄存器中。在另一实施例中,数据元素可以从另一向量寄存器加载到向量寄存器中。在又一实施例中,数据元素可以从存储器加载到向量寄存器中。
如果在2415确定在数据结构中存在更多元素类型,则在2420,可以利用另一类型的两个或更多个数据元素来加载向量寄存器的下一最低阶部分。其它类型的每个数据元素可以表示数据结构的相应一个数据结构的类似分量。如果(或一旦)在2415确定在数据结构中不存在附加元素类型,则在2425,可以执行基于通道的跨步存储操作以将向量寄存器的内容存储在存储器中,使得将多个数据结构中的每个的数据元素写入到存储器中的连续位置。
虽然在指令流中存在更多指令(如在步骤2430所确定的),但是可以执行在指令流中遇到的每个附加指令(未示出)。在不同的实施例中,执行附加指令可以或可以不包括利用表示多个数据结构的数据元素的打包数据来加载向量寄存器并且执行基于通道的跨步存储操作。一旦在指令流中不存在附加指令(如在步骤2430所确定的),可以终止所述方法。
虽然若干示例描述了对存储在扩展向量寄存器(ZMM寄存器)中的打包数据元素进行操作的VPSTORE指令的形式,但是在其它实施例中,这些指令可以对存储在具有少于512位的向量寄存器中的打包数据元素进行操作。例如,如果VPSTORE指令的源和/或目的地向量包括256位或更少,则VPSTORE指令可以对YMM寄存器或XMM寄存器进行操作。
在上面描述的若干示例中,每个分量类型的数据元素相对小(例如,32位),并且存在不够的数据元素使得它们中的全部可以在被打包到ZMM寄存器(其将是VPSTORE指令的源向量寄存器)中之前存储在单个XMM寄存器中。在其它实施例中,可以存在每个分量类型的足够的数据元素(取决于数据元素的大小),使得它们可以填充YMM寄存器或整个ZMM寄存器。例如,可存在值512位的X值、值512位的Y值,等等。在一个实施例中,结果数据结构的相应子集的构成分量可被打包到多个其它ZMM寄存器中的每个寄存器中,并且可执行多个VPSTORE4D指令以将数据结构存储在存储器中。例如,如果ZMM1保持十六个XYZW数据结构的X值,ZMM2保持Y值,ZMM3保持Z值,并且ZMM4保持W值,则针对第一四个数据结构的数据元素可以打包到ZMM5寄存器中,针对下一四个数据结构的数据元素可以打包到ZMM6寄存器中,针对下一四个数据结构的数据元素可以打包到ZMM7寄存器中,并且最后四个数据结构的数据元素可以打包到ZMM8寄存器中。一旦ZMM5-ZMM8以及利用这些数据结构的数据元素打包,可以调用VPSTORE4D指令四次,以将ZMM5-ZMM8的内容写出到存储器。在另一示例中,结果数据结构的不同子集的构成分量可以一次一个地打包到单个ZMM寄存器中,其间可以执行VPSTORE4D指令以将数据结构的每个子集存储在存储器中。
如上面的示例中所示的,与从源操作数取数据并将其不变地存储在存储器中的标准存储指令不同,本文描述的VPSTORE操作可以用于转置向量寄存器内的数据元素(其表示数据结构的不同分量),以致于它们采用辨别数据元素与数据结构(数据元素是其分量)之间关系的顺序存储在存储器中。上面若干示例描述了使用VPSTORE指令来存储表示存储器中的多个数据结构(例如阵列)的构成分量的数据元素。在其它实施例中,这些基于通道的跨步存储操作可以更一般地用于从向量寄存器的不同部分(通道)中提取打包数据元素,并且取决于通道(在将向量寄存器的内容存储到存储器时它们被从其中提取)来置换它们,而不管数据元素如何(乃至是否)彼此相关。
本文公开的机制的实施例可以在硬件、软件、固件或此类实现方法的组合中实现。本公开的实施例可以被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置的可编程系统上执行的计算机程序或程序代码。
程序代码可以应用于输入指令以执行本文所描述的功能并生成输出信息。可以以已知的方式将输出信息应用于一个或多个输出装置。为了本申请的目的,处理系统可以包括具有处理器(诸如,例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器)的任何系统。
程序代码可以以高级过程或面向对象的编程语言来实现以与处理系统通信。如果期望,程序代码还可以用汇编或机器语言来实现。事实上,本文描述的机制的范围不限于任何具体的编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性指令来实现,所述代表性指令表示处理器内的各种逻辑,所述逻辑当由机器读时使得机器制造逻辑以执行本文所描述的技术。称为“IP核”的此类表示可以存储在有形的,机器可读介质上,并且供应给各种客户或制造设施以加载到实际制作逻辑或处理器的制造机器中。
此类机器可读存储媒体可以包括(不限于)由机器或装置制造或形成的物品的非暂时性、有形布置,包括存储媒体(诸如硬盘、任何其它类型的盘(包括软盘、光盘、紧凑盘只读存储器(CD-ROM)、可重写紧凑盘(CD-RW)和磁光盘))、半导体装置(诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡)或适合于存储电子指令的任何其它类型的媒体。
相应地,本公开的实施例还可以包括包含指令或包含诸如硬件描述语言(HDL)的设计数据的非暂时性有形机器可读媒体,其定义结构、电路、设备、处理器和/或本文描述的系统特征。此类实施例也可以被称为程序产品。
在一些情况下,指令转换器可用于将指令从源指令集转换为目标指令集。例如,指令转换器可以转化(例如,使用静态二进制转化,包括动态编译的动态二进制转化)、变形、仿真或以其它方式将指令转换为要由核处理的一个或多个其它指令。指令转换器可以以软件、硬件、固件或其组合来实现。指令转换器可以在处理器上、处理器外或部分在处理器上且部分在处理器外。
因此,公开了用于根据至少一个实施例执行一个或多个指令的技术。虽然已经在附图中描述和示出了某些示范性实施例,但是要理解,此类实施例仅仅是对其它实施例的说明而不是限制,并且此类实施例不限于所示和所描述的特定构造和布置,因为本领域普通技术人员在研究本公开时可以想起各种其它修改。在诸如此类的技术领域中(其中成长快并且不容易预见进一步进展),所公开的实施例可以在布置和细节上容易地可修改,如在不脱离本公开的原理或随附权利要求的范围的情况下通过实现技术进步所促进的。
本公开的一些实施例包括处理器。在这些实施例中的至少一些中,处理器可以包括用以接收指令的前端,用以解码指令的解码器,用以执行指令的核以及用于引退指令的引退单元。为了执行指令,核可以包括:源向量寄存器,用以将数据元素存储在源向量寄存器内的两个或更多个通道中,其中每个通道要存储两个或更多个数据元素。结合任何上面实施例,核可以包括:第一逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素;第二逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第二数据元素;第三逻辑,用以将要从源向量寄存器提取的数据元素进行置换,以将要从两个或更多个通道的第二通道提取的第一数据元素紧邻要从两个或更多个通道的第一通道提取的第一数据元素放置在目的地向量中以及将要从两个或更多个通道的第二通道提取的第二数据元素紧邻要从两个或更多个通道的第一通道提取的第二数据元素放置在目的地向量中;以及第四逻辑,用以从指令中指定的位置开始,将目的地向量存储到存储器。在任何上面实施例中,在目的地向量中彼此紧邻放置的数据元素可以存储在存储器中的连续存储器位置中。结合任何上面实施例,核可以包括:第五逻辑,用以从源向量寄存器内的两个或更多个通道中的每个通道提取一个或多个附加数据元素;以及第六逻辑,用以将从源向量寄存器内的两个或更多个通道提取的附加数据元素进行置换以将从源向量寄存器内的两个或更多个通道中的第一通道中和源向量寄存器内的两个或更多个通道中的第二通道中的相同位置提取的附加数据元素彼此紧邻放置在目的地向量中。结合任何上面实施例,核可以包括:第五逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第三数据元素;以及第六逻辑,用以将要从两个或更多个通道中的第二通道提取的第三数据元素紧邻要从两个或更多个通道中的第一通道提取的第三数据元素放置在目的地向量中。结合任何上面实施例,核可以包括:第七逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第四数据元素;以及第八逻辑,用以将要从两个或更多个通道中的第二通道提取的第四数据元素紧邻要从两个或更多个通道中的第一通道提取的第四数据元素放置在目的地向量中。在任何上面实施例中,源向量寄存器可以包括除第一通道和第二通道以外的一个或多个附加通道,并且核可以包括第五逻辑,用以从源向量寄存器内的一个或多个附加通道中的每个提取相应的第一数据元素以及第六逻辑,用以将从源向量寄存器内的一个或多个附加通道提取的数据元素进行置换,以将从源向量寄存器内的一个或多个附加通道提取的相应的第一数据元素放置在目的地向量中的连续的固定大小的位置中。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的三个或更多个通道中。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的四个或更多个通道中。结合任何上面实施例,核可以包括第五逻辑,用以从源向量寄存器内的三个或更多个通道中的第三通道提取相应的第一数据元素,以及第六逻辑,用以将要从三个或更多个通道中的第三通道提取的第一数据元素紧邻要从两个或更多个通道中的第二通道提取的第一数据元素放置在目的地向量中。在任何上面实施例中,要存储在源向量寄存器内的第一通道中的数据元素可以表示第一类型的两个或更多个数据元素,并且要存储在源向量寄存器内的第二通道中的数据元素可以表示与第一类型不同的第二类型的两个或更多个数据元素。在任何上面实施例中,要从两个或更多个通道中的第一通道提取的第一数据元素和要从两个或更多个通道中的第二通道提取的第一数据元素可以表示要存储在存储器中的第一数据结构的相应分量,要从两个或更多个通道中的第一通道提取的第二数据元素和要从两个或更多个通道中的第二通道提取的第二数据元素可以表示要存储在存储器中的第二数据结构的相应分量;并且第四逻辑可以将第二数据结构的数据元素存储在存储器中的位置中,所述位置距第一数据结构的数据元素要存储在其中的位置固定距离。结合任何上面实施例,核可以包括第五逻辑,用以取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的数量。结合任何上面实施例,核可以包括第五逻辑,用以取决于针对指令指定的参数值来确定源向量寄存器内的通道(从其提取数据元素)的数量。结合任何上面实施例,核可以包括第五逻辑,用以取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的大小。结合任何上面实施例,核可以包括第五逻辑,用以在将目的地向量存储在存储器中之前,对其应用屏蔽操作,所述屏蔽操作取决于在指令中识别的屏蔽寄存器中的两个或更多个位的值。结合任何上面实施例,核可以包括第五逻辑,用以当目的地向量存储到存储器时将屏蔽操作应用于目的地向量,使得对于指令中识别的屏蔽寄存器中的被设置的一个或多个位中的每个,要在目的地向量中彼此紧邻放置的两个或更多个数据元素要写入到存储器中的连续位置;以及对于指令中识别的屏蔽寄存器中的未被设置的一个或多个位中的每个,要在目的地向量中彼此紧邻放置的并且否则将会已经写入到存储器中的连续位置的两个或更多个数据元素要不写入到存储器。结合任何上面实施例,核可以包括第五逻辑,用以当目的地向量存储到存储器时将屏蔽操作应用于目的地向量,使得对于在指令中识别的屏蔽寄存器中未被设置的每个位,屏蔽操作利用零来替换要在目的地向量中彼此紧邻放置的两个或更多个数据元素。结合任何上面实施例,核可以包括第五逻辑,用以当目的地向量存储到存储器时将屏蔽操作应用到目的地向量,使得对于在指令中识别的屏蔽寄存器中未设置的每个位,屏蔽操作将当前值保留存储器位置中,要在目的地向量中彼此紧邻放置的两个或更多个数据元素否则将会已经被写入在所述存储器位置。在任何上面实施例中,核可以包括单指令多数据(SIMD)协处理器,并且第一逻辑、第二逻辑、第三逻辑或第四逻辑中的一个或多个可以在SIMD协处理器中实现。结合任何上面实施例,为了执行第三指令,核可以包括第五逻辑,用以将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第一通道中并且为了执行第四指令,核可以包括第六逻辑,用以将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第二通道中。在任何上面实施例中,处理器可以包括向量寄存器堆,其包括源向量寄存器。
本公开的一些实施例包括一种方法。在这些实施例中的至少一些中,方法可以包括在处理器中接收第一指令、解码第一指令、执行第一指令以及引退第一指令。执行第一指令可以包括从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素,从源向量寄存器内的两个或更多个通道中的每个提取相应的第二数据元素,将从源向量寄存器提取的数据元素进行置换,以将从两个或更多个通道中的第二通道提取的第一数据元素紧邻从两个或更多个通道中的第一通道提取的第一数据元素放置在目的地向量中,并将从两个或更多个通道中的第二通道提取的第二数据元素紧邻从两个或更多个通道中的第一通道提取的第二数据元素放置在目的地向量中,以及从第一指令中指定的位置开始,将目的地向量存储到存储器包括将在目的地向量中紧邻彼此放置的数据元素存储在存储器中的连续存储器位置中。结合任何上面实施例,方法可以包括从源向量寄存器内的两个或更多个通道中的每个提取一个或多个附加数据元素,以及将从源向量寄存器内的两个或更多个通道提取的附加数据元素进行置换以将从源向量寄存器内的两个或更多个通道中的第一通道中和源向量寄存器内的两个或更多个通道中的第二通道中的相同位置提取的附加数据元素彼此紧邻放置在目的地向量中。结合任何上面实施例,方法可以包括从源向量寄存器内的两个或更多个通道中的每个通道提取相应的第三数据元素,并且将从两个或更多个通道中的第二通道提取的第三数据元素紧邻从两个或更多个通道中的第一通道提取的第三数据元素放置在目的地向量中。结合任何上面实施例,方法可以包括从源向量寄存器内的两个或更多个通道中的每个提取相应的第四数据元素,并且将从两个或更多个通道中的第二通道提取的第四数据元素紧邻从两个或更多个通道中的第一通道提取的第四数据元素放置在目的地向量中。在任何上面实施例中,源向量寄存器可以包括除第一通道和第二通道以外的一个或多个附加通道,并且方法可以包括从源向量寄存器内的一个或多个附加通道中的每个提取相应的第一数据元素以及将从源向量寄存器内的一个或多个附加通道提取的数据元素进行置换,以将从源向量寄存器内的一个或多个附加通道提取的相应的第一数据元素放置在目的地向量中的连续的固定大小位置中。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的三个或更多个通道中。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的四个或更多个通道中。结合任何上面实施例,方法可以包括从源向量寄存器内的三个或更多个通道中的第三通道提取相应的第一数据元素,并且将从三个或更多个通道中的第三通道提取的第一数据元素紧邻从两个或更多个通道中的第二通道提取的第一数据元素放置在目的地向量中。在任何上面实施例中,存储在源向量寄存器内的第一通道中的数据元素可以表示第一类型的两个或更多个数据元素,并且存储在源向量寄存器内的第二通道中的数据元素可以表示与第一类型不同的第二类型的两个或更多个数据元素。在任何上面实施例中,从两个或更多个通道中的第一通道提取的第一数据元素以及从两个或更多个通道中的第二通道提取的第一数据元素可以表示要存储在存储器中的第一数据结构的相应分量,从两个或更多个通道中的第一通道提取的第二数据元素和从两个或更多个通道中的第二通道提取的第二数据元素可以表示要存储在存储器中的第二数据结构的相应分量以及将目的地向量存储到存储器可以包括将第二数据结构的数据元素存储在存储器中的位置中,所述位置距第一数据结构的数据元素存储在其中的位置固定距离。结合任何上面实施例,方法可包括取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的数量。结合任何上面实施例,该方法可以包括取决于针对指令指定的参数值来确定源向量寄存器内的通道(从其提取数据元素)的数量。结合任何上面实施例,方法可以包括取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的大小。结合任何上面实施例,方法可以包括在将目的地向量存储在存储器中之前,对其应用屏蔽操作,所述屏蔽操作取决于在第一指令中识别的屏蔽寄存器中的两个或更多个位的值。结合任何上面实施例,方法可以包括在将目的地向量存储到存储器时对其应用屏蔽操作,使得对于指令中识别的屏蔽寄存器中的被设置的一个或多个位中的每个,在目的地向量中彼此紧邻放置的两个或更多个数据元素写入到存储器中的连续位置;以及对于指令中识别的屏蔽寄存器中的未被设置的一个或多个位中的每个,在目的地向量中彼此紧邻放置的并且否则将会已经写入到存储器中的连续位置的两个或更多个数据元素不写入到存储器。结合任何上面实施例,方法可以包括当目的地向量存储到存储器时将屏蔽操作应用于目的地向量,使得对于在指令中识别的屏蔽寄存器中未被设置的每个位,屏蔽操作利用零来替换在目的地向量中彼此紧邻放置的两个或更多个数据元素。结合任何上面实施例,方法可以包括当目的地向量存储到存储器时将屏蔽操作应用到目的地向量,使得对于在指令中识别的屏蔽寄存器中未设置的每个位,屏蔽操作将当前值保留在存储器位置中,在目的地向量中彼此紧邻放置的两个或更多个数据元素否则将会已经被写入在所述存储器位置。在任何上面实施例中,处理器可以包括单指令多数据(SIMD)协处理器,以及以下操作中的一个或多个可以由SIMD协处理器执行:从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素,从源向量寄存器内的两个或更多个通道中的每个提取相应的第二数据元素,将从源向量寄存器提取的数据元素进行置换,或将目的地向量存储到存储器。结合任何上面实施例,方法可以包括:在接收第一指令之前,接收第二指令;解码第二指令;执行第二指令以及引退第二指令。执行第二指令可以包括将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第一通道中。结合任何上面实施例,方法可以包括:在接收第一指令之前,接收第三指令;解码第三指令;执行第三指令以及引退第三指令。执行第三指令可以包括将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第二通道中。在任何上面实施例中,处理器可以包括向量寄存器堆,其包括源向量寄存器。
本公开的一些实施例包括一种系统。在这些实施例中的至少一些中,系统可以包括用以接收指令的前端、用以解码指令的解码器、用以执行指令的核以及用于引退指令的引退单元。为了执行指令,核可以包括:源向量寄存器,用以将数据元素存储在源向量寄存器内的两个或更多个通道中,其中每个通道要存储两个或更多个数据元素;第一逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素;第二逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第二数据元素;第三逻辑,用以将要从源向量寄存器提取的数据元素进行置换,以将要从两个或更多个通道的第二通道提取的第一数据元素紧邻要从两个或更多个通道的第一通道提取的第一数据元素放置在目的地向量中以及将要从两个或更多个通道的第二通道提取的第二数据元素紧邻要从两个或更多个通道的第一通道提取的第二数据元素放置在目的地向量中;以及第四逻辑,用以从指令中指定的位置开始,将目的地向量存储到存储器。在目的地向量中彼此紧邻放置的数据元素可以存储在存储器中的连续存储器位置中。结合任何上面实施例,核可以包括:第五逻辑,用以从源向量寄存器内的两个或更多个通道中的每个通道提取一个或多个附加数据元素,以及第六逻辑,用以将从源向量寄存器内的两个或更多个通道提取的附加数据元素进行置换以将从源向量寄存器内的两个或更多个通道中的第一通道中和源向量寄存器内的两个或更多个通道中的第二通道中的相同位置提取的附加数据元素彼此紧邻放置在目的地向量中。结合任何上面实施例,核可以包括:第五逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第三数据元素;以及第六逻辑,用以将要从两个或更多个通道中的第二通道提取的第三数据元素紧邻要从两个或更多个通道中的第一通道提取的第三数据元素放置在目的地向量中。结合任何上面实施例,核可以包括:第七逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取相应的第四数据元素;以及第八逻辑,用以将要从两个或更多个通道中的第二通道提取的第四数据元素紧邻要从两个或更多个通道中的第一通道提取的第四数据元素放置在目的地向量中。在任何上面实施例中,源向量寄存器可以包括除第一通道和第二通道以外的一个或多个附加通道,并且核可以包括第五逻辑,用以从源向量寄存器内的一个或多个附加通道中的每个提取相应的第一数据元素以及第六逻辑,用以将从源向量寄存器内的一个或多个附加通道提取的数据元素进行置换,以将从源向量寄存器内的一个或多个附加通道提取的相应的第一数据元素放置在目的地向量中的连续的固定大小的位置。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的三个或更多个通道中。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的四个或更多个通道中。结合任何上面实施例,核可以包括第五逻辑,用以从源向量寄存器内的三个或更多个通道中的第三通道提取相应的第一数据元素,以及第六逻辑,用以将要从三个或更多个通道中的第三通道提取的第一数据元素紧邻从两个或更多个通道中的第二通道提取的第一数据元素放置在目的地向量中。在任何上面实施例中,要存储在源向量寄存器内的第一通道中的数据元素可以表示第一类型的两个或更多个数据元素,并且要存储在源向量寄存器内的第二通道中的数据元素可以表示与第一类型不同的第二类型的两个或更多个数据元素。在任何上面实施例中,要从两个或更多个通道中的第一通道提取的第一数据元素和要从两个或更多个通道中的第二通道提取的第一数据元素可以表示要存储在存储器中的第一数据结构的相应分量,要从两个或更多个通道中的第一通道提取的第二数据元素和要从两个或更多个通道中的第二通道提取的第二数据元素可以表示要存储在存储器中的第二数据结构的相应分量;以及第四逻辑可以将第二数据结构的数据元素存储在存储器中的位置中,所述位置距第一数据结构的数据元素要存储在其中的位置固定距离。结合任何上面实施例,核可以包括:第五逻辑,用以取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的数量。结合任何上面实施例,核可以包括第五逻辑,用以取决于针对指令指定的参数值来确定源向量寄存器内的通道(从其提取数据元素)的数量。结合任何上面实施例,核可以包括第五逻辑,用以取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的大小。结合任何上面实施例,核可以包括第五逻辑,用以在将目的地向量存储在存储器中之前,对其应用屏蔽操作,所述屏蔽操作取决于在指令中识别的屏蔽寄存器中的两个或更多个位的值。结合任何上面实施例,核可以包括第五逻辑,用以在将目的地向量存储到存储器时对其应用屏蔽操作,使得对于指令中识别的屏蔽寄存器中的被设置的一个或多个位中的每个,在目的地向量中彼此紧邻放置的两个或更多个数据元素要写入到存储器中的连续位置;以及对于指令中识别的屏蔽寄存器中的未被设置的一个或多个位中的每个,要在目的地向量中彼此紧邻放置的并且否则将会已经写入到存储器中的连续位置的两个或更多个数据元素要不写入到存储器。结合任何上面实施例,核可以包括第五逻辑,用以当目的地向量存储到存储器时将屏蔽操作应用于目的地向量,使得对于在指令中识别的屏蔽寄存器中未被设置的每个位,屏蔽操作利用零来替换要在目的地向量中彼此紧邻放置的两个或更多个数据元素。结合任何上面实施例,核可以包括第五逻辑,用以当目的地向量存储到存储器时将屏蔽操作应用到目的地向量,使得对于在指令中识别的屏蔽寄存器中未设置的每个位,屏蔽操作将当前值保留在存储器位置中,要在目的地向量中彼此紧邻放置的两个或更多个数据元素否则将会已经被写入在所述存储器位置。在任何上面实施例中,核可以包括单指令多数据(SIMD)协处理器,并且第一逻辑、第二逻辑、第三逻辑或第四逻辑中的一个或多个可以在SIMD协处理器中实现。结合任何上面实施例,为了执行第三指令,核可以包括第五逻辑,用以将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第一通道中并且为了执行第四指令,核可以包括第六逻辑,用以将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第二通道中。在任何上面实施例中,系统可以包括包含核和存储器的处理器。在任何上面实施例中,系统可以包括向量寄存器堆,其包括源向量寄存器。
本公开的一些实施例包括一种用于执行指令的系统。在这些实施例中的至少一些中,系统可以包括用于接收第一指令、解码第一指令、执行第一指令以及引退第一指令的部件。用于执行第一指令的部件可以包括用于执行以下操作的部件:从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素、从源向量寄存器内的两个或更多个通道中的每个提取相应的第二数据元素、将从源向量寄存器提取的数据元素进行置换以将从两个或更多个通道中的第二通道提取的第一数据元素紧邻从两个或更多个通道中的第一通道提取的第一数据元素放置在目的地向量中并将从两个或更多个通道中的第二通道提取的第二数据元素紧邻从两个或更多个通道中的第一通道提取的第二数据元素放置在目的地向量中,以及从指令中指定的位置开始,将目的地向量存储到存储器,包括将在目的地向量中紧邻彼此放置的数据元素存储在存储器中的连续存储器位置中。结合任何上面实施例,系统可以包括用于执行以下操作的部件:从源向量寄存器内的两个或更多个通道中的每个提取一个或多个附加数据元素,以及将从源向量寄存器内的两个或更多个通道提取的附加数据元素进行置换以将从源向量寄存器内的两个或更多个通道中的第一通道中和源向量寄存器内的两个或更多个通道中的第二通道中的相同位置提取的附加数据元素彼此紧邻放置在目的地向量中。结合任何上面实施例,系统可以包括用于从源向量寄存器内的两个或更多个通道中的每个提取相应的第三数据元素,并且将从两个或更多个通道中的第二通道提取的第三数据元素紧邻从两个或更多个通道中的第一通道提取的第三数据元素放置在目的地向量中的部件。结合任何上面实施例,系统可以包括用于从源向量寄存器内的两个或更多个通道中的每个提取相应的第四数据元素,并且将从两个或更多个通道中的第二通道提取的第四数据元素紧邻从两个或更多个通道中的第一通道提取的第四数据元素放置在目的地向量中的部件。在任何上面实施例中,源向量寄存器可以包括除第一通道和第二通道以外的一个或多个附加通道,并且系统可以包括用于从源向量寄存器内的一个或多个附加通道中的每个提取相应的第一数据元素以及将从源向量寄存器内的一个或多个附加通道提取的数据元素进行置换以将从源向量寄存器内的一个或多个附加通道提取的相应的第一数据元素放置在目的地向量中的连续的固定大小位置中的部件。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的三个或更多个通道中。在任何上面实施例中,源向量寄存器可将数据元素存储在源向量寄存器内的四个或更多个通道中。结合任何上面实施例,系统可以包括用于从源向量寄存器内的三个或更多个通道中的第三通道提取相应的第一数据元素,并且将从三个或更多个通道中的第三通道提取的第一数据元素紧邻从两个或更多个通道中的第二通道提取的第一数据元素放置在目的地向量中的部件。在任何上面实施例中,存储在源向量寄存器内的第一通道中的数据元素可以表示第一类型的两个或更多个数据元素,并且存储在源向量寄存器内的第二通道中的数据元素可以表示与第一类型不同的第二类型的两个或更多个数据元素。在任何上面实施例中,从两个或更多个通道中的第一通道提取的第一数据元素以及从两个或更多个通道中的第二通道提取的第一数据元素可以表示要存储在存储器中的第一数据结构的相应分量,从两个或更多个通道中的第一通道提取的第二数据元素和从两个或更多个通道中的第二通道提取的第二数据元素可以表示要存储在存储器中的第二数据结构的相应分量以及将目的地向量存储到存储器可以包括将第二数据结构的数据元素存储在存储器中的位置中,所述位置距第一数据结构的数据元素存储在其中的位置固定距离。结合任何上面实施例,系统可包括用于取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的数量的部件。结合任何上述实施例,系统可以包括用于取决于针对指令指定的参数值来确定源向量寄存器内的通道(从其提取数据元素)的数量的部件。结合任何上面实施例,系统可以包括用于取决于针对指令指定的参数值来确定要从源向量寄存器内的两个或更多个通道中的每个提取的数据元素的大小的部件。结合任何上面实施例,系统可以包括在将目的地向量存储在存储器中之前,对其应用屏蔽操作(其取决于在第一指令中识别的屏蔽寄存器中的两个或更多个位的值)的部件。结合任何上面实施例,系统可以包括用于以下操作的部件:在将目的地向量存储到存储器时对其应用屏蔽操作,使得对于指令中识别的屏蔽寄存器中的被设置的一个或多个位中的每个,在目的地向量中彼此紧邻放置的两个或更多个数据元素写入到存储器中的连续位置;以及对于指令中识别的屏蔽寄存器中的未被设置的一个或多个位中的每个,在目的地向量中彼此紧邻放置的并且否则将会已经写入到存储器中的连续位置的两个或更多个数据元素不写入到存储器。结合任何上面实施例,系统可以包括用于以下操作的部件:当目的地向量存储到存储器时将屏蔽操作应用于目的地向量,使得对于在指令中识别的在屏蔽寄存器中未被设置的每个位,屏蔽操作利用零来替换在目的地向量中彼此紧邻放置的两个或更多个数据元素。结合任何上面实施例,系统可以包括用于以下操作的部件:当目的地向量存储到存储器时将屏蔽操作应用到目的地向量,使得对于在指令中识别的在屏蔽寄存器中未设置的每个位,屏蔽操作将当前值保留在存储器位置中,在目的地向量中彼此紧邻放置的两个或更多个数据元素否则将会已经被写入在所述存储器位置。在任何上面实施例中,系统可以包括单指令多数据(SIMD)协处理器,以及用于以下操作的部件中的一个或多个可以在SIMD协处理器中实现:用于从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素的部件,用于从源向量寄存器内的两个或更多个通道中的每个提取相应的第二数据元素的部件,用于将从源向量寄存器提取的数据元素进行置换的部件,或用于将目的地向量存储到存储器的部件。结合任何上面实施例,系统可以包括用于接收第三指令;解码第三指令;执行第三指令以及引退第三指令的部件。用于执行第三指令的部件可以包括用以将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第一通道中的部件。结合任何上面实施例,系统可以包括用于接收第四指令;解码第四指令;执行第四指令以及引退第四指令的部件。用于执行第四指令的部件可以包括用以将相应的第一数据元素和相应的第二数据元素加载到源向量寄存器内的两个或更多个通道中的第二通道中的部件。在任何上面实施例中,系统可以包括处理器和存储器。在任何上面实施例中,系统可以包括向量寄存器堆,其包括源向量寄存器。
Claims (25)
1.一种处理器,包括:
前端,用以接收指令;
解码器,用以解码所述指令;
核,用以执行所述指令,所述核包括:
源向量寄存器,用以将数据元素存储在所述源向量寄存器内的两个或更多个通道中,其中每个通道要存储两个或更多个数据元素,并且所述两个或更多个通道包括第一通道和第二通道;
第一逻辑,用以从所述源向量寄存器内的所述通道中的每个提取相应的第一数据元素;
第二逻辑,用以从所述源向量寄存器内的所述通道中的每个提取相应的第二数据元素;
第三逻辑,用以将要从所述源向量寄存器提取的所述数据元素进行置换,以将要从所述第二通道提取的所述第一数据元素紧邻要从所述第一通道提取的所述第一数据元素放置在目的地向量中;
第四逻辑,用以将要从所述源向量提取的所述数据元素进行置换,以将要从所述第二通道提取的所述第二数据元素紧邻要从所述第一通道提取的所述第二数据元素放置在所述目的地向量中;以及
第五逻辑,用以从所述指令中指定的位置开始,将所述目的地向量存储到存储器,其中在所述目的地向量中彼此紧邻放置的数据元素要存储在所述存储器中的连续存储器位置中;以及
引退单元,用以引退所述指令。
2. 如权利要求1所述的处理器,其中所述核还包括:
第六逻辑,用以从所述源向量寄存器内的所述两个或更多个通道中的每个提取相应的第三数据元素;以及
第七逻辑,用以将要从所述第二通道提取的所述第三数据元素紧邻要从所述第一通道提取的所述第三数据元素放置在所述目的地向量中。
3. 如权利要求1所述的处理器,其中:
所述源向量寄存器要将所述数据元素存储在所述源向量寄存器内的三个或更多个通道中;以及
所述核还包括:
第六逻辑,用以从所述源向量寄存器内的第三通道提取相应的第一数据元素;以及
第七逻辑,用以将要从所述第三通道提取的所述第一数据元素紧邻要从所述第二通道提取的所述第一数据元素放置在所述目的地向量中。
4. 如权利要求1所述的处理器,其中:
要存储在所述源向量寄存器内的所述第一通道中的所述数据元素表示第一类型的两个或更多个数据元素;以及
要存储在所述源向量寄存器内的所述第二通道中的所述数据元素表示与所述第一类型不同的第二类型的两个或更多个数据元素。
5.如权利要求1所述的处理器,其中:
要从所述第一通道提取的所述第一数据元素和要从所述第二通道提取的所述第一数据元素表示要存储在所述存储器中的第一数据结构的相应分量;
要从所述第一通道提取的所述第二数据元素和要从所述第二通道提取的所述第二数据元素表示要存储在所述存储器中的第二数据结构的相应分量;以及
所述第五逻辑要将所述第二数据结构的数据元素存储在所述存储器中的位置中,所述位置距所述第一数据结构的数据元素要存储在其中的位置固定距离。
6.如权利要求1所述的处理器,其中:
所述核还包括第六逻辑,用以当所述目的地向量存储到所述存储器时对其应用屏蔽操作;
对于在所述指令中识别的屏蔽寄存器中的被设置的一个或多个位中的每个,要在所述目的地向量中彼此紧邻放置的两个或更多个数据元素要写入到所述存储器中的连续位置;以及
对于在所述指令中识别的所述屏蔽寄存器中的未被设置的一个或多个位中的每个,要在所述目的地向量中彼此紧邻放置的并且否则将会已经写入到所述存储器中的连续位置的两个或更多个数据元素要不写入到所述存储器。
7. 如权利要求1所述的处理器,其中所述核还包括:
第六逻辑,用以从所述源向量寄存器内的所述两个或更多个通道中的每个提取一个或多个附加数据元素;以及
第七逻辑,用以将从所述源向量寄存器内的所述两个或更多个通道提取的所述附加数据元素进行置换,以将从所述源向量寄存器内的所述两个或更多个通道中的所述第一通道中和在所述源向量寄存器内的所述两个或更多个通道中的所述第二通道中的相同位置提取的附加数据元素彼此紧邻放置在所述目的地向量中。
8.如权利要求1所述的处理器,其中所述核还包括:
第六逻辑,用以取决于针对所述指令指定的参数值来确定要从所述源向量寄存器内的所述两个或更多个通道中的每个提取的数据元素的数量。
9.如权利要求1所述的处理器,其中:
所述源向量寄存器要将所述数据元素存储在所述源向量寄存器内的四个或更多个通道中。
10.如权利要求1所述的处理器,其中:
所述核包括单指令多数据(SIMD)协处理器来实现所述指令的执行。
11.一种方法,包括,在处理器中:
接收第一指令;
解码所述第一指令;
执行所述第一指令,包括:
从源向量寄存器内的两个或更多个通道中的每个提取相应的第一数据元素;
从所述源向量寄存器内的所述两个或更多个通道中的每个提取相应的第二数据元素;
将从所述源向量寄存器提取的所述数据元素进行置换,以将从所述第二通道提取的所述第一数据元素紧邻从第一通道提取的所述第一数据元素放置在目的地向量中,并将从所述第二通道提取的所述第二数据元素紧邻从所述第一通道提取的所述第二数据元素放置在所述目的地向量中;以及
从所述第一指令中指定的位置开始,将所述目的地向量存储到存储器,包括将在所述目的地向量中紧邻彼此放置的数据元素存储在所述存储器中的连续存储器位置中;以及
引退所述第一指令。
12. 如权利要求11所述的方法,还包括:
从所述源向量寄存器内的所述两个或更多个通道中的每个提取一个或多个附加数据元素;以及
将从所述源向量寄存器内的所述两个或更多个通道提取的所述附加数据元素进行置换,以将从所述源向量寄存器内的所述第一通道中的和所述源向量寄存器内的所述第二通道中的相同位置提取的附加数据元素彼此紧邻放置在所述目的地向量中。
13. 如权利要求11所述的方法,其中:
所述源向量寄存器包括除所述第一通道和所述第二通道以外的一个或多个附加通道;以及
所述方法还包括:
从所述源向量寄存器内的所述附加通道中的每个提取相应的第一数据元素;以及
将从所述源向量寄存器内的所述一个或多个附加通道提取的所述数据元素进行置换,以将从所述源向量寄存器内的所述一个或多个附加通道提取的所述相应的第一数据元素放置在所述目的地向量中的连续固定大小位置中。
14.如权利要求11所述的方法,还包括:
在将所述目的地向量存储在所述存储器中之前,对其应用屏蔽操作,所述屏蔽操作取决于在所述第一指令中识别的屏蔽寄存器中的两个或更多个位的值。
15.如权利要求11所述的方法,其中:
从所述第一通道提取的所述第一数据元素和从所述第二通道提取的所述第一数据元素表示要存储在所述存储器中的第一数据结构的相应分量;
从所述第一通道提取的所述第二数据元素和从所述第二通道提取的所述第二数据元素表示要存储在所述存储器中的第二数据结构的相应分量;以及
将所述目的地向量存储到存储器包括将所述第二数据结构的数据元素存储在所述存储器中的位置中,所述位置距所述第一数据结构的数据元素存储在其中的位置固定距离。
16.如权利要求11所述的方法,还包括:
在接收所述第一指令之前:
接收第二指令;
解码所述第二指令;
执行所述第二指令,包括:
将所述相应的第一数据元素和所述相应的第二数据元素加载到所述源向量寄存器内的所述第一通道中;
引退所述第二指令;
接收第三指令;
解码所述第三指令;
执行所述第三指令,包括:
将所述相应的第一数据元素和所述相应的第二数据元素加载到所述源向量寄存器内的所述第二通道中;以及
引退所述第三指令。
17. 如权利要求11所述的方法,其中:
存储在所述源向量寄存器内的所述第一通道中的所述数据元素表示第一类型的两个或更多个数据元素;以及
存储在所述源向量寄存器内的所述第二通道中的所述数据元素表示与所述第一类型不同的第二类型的两个或更多个数据元素。
18.一种系统,包括:
前端,用以接收指令;
解码器,用以解码所述指令;以及
核,用以执行所述指令,所述核包括:
第一逻辑,用以从源向量寄存器内的两个或更多个通道中的每个提取第一数据元素;
第二逻辑,用以从所述源向量寄存器内的所述两个或更多个通道中的每个提取第二数据元素;
第三逻辑,用以将要从所述源向量寄存器提取的所述数据元素进行置换,以将要从所述第二通道提取的所述第一数据元素紧邻要从第一通道提取的所述第一数据元素放置在目的地向量中;
第四逻辑,用以将要从所述源向量寄存器提取的所述数据元素进行置换,以将要从第二通道提取的所述第二数据元素紧邻要从所述第一通道提取的所述第二数据元素放置在所述目的地向量中;以及
第五逻辑,用以从所述指令中指定的位置开始,将所述目的地向量存储到所述存储器,其中在所述目的地向量中彼此紧邻放置的数据元素要存储在所述存储器中的连续存储器位置中;以及
引退单元,用以引退所述指令。
19. 根据权利要求18所述的系统,其中所述核还包括:
第六逻辑,用以从所述源向量寄存器内的所述两个或更多个通道中的每个提取相应的第三数据元素;以及
第七逻辑,用以将要从所述第二通道提取的所述第三数据元素紧邻要从所述第一通道提取的所述第三数据元素放置在所述目的地向量中。
20. 如权利要求18所述的系统,其中:
所述源向量寄存器要将所述数据元素存储在所述源向量寄存器内的三个或更多个通道中;以及
所述核还包括:
第六逻辑,用以从所述源向量寄存器内的第三通道提取相应的第一数据元素;以及
第七逻辑,用以将要从所述第三通道提取的所述第一数据元素紧邻要从所述第二通道提取的所述第一数据元素放置在所述目的地向量中。
21. 如权利要求18所述的系统,其中:
要存储在所述源向量寄存器内的所述第一通道中的所述数据元素表示第一类型的两个或更多个数据元素;以及
要存储在所述源向量寄存器内的所述第二通道中的所述数据元素表示与所述第一类型不同的第二类型的两个或更多个数据元素。
22.如权利要求18所述的系统,其中:
要从所述第一通道提取的所述第一数据元素和要从所述第二通道提取的所述第一数据元素表示要存储在所述存储器中的第一数据结构的相应分量;
要从所述第一通道提取的所述第二数据元素和要从所述第二通道提取的所述第二数据元素表示要存储在所述存储器中的第二数据结构的相应分量;以及
所述第五逻辑要将所述第二数据结构的数据元素存储在所述存储器中的位置中,所述位置距所述第一数据结构的数据元素要存储在其中的位置固定距离。
23.如权利要求18所述的系统,其中:
所述核还包括第六逻辑,用以当所述目的地向量存储到所述存储器时对所述目的地向量应用屏蔽操作;
对于所述指令中识别的屏蔽寄存器中的被设置的一个或多个位中的每个,要在所述目的地向量中彼此紧邻放置的两个或更多个数据元素要写入到所述存储器中的连续位置;以及
对于所述指令中识别的所述屏蔽寄存器中的未被设置的一个或多个位中的每个,要在所述目的地向量中彼此紧邻放置的并且否则将会已经写入到所述存储器中的连续位置的两个或更多个数据元素要不写入到所述存储器。
24. 如权利要求18所述的系统,其中:
所述核包括单指令多数据(SIMD)协处理器;并且
在所述SIMD协处理器中实现所述第一逻辑、所述第二逻辑、所述第三逻辑或所述第四逻辑中的一个或多个。
25.一种设备,包括用于执行权利要求11-17中的所述方法中的任何方法的部件。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/974445 | 2015-12-18 | ||
US14/974,445 US20170177352A1 (en) | 2015-12-18 | 2015-12-18 | Instructions and Logic for Lane-Based Strided Store Operations |
PCT/US2016/061955 WO2017105713A1 (en) | 2015-12-18 | 2016-11-15 | Instructions and logic for lane-based strided store operations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108369511A true CN108369511A (zh) | 2018-08-03 |
CN108369511B CN108369511B (zh) | 2024-01-16 |
Family
ID=59057379
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680074272.3A Active CN108369511B (zh) | 2015-12-18 | 2016-11-15 | 用于基于通道的跨步存储操作的指令和逻辑 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20170177352A1 (zh) |
EP (1) | EP3391195B1 (zh) |
CN (1) | CN108369511B (zh) |
TW (1) | TWI731892B (zh) |
WO (1) | WO2017105713A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110516793A (zh) * | 2019-08-27 | 2019-11-29 | Oppo广东移动通信有限公司 | 一种池化处理方法及装置、存储介质 |
WO2020192242A1 (zh) * | 2019-03-27 | 2020-10-01 | 无锡海斯凯尔医学技术有限公司 | 数据传输的装置、方法及可读存储介质 |
CN114510271A (zh) * | 2022-02-09 | 2022-05-17 | 海飞科(南京)信息技术有限公司 | 用于在单指令多线程计算系统中加载数据的方法和装置 |
CN115826910A (zh) * | 2023-02-07 | 2023-03-21 | 成都申威科技有限责任公司 | 一种向量定点的alu处理系统 |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10338920B2 (en) | 2015-12-18 | 2019-07-02 | Intel Corporation | Instructions and logic for get-multiple-vector-elements operations |
US11868804B1 (en) | 2019-11-18 | 2024-01-09 | Groq, Inc. | Processor instruction dispatch configuration |
US11360934B1 (en) | 2017-09-15 | 2022-06-14 | Groq, Inc. | Tensor streaming processor architecture |
US11243880B1 (en) | 2017-09-15 | 2022-02-08 | Groq, Inc. | Processor architecture |
US11114138B2 (en) | 2017-09-15 | 2021-09-07 | Groq, Inc. | Data structures with multiple read ports |
US11170307B1 (en) | 2017-09-21 | 2021-11-09 | Groq, Inc. | Predictive model compiler for generating a statically scheduled binary with known resource constraints |
US11301546B2 (en) | 2018-11-19 | 2022-04-12 | Groq, Inc. | Spatial locality transform of matrices |
US11847463B2 (en) * | 2019-09-27 | 2023-12-19 | Advanced Micro Devices, Inc. | Masked multi-lane instruction memory fault handling using fast and slow execution paths |
CN114930351A (zh) | 2019-11-26 | 2022-08-19 | 格罗克公司 | 使用仅单个侧从多维阵列加载操作数并输出结果 |
US20220197653A1 (en) * | 2020-12-22 | 2022-06-23 | Intel Corporation | Processors, methods, systems, and instructions to select and store data elements from strided data element positions in a first dimension from three source two-dimensional arrays in a result two-dimensional array |
US11921559B2 (en) * | 2021-05-03 | 2024-03-05 | Groq, Inc. | Power grid distribution for tensor streaming processors |
US20230418614A1 (en) * | 2022-06-22 | 2023-12-28 | Andes Technology Corporation | Processor, operation method, and load-store device for implementation of accessing vector strided memory |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050132165A1 (en) * | 2003-12-09 | 2005-06-16 | Arm Limited | Data processing apparatus and method for performing in parallel a data processing operation on data elements |
WO2013095555A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Packed data rearrangement control indexes generation processors, methods, systems, and instructions |
CN103827814A (zh) * | 2011-09-26 | 2014-05-28 | 英特尔公司 | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 |
CN103999037A (zh) * | 2011-12-23 | 2014-08-20 | 英特尔公司 | 用于响应于单个指令来执行横向相加或相减的系统、装置和方法 |
CN104081337A (zh) * | 2011-12-23 | 2014-10-01 | 英特尔公司 | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 |
CN104603766A (zh) * | 2012-09-28 | 2015-05-06 | 英特尔公司 | 经加速的通道间的向量归约指令 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US172366A (en) * | 1876-01-18 | Improvement in backlash-springs | ||
US5887183A (en) * | 1995-01-04 | 1999-03-23 | International Business Machines Corporation | Method and system in a data processing system for loading and storing vectors in a plurality of modes |
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 |
US20100274988A1 (en) * | 2002-02-04 | 2010-10-28 | Mimar Tibet | Flexible vector modes of operation for SIMD processor |
US9557994B2 (en) * | 2004-07-13 | 2017-01-31 | Arm Limited | Data processing apparatus and method for performing N-way interleaving and de-interleaving operations where N is an odd plural number |
US7933405B2 (en) * | 2005-04-08 | 2011-04-26 | Icera Inc. | Data access and permute unit |
US9495724B2 (en) * | 2006-10-31 | 2016-11-15 | International Business Machines Corporation | Single precision vector permute immediate with “word” vector write mask |
US8909901B2 (en) * | 2007-12-28 | 2014-12-09 | Intel Corporation | Permute operations with flexible zero control |
US8078836B2 (en) * | 2007-12-30 | 2011-12-13 | Intel Corporation | Vector shuffle instructions operating on multiple lanes each having a plurality of data elements using a common set of per-lane control bits |
WO2013095563A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Packed data rearrangement control indexes precursors generation processors, methods, systems, and instructions |
WO2013095657A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Instruction and logic to provide vector blend and permute functionality |
US9342479B2 (en) * | 2012-08-23 | 2016-05-17 | Qualcomm Incorporated | Systems and methods of data extraction in a vector processor |
US9128781B2 (en) * | 2012-12-28 | 2015-09-08 | Intel Corporation | Processor with memory race recorder to record thread interleavings in multi-threaded software |
US9513908B2 (en) * | 2013-05-03 | 2016-12-06 | Samsung Electronics Co., Ltd. | Streaming memory transpose operations |
JP6253514B2 (ja) * | 2014-05-27 | 2017-12-27 | ルネサスエレクトロニクス株式会社 | プロセッサ |
US9875214B2 (en) * | 2015-07-31 | 2018-01-23 | Arm Limited | Apparatus and method for transferring a plurality of data structures between memory and a plurality of vector registers |
-
2015
- 2015-12-18 US US14/974,445 patent/US20170177352A1/en not_active Abandoned
-
2016
- 2016-11-15 CN CN201680074272.3A patent/CN108369511B/zh active Active
- 2016-11-15 WO PCT/US2016/061955 patent/WO2017105713A1/en active Application Filing
- 2016-11-15 TW TW105137260A patent/TWI731892B/zh not_active IP Right Cessation
- 2016-11-15 EP EP16876289.6A patent/EP3391195B1/en active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20050132165A1 (en) * | 2003-12-09 | 2005-06-16 | Arm Limited | Data processing apparatus and method for performing in parallel a data processing operation on data elements |
CN103827814A (zh) * | 2011-09-26 | 2014-05-28 | 英特尔公司 | 用于提供利用跨越功能的向量加载操作/存储操作的指令和逻辑 |
WO2013095555A1 (en) * | 2011-12-22 | 2013-06-27 | Intel Corporation | Packed data rearrangement control indexes generation processors, methods, systems, and instructions |
CN103999037A (zh) * | 2011-12-23 | 2014-08-20 | 英特尔公司 | 用于响应于单个指令来执行横向相加或相减的系统、装置和方法 |
CN104081337A (zh) * | 2011-12-23 | 2014-10-01 | 英特尔公司 | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 |
CN104603766A (zh) * | 2012-09-28 | 2015-05-06 | 英特尔公司 | 经加速的通道间的向量归约指令 |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2020192242A1 (zh) * | 2019-03-27 | 2020-10-01 | 无锡海斯凯尔医学技术有限公司 | 数据传输的装置、方法及可读存储介质 |
US11803490B2 (en) | 2019-03-27 | 2023-10-31 | Wuxi Hisky Medical Technologies Co., Ltd. | Apparatus and method for data transmission and readable storage medium |
CN110516793A (zh) * | 2019-08-27 | 2019-11-29 | Oppo广东移动通信有限公司 | 一种池化处理方法及装置、存储介质 |
CN114510271A (zh) * | 2022-02-09 | 2022-05-17 | 海飞科(南京)信息技术有限公司 | 用于在单指令多线程计算系统中加载数据的方法和装置 |
CN114510271B (zh) * | 2022-02-09 | 2023-08-15 | 海飞科(南京)信息技术有限公司 | 用于在单指令多线程计算系统中加载数据的方法和装置 |
CN115826910A (zh) * | 2023-02-07 | 2023-03-21 | 成都申威科技有限责任公司 | 一种向量定点的alu处理系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108369511B (zh) | 2024-01-16 |
US20170177352A1 (en) | 2017-06-22 |
WO2017105713A1 (en) | 2017-06-22 |
EP3391195B1 (en) | 2021-12-01 |
TW201729078A (zh) | 2017-08-16 |
EP3391195A1 (en) | 2018-10-24 |
EP3391195A4 (en) | 2019-07-17 |
TWI731892B (zh) | 2021-07-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369511A (zh) | 用于基于通道的跨步存储操作的指令和逻辑 | |
CN108369509B (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN108369513A (zh) | 用于加载-索引-和-收集操作的指令和逻辑 | |
TWI743064B (zh) | 用於取得多重向量元素操作之指令及邏輯 | |
CN108292215A (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
CN107003921A (zh) | 具有有限状态机控制的可重配置测试访问端口 | |
TWI720056B (zh) | 用於設置多重向量元素操作之指令及邏輯 | |
CN108292229A (zh) | 用于重新出现的相邻聚集的指令和逻辑 | |
CN108369516A (zh) | 用于加载-索引和预取-分散操作的指令和逻辑 | |
TWI738679B (zh) | 處理器、運算系統及用以執行運算操作之方法 | |
CN108701101A (zh) | 处理器系统管理中断事件的基于仲裁器的串行化 | |
CN108369571A (zh) | 用于偶数和奇数向量get操作的指令和逻辑 | |
CN107003839A (zh) | 用于移位和乘法器的指令和逻辑 | |
CN108351785A (zh) | 用于部分减少操作的指令和逻辑 | |
CN106575219A (zh) | 针对用于处理运算的向量格式的指令和逻辑技术领域 | |
CN108369510A (zh) | 用于以无序加载的置换的指令和逻辑 | |
CN108292217A (zh) | 用于结构阵列的向量存储/加载指令 | |
CN108292218A (zh) | 用于向量位字段压缩和扩展的指令和逻辑 | |
CN108351778A (zh) | 用于检测浮点抵消效应的指令和逻辑 | |
KR20160113677A (ko) | 다수의 스트랜드들로부터 명령어들을 디스패칭하기 위한 프로세서 로직 및 방법 | |
CN105723329B (zh) | 用于识别多指令串无序处理器中引退的指令的方法和设备 | |
CN108369512A (zh) | 用于置换序列的指令和逻辑 | |
CN108292216A (zh) | 用于压缩和循环的指令和逻辑 | |
CN108292214A (zh) | 用于获得数据列的指令和逻辑 | |
CN108369572A (zh) | 用于基于向量的位操纵的指令和逻辑 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |