CN108369509A - 用于基于通道的跨步分散操作的指令和逻辑 - Google Patents
用于基于通道的跨步分散操作的指令和逻辑 Download PDFInfo
- Publication number
- CN108369509A CN108369509A CN201680072574.7A CN201680072574A CN108369509A CN 108369509 A CN108369509 A CN 108369509A CN 201680072574 A CN201680072574 A CN 201680072574A CN 108369509 A CN108369509 A CN 108369509A
- Authority
- CN
- China
- Prior art keywords
- data element
- instruction
- channel
- data
- memory
- 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
- 239000013598 vector Substances 0.000 claims abstract description 466
- 230000015654 memory Effects 0.000 claims description 324
- 238000003860 storage Methods 0.000 claims description 130
- 238000000034 method Methods 0.000 claims description 92
- 239000000284 extract Substances 0.000 claims description 7
- GOLXNESZZPUPJE-UHFFFAOYSA-N spiromesifen Chemical compound CC1=CC(C)=CC(C)=C1C(C(O1)=O)=C(OC(=O)CC(C)(C)C)C11CCCC1 GOLXNESZZPUPJE-UHFFFAOYSA-N 0.000 claims 1
- 239000006185 dispersion Substances 0.000 abstract description 6
- 238000012545 processing Methods 0.000 description 48
- 238000010586 diagram Methods 0.000 description 38
- 230000008569 process Effects 0.000 description 26
- 238000005516 engineering process Methods 0.000 description 24
- 230000007246 mechanism Effects 0.000 description 24
- 238000004891 communication Methods 0.000 description 20
- 230000006870 function Effects 0.000 description 20
- 239000000872 buffer Substances 0.000 description 15
- 238000004519 manufacturing process Methods 0.000 description 14
- 239000003795 chemical substances by application Substances 0.000 description 12
- 238000013461 design Methods 0.000 description 12
- 238000007667 floating Methods 0.000 description 11
- 238000005056 compaction Methods 0.000 description 9
- 238000009826 distribution Methods 0.000 description 9
- 230000002093 peripheral effect Effects 0.000 description 8
- 230000006399 behavior Effects 0.000 description 7
- 230000005540 biological transmission Effects 0.000 description 7
- 238000011049 filling Methods 0.000 description 7
- 230000006835 compression Effects 0.000 description 6
- 238000007906 compression Methods 0.000 description 6
- 235000013399 edible fruits Nutrition 0.000 description 6
- 238000000605 extraction Methods 0.000 description 6
- 238000007726 management method Methods 0.000 description 6
- 230000001360 synchronised effect Effects 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 5
- 230000003993 interaction Effects 0.000 description 5
- 230000003068 static effect Effects 0.000 description 5
- 238000004422 calculation algorithm Methods 0.000 description 4
- 238000006243 chemical reaction Methods 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000006073 displacement reaction Methods 0.000 description 4
- 238000000547 structure data Methods 0.000 description 4
- 230000002159 abnormal effect Effects 0.000 description 3
- 239000003607 modifier Substances 0.000 description 3
- 230000001737 promoting effect Effects 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000001052 transient effect Effects 0.000 description 3
- 241001269238 Data Species 0.000 description 2
- 101100285899 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) SSE2 gene Proteins 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 238000000429 assembly Methods 0.000 description 2
- 230000000712 assembly Effects 0.000 description 2
- 230000015572 biosynthetic process Effects 0.000 description 2
- 230000001413 cellular effect Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 230000008878 coupling Effects 0.000 description 2
- 238000010168 coupling process Methods 0.000 description 2
- 238000005859 coupling reaction Methods 0.000 description 2
- 230000006837 decompression Effects 0.000 description 2
- 238000000151 deposition Methods 0.000 description 2
- 239000004973 liquid crystal related substance Substances 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000000203 mixture Substances 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012986 modification 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
- 238000002360 preparation method Methods 0.000 description 2
- 230000003252 repetitive effect Effects 0.000 description 2
- 239000007787 solid Substances 0.000 description 2
- 241000894007 species Species 0.000 description 2
- 239000000758 substrate Substances 0.000 description 2
- 230000009466 transformation Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 229930182628 Forbeside Natural products 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
- VYPSYNLAJGMNEJ-UHFFFAOYSA-N Silicium dioxide Chemical compound O=[Si]=O VYPSYNLAJGMNEJ-UHFFFAOYSA-N 0.000 description 1
- 102100026150 Tyrosine-protein kinase Fgr Human genes 0.000 description 1
- 238000009412 basement excavation Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000003139 buffering effect Effects 0.000 description 1
- 230000009172 bursting Effects 0.000 description 1
- 238000012937 correction Methods 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
- 230000005611 electricity Effects 0.000 description 1
- 239000004744 fabric Substances 0.000 description 1
- 238000000227 grinding Methods 0.000 description 1
- 238000003384 imaging method Methods 0.000 description 1
- 238000011068 loading method Methods 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000010295 mobile communication Methods 0.000 description 1
- 238000000329 molecular dynamics simulation Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 238000004806 packaging method and process Methods 0.000 description 1
- 230000008521 reorganization Effects 0.000 description 1
- 238000011160 research Methods 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 238000003786 synthesis reaction Methods 0.000 description 1
- 238000000844 transformation Methods 0.000 description 1
- 238000011282 treatment Methods 0.000 description 1
- XLYOFNOQVPJJNP-UHFFFAOYSA-N water Substances O XLYOFNOQVPJJNP-UHFFFAOYSA-N 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
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/084—Multiuser, multiprocessor or multiprocessing cache systems with a shared cache
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0855—Overlapped cache accessing, e.g. pipeline
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0862—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0875—Addressing 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1027—Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
-
- 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
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/45—Caching of specific data in cache memory
- G06F2212/452—Instruction code
-
- 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
Abstract
一种处理器包括用于执行基于通道的跨步分散指令的执行单元。所述执行单元包括用于从源向量寄存器内的多条通道中的每一条通道中提取第一数据元素并从每条通道中提取第二数据元素的逻辑。所述执行单元包括用于在目的地向量中将从第二通道中提取到的所述第一数据元素放置在从第一通道中提取到的所述第一数据元素旁边并将从第二通道中提取到的所述第二数据元素放置在从第一通道中提取到的所述第二数据元素旁边的逻辑。所述执行单元包括用于将在所述目的地向量中被放置成彼此相邻的每个数据元素集合存储在以根据基地址以及所述指令中指定的索引寄存器的对应元素而计算的地址开始的连续位置中的逻辑。每个数据元素集合表示一个数据结构。
Description
技术领域
本公开涉及处理逻辑、微处理器和相关联的指令集架构领域,所述指令集架构当由处理器或其他处理逻辑执行时执行逻辑、数学或其他功能操作。
相关技术说明
多处理器系统正变得越来越普遍。多处理器系统的应用包括动态域分区一直延续到桌面计算。为了利用多处理器系统,可以将有待执行的代码分成多个线程以供由各种处理实体执行。可以彼此并行地执行每个线程。当指令在处理器上接收时其可以被解码为原生或更原生的词语或指令字以供在处理器上执行。处理器可以在片上系统中实施。被组织成三个或四个元素的元组的数据结构可以用于媒体应用、高性能计算应用、以及分子动力学应用中。
附图说明
实施例以举例的方式被展示并且不限于附图中的图:
图1A是根据本公开的实施例的形成有可以包括用于执行指令的执行单元的处理器的示例性计算机系统的框图;
图1B展示了根据本公开的实施例的数据处理系统;
图1C展示了用于执行文本串比较操作的数据处理系统的其他实施例;
图2是根据本公开的实施例的可以包括用于执行指令的逻辑电路的处理器的微架构的框图;
图3A展示了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示;
图3B展示了根据本公开的实施例的可能的寄存器中数据存储格式(in-registerdata storage format);
图3C展示了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示;
图3D展示了操作编码格式的实施例;
图3E展示了根据本公开的实施例的具有四十个位或更多个位的另一种可能的操作编码格式;
图3F展示了根据本公开的实施例的又另一种可能的操作编码格式;
图4A是框图,展示了根据本公开的实施例的有序流水线和寄存器重命名级、乱序发布/执行流水线;
图4B是框图,展示了根据本公开的实施例的有待包括在处理器中的有序架构核和寄存器重命名逻辑、乱序发布/执行逻辑;
图5A是根据本公开的实施例的处理器的框图;
图5B是根据本公开的实施例的核的示例实施方式的框图;
图6是根据本公开的实施例的系统的框图;
图7是根据本公开的实施例的第二系统的框图;
图8是根据本公开的实施例的第三系统的框图;
图9是根据本公开的实施例的片上系统的框图;
图10展示了根据本公开的实施例的包含可以执行至少一条指令的中央处理单元和图形处理单元的处理器;
图11是框图,展示了根据本公开的实施例的IP核的开发;
图12展示了根据本公开的实施例可以如何由不同类型的处理器对第一类型的指令进行仿真;
图13展示了对照根据本公开的实施例的用于将源指令集中的二进制指令转换为目标指令集中的二进制指令的软件指令转换器的使用的框图;
图14是根据本公开的实施例的处理器的指令集架构的框图;
图15是根据本公开的实施例的处理器的指令集架构的更详细框图;
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线的框图;
图17是根据本公开的实施例的用于利用处理器的电子装置的框图;
图18是根据本公开的实施例的用于基于通道的跨步分散操作(lane-basedstrided scatter operation)的指令和逻辑的示例系统的图示;
图19是框图,展示了根据本公开的实施例的用于执行扩展向量指令的处理器核;
图20是框图,展示了根据本公开的实施例的示例扩展向量寄存器堆;
图21是根据本公开的实施例的用于执行基于通道的跨步分散操作的操作的图示;
图22A至图22C展示了根据本公开的实施例的VPSCATTER指令的对应形式的操作;
图23展示了根据本公开的实施例的用于执行基于通道的跨步分散操作的示例方法;
图24展示了根据本公开的实施例的用于利用基于通道的跨步分散操作对来自对应不同源的不同类型的数据元素进行置换的示例方法。
具体实施方式
以下说明描述了一种用于对处理设备执行基于通道的跨步分散操作的指令和逻辑。这种处理设备可以包括乱序处理器。在以下具体实施方式中,阐述了诸如处理逻辑、处理器类型、微架构条件、事件、启用机制等许多具体细节以便提供对本公开的实施例的更全面理解。然而,本领域技术人员应理解的是,可以在没有这些具体细节的情况下实践实施例。另外,未详细示出一些熟知的结构、电路等,从而避免不必要地模糊本公开的实施例。
虽然下面的实施例是参照处理器进行描述的,但是其他实施例适用于其他类型的集成电路和逻辑装置。本公开的实施例的类似技术和教导可以应用于可以从更高的流水线吞吐量和改进的性能受益的其他类型的电路或半导体装置。本公开的实施例的教导适用于执行数据操纵的任何处理器或机器。然而,实施例不限于执行512位、256位、128位、64位、32位或16位数据操作的处理器或机器,并且可以应用于在其中可以执行数据的操纵或管理的任何处理器和机器。另外,以下描述提供了示例,并且附图示出了用于说明目的的各种示例。然而,这些示例不应在限制性意义上予以解释,因为它们仅旨在提供本公开的实施例的示例,而不是提供本公开的实施例的所有可能的实施方式的详尽列表。
虽然以下示例描述了在执行单元和逻辑电路的上下文中的指令处理和分配,但是本公开的其他实施例可以通过存储在机器可读有形介质上的数据或指令来实现,所述数据或指令当由机器执行时使机器执行与本公开的至少一个实施例一致的功能。在一个实施例中,在机器可执行指令中将与本公开的实施例相关联的功能具体化。指令可以用于使可利用这些指令编程的通用或专用处理器执行本公开中的步骤。本公开的实施例可以作为可包括机器或计算机可读介质的计算机程序产品或软件而提供,所述机器或计算机可读介质具有存储于其上的指令,所述指令可以用于对计算机(或其他电子装置)进行编程以便执行根据本公开的实施例的一个或多个操作。此外,本公开的实施例的步骤可以由包含用于执行所述步骤的固定功能逻辑的特定硬件组件或者由经编程的计算机组件与固定功能硬件组件的任何组合来执行。
用于对逻辑进行编程以执行本公开的实施例的指令可以存储在系统中的存储器内,例如,DRAM、高速缓存、闪存或其他存储设备。此外,指令可以经由网络或借助于其他计算机可读介质来分配。因此,机器可读介质可以包括用于存储或传输由机器(例如,计算机)可读的形式的信息的任何机制,但是不限于软磁盘、光盘、只读光盘存储器(CD-ROM)和磁光盘、只读存储器(ROM)、随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡、闪存、或用于经由电、光、声音、或其他形式的传播信号(例如,载波、红外信号、数字信号等)在互联网上传输信息的有形机器可读存储设备。因此,计算机可读介质可以包括适用于存储或传输机器(例如,计算机)可读形式的电子指令或信息的任何类型的有形机器可读介质。
设计可以贯穿各个不同的阶段,从产生到仿真到制造。表示设计的数据可用若干方式来表示所述设计。首先,如可以在模拟中有用的,可使用硬件描述语言或其他功能描述语言来表示硬件。另外,可以在设计过程的一些阶段产生具有逻辑和/或晶体管门的电路级模型。此外,设计在一些阶段处可以达到代表在硬件模型中的不同装置的物理布局的数据水平。在使用一些半导体制造技术的情况下,表示硬件模型的数据可以是指示由用于产生集成电路的掩模的不同掩模层上的各种特征的存在或不存在的数据。在任何设计表示中,数据可以存储在任何形式的机器可读介质中。存储器或磁存储设备或光存储设备(如,盘)可以是用于存储信息的机器可读介质,所述信息是经由光波或电波来传输的,所述光波或电波被调制或以其他方式被生成以传输这类信息。当传输指示或携带代码或设计的电载波时,在执行电信号的复制、缓冲或重传情况的程度上,可以制作一个新的副本。因此,通信提供者或网络提供者可以在有形机器可读介质上至少暂时地存储诸如编码到载波中的信息等制品,从而将本公开的实施例的技术具体化。
在现代处理器中,多个不同的执行单元可以用于处理和执行各种代码和指令。一些指令可能更快地完成,而其他指令则可能花费多个时钟周期来完成。指令的吞吐量越快,处理器的整体性能就越好。因此,尽可能快地执行尽可能多的指令将是有利的。然而,可能存在具有更大的复杂性并且需要更多的执行时间和处理器资源的某些指令,诸如浮点指令、加载/存储操作、数据移动等。
随着更多的计算机系统被用于互联网、文本以及多媒体应用,已经随时间推移引入了附加处理器支持。在一个实施例中,指令集可以与一个或多个计算机架构相关联,包括数据类型、指令、寄存器架构、寻址模式、存储器架构、中断和异常处置、以及外部输入和输出(I/O)。
在一个实施例中,指令集架构(ISA)可以由一个或多个微架构来实施,所述一个或多个微架构可以包括用于实施一个或多个指令集的处理器逻辑和电路。因此,具有不同微架构的处理器可共享公共指令集的至少一部分。例如,Pentium 4处理器、CoreTM处理器、以及来自加利福尼亚州桑尼威尔(Sunnyvale)的超微半导体有限公司(AdvancedMicroDevices,Inc.)的处理器实施几乎相同版本的x86指令集(在更新的版本中已加入了一些扩展),但具有不同的内部设计。类似地,由其他处理器开发公司(诸如ARM控股有限公司、MIPS或它们的授权方或兼容方)所设计的处理器可以共享公共指令集的至少一部分,但可以包括不同的处理器设计。例如,ISA的相同寄存器架构在不同的微架构中可以使用新的或已知的技术以不同的方式来实施,包括专用物理寄存器、使用寄存器重命名机制(例如,使用寄存器别名表(RAT)、重排序缓冲器(ROB)以及引退寄存器堆)的一个或多个动态分配物理寄存器。在一个实施例中,寄存器可以包括:可以或可以不由软件程序员寻址的一个或多个寄存器、寄存器架构、寄存器堆、或其他寄存器组。
指令集可以包括一种或多种指令格式。在一个实施例中,指令格式可以指示各个字段(位的数量、位的位置等)以便在其他事物中指明待执行的操作以及在其上待执行的那个操作的操作数。在进一步的实施例中,一些指令格式可以进一步由指令模板(或子格式)所进一步限定。例如,给定指令格式的指令模板可以被定义为具有指令格式字段的不同子集和/或被定义为具有不同解释的给定字段。在一个实施例中,指令可以使用指令格式(并且,如果定义过,则以所述指令格式的一个给定指令模板)来表示,并且所述指明或指示操作以及所述操作将进行操作的操作数。
科学、财务、自动向量化通用目的、RMS(标识、挖掘和综合)以及视觉和多媒体应用(例如,2D/3D图形、图像处理、视频压缩/解压缩、语音标识算法和音频处理)可能需要对大量数据项执行相同的操作。在一个实施例中,单指令多数据(Single InstructionMultiple Data,SIMD)指代使处理器对多个数据元素执行运算的指令类型。SIMD技术可以用于能够在逻辑上将寄存器中的位划分成多个固定尺寸或可变尺寸的数据元素的处理器,每个数据元素代表单独的值。例如,在一个实施例中,64位寄存器中的位可以被组织为包含四个单独的16位数据元素的源操作数,其中每个数据元素代表单独的16位值。这种数据类型可以被称为紧缩数据类型或向量数据类型,并且这种数据类型的操作数可以被称为紧缩数据操作数或向量操作数。在一个实施例中,紧缩数据项或向量可以是存储在单个寄存器内的紧缩数据元素的序列,并且紧缩数据操作数或向量操作数可以是SIMD指令(或紧缩数据指令或向量指令)的源或目的地操作数。在一个实施例中,SIMD指令指定单个向量操作,所述单个向量操作有待对两个源向量操作数执行,以便生成具有相同或不同尺寸、具有相同或不同的数据元素数量、并且具有相同或不同的数据元素顺序的目的地向量操作数(也称为结果向量操作数)。
SIMD技术(如具有包括x86、MMXTM、流式SIMD扩展(SSE)、SSE2、SSE3、SSE4.1和SSE4.2指令的指令集的CoreTM处理器所采用的技术)、ARM处理器(如具有包括向量浮点(VFP)和/或NEON指令的指令集的ARM处理器族)、以及MIPS处理器(如由中国科学院计算技术研究所(ICT)开发的龙芯族处理器)已经实现了应用性能的显著提高(CoreTM和MMXTM是加利福尼亚州圣克拉拉的英特尔公司的注册商标或商标)。
在一个实施例中,目的地和源寄存器/数据可以是用于表示相应的数据或操作的源和目的地的通用术语。在一些实施例中,目的地和源寄存器/数据可以通过寄存器、存储器或具有与所描绘的名称或功能不同的名称或功能的其他存储区域来实施。例如,在一个实施例中,“DEST1”可以是临时存储寄存器或其他存储区域,而“SRC1”和“SRC2”可以是第一源存储寄存器和第二源存储寄存器或其他存储区域等。在其他实施例中,SRC和DEST存储区域中的两个或更多个可以与同一存储区域内的不同数据存储元件(例如,SIMD寄存器)相对应。在一个实施例中,所述源寄存器中的一个源寄存器还可以用作目的地寄存器,通过例如将对第一源数据和第二源数据执行的操作的结果写回到这两个源寄存器中的一个源寄存器中,从而用作目的地寄存器。
图1A是根据本公开的实施例的形成有可以包括用于执行指令的执行单元的处理器的示例性计算机系统的框图。根据本公开,如在本文所描述的实施例中,系统100包括如处理器102之类的组件,所述处理器用于采用包括逻辑的执行单元以执行算法来对数据进行处理。系统100可以代表基于可从加利福尼亚州圣克拉拉市的英特尔公司获得的III、4、XeonTM、XScaleTM和/或StrongARMTM微处理器的处理系统,不过也可使用其他系统(包括具有其他微处理器的PC、工程工作站、机顶盒等)。在一个实施例中,样本系统100可以执行可从美国华盛顿州雷蒙德市的微软公司获得的WINDOWStm操作系统的一个版本,不过也可使用其他操作系统(例如,UNIX和Linux)、嵌入式软件、和/或图形用户界面。因此,本公开的实施例不限于硬件和软件的任何具体组合。
实施例不限于计算机系统。本公开的实施例可用于其他装置,如手持式装置和嵌入式应用。手持式装置的一些示例包括:蜂窝电话、互联网协议装置、数码相机、个人数字助理(PDA)、手持式PC。嵌入式应用可包括:微控制器、数字信号处理器(DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络中枢、广域网(WAN)交换机、或可执行根据至少一个实施例的一个或多个指令的任何其他系统。
计算机系统100可以包括处理器102,所述处理器可以包括根据本公开的一个实施例用于执行算法以便执行至少一条指令的一个或多个执行单元108。可以在单处理器桌面或服务器系统的背景下描述一个实施例,但其他实施例可包括在多处理器系统中。系统100可以是“中枢”系统架构的示例。系统100可以包括用于处理数据信号的处理器102。处理器102可以包括复杂指令集计算机(CISC)微处理器、精简指令集计算(RISC)微处理器、超长指令字(VLIW)微处理器、实施指令集组合的处理器或任合其他处理器装置,例如,如数字信号处理器。在一个实施例中,处理器102可以耦合至处理器总线110,所述处理器总线可以在处理器102与系统100内的其他组件之间传输数据信号。系统100的元件可以执行对熟悉本领域的人而言是众所周知的常规功能。
在一个实施例中,处理器102可以包括1级(L1)内部高速缓存存储器104。取决于架构,处理器102可具有单个内部高速缓存或多级内部高速缓存。在另一实施例中,高速缓存存储器可以驻留在处理器102外部。其他实施例还可以根据特定实施方式和需求包括内部高速缓存和外部高速缓存两者的组合。寄存器堆106可以将不同类型的数据存储在各种寄存器中,包括整数寄存器、浮点寄存器、状态寄存器以及指令指针寄存器。
执行单元108(包括用于执行整数运算和浮点运算的逻辑)也驻留在处理器102中。处理器102还可以包括存储用于某些宏指令的微代码的微代码(u码)ROM。在一个实施例中,执行单元108可以包括用于处理紧缩指令集109的逻辑。通过将紧缩指令集109包括在通用处理器102的指令集内,连同用于执行所述指令的相关联的电路系统,可使用通用处理器102中的紧缩数据来执行许多多媒体应用所使用的操作。因此,通过将处理器数据总线的全带宽用于对紧缩数据进行操作,许多多媒体应用可被加速并更高效地执行。这可以潜在地消除对跨处理器数据总线传送更小数据单元以一次对一个数据元素执行一个或多个操作的需要。
执行单元108的实施例还可用于微控制器、嵌入式处理器、图形装置、DSP以及其他类型的逻辑电路。系统100可以包括存储器120。存储器120可以被实施为动态随机存取存储器(DRAM)装置、静态随机存取存储器(SRAM)装置、闪存装置或其他存储器装置。存储器120可以存储由数据信号表示的可由处理器102执行的指令119和/或数据121。
系统逻辑芯片116可以耦合到处理器总线110和存储器120。系统逻辑芯片116可以包括存储器控制器中枢(MCH)。处理器102可以经由处理器总线110与MCH 116进行通信。MCH116可以向存储器120提供高带宽存储器路径118,以用于存储指令119和数据121以及用于存储图形命令、数据和纹理。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、串行扩展端口(如通用串行总线USB)127以及网络控制器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)及这些变换的对应逆变换;压缩/解压缩技术,诸如颜色空间变换、视频编码运动估计或视频解码运动补偿;以及调制/解调(MODEM)函数,诸如脉冲编码调制(PCM)。
图1C展示了执行SIMD文本串比较操作的数据处理系统的其他实施例。在一个实施例中,数据处理系统160可以包括主处理器166、SIMD协处理器161、高速缓存存储器167和输入/输出系统168。输入/输出系统168可以可选地耦合至无线接口169。根据一个实施例,SIMD协处理器161可以执行包括指令的操作。在一个实施例中,处理核170可以适用于采用一种或多种工艺技术的制造,并且通过在机器可读介质上足够详细地表示,可以适用于促进全部或部分的数据处理系统160包括处理核170的制造。
在一个实施例中,SIMD协处理器161包括执行单元162和一组寄存器堆164。主处理器166的一个实施例包括用于识别包括根据一个实施例的指令的指令集163的指令以便由执行单元162来执行的解码器165。在其他实施例中,SIMD协处理器161还包括解码器165的至少一部分(示出为165B)以对指令集163的指令进行解码。处理核170还可以包括附加电路系统(未示出),所述附加电路系统对于理解本公开的实施例可以是不必要的。
在操作中,主处理器166执行控制一般类型的数据处理操作的数据处理指令流,所述数据处理操作包括与高速缓存存储器167和输入输出系统168的交互。嵌入在数据处理指令流内的可以是SIMD协处理器指令。主处理器166的解码器165将这些SIMD协处理器指令识别为属于应由附接的SIMD协处理器161执行的类型。相应地,主处理器166在协处理器总线166上发布这些SIMD协处理器指令(或表示SIMD协处理器指令的控制信号)。可以由任何附接的SIMD协处理器从协处理器总线171接收这些指令。在这种情况下,SIMD协处理器161可以接受并执行任何旨在用于所述协处理器的所接收的SIMD协处理器指令。
可以经由无线接口169接收数据以供由SIMD协处理器指令进行处理。例如,可以以数字信号的形式接收语音通信,所述数字信号可以由SIMD协处理器指令进行处理以重新生成表示语音通信的数字音频样本。再例如,可以以数字比特流的形式接收压缩音频和/或视频,所述压缩音频和/或视频可以由SIMD协处理器指令进行处理以重新生成数字音频样本和/或运动视频帧。在处理核170的一个实施例中,主处理器166和SIMD协处理器161可以集成到包括执行单元162、一组寄存器堆164和解码器165的单处理核170中以便识别包括根据一个实施例的指令的指令集163的指令。
图2是根据本公开的实施例的可以包括用于执行指令的逻辑电路的处理器200的微架构的框图。在一些实施例中,可以实施根据一个实施例的指令来对具有字节、字、双字、四字等尺寸以及如单倍和双倍精度整数和浮点数据类型等数据类型的数据元素进行操作。在一个实施例中,有序前端201可以实施处理器200的可以取出待执行的指令并将所述指令准备于稍后在处理器流水线中使用的部分。前端201可以包括若干个单元。在一个实施例中,指令预取器226从存储器取出指令并将所述指令馈送给指令解码器228,所述指令解码器进而对所述指令进行解码或解释。例如,在一个实施例中,解码器将接收到的指令解码成机器可以执行的称为“微指令”或“微运算”(也称为微op或uop)的一个或多个运算。在其他实施例中,根据一个实施例,解码器将指令解析为运算码和相应的数据以及可由微架构用于执行运算的控制字段。在一个实施例中,跟踪高速缓存230可以将经解码的uop汇编为程序有序序列或在uop队列234中跟踪以用于执行。当跟踪高速缓存230遇到复杂指令时,微代码ROM 232提供完成运算所需的uop。
一些指令可以被转换为单个微op,而其他指令需要若干个微op来完成完整的运算。在一个实施例中,如果完成指令需要多于四个微op,则解码器228可以访问微代码ROM232以执行指令。在一个实施例中,指令可以被解码成用于在指令解码器228处进行处理的少量的微op。在另一实施例中,如果需要多个微op来完成运算,则指令可以存储在微代码ROM 232内。跟踪高速缓存230引用入口点可编程逻辑阵列(PLA),以确定用于从微代码ROM232读取微代码序列的正确微指令指针以便根据一个实施例完成一个或多个指令。在微代码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可以被分成两个单独的寄存器堆,一个寄存器堆用于数据的低次序三十二位,并且第二寄存器堆用于数据的高次序三十二位。浮点寄存器堆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可以包括用于执行除法、平方根和剩余微op的64位乘64位浮点除法器。在各个实施例中,涉及浮点值的指令可以用浮点硬件来处理。在一个实施例中,ALU运算可以被传递至高速ALU执行单元216、218。高速ALU 216、218可以以半个时钟周期的有效等待时间执行快速运算。在一个实施例中,大多数复杂整数运算前往慢速ALU 220,因为慢速ALU 220可以包括用于长等待时间类型的运算的整数执行硬件,诸如乘法、移位、标志逻辑、以及分支处理。存储器加载/存储运算可以由AGU 212、214来执行。在一个实施例中,整数ALU 216、218、220可以对64位数据操作数执行整数运算。在其他实施例中,ALU 216、218、220可以被实施为支持包括十六、三十二、128、256等的各种数据位尺寸。类似地,浮点单元222、224可以被实施为支持具有各种宽度的位的操作数范围。在一个实施例中,浮点单元222、224可以结合SIMD和多媒体指令来对128位宽度的紧缩数据操作数进行运算。
在一个实施例中,uop调度器202、204、206在父加载完成执行之前分派不独立运算。当uop可以在处理器200中推测性地调度和执行时,处理器200还可以包括用于处理存储器未命中的逻辑。如果数据高速缓存中的数据加载未命中,则可能存在流水线中飞行的已经因暂时不正确数据而离开调度器的不独立运算。回放机制跟踪并重新执行使用不正确数据的指令。仅仅不独立运算可能需要被重放,并且可以允许完成独立运算。处理器的一个实施例的调度器和回放机制还可以被设计成捕获用于文本串比较操作的指令序列。
术语“寄存器”可以指代可被用作指令的一部分以标识操作数的机载处理器存储位置。换言之,寄存器可以是可从处理器外部(从程序员的角度来看)可用的寄存器。然而,在一些实施例中,寄存器可能并不限于特定类型的电路。而是,寄存器可以存储数据、提供数据并且执行本文所描述的功能。本文所描述的寄存器可以由处理器内的电路系统使用任何数量的不同技术来实施,如专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配的物理寄存器的组合等。在一个实施例中,整数寄存器存储32位整数数据。一个实施例的寄存器堆还包含用于紧缩数据的八个多媒体SIMD寄存器。对于下面的讨论,寄存器可以被理解为被设计成保持紧缩数据的数据寄存器,比如,用来自加利福尼亚州圣克拉拉的英特尔公司的MMX技术实现的微处理器中的64位宽MMXTM寄存器(在某些情况下也称为“mm”寄存器)。以整数和浮点形式可用的这些MMX寄存器可以用伴随SIMD和SSE指令的紧缩数据元素进行操作。类似地,与SSE2、SSE3、SSE4或更高版本(通常称为“SSEx”)技术有关的128位宽XMM寄存器可以保持这样的紧缩数据操作数。在一个实施例中,在存储紧缩数据和整数数据时,寄存器不需要对这两种数据类型进行区分。在一个实施例中,整数和浮点数据可以包含在同一寄存器堆或不同的寄存器堆中。此外,在一个实施例中,浮点和整数数据可以存储在不同的寄存器或同一寄存器中。
在下图的示例中,可以描述多个数据操作数。图3A展示了根据本公开的实施例的多媒体寄存器中的各种紧缩数据类型表示。图3A展示了用于128位宽操作数的紧缩字节310、紧缩字320和紧缩双字(dword))330的数据类型。本示例的紧缩字节格式310可以为128位长,并且包含十六个紧缩字节数据元素。例如,字节可以被限定为八个数据位。每个字节数据元素的信息可以存储在字节0的位7到位0、字节1的位15到位8、字节2的位23至位16以及最后字节15的位120至位127中。因此,所有可用位都可以用于寄存器中。这种存储安排提高了处理器的存储效率。同样地,在访问了十六个数据元素的情况下,现在可以并行地对十六个数据元素执行一个操作。
通常,数据元素可以包括存储在具有相同长度的其他数据元素的单个寄存器或存储器位置中的单独的一条数据。在与SSEx技术有关的紧缩数据序列中,存储在XMM寄存器中的数据元素数量可以是128位除以单个数据元素的位长度。类似地,在与MMX和SSE技术有关的紧缩数据序列中,存储在XMM寄存器中的数据元素数量可以是64位除以单个数据元素的位长度。尽管在图3A中展示的数据类型可以是128位长,但本公开的实施例还可以用64位宽或其他尺寸的操作数进行操作。本示例的紧缩字格式320可以为128位长,并且包含八个紧缩字数据元素。每个紧缩字包含十六个信息位。图3A的紧缩双字格式330可以为128位长,并且包含四个紧缩双字数据元素。每个紧缩双字数据元素包含三十二个信息位。紧缩四字可以是128位长,并且包含两个紧缩四字数据元素。
图3B展示了根据本公开的实施例的可能的寄存器中数据存储格式。每个紧缩数据可以包括多于一个独立数据元素。展示了三种紧缩数据格式:半紧缩(packed half)341、单紧缩(packed single)342和双紧缩(packed double)343。半紧缩341、单紧缩342和双紧缩343的一个实施例包含定点数据元素。对于另一个实施例,半紧缩341、单紧缩342和双紧缩343中的一个或多个可以包含浮点数据元素。半紧缩341的一个实施例可以是包含八个16位数据元素的128位长。单紧缩342的一个实施例可以是128位长并且包含四个32位数据元素。双紧缩343的一个实施例可以是128位长并且包含两个64位数据元素。将理解的是,这种紧缩数据格式可以进一步扩展到其他寄存器长度,例如,96位、160位、192位、224位、256位或更多。
图3C展示了根据本公开的实施例的多媒体寄存器中的各种有符号和无符号紧缩数据类型表示。无符号紧缩字节表示344展示了无符号紧缩字节在SIMD寄存器中的存储。每个字节数据元素的信息可以存储在字节0的位7到位0、字节1的位15到位8、字节2的位23至位16以及最后字节15的位120至位127中。因此,所有可用位都可以用于寄存器中。这种存储安排可以提高处理器的存储效率。同样地,在访问了十六个数据元素的情况下,现在可以以并行方式对十六个数据元素执行一个操作。有符号紧缩字节表示345展示了有符号紧缩字节的存储。注意,每个字节数据元素的第八个位可以是符号指示符。无符号紧缩字表示346展示了可以如何将字七到字零存储在SIMD寄存器中。有符号紧缩字表示347可以类似于无符号紧缩字寄存器中表示346。注意,每个字数据元素的第十六个位可以是符号指示符。无符号紧缩双字表示348示出如何存储双字数据元素。有符号紧缩双字表示349可以类似于无符号紧缩双字寄存器中表示348。注意,必要的符号位可以是每个双字数据元素的第三十二位。
图3D展示了操作编码(操作码)的实施例。此外,格式360可以包括与可在万维网(www)上在intel.com/design/litcentr处从加利福尼亚州圣克拉拉市英特尔公司获得的“IA-32英特尔架构软件开发者手册第2卷:指令集参考(IA-32Intel ArchitectureSoftware 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展示了根据本公开的实施例的具有四十个位或更多个位的另一种可能的操作编码(操作码)格式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以及由可选的比例索引基址和位移字节指定的寄存器到寄存器寻址、存储器到寄存器寻址、通过存储器的寄存器寻址、通过寄存器的寄存器寻址、即时寄存器寻址、寄存器到存储器寻址。
图3F展示了根据本公开的实施例的又另一种可能的操作编码(操作码)格式。可以通过协处理器数据处理(CDP)指令来执行64位单指令多数据(SIMD)算术运算。操作编码(操作码)格式380描绘了具有CDP操作码字段382和389的一个这样的CDP指令。对于另一个实施例,这种类型的CDP指令操作可以由字段383、384、387和388中的一个或多个进行编码。可以标识每条指令多达三个操作数位置,包括多达两个源操作数标识符385和390以及一个目的地操作数标识符386。协处理器的一个实施例可以对八位、十六位、三十二位和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。TLB436可以耦合至指令取出单元438,所述指令取出单元耦合至解码单元440。解码单元440可以对指令进行解码并且生成可从原始指令中解码出的、或以其他方式反映原始指令或可从原始指令衍生出的一个或多个微运算、微代码入口点、微指令、其他指令或其他控制信号作为输出。解码器可以使用各种不同的机制来实施。合适机制的示例包括但不限于:查找表、硬件实施方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,指令高速缓存单元434可以进一步耦合到存储器单元470中的2级(L2)高速缓存单元476。解码单元440可以耦合到执行引擎单元450中的重命名/分配器单元452。
执行引擎单元450可以包括耦合至引退单元454的重命名/分配器单元452、以及一组一个或多个调度器单元456。调度器单元456表示任何数量的不同调度器,包括保留站、中央指令窗等。调度器单元456可以耦合至物理寄存器堆单元458。物理寄存器堆单元458各自表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点等、状态(例如,作为有待执行的下一指令的地址的指令指针)等。物理寄存器堆单元458被引退单元454重叠,所述引退单元用于展示可以实施寄存器重命名和乱序执行的各种方式(例如,使用一个或多个重排序缓冲器和一个或多个引退寄存器堆;使用一个或多个未来堆、一个或多个历史缓冲器以及一个或多个引退寄存器堆;使用寄存器映射和寄存器池等)。通常,架构寄存器可以从处理器的外部或从程序员的角度来看是可见的。寄存器可能不限于任何已知的特定类型的电路。各种不同类型的寄存器可以是合适的,只要它们能够存储和提供如本文所描述的数据即可。合适的寄存器的示例包括但可能不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用和动态分配的物理寄存器的组合等。引退单元454和物理寄存器堆单元458可以耦合到执行集群460。执行集群460可以包括一组一个或多个执行单元462和一组一个或多个存储器存取单元464。执行单元462可以执行各种运算(例如,移位、加法、减法、乘法)以及对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。虽然一些实施例可以包括专用于具体功能或功能集合的若干执行单元,但是其他实施例可只包括一个执行单元或包括全都执行全部功能的多个执行单元。调度器单元456、物理寄存器堆单元458、以及执行集群460被示出为可能是复数的,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线、和/或存储器存取流水线,所述流水线各自具有其本身的调度器单元、物理寄存器堆单元、和/或执行集群,并且在单独的存储器存取流水线的情况下,可以实施其中只有所述流水线的执行集群具有存储器存取单元464的某些实施例)。还应当理解,在使用单独的流水线的情况下,这些流水线中的一者或多者可以是乱序发布/执行流水线,并且其余的是有序流水线。
所述一组存储器存取单元464可以耦合到存储器单元470,所述存储器单元可以包括耦合到数据高速缓存单元474的数据TLB单元472,所述数据高速缓存单元耦合到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指令集(具有已经添加了较新版本的一些扩展);加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔的ARM控股公司的ARM指令集(具有可选的附加扩展,比如NEON)。
应当理解,核可以以各种方式来支持多线程化(执行两个或更多个并行操作或线程集)。多线程化支持可以通过例如包括时分多线程化、同步多线程化(其中,单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)或其组合来执行。这种组合可以包括例如诸如超线程化技术中的时分取出并解码以及此后的同步多线程化。
尽管可以在乱序执行的上下文中描述寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。虽然处理器的所示实施例还可以包括单独的指令和数据高速缓存单元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可以包括用于对核502、系统代理510和高速缓存506、以及图形模块560进行互连的基于环的互连单元508。在其他实施例中,处理器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可以由PCIExpress(PCIe)来实施。在进一步的实施例中,接口514可以由PCI Express图形(PEG)来实施。系统代理510可以包括直接媒体接口(DMI)516。DMI 516可以在母板或计算机系统的其他部分上的不同桥之间提供链路。系统代理510可以包括用于向计算系统的其他元件提供PCIe链路的PCIe桥518。PCIe桥518可以使用存储器控制器520和一致性逻辑522来实施。
核502可以以任何合适的方式来实施。就架构和/或指令集而言,核502可以是同构或异构的。在一个实施例中,核502中的一些可以是有序的,而其他核可以是乱序的。在另一实施例中,核502中的两个或更多个核可以执行同一指令集,而其他核可以仅执行所述指令集的子集或执行不同的指令集。
处理器500可以包括通用处理器,如可从加利福尼亚州圣克拉拉市的Intel公司获得的CoreTM i3、i5、i7、2Duo和Quad、XeonTM、ItaniumTM、XScaleTM或StrongARMTM处理器。处理器500可以从另一公司提供,比如ARM控股公司、MIPS等。处理器500可以是专用处理器,如例如网络或通信处理器、压缩引擎、图形处理器、协处理器、嵌入式处理器等。处理器500可以在一个或多个芯片上实施。处理器500可以是一个或多个衬底的一部分和/或可以使用如例如BiCMOS、CMOS或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来表示。在必要时,写入至资源586或从中读取的值可以通过例如高速缓存层级结构503与处理器500的其他部分协调。当指令被分配资源时,其可以被放置到重排序缓冲器588中。重排序缓冲器588在指令被执行时跟踪所述指令,并且可以基于处理器500的任何合适的标准来选择性地对所述指令的执行进行重新排序。在一个实施例中,重排序缓冲器588可以标识可以独立执行的指令或一系列指令。这类指令或一系列指令可以与其他的这类指令并行执行。核502中的并行执行可以由任何合适数量的单独执行块或虚拟处理器来执行。在一个实施例中,共享资源——诸如存储器、寄存器、和高速缓存——可以由给定核502内的多个虚拟处理器访问。在其他实施例中,共享资源可以由处理器500内的多个处理实体访问。
高速缓存层级结构503可以以任何合适的方式来实施。例如,高速缓存层级结构503可以包括一个或多个较低级或中级高速缓存,诸如高速缓存572、574。在一个实施例中,高速缓存层级结构503可以包括通信地耦合至高速缓存572、574的LLC 595。在另一实施例中,LLC 595可以在可由处理器500的所有处理实体访问的模块590中实施。在进一步的实施例中,模块590可以在来自英特尔公司的处理器的非核模块中实施。模块590可以包括处理器500中执行核502所必要但可能不在核502内实施的部分或子系统。除了LLC 595之外,模块590可以包括例如硬件接口、存储器一致性协调器、处理器间互连、指令流水线或存储器控制器。可以通过模块590并且更具体地LLC 595来进行对可用于处理器500的RAM 599的访问。此外,核502的其他实例可以类似地访问模块590。可以部分地通过模块590来促进核502的实例的协调。
图6至图8可以展示适用于包括处理器500的示例性系统,而图9可以展示可以包括核502中的一个或多个的示例性片上系统(SoC)。本领域已知的用于膝上型计算机、台式机、手持式PC、个人数字助理、工程工作站、服务器、网络装置、网络中枢、交换机、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置、以及各种其他电子装置的其他系统设计和实施方式也可以是合适的。一般而言,结合如本文所公开的处理器和/或其他执行逻辑的各种各样的系统或电子装置通常可以是合适的。
图6展示了根据本公开的实施例的系统600的框图。系统600可以包括可耦合到图形存储控制器中枢(GMCH)620的一个或多个处理器610、615。图6中用虚线表示附加处理器615的可选性质。
每个处理器610、615可以是处理器500的某个版本。然而,应当注意的是,在处理器610、615中可能不存在集成图形逻辑和集成存储器控制单元。图6展示了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(如平板显示器)。在一个实施例中,GMCH620可以包括集成图形加速器。GMCH 620可以进一步地耦合到输入/输出(I/O)控制器中枢(ICH)650,所述ICH可以用于将各种外围装置耦合到系统600。外部图形装置660可以包括与另一个外围装置670一起耦合到ICH 650的独立图形装置。
在其他实施例中,在系统600中还可以存在附加或不同的处理器。例如,附加处理器610、615可以包括可以与处理器610相同的附加处理器、可以与处理器610异构或不对称的附加处理器、加速器(如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列、或任何其他处理器。在包括架构、微架构、热学、功耗特性等的指标度量范围方面,在物理资源610、615之间可以存在各种差异。这些差异可以有效地将其本身表现为处理器610、615之间的不对称性和异构性。对于至少一个实施例,各处理器610、615可以驻留在相同裸片封装体中。
图7展示了根据本公开的实施例的第二系统700的框图。如图7中所示,多处理器系统700可以包括点对点互连系统,并且可以包括经由点对点互连750耦合的第一处理器770和第二处理器780。处理器770和780中的每一个可以是处理器500的某个版本,如处理器610、615中的一个或多个。
虽然图7可展示两个处理器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,所述总线桥可以将第一总线716耦合到第二总线720。在一个实施例中,第二总线720可以是低引脚数(LPC)总线。在一个实施例中,各个装置可以耦合到第二总线720,所述装置包括例如键盘和/或鼠标722、多个通信装置727、以及可以包括指令/代码和数据730的存储单元728(如磁盘驱动器或者其他大容量存储设备)。进一步地,音频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可以耦合至872、882,而且那个I/O装置814也可以耦合至控制逻辑872、882。传统I/O装置815可以耦合至芯片组790。
图9展示了根据本公开的实施例的SoC 900的框图。图5中的相似元件具有相同的参考号。而且,虚线框可以表示关于更先进的SoC的可选特征。互连单元902可以耦合至:应用处理器910,所述应用处理器可以包括一组一个或多个核502A至502N和共享高速缓存单元506;系统代理单元510;总线控制器单元916;集成存储器控制器单元914;一组或者一个或多个媒体处理器920,所述媒体处理器可以包括集成图形逻辑908、用于提供静物和/或视频相机功能的图像处理器924、用于提供硬件音频加速的音频处理器926、以及用于提供视频编码/解码加速的视频处理器928;静态随机存取存储器(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、存储器接口控制器1045、MIPI控制器1050、闪存控制器1055、双数据速率(DDR)控制器1060、安全引擎1065、以及I2S/I2C控制器1070。图10的处理器中可以包括其他逻辑和电路,包括更多CPU或GPU以及其他外围接口控制器。
可以由机器可读介质上所存储的表示性数据来实施至少一个实施例的一个或多个方面,所述数据代表处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文中所描述的技术的逻辑。此类表示(称为“IP核”)可以被存储在有形的机器可读介质(“磁带”)上并提供给各顾客或制造设施以加载至实际制作所述逻辑或处理器的制作机器中。例如,IP核(诸如由ARM控股有限公司开发的处理器的CortexTM家族和中国科学院计算技术研究所(ICT)开发的龙芯IP核)可以被授权或销售给各类客户或许可证持有者(诸如德州仪器、高通、苹果或三星),并且在由这些客户或许可证持有者生产的处理器中实施。
图11展示了框图,展示了根据本公开的实施例的IP核的开发。存储设备1100可以包括模拟软件1120和/或硬件或软件模型1110。在一个实施例中,表示IP核设计的数据可以经由存储器1140(例如,硬盘)、有线连接(例如,互联网)1150或无线连接1160提供至存储设备1100。然后可以将由仿真工具和模型生成的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的处理器表示可以通过兼容地执行或以其他方式处理以下各项来执行与具有至少一个x86指令集核的英特尔处理器基本相同功能的任何处理器:(1)英特尔x86指令集核的指令集的实质部分,或(2)应用的目标代码版本或目标是在具有至少一个x86指令集核的英特尔处理器上运行的其他软件,以便实现与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器1304表示可以可操作以生成x86二进制代码1306(例如,目标代码)的编译器,所述二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个x86指令集核1316的处理器上执行。类似地,图13示出了可以使用替代性指令集编译器1308来编译高级语言1302的程序以生成替代性指令集二进制代码1310,可以由不具有至少一个x86指令集核的处理器1314(例如,具有执行加利福尼亚州桑尼维尔的MIPS技术公司的MIPS指令集和/或执行加利福尼亚州桑尼维尔的ARM控股公司的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高速缓存控制可以包括总线接口单元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卡或装置的访问或来自所述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可以存储标识一批指令中的最早的、未被分派的指令的值。最早指令可以与最低程序顺序(PO)值相对应。PO可以包括指令的唯一编号。这种指令可以是在由多个指令串(strand)表示的线程内的单条指令。PO可以用于在排序指令时确保正确执行代码的语义。PO可以通过诸如对在指令中编码的PO的增量而非绝对值进行评估的机制来重建。这种重建的PO可以被称为“RPO”。尽管本文可以引用PO,但是这种PO可以与RPO互换地使用。指令串可以包括指令序列,这些指令为取决于彼此的数据。所述指令串可以在编译时由二进制转换器来安排。执行指令串的硬件可以根据各种指令的PO有序地执行给定指令串的指令。线程可以包括多个指令串,使得不同指令串的指令可以彼此依赖。给定指令串的PO可以是所述指令串中尚未分派以从发布级开始执行的最早指令的PO。因此,给定多个指令串的线程,每个指令串包括由PO排序的指令,被执行的指令指针1580可以将最早的——由最低编号所展示的——PO存储在线程中。
在另一实施例中,存储器系统1540可以包括引退指针1582。引退指针1582可以存储标识最后引退指令的PO的值。引退指针1582可以由例如引退单元54来设置。如果尚未引退任何指令,则引退指针1582可以包括空值。
执行实体1565可以包括处理器可以借助以执行指令的任何合适数量和种类的机制。在图15的示例中,执行实体1565可以包括ALU/乘法单元(MUL)1566、ALU 1567和浮点单元(FPU)1568。在一个实施例中,这类实体可以使用包含在给定地址1569内的信息。执行实体1565与级1530、1550、1555、1560、1570相结合可以共同形成执行单元。
单元1510可以以任何合适的方式来实施。在一个实施例中,单元1510可以执行高速缓存控制。在这种实施例中,单元1510可以因此包括高速缓存1525。在进一步的实施例中,高速缓存1525可以被实施为具有诸如零、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,所述TLB提供物理地址与虚拟地址之间的地址值的查找。在又另一个实施例中,存储器系统1540可以包括用于促进对虚拟存储器的访问的存储器管理单元(MMU)1544。在还另一个实施例中,存储器系统1540可以包括预取器1543,所述预取器用于在实际需要执行来自存储器的指令之前请求这种指令以便减少等待时间。
指令架构1500用于执行指令的操作可以通过不同级来执行。例如,使用单元1510指令预取级1530可以通过预取器1543来访问指令。所检索的指令可以存储在指令高速缓存1532中。预取级1530可以启用用于快速循环模式的选项1531,其中,形成足够小以适应在给定高速缓存内的循环的一系列指令被执行。在一个实施例中,可以在无需访问来自例如高速缓存1532的附加指令的情况下执行这种执行。可以由例如分支预测单元1535来判定将预取什么指令,所述分支预测单元可以访问全局历史1536中的执行指示、目标地址1537的指示或返回堆栈1538的内容以判定接下来将执行代码分支1557中的哪个。这种分支可能有可能作为结果来预取。分支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的操作可以使附加指令能够被执行。可以由跟踪单元1575对指令集架构1500的执行进行监测或调试。
图16是根据本公开的实施例的用于处理器的指令集架构的执行流水线1600的框图。执行流水线1600可以展示例如图15的指令架构1500的操作。
执行流水线1600可以包括步骤或操作的任何合适的组合。在1605中,可以预测接下来将被执行的分支。在一个实施例中,这种预测可以基于之前对指令的执行及其结果。在1610中,与经预测的执行分支相对应的指令可以被加载到指令高速缓存中。在1615中,可以取出指令高速缓存中的一条或多条这种指令以供执行。在1620中,已经取出的指令可以被解码成微代码或更具体的机器语言。在一个实施例中,可以同时对多条指令进行解码。在1625中,可以重分配对寄存器或经解码指令内的其他资源的引用。例如,对虚拟寄存器的引用可以用对相应物理寄存器的引用来替代。在1630中,可以将指令分派至队列以供执行。在1640处,可以执行指令。这种执行可以以任何合适的方式来进行。在1650中,可以将指令发布至合适的执行实体。执行指令的方式可以取决于执行所述指令的具体实体。例如,在1655处,ALU可以执行算术功能。ALU可以利用单个时钟周期以及两个移位器来进行其操作。在一个实施例中,可以采用两个ALU,并且因此可以在1655处执行两条指令。在1660处,可以确定所产生分支。程序计数器可以用于指定所述分支将前往的目的地。可以在单个时钟周期内执行1660。在1665处,可以由一个或多个FPU来执行浮点算术。浮点运算可能需要多个时钟周期来执行,比如两个周期到十个周期。在1670处,可以执行乘法运算和除法运算。这种运算可以在四个时钟周期内执行。在1675处,可以执行对寄存器或流水线1600的其他部分的加载和存储操作。这种操作可以包括加载和存储地址。这种运算可以在四个时钟周期内执行。在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、驱动器1720(诸如固态盘(SSD)或硬盘驱动器(HDD))、无线局域网(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可以通信地耦合至EC 1735。扬声器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可以通过例如编译器、适时(just-in-time)解释器、或其他合适的机制(其可以或可以不包括在系统1800中)生成或者可以由产生指令流1802的代码的起草者来指定。例如,编译器可以采用应用代码并且以指令流1802的形式生成可执行代码。指令可以由处理器1804从指令流1802中接收。指令流1802可以以任何合适的方式加载到处理器1804。例如,可以从存储设备、从其他机器或从诸如存储器系统1830等其他存储器加载有待由处理器1804执行的指令。所述指令可以到达常驻存储器(比如,RAM)并在其中可用,其中,指令从存储设备中取出以便由处理器1804执行。可以由例如预取器或取出单元(比如指令取出单元1808)从常驻存储器中取出所述指令。在一个实施例中,指令流1802可以包括用于执行一个或多个基于通道的跨步分散操作的指令。例如,指令流1802可以包括“VPSCATTER4”指令、“VPSCATTER3”指令或“VPSCATTER2”指令。注意,指令流1802可以包括除了执行向量操作的那些指令之外的指令。
处理器1804可以包括前端1806,所述前端可以包括指令取出流水线级(比如指令取出单元1808)以及解码流水线级(比如决定单元1810)。前端1806可以接收并使用解码单元1810来解码来自指令流1802的指令。经解码指令可以被分派、分配和调度以供由流水线的分配级(诸如分配器1814)执行并且被分配给特定执行单元1816以供执行。有待由处理器1804执行的一条或多条特定指令可以包括在针对由处理器1804执行而限定的函数库中。在另一实施例中,特定指令可以由处理器1804的特定部分所针对。例如,处理器1804可以识别指令流1802中用于在软件中执行向量操作的试图,并且可以将指令发布到执行单元1816中的特定执行单元。
在执行期间,可以通过存储器子系统1820来进行对数据或附加指令(包括驻留在存储器系统1830中的数据或指令)的访问。此外,来自执行的结果可以存储在存储器子系统1820中并且随后可以转储清除至存储器系统1830。存储器子系统1820可以包括例如存储器、RAM或高速缓存层级结构,所述高速缓存层级结构可以包括一个或多个1级(L1)高速缓存1822或2级(L2)高速缓存1824,其中一些可以由多个核1812或处理器1804所共享。在由执行单元1816执行之后,指令可以由引退单元1818中的写回级或引退级来引退。可以由一个或多个核1812来执行这种执行流水线化的各个部分。
执行向量指令的执行单元1816可以以任何合适的方式来实施。在一个实施例中,执行单元1816可以包括用于存储执行一个或多个向量操作所必需的信息的存储器元件或者可以通信地耦合至所述存储器元件。在一个实施例中,执行单元1816可以包括用于执行基于通道的跨步分散操作的电路系统。例如,执行单元1816可以包括用于实施“VPSCATTER4”指令、“VPSCATTER3”指令或“VPSCATTER2”指令的电路系统。以下将更详细地描述这些指令的示例实施方式。
在本公开的实施例中,处理器1804的指令集架构可以实施被限定为高级向量扩展512(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协处理器指令的控制信号)。可以由任何附接的SIMD协处理器从协处理器总线1915接收这些指令。在图19中所展示的示例实施例中,SIMD协处理器1910可以接受并执行旨在用于在SIMD协处理器1910上执行的任何所接收SIMD协处理器指令。
在一个实施例中,主处理器1920和SIMD协处理器1920可以被集成到包括执行单元、一组寄存器堆以及用于识别扩展SIMD指令集1916的指令的解码器的单个处理器核1900中。
图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。在另一实施例中,在AVX-512指令集架构的开发之前实施的传统SIMD指令可以在扩展向量寄存器堆1914的YMM寄存器或XMM寄存器的子集上进行操作。例如,在一些实施例中,由一些传统SIMD指令进行的访问可能限于寄存器YMM0至YMM15或限于寄存器XMM0至XMM7。
在本公开的实施例中,指令集架构可以支持访问高达四个指令操作数的扩展向量指令。例如,在至少一些实施例中,扩展向量指令可以将图20中所示的32个扩展向量寄存器ZMM0至ZMM31中的任何一个作为源操作数或目的地操作数来访问。在一些实施例中,扩展向量指令可以访问八个专用掩码寄存器中的任何一个。在一些实施例中,扩展向量指令可以访问十六个通用寄存器中的任何一个作为源操作数或目的地操作数。
在本公开的实施例中,对扩展向量指令的编码可以包括指定有待执行的特定向量操作的操作码。对扩展向量指令的编码可以包括标识八个专用掩码寄存器k0至k7中的任何一个的编码。当所标识掩码寄存器的每个位被应用于对应的源向量元素或目的地向量元素时,其可以管控向量操作的行为。例如,在一个实施例中,这些掩码寄存器中的七个(k1至k7)可以用于有条件地管控扩展向量指令的每数据元素计算操作。在本示例中,如果相应的掩码位未被置位,则针对给定向量元素不执行所述操作。在另一实施例中,掩码寄存器(k1至k7)可以用于有条件地管控对扩展向量指令的目的地操作数的每个元素的更新。在本示例中,如果相应的掩码位未被置位,则不会使用所述操作的结果更新给定目的地元素。
在一个实施例中,对扩展向量指令的编码可以包括指定有待应用于扩展向量指令的目的地(结果)向量的掩码类型的编码。例如,这种编码可以指定是否将合并掩码或零掩码应用于向量操作的执行。如果这种编码指定合并掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以保持在目的地向量中。如果这种编码指定零掩码,则掩码寄存器中相应位未被置位的任何目的地向量元素的值可以用目的地向量中的零值来替代。在一个示例实施例中,掩码寄存器k0不被用作向量操作的预测操作数。在本示例中,在其他情况下将选择掩码k0的编码值可以替代地选择全为一的隐式掩码值,从而有效地禁用掩码。在本示例中,掩码寄存器k0可以用于将一个或多个掩码寄存器作为源操作数或目的地操作数的任何指令。
以下示出了扩展向量指令的使用和句法的一个示例:
VADDPS zmm1、zmm2、zmm3
在一个实施例中,以上示出的指令将会将向量加法运算应用到源向量寄存器zmm2和zmm3的所有元素。在一个实施例中,以上示出的指令将会将结果向量存储在目的地向量寄存器zmm1中。可替代地,以下示出了用于有条件地应用向量操作的指令。
VADDPS zmm1{k1}{z}、zmm2、zmm3
在此示例中,所述指令会将向量加法运算应用到零掩码寄存器k1中的相应位被置位的源向量寄存器zmm2和zmm3的元素。在此示例中,如果{z}被置位,则存储在与掩码寄存器k1中未被置位的位相对应的目的地向量寄存器zmm1中的结果向量的元素的值可以用值零来替代。否则,如果{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数据结构的稀疏阵列中的填充行存储在存储器中。
在本公开的实施例中,所述扩展向量指令的编码可以包括间接标识存储器中的多个经索引目的地位置的比例索引基址(SIB)型存储器寻址操作数。在一个实施例中,SIB型存储器操作数可以包括标识基地址寄存器的编码。所述基地址寄存器的内容可以表示根据其来计算存储器中的特定目的地位置的地址的存储器中的基地址。例如,所述基地址可以是扩展向量指令的潜在目的地位置块中的第一位置的地址。在一个实施例中,SIB型存储器操作数可以包括标识索引寄存器的编码。所述索引寄存器的每个元素可以指定可用于根据所述基地址来计算潜在目的地位置块内的对应目的地位置的地址的索引或偏移值。在一个实施例中,SIB型存储器操作数可以包括指定在计算对应目的地地址时有待应用于每个索引值的比例因子的编码。例如,如果比例因子值四被编码在SIB型存储器操作数中,则根据所述索引寄存器的元素获得的每个索引值可以乘以四并且然后再加上所述基地址来计算目的地地址。
在一个实施例中,vm32{x,y,z}形式的SIB型存储器操作数可以识别使用SIB型存储器寻址指定的存储器操作数的向量阵列。在此示例中,使用公共基址寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的阵列,所述元素中的每一个是32位索引值。所述向量索引寄存器可以是XMM寄存器(vm32x)、YMM寄存器(vm32y)、或者ZMM寄存器(vm32z)。在另一实施例中,vm64{x,y,z}形式的SIB型存储器操作数可以识别使用SIB型存储器寻址指定的存储器操作数的向量阵列。在此示例中,使用公共基址寄存器、常数比例因子以及包含各个元素的向量索引寄存器来指定存储器地址的阵列,所述元素中的每一个是64位索引值。所述向量索引寄存器可以是XMM寄存器(vm64x)、YMM寄存器(vm64y)、或者ZMM寄存器(vm64z)。
在本公开的实施例中,用于执行由处理器核(诸如系统1800中的核1812)或由SIMD协处理器(诸如SIMD协处理器1910)实施的扩展向量操作的指令可以包括用于执行基于通道的跨步分散操作的指令。例如,这些指令可以包括一条或多条“VPSCATTER”指令。在本公开的实施例中,这些VPSCATTER指令可以用于将包含数据结构的不同数据元素的向量存储在存储器中。在一个实施例中,这些指令可以用于将多个数据结构中的每一个的数据元素一起存储在存储器中。每个数据结构的数据元素可以被写入到连续位置,所述连续位置在其地址是针对所述数据结构使用SIB型存储器寻址而计算的位置处开始。在一个实施例中,这些VPSCATTER指令可以用于将每个所产生数据结构作为稀疏阵列的填充行存储在存储器中。
在一个实施例中,向量寄存器内的不同“通道”可以用于保持不同类型的数据元素。例如,一条通道可以保持X值,一条通道可以保持Y值,依此类推。在此上下文中,术语“通道”可以指代所述向量寄存器的保持将以相同方式被处理的多个数据元素的一部分,而非指代所述向量寄存器的保持单个数据元素的一部分。在向量寄存器为512位宽的一个实施例中,可以存在四条128位通道,所述通道中的每一条存储3D或4D数据结构的对应类型的多个数据元素。例如,512位向量寄存器内的最低顺序128位可以被称为第一通道,下一128位可以被称为第二通道,依此类推。在此示例中,所述128位通道中的每一条可以存储两个64位数据元素、四个32位数据元素、八个16位数据元素、或者四个8位数据元素。在向量寄存器为512位宽的另一实施例中,可以存在两条256位通道,所述通道中的每一条存储2D数据结构的对应类型的数据元素。在此示例中,所述256位通道中的每一条可以存储每个高达128位的数据元素。在一个实施例中,每条通道可以保持单个类型的多个数据元素。在另一实施例中,保持在单条通道中的数据元素可以不具有相同类型,但其可以由应用以相同方式进行操作。
在一个实施例中,表示X分量、Y分量、Z分量和W分量各自为32位的四个XYZW型数据结构的数据可以存储在扩展向量寄存器中,诸如ZMM寄存器。在此示例中,VPSCATTER指令可以用于将具有来自ZMM寄存器的对应通道的元素的四个连续XYZW型数据结构分散到存储器中。所述ZMM寄存器可以将X值的向量存储在第一通道中,将Y值的向量存储在第二通道中,将Z值的向量存储在第三通道中,并且将W值的向量存储在第四通道中。在一个实施例中,“VPSCATTER4D”指令可以用于存储四个连续的XYZW型数据结构,每一个数据结构将来自ZMM寄存器的对应通道的元素包含在存储器中。在此示例中,所述VPSCATTER4D指令可以置换来自所述ZMM寄存器的数据从而将其置于XYZW顺序,并且可以以XYZW顺序将其存储在存储器中。例如,由VPSCATTER4D指令生成并由VPSCATTER4D指令存储在存储器中的目的地向量可以包括按照以下顺序的来自ZMM寄存器的四条通道的数据元素:X1Y1Z1W1、X2Y2Z2W2、X3Y3Z3W3、X4Y4Z4W4。在此示例中,XYZW型数据结构中的每一个可以存储在存储器中的使用SIB型存储器寻址计算的对应位置处。
图21是根据本公开的实施例的用于执行基于通道的跨步分散操作的操作的图示。在一个实施例中,系统1800可以执行用于进行基于通道的跨步分散操作的指令。例如,可以执行VPSCATTER指令。此指令可以包括任何合适数量和种类的操作数、位、标记、参数或其他元素。在一个实施例中,对VPSCATTER指令的调用可以引用源向量寄存器。所述源向量寄存器可以是扩展向量寄存器,所述扩展向量寄存器包含表示两个或更多个数据结构的多个元素的紧缩数据。对VPSCATTER指令的调用还可以在比例索引基址(SIB)型存储器寻址操作数中引用索引寄存器和/或基地址寄存器。所述基址寄存器可以标识存储器中的基地址,根据所述基地址来计算存储器中的、扩展向量寄存器中的数据的多个部分应当被存储的特定目的地位置的地址。所述索引寄存器针对每个数据结构可以指定可用于计算所述存储器中的连续目的地位置中的所述数据结构的数据元素将被写入到的第一连续目的地位置的地址相对于基地址的索引或偏移量。例如,执行所述VPSCATTER指令可以使得将扩展向量寄存器中表示第一数据结构的数据写入到所述存储器中以其地址是根据所述基地址和所述索引寄存器的第一元素的值而计算的位置开始的连续位置中,将扩展向量寄存器中表示第二数据结构的数据写入到所述存储器中以其地址是根据所述基地址和所述索引寄存器的第二元素的值而计算的位置开始的连续位置中,依此类推。
在一个实施例中,对VPSCATTER指令的调用可以指定在计算存储器中的数据结构的对应目的地位置时有待应用于每个索引值的比例因子。在一个实施例中,比例因子可以编码在SIB类型的存储器寻址操作数中。在一个实施例中,比例因子可以是一、二、四或八。所指定的比例因子可以取决于各个数据元素的尺寸或者有待写入到存储器中的数据结构的尺寸。在一个实施例中,对VPSCATTER指令的调用可以指定由存储在扩展向量寄存器中的数据表示的数据结构中的数据元素的尺寸。在一个实施例中,所有数据元素可以是相同的尺寸和类型。在另一实施例中,对VPSCATTER指令的调用可以指定被包括在由存储在扩展向量寄存器中的数据表示的数据结构中的每一个中的数据元素的数量。在一个实施例中,对VPSCATTER指令的调用可以指定在将执行结果写入到目的地位置时有待应用于所述执行结果的掩码寄存器。在又另一实施例中,对VPSCATTER指令的调用可以指定有待应用于所述结果的掩码的类型,诸如合并掩码或零掩码掩码。在仍其他实施例中,可以在对VPSCATTER指令的调用中引用更多、更少或不同的参数。
本文中描述的VPSCATTER指令的参数中的一个或多个可以是所述指令所固有的。例如,在不同的实施例中,这些参数的任何组合可以编码在所述指令的操作码格式的位或字段中。在其他实施例中,本文中描述的VPSCATTER型指令的参数中的一个或多个对于所述指令可以是可选的。例如,在不同的实施例中,这些参数的任何组合可以在调用所述指令时被指定。
在图21所展示的示例实施例中,在(1)处可以由SIMD执行单元1912接收VPSCATTER指令及其参数(其可以包括以上所述的寄存器和SIB型存储器寻址操作数、比例因子、每个数据结构中的数据元素的尺寸的指示、每个数据结构中的数据元素的数量的指示、标识特定掩码寄存器的参数、或者指定掩码类型的参数中的任一项或全部)。例如,在一个实施例中,可以由核1812内的分配器1814向SIMD协处理器1910内的SIMD执行单元1912发布所述VPSCATTER指令。在另一实施例中,可以由主处理器1920的解码器1922向SIMD协处理器1910内的SIMD执行单元1912发布所述VPSCATTER指令。所述VPSCATTER指令可以由SIMD执行单元1912逻辑地执行。
在此示例中,表示多个数据结构的紧缩数据可以存储在源向量寄存器中,诸如扩展向量寄存器堆1914内的扩展向量寄存器ZMMn(2101)。所述数据可以存储在扩展向量寄存器ZMMn(2101)中,以使得来自不同数据结构的相同类型的元素一起存储在扩展向量寄存器中。例如,包括扩展向量寄存器ZMMn(2101)的最低顺序位的第一通道可以存储属于第一类型的多个数据元素,包括扩展向量寄存器ZMMn(2101)的次最低顺序位的第二通道可以存储属于第二类型的多个数据元素,依此类推。
由SIMD执行单元1912执行所述VPSCATTER指令可以包括:在(2)处,从扩展向量寄存器堆1914中的扩展向量寄存器ZMMn(2101)获得表示一个或多个数据结构的数据元素。例如,所述VPSCATTER指令的参数可以将扩展向量寄存器ZMMn(2101)标识为通过基于通道的跨步分散操作有待存储在存储器中的数据元素的源,并且SIMD执行单元1912可以读取存储在所标识源向量寄存器中的多条通道中的紧缩数据的至少一部分。由SIMD执行单元1912执行所述VPSCATTER指令可以包括:在(3)处,从基地址寄存器2102获得用于计算存储器系统1830中开始写出表示每个数据结构的数据元素的一个或多个目的地位置的基地址。例如,所述VPSCATTER指令的SIB型存储器寻址操作数可以将基地址寄存器2102标识为用于计算存储器系统1830中用于ZMMn(2101)中所表示的数据结构的目的地位置的基地址的源。在此示例中,基地址寄存器2102是扩展向量寄存器堆1914内的扩展向量寄存器。在其他实施例中,所述VPSCATTER指令的SIB型存储器寻址操作数可以将处理器的通用寄存器中的一个标识为用于计算存储器系统1830中用于ZMMn(2101)中所表示的数据结构的目的地位置的基地址的源。在此示例中,从基地址寄存器2102获得的值指定了:所述基地址与存储器系统1830中的潜在目的地位置2105的块内的基地址位置2104相对应。
由SIMD执行单元1912执行所述VPSCATTER指令可以包括:在(4)处,从索引地址寄存器2103获得用于计算存储器系统1830中开始写出表示数据结构的相应一个的数据元素的每一个目的地位置的对应索引值。例如,所述VPSCATTER指令的SIB型存储器寻址操作数可以将索引寄存器2103标识为用于计算存储器系统1830中用于ZMMn(2101)中所表示的数据结构的目的地位置的索引值的源。在此示例中,索引寄存器2103是扩展向量寄存器堆1914内的扩展向量寄存器。在其他实施例中,所述VPSCATTER指令的SIB型存储器寻址操作数可以将处理器的通用寄存器中的一个标识为用于计算存储器系统1830中用于ZMMn(2101)中所表示的数据结构的目的地位置的索引值的源。
由SIMD执行单元1912执行所述VPSCATTER指令可以包括:在(5)处,置换从所标识源向量寄存器中的多条通道获得的紧缩数据,以便包括在目的地向量中。在一个实施例中,置换所述数据可以包括:针对给定的数据结构,从所述源向量寄存器内的每条通道中提取对应元素,并且将其汇编成彼此靠近以包括在所述目的地向量中。例如,可以通过从扩展向量寄存器ZMMn(2101)中的每条通道中提取第一元素来汇编第一数据结构以包括在所述目的地向量中。由SIMD执行单元1912执行所述VPSCATTER指令可以包括:在(6)处,计算存储器系统1830中开始写出表示给定数据结构的数据元素的目的地位置的地址。例如,可以通过将包含在索引寄存器2103的第一元素中的值与从基地址寄存器2102获得的值相加来计算由所述VPSCATTER指令汇编的第一数据结构的目的地位置的地址。在一些实施例中,计算所述第一数据结构的目的地位置的地址可以包括:将从索引寄存器中的第一元素获得的索引值乘以在VPSCATTER指令的SIB型存储器寻址操作中被编码的比例因子,然后将其与基地址相加。
在一个实施例中,执行VPSCATTER指令可以包括:针对其数据作为紧缩数据被存储在扩展向量寄存器ZMMn(2101)中的数据结构中的每一个,重复图21所展示的操作的任一个或全部步骤。例如,针对有待被汇编和包括在目的地向量中并有待写入存储器系统1830中的数据结构中的每一个,可以执行一次步骤(2)、步骤(4)、步骤(5)和步骤(6)。在一个实施例中,针对每一次附加迭代,在(2)、(4)和(5)处,SIMD执行单元1912可以分别从源向量寄存器内的每条通道中提取对应元素并且将其汇编成彼此靠近以包括在所述目的地向量中。例如,可以通过从扩展向量寄存器ZMMn(2101)中的每条通道中提取第二元素来汇编第二数据结构以包括在目的地向量中,可以通过从扩展向量寄存器ZMMn(2101)中的每条通道中提取第三元素来汇编第三数据结构以包括在目的地向量中,依此类推。在一个实施例中,针对每一次附加迭代,在(6)处,SIMD执行单元1912可以计算存储器系统1830中开始写出表示数据结构的数据元素的目的地位置。例如,可以通过将包含在索引寄存器2103的第二元素中的值与从基地址寄存器2102获得的值相加来计算由所述VPSCATTER指令汇编的第二数据结构的目的地位置的地址。在一些实施例中,计算所述第二数据结构的目的地位置的地址可以包括:将从索引寄存器的第二元素获得的索引值乘以在VPSCATTER指令的SIB型存储器寻址操作中被编码的比例因子,然后将其与基地址相加。在对目的地向量的至少一部分进行汇编之后,执行VPSCATTER指令可以包括:在(7)处,将目的地向量的至少一部分中的数据元素写出到存储器系统1830中的目的地位置2105内的位置,在此之后可以引退VPSCATTER指令。
在一个实施例中,将目的地向量写入存储器系统1830可以包括:针对每个数据结构,将组成数据结构的数据元素写出到存储器系统1830中的连续目的地位置,所述连续目的地位置以目的地位置2105内其地址被计算为针对那个数据结构的起始地址的位置开始。在一个实施例中,将目的地向量写入目的地2104可以包括:将合并掩码操作应用到目的地向量(如果这种掩码操作在调用VPSCATTER指令时被指定)。在另一实施例中,将目的地向量写入目的地2104可以包括:将零掩码操作应用到目的地向量(如果这种掩码操作在调用VPSCATTER指令时被指定)。
在一个实施例中,在每个数据结构的数据元素从源向量寄存器中被提取并且并放置成彼此相邻以汇编所述数据结构时,可以将其写出到存储器系统1830。例如,一旦已经由源向量寄存器的每条通道的第一数据元素汇编了第一数据结构,则可以将组成所述第一数据结构的数据元素写出到存储器系统1830中的连续位置,所述连续位置以目的地位置2105内其地址由SIMD执行单元在(6)的第一迭代期间针对第一数据结构被计算的位置开始。随后,一旦已经由源向量寄存器的每条通道的第二数据元素汇编了第二数据结构,则可以将组成所述第二数据结构的数据元素写出到存储器系统1830中的连续位置,所述连续位置以目的地位置2105内其地址由SIMD执行单元在(6)的第二迭代期间针对第一数据结构计算的位置开始,依此类推。
在一个实施例中,扩展SIMD指令集架构可以实施VPSCATTER操作的多种版本或形式,包括例如以下示出的那些:
VPSCATTER4{尺寸}{kn}{z}(REG,[vm32/vm64])
VPSCATTER3{尺寸}{kn}{z}(REG,[vm32/vm64])
VPSCATTER2{尺寸}{kn}{z}(REG,[vm32/vm64])
在VPSCATTER指令的这些示例形式中,紧跟“VPSCATTER”标识符的数字(例如,4、3或2)可以指示源向量寄存器中的通道的数量。这可以对应于由存储在源向量寄存器中的紧缩数据表示的每个数据结构中的数据元素的数量。在这些示例中,“尺寸”修饰符可以指定源向量寄存器中的每个数据元素的尺寸和/或类型。这可以对应于由存储在源向量寄存器中的紧缩数据表示的每个数据结构中的数据元素的尺寸和/或类型。在一个实施例中,所指定的尺寸/类型可以是{B/W/D/Q/PS/PD}之一。在这些示例中,可选指令参数“kn”可以标识多个掩码寄存器中的特定一个掩码寄存器。可以在针对VPSCATTER指令将掩码应用于目的地(结果)向量时指定此参数。在掩码将被应用的实施例中(例如,如果针对指令指定了掩码寄存器),可选指令参数“z”可以指示是否应当应用归零掩码。在一个实施例中,如果这个可选参数被置位,则可以应用零掩码,并且如果这个可选参数未被置位或如果这个可选参数被省略,则可以应用合并掩码。
在这些示例中,“REG”参数可以标识源向量寄存器。在至少一些实施例中,所述源向量寄存器可以是扩展向量寄存器。在这些示例中,[vm32/vm64]存储器寻址操作数可以是对针对VPSCATTER指令的比例因子、索引寄存器和基地址寄存器中的一项或多项进行编码的SIB型存储器寻址操作数。编码在[vm32/vm64]存储器寻址操作数中的信息可以用于获得计算由VPSCATTER指令分别计算为32位有效地址或64位有效地址的数据结构中的每一个的目的地位置的地址所需的值。
图22A展示了根据本公开的实施例的VPSCATTER4D{kn}{z}(ZMMn,[vm32])形式的VPSCATTER指令的操作。在此示例中,存储在扩展向量寄存器ZMMn(2101)中的紧缩数据表示每个填充行包括四个32位双字的阵列的数据元素。在此示例中,所述阵列的每个填充行用于包括X分量、Y分量、Z分量和W分量。在执行VPSCATTER指令之前已经将数据结构中的每一行的各个分量加载到源向量寄存器(扩展向量寄存器ZMMn 2101)的对应128位通道中。在此示例中,源向量寄存器的最低顺序128位(可以被称为源向量寄存器的第一通道)包含表示数据结构的每一行的X分量的四个32位双字:X1、X2、X3和X4。在此示例中,源向量寄存器的次最低顺序128位(可以被称为源向量寄存器的第二通道)包含表示数据结构的每一行的Y分量的四个32位双字:Y1、Y2、Y3和Y4。类似地,源向量寄存器的次最低顺序128位(可以被称为源向量寄存器的第三通道)包含表示数据结构的每一行的Z分量的四个32位双字:Z1、Z2、Z3和Z4;并且源向量寄存器的最高顺序128位(可以被称为源向量寄存器的第四通道)包含表示数据结构的每一行的W分量的四个32位双字:W1、W2、W3和W4。在此示例中,由SIB型存储器寻址操作数[vm32]中的编码标识基地址寄存器包含表示基地址位置2104的值。
在一个实施例中,VPSCATTER指令可以用于执行将数据结构的每个填充行的四个数据元素(例如,每个填充行的对应X分量、Y分量、Z分量和W分量)存储在存储器中的目的地位置中的基于通道的跨步分散操作,所述目的地位置以其地址是根据所指定的指令参数而计算的目的地位置开始。例如,执行指令“VPSCATTER4D kn z(ZMMn,[vm32])”可以使得将源向量寄存器的每条通道中的第一数据元素(第一X分量、第一Y分量、第一Z分量和第一W分量)写入存储器系统1830中以目的地位置2205开始的连续位置。在此示例中,目的地位置2205的地址被计算为基地址位置2104的地址加上偏移量,所述偏移量被计算为在[vm32]SIB型存储器寻址操作数中编码的索引寄存器的第一元素中包含的索引值乘以在[vm32]SIB型存储器寻址操作数中编码的比例因子。这四个数据元素可以共同表示存储器系统1830中的目的地数据结构的一个填充行。类似地,执行此指令可以使得将源向量寄存器的每条通道中的第三数据元素(第三X分量、第三Y分量、第三Z分量和第三W分量)写入到存储器系统1830中以目的地位置2204开始的连续位置,并且可以使得将源向量寄存器的每条通道中的第四数据元素(第四X分量、第四Y分量、第四Z分量和第四W分量)写入到存储器系统1830中以目的地位置2104(以偏移量为0的基地址)开始的连续位置。
在此示例中,对目的地(结果)向量执行在调用指令时指定的掩码操作。更具体地,针对此指令指定了零掩码。所指定的掩码寄存器(kn)包括未被置位且对应于源向量寄存器的第二通道并且因此对应于目的地数据结构的第二计算行的位。在此情况下,源向量寄存器的每条通道中的第二数据元素(第二X分量、第二Y分量、第二Z分量和第二W分量)将不会被写入存储器系统1830。相反,执行此指令可以使得将包含全部为零的数据元素写入存储器系统1830中这些数据元素在其他情况下会被写入到的连续位置。在此示例中,将包含全部为零的数据元素写入以目的地位置2202开始的连续位置。在另一实施例中,如果针对此指令指定了合并掩码而非零掩码,则在执行指令之前存储器系统1830中连续位置(以目的地位置2202开始的四个连续位置)的、与目的地数据结构的第三计算行相对应的内容将在执行指令之后被保持,而非由源向量寄存器的每条通道中的第二数据元素或由包含全部为零的数据元素来覆写。在此示例中,以目的地位置2201开始并在目的地位置2202(紧跟基地址位置2104)之前的潜在目的地位置的块、以目的地位置2203开始并在目的地位置2204之前的潜在目的地位置的块、以及以目的地位置2206(紧跟目的地位置2205)开始的潜在目的地位置的块可以不由VPSCATTER指令使用并且可以不受其执行的影响。
图22B展示了根据本公开的实施例的VPSCATTER3D形式的VPSCATTER指令的操作。在此示例中,存储在扩展向量寄存器ZMMn(2101)中的紧缩数据表示多个目的地数据结构的数据元素,所述多个目的地数据结构中的每一个包括三个32位双字。在此示例中,每个目的地数据结构将包括X分量、Y分量和Z分量。在执行VPSCATTER指令之前已经将每个数据结构的各个分量加载到源向量寄存器(扩展向量寄存器ZMMn 2101)的对应128位通道中。在此示例中,源向量寄存器的最低顺序128位(可以被称为源向量寄存器的第一通道)包含表示四个目的地数据结构中的每一个的X分量的四个32位双字:X1、X2、X3和X4。在此示例中,源向量寄存器的次最低顺序128位(可以被称为源向量寄存器的第二通道)包含表示四个目的地数据结构中的每一个的Y分量的四个32位双字:Y1、Y2、Y3和Y4。类似地,源向量寄存器的次最低顺序128位(可以被称为源向量寄存器的第三通道)包含表示四个目的地数据结构中的每一个的Z分量的四个32位双字:Z1、Z2、Z3和Z4;在此示例中,源向量寄存器的最高顺序128位(可以被称为源向量寄存器的第四通道)不包含表示四个目的地数据结构的任何数据元素。在一个实施例中,所述第四通道可以包括全部为零或者全部为一。在其他实施例中,所述第四通道可以包含任何任意数据,因为其将不被VPSCATTER指令使用(也不受其执行的影响)。
在一个实施例中,VPSCATTER指令可以用于执行将四个数据结构的每一个的三个数据元素(例如,每个数据结构的对应X分量、Y分量和Z分量)存储在存储器中的连续目的位置中的基于通道的跨步分散操作,所述连续位置以其地址是根据所指定的指令参数而计算的目的地位置开始。例如,执行指令“VPSCATTER3D(ZMMn,[vm32])”可以使得将源向量寄存器的每条通道中的第一数据元素(第一X分量、第一Y分量和第一Z分量)写入存储器系统1830中以目的地位置2213开始的连续位置。在此示例中,目的地位置2213的地址被计算为基地址位置(未示出)的地址加上偏移量,所述偏移量被计算为在[vm32]SIB型存储器寻址操作数中编码的索引寄存器的第一元素中包含的索引值乘以在[vm32]SIB型存储器寻址操作数中编码的比例因子。这三个元素可以共同表示存储在存储器系统1830中的目的地数据结构中的第一目的地数据结构。
类似地,执行此指令可以使得:将源向量寄存器的每条通道中与目的地数据结构中的第二目的地数据结构相对应的第二数据元素(第二X分量、第二Y分量和第二Z分量)写入存储器系统1830中以目的地位置2211开始的连续位置;可以使得:将源向量寄存器的每条通道中与目的地数据结构中的第三目的地数据结构相对应的第三数据元素(第三X分量、第三Y分量和第三Z分量)写入存储器系统1830中以目的地位置2212开始的连续位置;并且可以使得:将源向量寄存器的每条通道中与目的地数据结构中的第四目的地数据结构相对应的第四数据元素(第四X分量、第四Y分量和第四Z分量)写入存储器系统1830中以目的地位置2214开始的连续位置。存储器系统1830内的其他潜在目的地位置2105(图22B中示出且未示出的潜在目的地)可以不由VPSCATTER指令使用并且可以不受其执行的影响。在此示例中,针对VPSCATTER指令未指定掩码。因此,在由VPSCATTER指令置换包含在源向量寄存器(扩展向量寄存器ZMMn 2101)中的紧缩数据之后,将组成四个目的地数据结构的所有数据元素写入存储器1830。
如由图22B中的示例所展示的,在一个实施例中,如果源向量寄存器的全部内容已经被写出到存储器中,则由执行VPSCATTER指令所产生的目的地数据结构在存储器1830中占用的空间可能比已经占用的空间更少。例如,由执行上述VPSCATTER3D指令所产生的四个数据结构(所述数据结构中的每一个包括X分量、Y分量和Z分量)可以在存储器1830中占用十二个32位双字,而源向量寄存器(扩展向量寄存器ZMMn 2101)具有十六个32位双字的容量。
图22C展示了根据本公开的实施例的VPSCATTER2D形式的VPSCATTER指令的操作。在此示例中,存储在扩展向量寄存器ZMMn 2101中的数据表示两个目的地数据结构的数据元素,这两个目的地数据结构中的每一个包括两个64位浮点元素。在此示例中,每个目的地数据结构用于包括X分量和Y分量。在执行VPSCATTER指令之前已经将每个数据结构的各个分量加载到源向量寄存器(扩展向量寄存器ZMMn 2101)的对应128位通道中。在此示例中,源向量寄存器的最低顺序128位(可以被称为源向量寄存器的第一通道)包含表示两个目的地数据结构中的每一个的X分量的两个64位浮点元素:X1和X2。在此示例中,源向量寄存器的次最低顺序128位(可以被称为源向量寄存器的第二通道)包含表示两个目的地数据结构中的每一个的Y分量的两个64位浮点元素:Y1和Y2。在此示例中,未使用源向量寄存器的最高顺序256位。
在一个实施例中,VPSCATTER指令可以用于执行将两个数据结构的每一个的两个数据元素(例如,每个数据结构的对应X分量和Y分量)存储在存储器中的连续位置中的基于通道的跨步分散操作,所述连续位置以其地址是根据所指定的指令参数而计算的目的地位置开始。例如,执行指令“VPSCATTER2D”可以使得将源向量寄存器的每条通道中的第一数据元素(第一X分量和第一Y分量)写入存储器系统1830中以目的地位置2221开始的连续位置。在此示例中,目的地位置2221的地址被计算为基地址位置(未示出)的地址加上偏移量,所述偏移量被计算为在[vm32]SIB型存储器寻址操作数中编码的索引寄存器的第一元素中包含的索引值乘以在[vm32]SIB型存储器寻址操作数中编码的比例因子。这两个数据元素可以共同表示存储在存储器系统1830中的目的地数据结构中的第一目的地数据结构。类似地,执行此指令可以使得将源向量寄存器的每条通道中的第二数据元素(第二X分量和第二Y分量)写入存储器系统1830中以目的地位置2222开始的连续位置。这两个数据元素可以共同表示目的地数据结构中的第二目的地数据结构。在此示例中,针对VPSCATTER指令参数未指定掩码。因此,在由VPSCATTER指令置换包含在源向量寄存器(扩展向量寄存器ZMMn2101)中的紧缩数据之后,将组成两个目的地数据结构的所有数据元素写入存储器1830。
图22A至图22C中展示的VPSCATTER指令的形式仅是此指令可采取的多种形式的示例。在其他实施例中,VPSCATTER指令可以采取各种其他形式中的任何一种,其中,指令修饰符值和指令参数值的不同组合包括在指令中或者在调用VPSCATTER指令时被指定。
图23展示了根据本公开的实施例的用于执行基于通道的跨步分散操作的示例方法2300。方法2300可以由图1至图22中所示的元件中的任何一个来实施。方法2300可以由任何合适的标准来发起并且可以在任何合适的点来发起操作。在一个实施例中,方法2300可以在2305处发起操作。方法2300可以包括比所展示的这些步骤更多或更少的步骤。此外,方法2300可以按照与下文所展示的那些顺序不同的顺序来执行其步骤。方法2300可以在任何合适的步骤处终止。此外,方法2300可以在任何合适的步骤处重复操作。方法2300可以采用与方法2300中的其他步骤并行的方式或与其他方法的步骤并行的方式来执行其步骤中的任何一个。而且,可以多次执行方法2300以便进行多次基于通道的跨步分散操作。
在2305处,在一个实施例中,可以接收并解码用于执行基于通道的跨步分散操作的指令。在2310处,可以将所述指令以及所述指令的一个或多个参数引导至SIMD执行单元以供执行。在一些实施例中,所述指令参数可以包括:包含紧缩数据的源向量寄存器的标识符、间接标识存储器中的多个经索引目的地位置的SIB型存储器寻址操作数、由所述紧缩数据表示的每个数据结构中的数据元素的尺寸的指示、由所述紧缩数据表示的每个数据结构中的数据元素的数量的指示、标识特定掩码寄存器的参数、或者指定掩码类型的参数。
在2315处,可以从源向量寄存器中的通道中提取数据结构的第一元素。在2320处,如果确定在包含所述数据结构的数据元素的源向量寄存器中存在更多通道,则在2325处,可以从源向量寄存器中的下一通道中提取所述数据结构的下一元素。在一个实施例中,可以将2325中展示的操作重复一次或多次,以便从其驻留在源向量寄存器内的对应通道中提取数据结构的所有元素。如果(在2320处)确定源向量寄存器中不存在包含数据结构的数据元素的附加通道,并且如果(在2330处)确定针对所述通道或数据结构置位的目的地掩码位被置位或者尚未针对基于通道的跨步分散操作指定掩码,则在2335处,可以将数据结构的所提取数据元素存储在存储器中的连续目的地位置中,所述连续目的地位置以根据基地址以及此数据结构的索引寄存器元素而计算的位置开始。例如,在所述指令的存储器操作数中标识的索引寄存器的第一元素可以包含有待用作到存储器中的连续目的地位置中的由基于通道的跨步存储指令汇编的第一数据结构的数据元素将被写入到的第一位置中的索引的值。
如果(在2320处)确定源向量寄存器中不存在包含数据结构的数据元素的附加通道,如果(在2330处)确定针对所述通道或数据结构置位的目的地掩码位未被置位,并且如果(在2340处)确定指定了零掩码,则在2345处,可以将零存储在存储器中在其他情况下会存储所述数据结构的所提取数据元素的连续目的地位置中。如果(在2320处)确定源向量寄存器中不存在包含数据结构的数据元素的附加通道,如果(在2330处)确定针对所述通道或数据结构置位的目的地掩码位未被置位,并且如果(在2340处)确定未指定零掩码(例如,如果指定了合并掩码,或者既未指定零掩码又未指定合并掩码),则在2350处,可以保持当前存储在在其他情况下会存储所述数据结构的所提取数据元素的连续目的地位置中的值。
虽然源向量寄存器的每条通道中存在一个或多个附加数据结构的数据元素(如在2360处确定的),但是方法2300可以针对每个附加数据结构在2315处重复开始。在所述指令的存储器操作数中标识的索引寄存器的连续元素可以包含有待用作到存储器中的连续目的地位置中由基于通道的跨步存储指令汇编的每个连续数据结构的数据元素被写入到的第一连续目的地位置中的索引的对应值。例如,索引寄存器的第二元素可以包含有待用作到存储器的连续目的地位置中由基于通道的跨步存储指令汇编的第二数据结构的数据元素被写入到的第一连续目的地位置中的索引的值,索引寄存器的第三元素可以包含有待用作到存储器中连续目的地位置中由基于通道的跨步存储指令汇编的第三数据结构的数据元素被写入到的第一连续目的地位置中的索引的值,依此类推。一旦源向量寄存器的通道中不存在任何附加数据结构的数据元素,就可以在2370处引退所述指令。
在本公开的实施例中,向量寄存器可以在调用VPSCATTER指令之前预加载有紧缩数据元素。在一个实施例中,针对VPSCATTER指令,可以调用一条或多条其他向量指令来加载源向量寄存器。下文的示例伪码展示了使用VPSCATTER指令来将四个4D结构连续地存储在存储器中,其中数据元素来自四个不同的XMM寄存器。
VPINSERTI32x4zmm5、zmm5、xmm1、0
VPINSERTI32x4zmm5、zmm5、xmm2、1
VPINSERTI32x4zmm5、zmm5、xmm3、2
VPINSERTI32x4zmm5、zmm5、xmm4、3
//zmm5=x1x2x3x4y1y2y3y4z1z2z3z4w1w2w3w4
VPSCATTER4D zmm5、[vm32]
在此示例中,四条向量插入指令用于紧缩扩展向量寄存器(ZMM5),其中数据元素来自四个源向量寄存器XMM1、XMM2、XMM3和XMM4)。更具体地,这些向量插入指令分别用于将来自寄存器XMM1的四个32位X值紧缩成ZMM5的最低有效128位,将来自寄存器XMM2的四个32位Y值紧缩成ZMM5的次最低顺序128位,将来自寄存器XMM3的四个32位Z值紧缩成ZMM5的次最低顺序128位,并且将来自寄存器XMM4的四个32位W值紧缩成ZMM5的最高有效128位。一旦ZMM5寄存器已经紧缩有这些数据元素,其就可以用作针对VPSCATTER4D指令的源寄存器。VPSCATTER指令的VPSCATTER4D形式指定了源向量寄存器中存在四条通道并且每个数据元素为32位四字。调用VPSCATTER4D指令包括作为针对此指令的源寄存器的ZMM5寄存器的标识符。调用VPSCATTER4D指令还包括间接标识存储器中的多个经索引目的地位置的SIB型存储器寻址操作数[vm32]。在此示例中,执行VPSCATTER4D指令可以将与四个XYZW数据结构相对应的数据元素置于其原始XYZW格式。例如,执行VPSCATTER4D指令可以使得将表示四个数据结构的数据写入存储器,以使得针对所述数据结构中的每一个将数据结构的四个元素(例如,X值、Y值、Z值和W值)存储在存储器中的连续位置中,所述连续位置以其地址是使用编码在SIB型存储器寻址操作数[vm32]中的信息而计算的位置开始。
图24展示了根据本公开的实施例的用于利用基于通道的跨步分散操作(诸如图23中所展示的基于通道的跨步分散操作)对来自对应不同源的不同类型的数据元素进行置换的示例方法2400。在此示例方法中,源向量寄存器预加载有来自四个其他向量寄存器的紧缩数据元素,在此之后调用基于通道的跨步分散操作以便置换所述数据元素并将其写出到存储器。方法2400可以由图1至图22中所示的元件中的任何一个来实施。方法2400可以由任何合适的标准来发起并且可以在任何合适的点来发起操作。在一个实施例中,方法2400可以在2405处发起操作。方法2400可以包括比所展示的这些步骤更多或更少的步骤。此外,方法2400可以按照与下文所展示的那些顺序不同的顺序来执行其步骤。方法2400可以在任何合适的步骤处终止。此外,方法2400可以在任何合适的步骤处重复操作。方法2400可以采用与方法2400中的其他步骤并行的方式或与其他方法的步骤并行的方式来执行其步骤中的任何一个。而且,可以多次执行方法2400以便利用基于通道的跨步分散操作来操纵表示多个数据结构的数据元素的数据。
在2405处,在一个实施例中,可以开始执行包括一条或多条扩展向量指令的指令流。在2410处,向量寄存器的最低顺序部分可以加载有给定类型的两个或更多个数据元素。每个数据元素可以表示包含不同类型的多个数据元素的对应数据结构的相似分量。在一个实施例中,可以将所述数据元素从通用寄存器加载到所述向量寄存器中。在另一实施例中,可以将所述数据元素从另一向量寄存器加载到所述向量寄存器中。在又另一实施例中,可以将所述数据元素从存储器加载到所述向量寄存器中。
如果在2415处确定数据结构中存在更多种元素类型,则在2420处,向量寄存器的次最低顺序部分可以加载有另一种类型的两个或更多个数据元素。另一类型的每个数据元素可以表示所述数据结构中的对应一个数据结构的相似分量。如果(或者一旦)在2415处确定数据结构中不存在附加元素类型,则所述方法可以在2425处继续。
在2425处,所述方法可以包括:将索引寄存器中具有针对由已经预加载的数据元素表示的数据结构之一的对应索引值的多个元素中的每一个加载到向量寄存器中。所述方法可以(可选地)包括将表示存储器中的基地址的值加载到基地址寄存器中。在2430处,可以执行基于通道的跨步分散操作以便将向量寄存器的内容存储在存储器中,以使得将多个数据结构中的每一个的数据元素写入所述存储器中的连续位置,所述连续位置以根据基地址和/或针对那个数据结构的索引寄存器的对应元素而计算的对应位置开始。
虽然指令流中存在更多的指令(如在步骤2435处确定的),但是可以执行指令流中遇到的每条附加指令。在不同的实施例中,执行附加指令可以或者可以不包括:为向量寄存器加载表示多个数据结构的数据元素的紧缩数据,并且执行基于通道的跨步分散操作。一旦指令流中不存在附加指令(如在步骤2435处确定的),则所述方法可以终止。
虽然若干示例描述了在扩展向量寄存器(ZMM寄存器)中存储的紧缩数据元素上进行操作的VPSCATTER指令的形式,但是在其他实施例中,这些指令可以在具有少于512位的向量寄存器中存储的紧缩数据元素上进行操作。例如,如果针对VPSCATTER指令的源向量包括256位或更少,则所述VPSCATTER指令可以在YMM寄存器或XMM寄存器上进行操作。
在以上所述的若干示例中,每种分量类型的数据元素相对较小(例如,32位),并且存在足够少的数据元素以使得所有数据元素在被紧缩到将成为VPSCATTER指令的源向量寄存器的ZMM寄存器中之前可以存储在单个XMM寄存器中。在其他实施例中,可以存在每种分量类型的足够数据元素,以使得(根据数据元素的尺寸)其可以填满YMM寄存器或整个ZMM寄存器。例如,可以存在512位尺寸的值、512位尺寸的Y值,依此类推。在一个实施例中,所产生数据结构的对应子集的组分可以紧缩到多个其他ZMM寄存器中的每一个寄存器中,并且可以执行多条VPSCATTER4D指令以便将数据结构存储在存储器中。例如,如果ZMM1保持十六个XYZW数据结构的X值,则ZMM2保持Y值,ZMM3保持Z值,并且ZMM4保持W值;前四个数据结构的数据元素可以紧缩到ZMM5寄存器中,接下来的四个数据结构的数据元素可以紧缩到ZMM6寄存器中,再接下来的四个数据结构的数据元素可以紧缩到ZMM7寄存器中,并且最后四个数据结构的数据元素可以紧缩到ZMM8寄存器中。一旦ZMM5-ZMM8已经紧缩有这些数据结构的数据元素,就可以将VPSCATTER4D指令调用四次以便将ZMM5-ZMM8的内容写出到存储器。在另一示例中,所产生数据结构的不同子集的组分可以一次紧缩到一个单个ZMM寄存器中,在其之间可以执行VPSCATTER4D指令以便将数据结构的每个子集存储在存储器中。
如以上示例所展示的,不同于从源操作数获取数据并将其存储在存储器中保持不变的标准存储指令,本文中描述的VPSCATTER操作可以用于置换向量寄存器内表示数据结构的不同分量的数据元素,从而使得所述数据元素按照识别数据元素与其中是分量的数据结构之间的顺序存储在存储器中。以上若干示例描述了使用VPSCATTER指令将表示多个数据结构(诸如稀疏阵列)的组分的数据元素存储在存储器中。在其他实施例中,这些基于通道的跨步分散操作可以更一般地用于从向量寄存器的不同部分(通道)中提取紧缩数据元素,并且在将向量寄存器的内容存储到存储器时根据所述数据元素被提取的通道对所述数据元素进行置换,无论所述数据元素如何(或者甚至是否)彼此相关。
本文中公开的机制的实施例可以以硬件、软件、固件或这些实施途径的组合来实施。本公开的实施例可以被实施为在可编程系统上执行的计算机程序或程序代码,所述可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置、以及至少一个输出装置。
可以将程序代码应用于输入指令以执行在此描述的功能并生成输出信息。所述输出信息可以以已知的方式应用于一个或多个输出装置。为了本申请的目的,处理系统可以包括具有处理器的任何系统,如例如;数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、或微处理器。
程序代码可以以高级程序或面向对象的编程语言来实施,以与处理系统通信。如果需要,程序代码还可以以汇编或机器语言实施。事实上,在此描述的机制的范围不限于任何特定的编程语言。在任何情况下,所述语言可以是编译或解释语言。
可以由机器可读介质上所存储的表示性指令来实施至少一个实施例的一个或多个方面,所述指令代表处理器内的各种逻辑,所述指令当被机器读取时使所述机器制作用于执行本文中所描述的技术的逻辑。这种表示(被称为“IP核”)可以被存储在有形的机器可读介质上并提供给各顾客或制造设施以加载至实际制作所述逻辑或处理器的制作机器中。
这种机器可读存储介质可以包括但不限于:由机器或装置制造或形成的制品的非暂态有形安排,包括如硬盘的存储介质;任何其他类型的盘,包括软盘、光盘、致密盘只读存储器(CD-ROM)、可重写致密盘(CD-RW)和磁光盘;半导体装置,比如,只读存储器(ROM);随机存取存储器(RAM),比如,动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM);可擦除可编程只读存储器(EPROM);闪存;电可擦除可编程只读存储器(EEPROM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
因此,本公开的实施例还可以包括包含指令或包含设计数据(比如硬件描述语言(HDL))的非暂态有形机器可读介质,所述非暂态有形机器可读介质限定本文中描述的结构、电路、设备、处理器和/或系统特征。这类实施例也可以被称为程序产品。
在一些情况下,可以使用指令转换器将指令从源指令集转换为目标指令集。例如,指令转换器可以转换(例如,使用静态二进制转换、包括动态编译的动态二进制转换)、变形、仿真或以其他方式将指令转换为有待由核处理的一个或多个其他指令。可以在软件、硬件、固件或其组合中实施指令转换器。指令转换器可以处于处理器上、处理器外、或者部分地处于处理器上并且部分地处于处理器外。
因此,公开了用于执行根据至少一个实施例的一条或多条指令的技术。虽然已经描述并在附图中示出了某些示例性实施例,但应当理解的是,此类实施例仅是说明性的并且不限制其他实施例,并且这类实施例不限于所示和所描述的特定构造和安排,因为在研究本公开时本领域普通技术人员将想到各种其他修改。在发展迅速且无法轻易预见进一步改进的此技术领域中,在不违背本公开的原理或所附权利要求书的范围的情况下,在技术进步的帮助下,所公开的实施例在安排和细节上可轻易更改。
本公开的一些实施例包括一种处理器。在这些实施例的至少一些实施例中,所述处理器可以包括:前端,用于接收指令;解码器,用于解码所述指令;核,用于执行所述指令;以及引退单元,用于引退所述指令。为了执行所述指令,所述核可以包括源向量寄存器,所述源向量寄存器用于将数据元素存储在所述源向量寄存器内的至少两条通道中,其中,每条通道可以存储至少两个数据元素。结合上述实施例中的任何实施例,所述核可以包括:第一逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第一数据元素;第二逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第二数据元素;第三逻辑,用于在目的地向量中将有待从第二通道中提取的所述第一数据元素放置在有待从第一通道中提取的所述第一数据元素旁边;以及第四逻辑,用于在所述目的地向量中将有待从第二通道中提取的所述第二数据元素放置在有待从第一通道中提取的所述第二数据元素旁边。在上述实施例中的任何实施例中,有待从第一通道中提取的所述第一数据元素以及有待从第二通道中提取的所述第一数据元素可以表示有待存储在存储器中的连续位置中的第一数据元素集合中的对应分量,并且有待从第一通道中提取的所述第二数据元素以及有待从第二通道中提取的所述第二数据元素可以表示有待存储在所述存储器中的连续位置中的第二数据元素集合中的对应分量。结合上述实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于将所述目的地向量存储到所述存储器中,所述第五逻辑可以包括:第六逻辑,用于根据所述指令中指定的索引寄存器中的第一元素的值来计算所述存储器中开始存储所述第一数据元素集合的第一位置;以及第七逻辑,用于根据所述索引寄存器中的第二元素的值来计算所述存储器中开始存储所述第二数据元素集合的第二位置。在上述实施例中的任何实施例中,计算所述存储器中的所述第一位置可以进一步取决于所述指令中指定的基地址寄存器的值,并且计算所述存储器中的所述第二位置可以进一步取决于所述指令中指定的所述基地址寄存器的所述值。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取至少一个附加数据元素;以及第九逻辑,用于在所述目的地向量中将从第一通道和第二通道中的相同位置中提取到的每对数据元素放置成彼此相邻。从第一通道和第二通道中的相同位置中提取到的每对数据元素可以表示有待存储在所述存储器中的连续位置中的附加数据元素集合。在上述实施例中的任何实施例中,所述源向量寄存器可以包括除第一通道和第二通道之外的至少一条附加通道。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的每条附加通道中提取对应第一数据元素。从每条附加通道中提取到的所述第一数据元素可以表示所述第一数据元素集合的附加分量。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第三数据元素;以及第九逻辑,用于在所述目的地向量中将有待从第二通道中提取的所述第三数据元素放置在有待从第一通道中提取的所述第三数据元素旁边。有待从第一通道中提取的所述第三数据元素以及有待从第二通道中提取的所述第三数据元素可以表示有待存储在所述存储器中的连续位置中的第三数据元素集合中的对应分量。在上述实施例中的任何实施例中,所述源向量寄存器可以将所述数据元素存储在所述源向量寄存器内的至少三条通道中。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的所述三条通道中的第三条通道中提取对应第一数据元素;以及第九逻辑,用于在所述目的地向量中将有待从所述第三通道中提取的所述第一数据元素放置在有待从第二通道中提取的所述第一数据元素旁边。有待从所述第三通道中提取的所述第一数据元素可以表示所述第一数据元素集合的第三分量。在上述实施例中的任何实施例中,存储在所述源向量寄存器内的第一通道中的所述数据元素可以表示属于第一类型的两个或更多个数据元素,并且存储在所述源向量寄存器内的第二通道中的所述数据元素可以表示属于不同于所述第一类型的第二类型的两个或更多个数据元素。在上述实施例中的任何实施例中,所述第一数据元素集合可以表示有待存储在所述存储器中的第一数据结构的分量,并且所述第二数据元素集合可以表示有待存储在所述存储器中的第二数据结构的分量。结合上述实施例中的任何实施例,所述核可以进一步包括第八逻辑,所述第八逻辑用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,对应的数据元素集合将被写入到所述存储器中的连续位置;并且针对在所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被写入所述存储器中的连续位置的对应数据元素集合将不被写入到所述存储器。结合上述实施例中的任何实施例,所述核可以包括第八逻辑,所述第八逻辑用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得;针对在所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作用零来替代在所述目的地向量中将被放置成彼此相邻的两个或更多个数据元素。结合上述实施例中的任何实施例,所述核可以包括第八逻辑,所述第八逻辑用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保持在所述目的地向量中将被放置成彼此相邻的两个或更多个数据元素在其他情况下会被写入到的存储器位置处的当前值。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于根据针对所述指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的数据元素的数量。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于根据针对所述指令指定的参数值来确定所述源向量寄存器内的从其中提取数据元素的通道的数量。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于根据针对所述指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的所述数据元素的尺寸。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于在所述指令的执行之前将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第一通道中;第九逻辑,用于在所述指令的执行之前将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第二通道中;第十逻辑,用于在所述指令的执行之前将第一索引值加载到所述指令中指定的所述索引寄存器中的所述第一元素中;以及第十一逻辑,用于在所述指令的执行之前将第二索引值加载到所述指令中指定的所述索引寄存器中的所述第二元素中。结合上述实施例中的任何实施例,所述核可以包括用于实施对所述指令的执行的单指令多数据(SIMD)协处理器。
本公开的一些实施例包括一种方法。在这些实施例中的至少一些实施例中,所述方法可以包括在处理器中:接收第一指令;解码所述第一指令;执行所述第一指令;以及引退所述第一指令。执行所述第一指令可以包括:从源向量寄存器内的两条通道中的每一条通道中提取对应第一数据元素;从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第二数据元素;在目的地向量中将从第二通道中提取到的所述第一数据元素放置在从第一通道中提取到的所述第一数据元素旁边;以及在所述目的地向量中将从第二通道中提取到的所述第二数据元素放置在从第一通道中提取到的所述第二数据元素旁边。从第一通道中提取到的所述第一数据元素以及从第二通道中提取到的所述第一数据元素可以表示有待存储在存储器中的连续位置中的第一数据元素集合中的对应分量。从第一通道中提取到的所述第二数据元素以及从第二通道中提取到的所述第二数据元素可以表示有待存储在所述存储器中的连续位置中的第二数据元素集合中的对应分量。结合上述实施例中的任何实施例,所述方法可以包括:将所述目的地向量存储到所述存储器中。将所述目的地向量存储到所述存储器可以包括:根据所述第一指令中指定的索引寄存器中的第一元素的值来计算所述存储器中开始存储所述第一数据元素集合的第一位置;以及根据所述第一指令中指定的所述索引寄存器中的第二元素的值来计算所述存储器中开始存储所述第二数据元素集合的第二位置。在上述实施例中的任何实施例中,计算所述存储器中的所述第一位置可以进一步取决于所述第一指令中指定的基地址寄存器的值,并且计算所述存储器中的所述第二位置可以进一步取决于所述第一指令中指定的所述基地址寄存器的所述值。结合上述实施例中的任何实施例,所述方法可以包括:从所述源向量寄存器内的所述两条通道中的每一条通道中提取至少一个附加数据元素;以及在所述目的地向量中将从第一通道和第二通道中的相同位置中提取到的每对数据元素放置成彼此相邻。从第一通道和第二通道中的相同位置中提取到的每对数据元素可以表示有待存储在所述存储器中的连续位置中的附加数据元素集合。结合上述实施例中的任何实施例,所述方法可以包括:从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第三数据元素;以及在所述目的地向量中将有待从第二通道中提取的所述第三数据元素放置在有待从第一通道中提取的所述第三数据元素旁边。有待从第一通道中提取的所述第三数据元素以及有待从第二通道中提取的所述第三数据元素可以表示有待存储在所述存储器中的连续位置中的第三数据元素集合中的对应分量。在上述实施例中的任何实施例中,所述源向量寄存器可以包括除第一通道和第二通道之外的至少一条附加通道。结合上述实施例中的任何实施例,所述方法可以包括:从所述源向量寄存器内的每条附加通道中提取对应第一数据元素。从每条附加通道中提取到的所述第一数据元素可以表示所述第一数据元素集合的附加分量。在上述实施例中的任何实施例中,所述源向量寄存器可以将所述数据元素存储在所述源向量寄存器内的至少三条通道中。结合上述实施例中的任何实施例,所述方法可以包括:从所述源向量寄存器内的所述三条通道中的第三条通道中提取对应第一数据元素;以及在所述目的地向量中将有待从所述第三通道中提取的所述第一数据元素放置在有待从第二通道中提取的所述第一数据元素旁边。有待从所述第三通道中提取的所述第一数据元素可以表示所述第一数据元素集合的第三分量。结合上述实施例中的任何实施例,所述方法可以包括:在将所述目的地向量存储到所述存储器中之前向所述目的地向量应用掩码操作。应用所述掩码操作可以包括:针对在所述第一指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,将对应数据元素集合写入到所述存储器中的连续位置;以及针对在所述第一指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,禁止向所述存储器中写入在其他情况下会被写入所述存储器中的连续位置的对应数据元素集合。结合上述实施例中的任何实施例,所述方法可以包括:在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作用零来替代在所述目的地向量中被放置成彼此相邻的两个或更多个数据元素。结合上述实施例中的任何实施例,所述方法可以包括:在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保持在所述目的地向量中被放置成彼此相邻的两个或更多个数据元素在其他情况下会被写入到的存储器位置处的当前值。结合上述实施例中的任何实施例,所述方法可以包括:在接收所述第一指令之前,执行第二指令,包括:将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第一通道中。结合上述实施例中的任何实施例,所述方法可以包括:在接收所述第一指令之前,执行第三指令,包括:将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第二通道中。结合上述实施例中的任何实施例,所述方法可以包括:在接收所述第一指令之前,执行第四指令,包括:将第一索引值加载到所述第一指令中指定的所述索引寄存器中的所述第一元素中;以及将第二索引值加载到所述第一指令中指定的所述索引寄存器中的所述第二元素中。结合上述实施例中的任何实施例,所述方法可以包括:根据针对所述第一指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的数据元素的数量。结合上述实施例中的任何实施例,所述方法可以包括:根据针对所述第一指令指定的参数值来确定所述源向量寄存器内的从其中提取数据元素的通道的数量。结合上述实施例中的任何实施例,所述方法可以包括:根据针对所述第一所述指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的所述数据元素的尺寸。在上述实施例中的任何实施例中,所述处理器可以包括实施对所述第一指令的执行的单指令多数据(SIMD)协处理器。
本公开的一些实施例包括一种系统。在这些实施例的至少一些实施例中,所述系统可以包括:前端,用于接收指令;解码器,用于解码所述指令;核,用于执行所述指令;以及引退单元,用于引退所述指令。为了执行所述指令,所述核可以包括源向量寄存器,所述源向量寄存器用于将数据元素存储在所述源向量寄存器内的至少两条通道中,其中,每条通道可以存储至少两个数据元素。结合上述实施例中的任何实施例,所述核可以包括:第一逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第一数据元素;第二逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第二数据元素;第三逻辑,用于在目的地向量中将有待从第二通道中提取的所述第一数据元素放置在有待从第一通道中提取的所述第一数据元素旁边;以及第四逻辑,用于在所述目的地向量中将有待从第二通道中提取的所述第二数据元素放置在有待从第一通道中提取的所述第二数据元素旁边。在上述实施例中的任何实施例中,有待从第一通道中提取的所述第一数据元素以及有待从第二通道中提取的所述第一数据元素可以表示有待存储在存储器中的连续位置中的第一数据元素集合中的对应分量,并且有待从第一通道中提取的所述第二数据元素以及有待从第二通道中提取的所述第二数据元素可以表示有待存储在所述存储器中的连续位置中的第二数据元素集合中的对应分量。结合上述实施例中的任何实施例,所述核可以包括第五逻辑,所述第五逻辑用于将所述目的地向量存储到所述存储器中,所述第五逻辑可以包括:第六逻辑,用于根据所述指令中指定的索引寄存器中的第一元素的值来计算所述存储器中开始存储所述第一数据元素集合的第一位置;以及第七逻辑,用于根据所述索引寄存器中的第二元素的值来计算所述存储器中开始存储所述第二数据元素集合的第二位置。在上述实施例中的任何实施例中,计算所述存储器中的所述第一位置可以进一步取决于所述指令中指定的基地址寄存器的值,并且计算所述存储器中的所述第二位置可以进一步取决于所述指令中指定的所述基地址寄存器的所述值。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取至少一个附加数据元素;以及第九逻辑,用于在所述目的地向量中将从第一通道和第二通道中的相同位置中提取到的每对数据元素放置成彼此相邻。从第一通道和第二通道中的相同位置中提取到的每对数据元素可以表示有待存储在所述存储器中的连续位置中的附加数据元素集合。在上述实施例中的任何实施例中,所述源向量寄存器可以包括除第一通道和第二通道之外的至少一条附加通道。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的每条附加通道中提取对应第一数据元素。从每条附加通道中提取到的所述第一数据元素可以表示所述第一数据元素集合的附加分量。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第三数据元素;以及第九逻辑,用于在所述目的地向量中将有待从第二通道中提取的所述第三数据元素放置在有待从第一通道中提取的所述第三数据元素旁边。有待从第一通道中提取的所述第三数据元素以及有待从第二通道中提取的所述第三数据元素可以表示有待存储在所述存储器中的连续位置中的第三数据元素集合中的对应分量。在上述实施例中的任何实施例中,所述源向量寄存器可以将所述数据元素存储在所述源向量寄存器内的至少三条通道中。结合上述实施例中的任何实施例,所述核可以进一步包括:第八逻辑,用于从所述源向量寄存器内的所述三条通道中的第三条通道中提取对应第一数据元素;以及第九逻辑,用于在所述目的地向量中将有待从所述第三通道中提取的所述第一数据元素放置在有待从第二通道中提取的所述第一数据元素旁边。有待从所述第三通道中提取的所述第一数据元素可以表示所述第一数据元素集合的第三分量。在上述实施例中的任何实施例中,存储在所述源向量寄存器内的第一通道中的所述数据元素可以表示属于第一类型的两个或更多个数据元素,并且存储在所述源向量寄存器内的第二通道中的所述数据元素可以表示属于不同于所述第一类型的第二类型的两个或更多个数据元素。在上述实施例中的任何实施例中,所述第一数据元素集合可以表示有待存储在所述存储器中的第一数据结构的分量,并且所述第二数据元素集合可以表示有待存储在所述存储器中的第二数据结构的分量。结合上述实施例中的任何实施例,所述核可以进一步包括第八逻辑,所述第八逻辑用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,对应的数据元素集合将被写入到所述存储器中的连续位置;并且针对在所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被写入所述存储器中的连续位置的对应数据元素集合将不被写入到所述存储器。结合上述实施例中的任何实施例,所述核可以包括第八逻辑,所述第八逻辑用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得;针对在所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作用零来替代在所述目的地向量中将被放置成彼此相邻的两个或更多个数据元素。结合上述实施例中的任何实施例,所述核可以包括第八逻辑,所述第八逻辑用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保持在所述目的地向量中将被放置成彼此相邻的两个或更多个数据元素在其他情况下会被写入到的存储器位置处的当前值。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于根据针对所述指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的数据元素的数量。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于根据针对所述指令指定的参数值来确定所述源向量寄存器内的从其中提取数据元素的通道的数量。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于根据针对所述指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的所述数据元素的尺寸。结合上述实施例中的任何实施例,所述核可以包括:第八逻辑,用于在所述指令的执行之前将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第一通道中;第九逻辑,用于在所述指令的执行之前将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第二通道中;第十逻辑,用于在所述指令的执行之前将第一索引值加载到所述指令中指定的所述索引寄存器中的所述第一元素中;以及第十一逻辑,用于在所述指令的执行之前将第二索引值加载到所述指令中指定的所述索引寄存器中的所述第二元素中。结合上述实施例中的任何实施例,所述核可以包括用于实施对所述指令的执行的单指令多数据(SIMD)协处理器。
本公开的一些实施例包括一种用于执行指令的系统。在这些实施例的至少一些实施例中,所述系统可以包括:用于接收第一指令的装置、用于解码所述第一指令的装置、用于执行所述第一指令的装置、以及用于引退所述第一指令的装置。用于执行所述第一指令的所述装置可以包括:用于从源向量寄存器内的两条通道中的每一条通道中提取对应第一数据元素的装置;用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第二数据元素的装置;用于在目的地向量中将从第二通道中提取到的所述第一数据元素放置在从第一通道中提取到的所述第一数据元素旁边的装置;以及用于在所述目的地向量中将从第二通道中提取到的所述第二数据元素放置在从第一通道中提取到的所述第二数据元素旁边的装置。从第一通道中提取到的所述第一数据元素以及从第二通道中提取到的所述第一数据元素可以表示有待存储在存储器中的连续位置中的第一数据元素集合中的对应分量。从第一通道中提取到的所述第二数据元素以及从第二通道中提取到的所述第二数据元素可以表示有待存储在所述存储器中的连续位置中的第二数据元素集合中的对应分量。结合上述实施例中的任何实施例,所述系统可以包括:用于将所述目的地向量存储到所述存储器中的装置。用于将所述目的地向量存储到所述存储器中的所述装置可以包括:用于根据所述第一指令中指定的索引寄存器中的第一元素的值来计算所述存储器中开始存储所述第一数据元素集合的第一位置的装置;以及用于根据所述第一指令中指定的所述索引寄存器中的第二元素的值来计算所述存储器中开始存储所述第二数据元素集合的第二位置的装置。在上述实施例中的任何实施例中,计算所述存储器中的所述第一位置可以进一步取决于所述第一指令中指定的基地址寄存器的值,并且计算所述存储器中的所述第二位置可以进一步取决于所述第一指令中指定的所述基地址寄存器的所述值。结合上述实施例中的任何实施例,所述系统可以包括:用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取至少一个附加数据元素的装置;以及用于在所述目的地向量中将从第一通道和第二通道中的相同位置中提取到的每对数据元素放置成彼此相邻的装置。从第一通道和第二通道中的相同位置中提取到的每对数据元素可以表示有待存储在所述存储器中的连续位置中的附加数据元素集合。结合上述实施例中的任何实施例,所述系统可以包括:用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第三数据元素的装置;以及用于在所述目的地向量中将有待从第二通道中提取的所述第三数据元素放置在有待从第一通道中提取的所述第三数据元素旁边的装置。有待从第一通道中提取的所述第三数据元素以及有待从第二通道中提取的所述第三数据元素可以表示有待存储在所述存储器中的连续位置中的第三数据元素集合中的对应分量。在上述实施例中的任何实施例中,所述源向量寄存器可以包括除第一通道和第二通道之外的至少一条附加通道。结合上述实施例中的任何实施例,所述系统可以包括:用于从所述源向量寄存器内的每条附加通道中提取对应第一数据元素的装置。从每条附加通道中提取到的所述第一数据元素可以表示所述第一数据元素集合的附加分量。在上述实施例中的任何实施例中,所述源向量寄存器可以将所述数据元素存储在所述源向量寄存器内的至少三条通道中。结合上述实施例中的任何实施例,所述系统可以包括:用于从所述源向量寄存器内的所述三条通道中的第三条通道中提取对应第一数据元素的装置;以及用于在所述目的地向量中将有待从所述第三通道中提取的所述第一数据元素放置在有待从第二通道中提取的所述第一数据元素旁边的装置。有待从所述第三通道中提取的所述第一数据元素可以表示所述第一数据元素集合的第三分量。结合上述实施例中的任何实施例,所述系统可以包括:用于在将所述目的地向量存储到所述存储器中之前向所述目的地向量应用掩码操作的装置。应用所述掩码操作可以包括:针对在所述第一指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,将对应数据元素集合写入到所述存储器中的连续位置;以及针对在所述第一指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,禁止向所述存储器中写入在其他情况下会被写入所述存储器中的连续位置的对应数据元素集合。结合上述实施例中的任何实施例,所述系统可以包括用于进行以下操作的装置:在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得针对在所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作用零来替代在所述目的地向量中被放置成彼此相邻的两个或更多个数据元素。结合上述实施例中的任何实施例,所述系统可以包括用于进行以下操作的装置:在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作,从而使得:针对在所述第一指令中标识的掩码寄存器中未被置位的每个位,所述掩码操作保持在所述目的地向量中被放置成彼此相邻的两个或更多个数据元素在其他情况下会被写入到的存储器位置处的当前值。结合上述实施例中的任何实施例,所述系统可以包括:用于在接收所述第一指令之前执行第二指令的装置。用于执行所述第二指令的所述装置可以包括:用于将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第一通道中的装置。结合上述实施例中的任何实施例,所述系统可以包括:用于在接收所述第一指令之前执行第三指令的装置。用于执行所述第三指令的所述装置可以包括:用于将所述对应第一数据元素和所述对应第二数据元素加载到所述源向量寄存器内的第二通道中的装置。结合上述实施例中的任何实施例,所述系统可以包括:用于在接收所述第一指令之前执行第四指令的装置。用于执行所述第四指令的所述装置可以包括:用于将第一索引值加载到所述第一指令中指定的所述索引寄存器中的所述第一元素中的装置;以及用于将第二索引值加载到所述第一指令中指定的所述索引寄存器中的所述第二元素中的装置。结合上述实施例中的任何实施例,所述系统可以包括:用于根据针对所述第一指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的数据元素的数量的装置。结合上述实施例中的任何实施例,所述系统可以包括:用于根据针对所述第一指令指定的参数值来确定所述源向量寄存器内的从其中提取数据元素的通道的数量的装置。结合上述实施例中的任何实施例,所述系统可以包括:用于根据针对所述第一指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的所述数据元素的尺寸的装置。在上述实施例中的任何实施例中,所述系统可以包括实施对所述第一指令的执行的单指令多数据(SIMD)协处理器。在上述实施例中的任何实施例中,所述系统可以包括处理器和所述存储器。在上述实施例中的任何实施例中,所述系统可以包括向量寄存器堆,所述向量寄存器堆包括所述源向量寄存器。
Claims (25)
1.一种处理器,包括:
前端,用于接收指令;
解码器,用于解码所述指令;
源向量寄存器,用于将数据元素存储在所述源向量寄存器内的至少两条通道中,其中,每条通道用于存储至少两个数据元素;
核,用于执行所述指令,所述核包括:
第一逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第一数据元素;
第二逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第二数据元素;
第三逻辑,用于在目的地向量中将有待从第二通道中提取的所述第一数据元素放置在有待从第一通道中提取的所述第一数据元素旁边;
第四逻辑,用于在所述目的地向量中将有待从第二通道中提取的所述第二数据元素放置在有待从第一通道中提取的所述第二数据元素旁边;
其中:
有待从第一通道中提取的所述第一数据元素以及有待从第二通道中提取的所述第一数据元素表示有待存储在存储器中的连续位置中的第一数据元素集合中的对应分量;并且
有待从第一通道中提取的所述第二数据元素以及有待从第二通道中提取的所述第二数据元素表示有待存储在所述存储器中的连续位置中的第二数据元素集合中的对应分量;
第五逻辑,用于将所述目的地向量存储到所述存储器中,所述第五逻辑包括:
第六逻辑,用于根据所述指令中指定的索引寄存器中的第一元素的值来计算所述存储器中开始存储所述第一数据元素集合的第一位置;以及
第七逻辑,用于根据所述索引寄存器中的第二元素的值来计算所述存储器中开始存储所述第二数据元素集合的第二位置;以及
引退单元,用于引退所述指令。
2.如权利要求1所述的处理器,其中:
计算所述存储器中的所述第一位置进一步取决于所述指令中指定的基地址寄存器的值;并且
计算所述存储器中的所述第二位置进一步取决于所述指令中指定的所述基地址寄存器的所述值。
3.如权利要求1所述的处理器,其中:
所述核进一步包括:
第八逻辑,用于从所述源向量寄存器内的所述两条通道中的每一条通道中提取对应第三数据元素;以及
第九逻辑,用于在所述目的地向量中将有待从第二通道中提取的所述第三数据元素放置在有待从第一通道中提取的所述第三数据元素旁边;并且
有待从第一通道中提取的所述第三数据元素以及有待从第二通道中提取的所述第三数据元素表示有待存储在所述存储器中的连续位置中的第三数据元素集合中的对应分量。
4.如权利要求1所述的处理器,其中:
所述源向量寄存器用于将所述数据元素存储在所述源向量寄存器内的至少三条通道中;
所述核进一步包括:
第八逻辑,用于从所述源向量寄存器内的所述三条通道中的第三条通道中提取对应第一数据元素;以及
第九逻辑,用于在所述目的地向量中将有待从所述第三通道中提取的所述第一数据元素放置在有待从第二通道中提取的所述第一数据元素旁边;并且
有待从所述第三通道中提取的所述第一数据元素表示所述第一数据元素集合的第三分量。
5.如权利要求1所述的处理器,其中:
所述第一数据元素集合表示有待存储在所述存储器中的第一数据结构的分量;并且
所述第二数据元素集合表示有待存储在所述存储器中的第二数据结构的分量。
6.如权利要求1所述的处理器,其中:
所述核进一步包括用于在所述目的地向量被存储到所述存储器中时向所述目的地向量应用掩码操作的第八逻辑;
针对在所述指令中标识的掩码寄存器中被置位的一个或多个位中的每一个,对应数据元素集合将被写入到所述存储器中的连续位置;并且
针对在所述指令中标识的所述掩码寄存器中未被置位的一个或多个位中的每一个,在其他情况下会被写入到所述存储器中的连续位置的对应数据元素集合将不被写入到所述存储器。
7.如权利要求1所述的处理器,其中:
存储在所述源向量寄存器内的第一通道中的所述数据元素表示属于第一类型的两个或更多个数据元素;并且
存储在所述源向量寄存器内的第二通道中的所述数据元素表示属于不同于所述第一类型的第二类型的两个或更多个数据元素。
8.如权利要求1所述的处理器,其中,所述核包括用于实施对所述指令的执行的单指令多数据(SIMD)协处理器。
9.如权利要求1所述的处理器,进一步包括:
第八逻辑,用于根据针对所述指令指定的参数值来确定所述源向量寄存器内的从其中提取数据元素的通道的数量。
10.如权利要求1所述的处理器,进一步包括:
第八逻辑,用于根据针对所述指令指定的参数值来确定有待从所述源向量寄存器内的所述通道中的每一条通道中提取的所述数据元素的尺寸。
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所述的系统,其中:
存储在所述源向量寄存器内的第一通道中的所述数据元素表示属于第一类型的两个或更多个数据元素;并且
存储在所述源向量寄存器内的第二通道中的所述数据元素表示属于不同于所述第一类型的第二类型的两个或更多个数据元素。
25.一种设备,包括用于执行如权利要求11至17所述的方法中的任一种方法的装置。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US14/977,443 US20170177359A1 (en) | 2015-12-21 | 2015-12-21 | Instructions and Logic for Lane-Based Strided Scatter Operations |
US14/977,443 | 2015-12-21 | ||
PCT/US2016/062712 WO2017112177A1 (en) | 2015-12-21 | 2016-11-18 | Instructions and logic for lane-based strided scatter operations |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108369509A true CN108369509A (zh) | 2018-08-03 |
CN108369509B CN108369509B (zh) | 2024-03-08 |
Family
ID=59065089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201680072574.7A Active CN108369509B (zh) | 2015-12-21 | 2016-11-18 | 用于基于通道的跨步分散操作的指令和逻辑 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20170177359A1 (zh) |
EP (1) | EP3394723B1 (zh) |
CN (1) | CN108369509B (zh) |
TW (1) | TWI730016B (zh) |
WO (1) | WO2017112177A1 (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110865882A (zh) * | 2018-08-28 | 2020-03-06 | 清华大学 | 数据处理方法、装置、计算机设备和存储介质 |
CN114840255A (zh) * | 2022-07-04 | 2022-08-02 | 飞腾信息技术有限公司 | 处理数据的方法、装置及设备可读存储介质 |
WO2023015560A1 (en) * | 2021-08-13 | 2023-02-16 | Huawei Technologies Co.,Ltd. | Systems and methods for sparsity-aware vector processing in general purpose cpus |
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 |
GB2564696B (en) * | 2017-07-20 | 2020-02-05 | Advanced Risc Mach Ltd | Register-based complex number processing |
WO2019067334A1 (en) * | 2017-09-29 | 2019-04-04 | Knowles Electronics, Llc | MULTICORDER AUDIO PROCESSOR WITH FLEXIBLE MEMORY ALLOCATION |
US20190272175A1 (en) * | 2018-03-01 | 2019-09-05 | Qualcomm Incorporated | Single pack & unpack network and method for variable bit width data formats for computational machines |
US20200004535A1 (en) * | 2018-06-30 | 2020-01-02 | Intel Corporation | Accelerator apparatus and method for decoding and de-serializing bit-packed data |
US10877925B2 (en) * | 2019-03-18 | 2020-12-29 | Micron Technology, Inc. | Vector processor with vector first and multiple lane configuration |
TWI810262B (zh) * | 2019-03-22 | 2023-08-01 | 美商高通公司 | 用於計算機器的可變位元寬資料格式的單打包和拆包網路及方法 |
US11403256B2 (en) | 2019-05-20 | 2022-08-02 | Micron Technology, Inc. | Conditional operations in a vector processor having true and false vector index registers |
US11507374B2 (en) | 2019-05-20 | 2022-11-22 | Micron Technology, Inc. | True/false vector index registers and methods of populating thereof |
US11340904B2 (en) | 2019-05-20 | 2022-05-24 | Micron Technology, Inc. | Vector index registers |
US11327862B2 (en) | 2019-05-20 | 2022-05-10 | Micron Technology, Inc. | Multi-lane solutions for addressing vector elements using vector index registers |
US10963247B2 (en) * | 2019-05-24 | 2021-03-30 | Texas Instruments Incorporated | Vector floating-point classification |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090172365A1 (en) * | 2007-12-27 | 2009-07-02 | Doron Orenstien | Instructions and logic to perform mask load and store operations |
US20130275729A1 (en) * | 2011-12-22 | 2013-10-17 | Seth Abraham | Packed Data Rearrangement Control Indexes Precursors Generation Processors, Methods, Systems, and Instructions |
US20140181464A1 (en) * | 2012-12-26 | 2014-06-26 | Andrew T. Forsyth | Coalescing adjacent gather/scatter operations |
US20140189321A1 (en) * | 2012-12-31 | 2014-07-03 | Tal Uliel | Instructions and logic to vectorize conditional loops |
CN103999037A (zh) * | 2011-12-23 | 2014-08-20 | 英特尔公司 | 用于响应于单个指令来执行横向相加或相减的系统、装置和方法 |
CN104081337A (zh) * | 2011-12-23 | 2014-10-01 | 英特尔公司 | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 |
CN104137059A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 多寄存器分散指令 |
CN104813277A (zh) * | 2012-12-19 | 2015-07-29 | 英特尔公司 | 用于处理器的功率效率的向量掩码驱动时钟门控 |
Family Cites Families (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
GB2409064B (en) * | 2003-12-09 | 2006-09-13 | Advanced Risc Mach Ltd | A data processing apparatus and method for performing in parallel a data processing operation on data elements |
US7725678B2 (en) * | 2005-02-17 | 2010-05-25 | Texas Instruments Incorporated | Method and apparatus for producing an index vector for use in performing a vector permute operation |
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 |
US20120254591A1 (en) * | 2011-04-01 | 2012-10-04 | Hughes Christopher J | Systems, apparatuses, and methods for stride pattern gathering of data elements and stride pattern scattering of data elements |
US20120278591A1 (en) * | 2011-04-27 | 2012-11-01 | Advanced Micro Devices, Inc. | Crossbar switch module having data movement instruction processor module and methods for implementing the same |
TWI569205B (zh) * | 2012-08-31 | 2017-02-01 | 威盛電子股份有限公司 | 一種微處理器及其操作方法 |
US9378017B2 (en) * | 2012-12-29 | 2016-06-28 | Intel Corporation | Apparatus and method of efficient vector roll operation |
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-21 US US14/977,443 patent/US20170177359A1/en not_active Abandoned
-
2016
- 2016-11-17 TW TW105137676A patent/TWI730016B/zh not_active IP Right Cessation
- 2016-11-18 WO PCT/US2016/062712 patent/WO2017112177A1/en unknown
- 2016-11-18 EP EP16879667.0A patent/EP3394723B1/en active Active
- 2016-11-18 CN CN201680072574.7A patent/CN108369509B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090172365A1 (en) * | 2007-12-27 | 2009-07-02 | Doron Orenstien | Instructions and logic to perform mask load and store operations |
US20130275729A1 (en) * | 2011-12-22 | 2013-10-17 | Seth Abraham | Packed Data Rearrangement Control Indexes Precursors Generation Processors, Methods, Systems, and Instructions |
CN103999037A (zh) * | 2011-12-23 | 2014-08-20 | 英特尔公司 | 用于响应于单个指令来执行横向相加或相减的系统、装置和方法 |
CN104081337A (zh) * | 2011-12-23 | 2014-10-01 | 英特尔公司 | 用于响应于单个指令来执行横向部分求和的系统、装置和方法 |
CN104137059A (zh) * | 2011-12-23 | 2014-11-05 | 英特尔公司 | 多寄存器分散指令 |
CN104813277A (zh) * | 2012-12-19 | 2015-07-29 | 英特尔公司 | 用于处理器的功率效率的向量掩码驱动时钟门控 |
US20140181464A1 (en) * | 2012-12-26 | 2014-06-26 | Andrew T. Forsyth | Coalescing adjacent gather/scatter operations |
US20140189321A1 (en) * | 2012-12-31 | 2014-07-03 | Tal Uliel | Instructions and logic to vectorize conditional loops |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110865882A (zh) * | 2018-08-28 | 2020-03-06 | 清华大学 | 数据处理方法、装置、计算机设备和存储介质 |
CN110865882B (zh) * | 2018-08-28 | 2022-07-08 | 清华大学 | 数据处理方法、装置、计算机设备和存储介质 |
WO2023015560A1 (en) * | 2021-08-13 | 2023-02-16 | Huawei Technologies Co.,Ltd. | Systems and methods for sparsity-aware vector processing in general purpose cpus |
CN114840255A (zh) * | 2022-07-04 | 2022-08-02 | 飞腾信息技术有限公司 | 处理数据的方法、装置及设备可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20170177359A1 (en) | 2017-06-22 |
EP3394723A4 (en) | 2019-07-24 |
TW201730755A (zh) | 2017-09-01 |
EP3394723B1 (en) | 2021-12-01 |
CN108369509B (zh) | 2024-03-08 |
TWI730016B (zh) | 2021-06-11 |
EP3394723A1 (en) | 2018-10-31 |
WO2017112177A1 (en) | 2017-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108369509A (zh) | 用于基于通道的跨步分散操作的指令和逻辑 | |
CN108292215A (zh) | 用于加载-索引和预取-聚集操作的指令和逻辑 | |
TWI731892B (zh) | 用於以通道為基礎的跨步儲存操作之指令及邏輯 | |
CN108369516A (zh) | 用于加载-索引和预取-分散操作的指令和逻辑 | |
CN104321741B (zh) | 双舍入组合浮点乘法和加法 | |
CN103970509B (zh) | 对条件循环进行矢量化的装置、方法、处理器、处理系统以及机器可读介质 | |
CN104484284B (zh) | 用于为安全飞地页面高速缓存提供高级分页能力的指令和逻辑 | |
CN108351779A (zh) | 用于安全指令执行流水线的指令和逻辑 | |
CN108292232A (zh) | 用于加载索引和分散操作的指令和逻辑 | |
CN108139905A (zh) | 用于从持久存储器预取信息的指令和逻辑 | |
CN108369513A (zh) | 用于加载-索引-和-收集操作的指令和逻辑 | |
CN107209722A (zh) | 用于在安全飞地页面高速缓存中使安全飞地的进程分叉和建立子飞地的指令和逻辑 | |
TWI743064B (zh) | 用於取得多重向量元素操作之指令及邏輯 | |
CN107003921A (zh) | 具有有限状态机控制的可重配置测试访问端口 | |
CN105745630B (zh) | 用于在集群宽执行机器中的存储器访问的指令和逻辑 | |
CN104903867B (zh) | 用于将寄存器的内容广播到另一个寄存器的数据元素位置的系统、装置和方法 | |
CN108292229A (zh) | 用于重新出现的相邻聚集的指令和逻辑 | |
CN108351835A (zh) | 用于高速缓存控制操作的指令和逻辑 | |
CN108369571A (zh) | 用于偶数和奇数向量get操作的指令和逻辑 | |
TWI720056B (zh) | 用於設置多重向量元素操作之指令及邏輯 | |
CN107690618A (zh) | 用于提供向量紧缩直方图功能的方法、装置、指令和逻辑 | |
TWI738679B (zh) | 處理器、運算系統及用以執行運算操作之方法 | |
CN108351784A (zh) | 用于在乱序处理器中进行有序处理的指令和逻辑 | |
CN108369518A (zh) | 用于位字段寻址和插入的指令和逻辑 | |
CN108351785A (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 |