CN102103570B - Simd向量的同步化 - Google Patents
Simd向量的同步化 Download PDFInfo
- Publication number
- CN102103570B CN102103570B CN201010619577.2A CN201010619577A CN102103570B CN 102103570 B CN102103570 B CN 102103570B CN 201010619577 A CN201010619577 A CN 201010619577A CN 102103570 B CN102103570 B CN 102103570B
- Authority
- CN
- China
- Prior art keywords
- data element
- memory location
- data
- mask
- elements
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
- 239000013598 vector Substances 0.000 title claims abstract description 36
- 230000015654 memory Effects 0.000 claims abstract description 115
- 238000000034 method Methods 0.000 claims abstract description 25
- 230000008878 coupling Effects 0.000 claims abstract description 21
- 238000010168 coupling process Methods 0.000 claims abstract description 21
- 238000005859 coupling reaction Methods 0.000 claims abstract description 21
- 230000004044 response Effects 0.000 claims abstract description 18
- 238000012545 processing Methods 0.000 claims description 42
- 238000012360 testing method Methods 0.000 claims description 13
- 230000004913 activation Effects 0.000 claims description 6
- 230000000052 comparative effect Effects 0.000 claims 2
- 101000912503 Homo sapiens Tyrosine-protein kinase Fgr Proteins 0.000 description 23
- 102100037226 Nuclear receptor coactivator 2 Human genes 0.000 description 23
- 101000974356 Homo sapiens Nuclear receptor coactivator 3 Proteins 0.000 description 16
- 102100022883 Nuclear receptor coactivator 3 Human genes 0.000 description 16
- 238000010586 diagram Methods 0.000 description 9
- 230000008569 process Effects 0.000 description 9
- 230000000712 assembly Effects 0.000 description 8
- 238000000429 assembly Methods 0.000 description 8
- 238000013500 data storage Methods 0.000 description 6
- 238000009434 installation Methods 0.000 description 4
- 101000602926 Homo sapiens Nuclear receptor coactivator 1 Proteins 0.000 description 3
- 101000651467 Homo sapiens Proto-oncogene tyrosine-protein kinase Src Proteins 0.000 description 3
- 102100027384 Proto-oncogene tyrosine-protein kinase Src Human genes 0.000 description 3
- 239000003795 chemical substances by application Substances 0.000 description 3
- 238000013461 design Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000010076 replication Effects 0.000 description 2
- 230000001360 synchronised effect Effects 0.000 description 2
- 238000013519 translation Methods 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000004891 communication Methods 0.000 description 1
- 239000012141 concentrate Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000008676 import Effects 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
- 230000006386 memory function Effects 0.000 description 1
- 230000005055 memory storage Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000011218 segmentation Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30021—Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/76—Architectures of general purpose stored program computers
- G06F15/80—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors
- G06F15/8007—Architectures of general purpose stored program computers comprising an array of processing units with common control, e.g. single instruction multiple data processors single instruction multiple data [SIMD] multiprocessors
-
- 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
-
- 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/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30036—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
- G06F9/30038—Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- 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/0815—Cache consistency protocols
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Advance Control (AREA)
- Complex Calculations (AREA)
- Multi Processors (AREA)
Abstract
通过以下方法来执行向量比较和交换操作:通过处理装置中的解码器解码单个指令,该单个指令对第一存储位置、第二存储位置和第三存储位置之间的多个数据元素指定向量比较和交换操作;发出该单个指令以供处理装置中的执行单元执行;响应该单个指令的执行,将来自第一存储位置的数据元素与第二存储位置中的对应数据元素进行比较;以及响应确定存在匹配,用来自第三存储位置的对应数据元素替换来自第一存储位置的数据元素。
Description
技术领域
本公开涉及微处理器及其它处理装置,更具体来说,涉及SIMD向量的同步化。
背景技术
在例如包括多线程化处理器、多个处理装置和/或多核处理器的系统中的多个线程和/或处理单元(下文称为代理)常常需要共享资源以及存储在该系统中的数据。注意要确保代理访问最近更新的数据,并确保代理不会访问和修改当前与另一个代理相关联的数据。使这种数据和资源共享进一步复杂化的是,大多数现代处理装置包括一个或多个专用高速缓存存储器。在多处理器和多核系统内,这些芯片上高速缓存将通常并且实际上一般的确包含某个数据项的多个副本。因此,当代理访问某个数据项的副本时,要确保读取经过更新的或有效的数据值。
因此,在这些系统中保持“高速缓存一致性”。高速缓存一致性是指从高速缓存存储器写入或读取到高速缓存存储器的数据的同步化,以使得线程或处理器所访问的存储在高速缓存中的任何数据项是该数据项的最新副本。此外,从高速缓存写回到主存储器的任何数据值应当是最当前的数据。
一种保持高速缓存一致性并确保当代理需要数据项时访问的是该数据项的最新值的方法是实现信号量(semaphore)(例如,标志或锁)。例如,锁包括响应代理(例如,在加载操作中)对来自存储器的特定数据项的请求而执行以确保处理器和/或线程之间的同步的过程。一般来说,锁与包括读/加载指令、修改数据项的指令和写/存储指令的指令集相关联。锁在本文中又称为“锁序列”或“锁操作”,它可包括例如:获取存储数据的存储器位置的所有权;对数据执行原子操作,同时防止其它进程对该数据进行操作;以及在执行原子操作之后释放该存储器位置的所有权。原子操作是以非中断方式按顺序执行并且此外还确保其完成或根本不完成的操作(即,该操作不可分割)。
发明内容
本发明涉及一种方法,包括:
通过处理装置中的解码器解码单个指令,所述单个指令对第一存储位置、第二存储位置和第三存储位置之间的多个数据元素指定向量比较和交换操作;
发出所述单个指令以供所述处理装置中的执行单元执行;以及响应所述单个指令的执行,
将来自所述第一存储位置的数据元素与所述第二存储位置中的对应数据元素进行比较;以及响应确定存在匹配,
用来自所述第三存储位置的对应数据元素替换来自所述第一存储位置的所述数据元素。
本发明涉及一种处理器,包括:
存储位置,配置成存储第一多个数据元素、第二多个数据元素和第三多个数据元素,所述第二多个和第三多个数据元素中的每个对应于所述第一多个数据元素中的一个;
解码器,配置成解码单个指令,所述单个指令对所述第一多个、第二多个和第三多个数据元素指定向量比较和交换操作;以及
执行单元,耦合到所述解码器以接收经解码的指令,并耦合到所述存储位置以执行所述向量比较和交换操作;
其中,响应所述向量比较和交换操作的执行,所述执行单元配置成:
比较来自所述第一多个和第二多个数据元素的对应数据元素;以及响应确定存在匹配,
用来自所述第三多个数据元素的对应数据元素替换来自所述第一多个数据元素的数据元素。
本发明涉及一种系统,包括:
存储器控制器,耦合到配置成存储第一多个数据元素的第一存储位置;以及
耦合到所述存储器控制器的处理器,所述处理器包括:
寄存器文件,配置成存储第二多个数据元素和第三多个数据元素,所述第二多个和第三多个数据元素中的每个对应于所述第一多个数据元素中的一个;
解码器,配置成解码单个指令,所述单个指令对所述第一多个、第二多个和第三多个数据元素指定向量比较和交换操作;以及
执行单元,耦合到所述解码器以接收经解码的指令,并耦合到所述第一存储位置和所述寄存器文件以执行所述向量比较和交换操作;
其中,响应所述向量比较和交换操作的执行,所述执行单元配置成:
比较来自所述第一多个和第二多个数据元素的对应数据元素;以及响应确定存在匹配,
用来自所述第三多个数据元素的对应数据元素替换来自所述第一多个数据元素的数据元素;以及响应确定不存在匹配,
用来自所述第一多个数据元素的对应数据元素替换来自所述第二多个数据元素的数据元素。
本发明涉及一种其上存储有指令的计算机可读介质,所述指令可进行操作以使处理器装置:
解码单个指令,所述单个指令对多个数据元素指定向量比较和交换操作,每个数据元素具有对应的测试元素、替换元素和掩码元素;
如果相应掩码元素激治,则将数据元素与对应的测试元素进行比较;以及响应确定所有比较指示匹配,
设置标志,并用对应的替换元素替换所比较的数据元素;以及响应确定所有比较指示不匹配,
将标志清零,并用对应的数据元素替换所比较的测试元素。
附图说明
图1示出计算系统的框图。
图2是如图1所示的处理装置的示意图。
图3示出单指令多数据(SIMD)向量比较和交换指令的编码方案。
图4是用于实现如图3所示的指令格式的第一示范性计算机系统的框图。
图5是用于实现如图3所示的指令格式的第二示范性计算机系统的框图。
图6是用于实现如图3所示的指令格式的第三示范性计算机系统的框图。
图7是用于实现如图3所示的指令格式的第四示范性计算机系统的框图。
根据描述和附图以及权利要求,其它特征和优点将显而易见。
具体实施方式
在以下描述中,阐述了众多具体细节,例如特定指令、指令格式、诸如寄存器和存储器的装置等,以便充分理解本文提供的实例。但是,本领域技术人员将明白,没有这些具体细节也可实现本发明。
一种用于确定信号量是否加锁(和/或使它加锁)的方法是通过使用读-修改-写序列(或操作)。但是,读-修改-写实现的一个问题是信号量机制本身的获取和释放。即,当一个进程试图获得对共享存储器空间的控制权时,它首先读取锁值,检查和修改(如果允许的话)该值,并将修改值写回到该锁。一般希望将读-修改-写操作作为原子操作来执行(即,一旦开始执行便不中断地完成)以防止其它进程修改锁值。通过利用原子操作,进程可获取(读取)信号量,修改该值(如果允许的话),并通过启动写来释放信号量以在另一进程试图获取该锁之前完成该操作。
现在参考图1,示出计算机系统10,计算机系统10具有通过总线13耦合到存储器12(例如,寄存器、高速缓存、RAM等)的多个处理单元11(例如,处理器、核、执行单元等)。其中一个或多个处理单元11与一个或多个线程相关联。因此,计算机系统10包括任何合适数量的处理单元11,每个处理单元11具有任何合适数量的线程。处理单元11均可形成独立的集成电路装置的一部分,或者所有处理单元11(或其一部分)可形成在单个管芯上。在该特定计算机系统中,示出作为系统10的部分的四个处理单元11(指示为P1、P2、P3和P4)。所有这四个处理单元11都耦合到存储器12,具体来说是耦合到存储器12内的共享存储器空间15。
将明白,存储器12能以各种方式进行配置。尽管示为单个存储器,但存储器12可包括多个内部和/或外部存储器。在特定实例中,所有四个处理单元11都访问存储器12,并且指示为共享空间15的存储器12的一部分供多于一个处理单元11访问。可能的是,存储器12内存在其它共享区域,其中两个或两个以上处理单元11具有访问这些共享区域的能力。存储器12的非共享区域一般降级(relegate)为只供一个处理单元11访问。
如图1所示的计算机系统10意在是示范性计算机系统,并且可包括许多额外组件,为清楚起见,省略了这些额外组件。举例来说,计算机系统10可包括DMA(直接存储器访问)控制器、网络接口(如网络卡)、与其中一个或多个处理单元11相关联的芯片组、以及额外的信号线和总线。并且,应了解,计算机系统10可以不包括如图1所示的所有组件。
在图1中,所采用的信号量是锁(或锁变量)16,指定它们以控制对一个或多个相应共享空间15的访问(如虚线14所示)。锁16是指定包含与获得对共享空间15的访问权相关联的值的存储器中的特定位置。因此,为了使处理单元11之一访问共享空间15,它首先访问对应锁16,并测试存储在锁位置16中的数据的状态(值)。在最简单的格式中,可为锁16指定两个值。第一个值指示共享空间可供访问,第二个值指示共享空间当前正在使用并且因此不可供访问。再者,在最简单的实施例中,可对锁16的加锁和解锁状态使用位状态1和0。
将明白,锁16的实际锁值和锁状态只是一种设计选择,并且可以设想许多改变。并且,锁16的位置无需在存储器12本身内。此外,参考图1将明白,存储器12可以是各种存储器装置之一。还可能的是,其中一个或多个处理单元11可以用同样访问存储器的一个(或多个)存储器访问装置(诸如直接存储器访问控制器的装置)替换。在这些示例中,这些装置将与本文描述的处理单元11类似地起作用以获得对共享空间15的访问权。最后,尽管只示出单个总线13,但在与总线13相同或不同的层级上可以有多个总线以用于耦合这些各种装置。
处理单元11访问存储器12以进行数据传输通常涉及加载和存储操作的使用。加载操作传送来自被访问的存储器位置的存储器内容,而存储操作则将数据传送到被访问的存储器位置。因此,加载/存储操作用于访问存储器12和锁16以在处理单元11与存储器12之间进行数据传输。加载和存储访问又分别称为读和写访问。
参考图1和图2,计算机系统10包括经由系统总线22与处理单元11耦合的只读存储器(ROM)31和主存储器18,主存储器18包括例如任何合适类型的随机存取存储器(RAM)。处理单元11还具有通过系统总线22与其耦合的数据存储装置30。数据存储装置30包括任何合适的非易失性存储器,例如硬盘驱动器。计算机系统10还包括可移动存储介质32,例如软盘驱动器、CD ROM驱动器和/或USB驱动器。
在图2中,处理单元11包括通过一个或多个总线互连的多个组件,并且这些总线在图2中用本地总线19象征性地示出。本地总线19以及因此的处理单元11的组件与总线接口单元23耦合。总线接口单元23将处理单元11与系统总线22耦合,从而使得能够在处理单元11与主存储器18之间以及在处理单元11与外部高速缓存20之间进行通信。
处理单元11包括与本地总线19耦合的指令解码器21。指令解码器21接收与在处理单元11上执行的程序或代码片段相关联的一个(或多个)指令,并且将该指令分解成一个或多个机器级指令/操作(uop)。应了解,处理单元11可接收与某个程序相关联的一个或多个指令,而计算机系统10的另一个处理单元11可接收与相同程序相关联的一个或多个指令。因此,一个程序可以在多个处理单元11上执行。
处理单元11还包括多个执行单元,包括例如数据访问控制单元(DAC)24、存储器排序缓冲器(MOB)26、寄存器文件单元29和功能单元27。
寄存器文件单元29包括多个寄存器,每个寄存器具有16、32、64、128、256或512位的存储。此外,寄存器文件29可包括一个或多个寄存器文件,每个寄存器文件具有一个或多个寄存器。功能单元27包括一个或多个功能单元,例如算术、逻辑和/或浮点单元。MOB26确保加载和存储指令的正确排序,并且还提供存储器层级(即,计算机系统10内的各种级别的存储器,包括L0高速缓存25、L1高速缓存28、外部高速缓存20、主存储器18和数据存储装置30)内的这些事务的正确定序。L0高速缓存25和L1高速缓存28中的每一个可存储功能单元27最近访问或预期将访问的数据。如果功能单元27请求的数据项驻存在高速缓存存储器25、28之一中,则出现高速缓存“命中”;但是,如果所请求的数据没有存在于高速缓存中,则出现高速缓存“不命中”。其中一个或多个高速缓存存储器(例如,L0高速缓存25)可与DAC24耦合。DAC24控制导致高速缓存不命中的所有事务以及需要特殊处理的其它事务。如上所述,锁是需要通过DAC24以及处理单元11的其它组件特殊处理的一种类型的事务。如果uop对应于例如算术操作,则将该uop分派给功能单元27,然后功能单元27执行该算术操作。如果uop对应于存储器引用指令(例如,加载或存储),则将该uop分派给MOB26。
应了解,如图2所示的处理单元11意在表示示范性处理装置,并且该处理单元还可包括这些图中没有示出的许多额外组件。为便于理解,省略了这些组件。例如,处理单元11可包括地址生成单元、预定站、重排序缓冲器、调度器、分段和地址翻译单元、翻译后备缓冲器、页不命中处理程序和/或内部时钟电路。并且,尽管示为离散元件,但应了解,图2中示出的许多组件可进行组合和/或共享电路。最重要的是,本文描述的实施例不限于任何特定的体系结构或布置,并且不限于用于描述这些体系结构或布置的任何特定术语,所公开的实施例可在任何类型的处理装置上实现,而与其体系结构或归于它的术语无关。
经调度用于执行的任何一个或多个uop可包括加锁uop。如上所示,锁对应于按照确保处理器和/或线程之间的同步的方式执行的操作(例如,加载、修改和存储)的序列。
图3示出用于执行读-修改-写操作的指令。指令40是包括5个操作数41-45的单个原子指令。操作码操作数41标识这是VCMPXCHG指令。操作数42-44对应于与SRC1/DEST、SRC2、SRC3相关联的源和目的地操作数,并且在一些实现中,还包括掩码存储位置(MSK)和/或偏移量(或“立即数(immediate)”)操作数45。该偏移量或立即数用于在寻址存储器12时提供相对于基地址(如SRC1)的偏移量。以下所示的指令也可具有这样的偏移量,但未示出。指定掩码存储位置45的实现引用存储对应于存储在由SRC1/DEST操作数引用的存储位置处的相应数据元素的掩码元素的寄存器或存储器位置。
响应指令40,处理单元11读取第一源数据,将它与另一个源数据进行比较,并且如果比较满足预定条件(例如,真或匹配条件),则将某个经过修改的值写入到某个位置,该位置可以是第一源数据的原始位置。如果不满足预定条件,则该位置中的原始数据不变。该指令利用三个源操作数(例如,如下文所使用的SRC1、SRC2和SRC3)和一个目的地操作数(例如,如下文所使用的DEST)来提供在执行指令中所用的各种信息的位置。操作特定寄存器可在执行指令时用于提供一个或多个源数据和/或用于存储目的地数据,从而无需在实际指令格式中明确指定操作数。此外,在这个实例中,SRC1操作数和DEST操作数是指相同的存储位置(SRC1/DEST)。
在执行指令40之前,将SRC1、SRC2和SRC3加载到寄存器文件单元29的寄存器中。例如,为了安全地更新存储在由SRC1/DEST操作数指定的位置中的值,首先将该值读入到由SRC2操作数指定的位置中,并将替换值读入到由SRC3操作数指定的位置中。然后,执行原子比较-交换操作以将与SRC1/DEST操作数相关联的当前值同与SRC2操作数相关联的值进行比较(即,由于被另一个代理修改,当前值可能与初始复制的值不同)。如果该值没有改变,则用与SRC3操作数相关联的值替换该值,并且设置零标志以指示成功更新。但是,如果另一个代理在初始复制与比较-交换操作之间修改了该值,则不替换当前值,并将零标志清零以指示更新失败。
图4中的框图示出执行指令40时的信息流。处理单元11包括执行单元46(图2中的DAC24)、寄存器文件29、BIU23和解码器21,它们全都通过本地总线19耦合在一起。寄存器文件29包括供执行单元46访问以执行各种操作的多个寄存器。如图4所示,VCMPXCHG指令40示为驻存在执行单元46中,并且从指令的操作数到与SRC1、SRC2、SRC3和DEST相关联的对应寄存器用虚线示出。寄存器驻存在寄存器文件29中。解码器21用于解码各种指令(包括VCMPXCHG指令40),以便执行单元46执行这些操作。
如之前在图1和图2中所描述,存储器12示为通过总线19和/或总线22耦合到BIU23。因此,处理单元11与存储器12之间的数据传输可通过BIU54a或本地总线19进行。将明白,利用VCMPXCHG指令40的程序例行程序可驻存在某个存储器中,该存储器也可以是存储器12或包括存储器12。
以下伪代码示出VCMPXCHG指令40如何进行操作的实例。也可以使用其它伪代码、语言、操作、操作顺序和/或数字。
在以上所示的特定VEX.128和VEX.256实例中,可将锁值分别存储在由SRC1/DEST引用的512位存储位置(例如,64字节高速缓存行或寄存器)的位[127:0]和位[255:0]中。在一个实施例中,在由SRC1/DEST引用的锁值与它们所对应的共享存储位置15之间存在一一对应的关系。例如,SRC1/DEST可引用16个8位锁值(128位),每个值对应于高速缓存行或SIMD寄存器的16个存储位置中的相应一个存储位置。或者,SRC1/DEST可引用32个8位锁值(256位),每个值对应于高速缓存行或SIMD寄存器的32个存储位置中的相应一个存储位置。
再次参考以上实例,SRC1/DEST与SRC2之间的比较的结果指示锁值是否被修改。真条件指示锁未被修改并且锁处于解锁状态。当满足该条件时,将由SRC3引用的值写入到SRC1/DEST,从而将锁值修改为加锁状态,以便防止其它代理访问这个(或这些)共享空间。此后,设置零标志(ZF)以指示成功操作。
假条件指示一个或多个锁被修改(被加锁)并且另一代理已经取得共享空间的所有权。当条件为假时,将由SRC1/DEST引用的值(当前锁值)存储到SRC2,并且将零标志清零以指示操作不成功。然后,在从该操作返回之前,将SRC2的高位字节清零。
通常,如果一开始访问被拒绝,则询问代理将继续重新尝试访问直到获取访问权为止。在一些实现中,外层循环将包括在重新执行VCMPXCHG指令40之前进行非原子加载和测试。一旦处理器完成它对共享存储器空间15的访问,它通常将通过利用对锁16的写循环以将它解锁来释放它对共享存储器空间15的控制权,以使得其它代理现在可进入到共享存储器空间15。但是,将明白,处理器如何释放共享存储器空间只是一种设计选择,它可由系统体系结构来规定。
在一些实现中,VCMPXCHG指令40包括具有多个掩码元素的掩码向量,每个掩码元素对应于由SRC1/DEST引用的多个数据元素之一。掩码向量存储位置可以是寄存器文件单元29中的寄存器,例如阴影寄存器、控制寄存器、标志寄存器、通用寄存器、SIMD寄存器或其它合适的寄存器。在一个实施例中,在由SRC1/DEST引用的数据元素与存储在掩码寄存器中的对应掩码元素之间存在一一对应的关系。掩码元素或值可包括用于指示是否要比较和/或修改(例如,在对应的或所指的寄存器位置中的)对应数据元素的标志、标记、标签、指示符和/或其它数字、位和/或代码。例如,具有值“1”的掩码元素可指示将要修改对应的数据元素,否则可使用“0”。也可使用其它数字或标志。
以下伪代码中分别针对16宽度、512字节向量(16 wide,512 bytevector)和8宽度、512字节向量示出屏蔽的VCMPXCHGD和VCMPXCHGQ指令的实例。在屏蔽的比较实现中,只比较和更新激活元素。
在如上所示的特定VCMPXCHGD和VCMPXCHGQ实例中,首先将变量ALL_CMPS_SUCCEED预设为1(即,真条件)。一旦设置好,对于每个激活掩码元素(例如,其中存储有特定值的掩码元素,包括例如二进制1或十六进制值0x01、0xFF或0x80),将由SRC1/DEST引用的对应存储位置与由SRC2中的对应位引用的值进行比较。如果未使用掩码,则将由SRC1/DEST引用的每个存储位置与由SRC2中的对应位引用的值进行比较。
再次地,SRC1/DEST与SRC2的对应值之间的比较的结果指示该特定锁值是否已被修改。但是,在这些实例中,真条件(即,不匹配的条件)指示锁已被修改并且另一代理取得了共享存储位置的所有权。当对于任何一个引用的存储位置都满足该条件时,将ALL_CMPS_SUCCEED清零,以指示所有比较都不成功。此后,将零标志清零,并且对于每个激活掩码元素,将存储在由SRC1/DEST引用的对应存储位置中的值加载到SRC2的对应位中。
当比较的结果为假(即,对于每个激活掩码元素,由SRC1/DEST引用的对应值与SRC2中的对应值匹配)时,ALL_CMPS_SUCCEED保持设置不变。此后,设置零标志(ZF),并且对于每个激活掩码元素,将存储在SRC3的对应存储位置中的值加载到SRC1/DEST的对应位中,从而将锁值修改为加锁状态,以便防止其它代理访问共享空间。
图5中的框图示出执行指令40时的信息流的另一个实例。如图5所示,VCMPXCHG指令40示为驻存在执行单元46中,并且从指令的操作数到与SRC2、SRC3和MSK相关联的对应寄存器用虚线示出。在该实例中,掩码存储位置(MSK)是掩码寄存器,并且与SRC1/DEST相关联的存储位置是L1高速缓存。寄存器驻存在寄存器文件单元29中。
在执行指令40之前,将SRC1预取到L1高速缓存中,并将SRC2、SRC3和MSK数据加载到寄存器文件单元29的寄存器中。掩码寄存器存储对应于与SRC1/DEST操作数相关联的存储位置中的相应数据元素的多个掩码元素。另外,首先,将比较值读取到由SRC2操作数指定的位置中,并将替换值读取到由SRC3操作数指定的位置中。然后,执行指令40以使执行单元46比较与SRC1/DEST和SRC2操作数相关联的对应数据元素,并且如果存在匹配,则用来自SRC3的对应数据元素替换来自SRC1/DEST的数据元素。如果不存在匹配,则指令40的执行使执行单元46用对应的SRC1/DEST数据元素替换SRC2数据元素。
在一些实现中,只有当对应掩码元素激活(active)时才执行各对SRC1/DEST和SRC2数据元素之间的比较。在某些实现中,执行单元46还配置成:如果其对应掩码元素激活的每对对应数据元素之间存在匹配,则设置标志;并且如果其对应掩码元素激活的任何一对之间不存在匹配,则将标志清零。此外,在一些实现中,只有当对应于相应SRC1/DEST数据元素的掩码元素激活时才执行用对应的SRC3数据元素替换SRC1/DEST数据元素。另外,在一些实现中,只有当对应于SRC1/DEST数据元素的掩码元素激活时才执行用对应的SRC1/DEST数据元素替换SRC2数据元素。
在一些实施例中,指示加锁状况的锁值与指示激活掩码元素的掩码值相同(例如,二进制1)。在这种情况下,SRC3可同时用作掩码向量和锁值替换向量。
在一些实现中,比较-交换操作在不更新与SRC2操作数相关联的值的情况下完成执行。此后,测试标志(例如,零标志),并且如果它指示关于与SRC1/DEST操作数相关联的值的更新操作失败,则重复正好在比较-交换操作之前的步骤以便在重复比较-交换操作之前更新与SRC2和SRC3相关联的值。
一个或多个实施例包括一种制品,该制品包括有形机器可访问和/或机器可读介质,在该介质上存储有SIMD指令,该指令对多个数据元素指定向量比较和交换操作,每个数据元素具有对应的测试元素、替换元素和掩码元素,该指令在由机器(例如,执行单元)执行时使该机器:如果相应掩码元素激活,则将数据元素与对应的测试元素进行比较;响应确定所有比较指示匹配,设置标志并用对应的替换元素替换所比较的数据元素;以及响应确定所有比较指示不匹配,则将标志清零并用对应的数据元素替换所比较的测试元素。有形介质可包括一种或多种固体物质。该介质可包括用于提供(例如,存储)以可供机器访问的形式的信息的机制。例如,该介质可以可选地包括可记录介质,例如软盘、光存储介质、光盘、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪速存储器及其组合。
合适的机器包括但不限于执行单元、通用处理器、专用处理器(例如,图形处理器和密码处理器)、密码加速器、网络通信处理器、计算机系统、网络装置、调制解调器、个人数字助理(PDA)、蜂窝电话以及各种各样具有一个或多个执行单元的其它电子装置,这些只是举例。其它实施例涉及具有执行单元和/或用于执行本文所公开的方法的计算机系统、嵌入式系统或其它电子装置。
图6示出包括处理器51的合适的计算机系统50的实例。该处理器包括能够执行至少一个向量比较和交换指令53的至少一个执行单元52。
处理器经由总线(例如,前端总线)或其它互连55耦合到芯片组54。该互连可用于经由芯片组在处理器与系统中的其它组件之间传送数据信号。
芯片组包括称为存储器控制器集线器(MCH)56的系统逻辑芯片。MCH耦合到前端总线或其它互连55。
存储器58耦合到MCH。在各种实施例中,存储器可包括随机存取存储器(RAM)。DRAM是在一些但不是所有计算机系统中使用的RAM类型的实例。如图所示,存储器可用于存储诸如一个或多个乘法指令的指令59和数据60。
组件互连61也与MCH耦合。在一个或多个实施例中,该组件互连可包括一个或多个外围组件互连express(PCIe)接口。该组件互连可允许其它组件通过芯片组耦合到系统的其余部分。这些组件的一个实例是图形芯片或其它图形装置,但这是可选的而非必需的。
芯片组还包括输入/输出(I/O)控制器集线器(ICH)62。ICH通过集线器接口总线或其它互连63耦合到MCH。在一个或多个实施例中,总线或其它互连63可包括直接媒体接口(DMI)。
数据存储设备64耦合到ICH。在各种实施例中,数据存储设备可包括硬盘驱动器、软盘驱动器、CD-ROM装置、闪速存储器装置等或其组合。
第二组件互连65也与ICH耦合。在一个或多个实施例中,第二组件互连可包括一个或多个外围组件互连express(PCIe)接口。第二组件互连可允许各种类型的组件通过芯片组耦合到系统的其余部分。
串行扩展端口66也与ICH耦合。在一个或多个实施例中,串行扩展端口可包括一个或多个通用串行总线(USB)端口。串行扩展端口可允许各种其它类型的输入/输出装置通过芯片组耦合到系统的其余部分。
可以可选地与ICH耦合的其它组件的几个说明性实例包括但不限于音频控制器、无线收发器和用户输入装置(例如,键盘、鼠标)。
网络控制器67也耦合到ICH。网络控制器可允许系统与网络耦合。
在一个或多个实施例中,计算机系统可执行可从MicrosoftCorporation of Redmond,Washington获得的WINDOWSTM操作系统版本。或者,可以使用诸如UNIX、Linux或嵌入式系统的其它操作系统。
这只是合适的计算机系统的一个特定实例。例如,在一个或多个备选实施例中,处理器可具有多个核。又如,在一个或多个备选实施例中,MCH56可在物理上与处理器51一起集成在管芯上,并且处理器可通过集成式MCH直接与存储器58耦合。再如,在一个或多个备选实施例中,其它组件可与处理器一起集成在管芯上,以便例如提供芯片上系统(SoC)设计。又如,在一个或多个备选实施例中,计算机系统可具有多个处理器。
图7是合适的计算机系统70的另一个实例。该第二示范实施例具有与上述计算机系统50的某些类似性。为清楚起见,本论述将倾向于强调差异而不重复所有类似性。
与计算机系统50类似,计算机系统70包括处理器71和具有I/O控制器集线器(ICH)72的芯片组74。计算机系统70还包括与芯片组74耦合的第一组件互连81、与ICH耦合的第二组件互连85、与ICH耦合的串行扩展端口86、与ICH耦合的网络控制器87、以及与ICH耦合的数据存储设备84。
处理器71是多核处理器并包括处理器核72-1至72-M,其中M是等于或大于2的整数(例如,2、4、7或更大)。每个核可包括能够执行本文所公开的指令的至少一个实施例的至少一个执行单元。如图所示,核-1包括高速缓存88(例如,L1高速缓存)。其它核中的每个核可类似地包括专用高速缓存。这些处理器核可在单个集成电路(IC)芯片上实现。
处理器还包括至少一个共享高速缓存89。该共享高速缓存可存储供处理器的一个或多个组件(例如,核)使用的数据(例如,指令)。例如,共享高速缓存可本地缓存存储在存储器78中的数据以便供处理器的组件更快速地访问。在一个或多个实施例中,共享高速缓存可包括一个或多个中间级高速缓存(例如,2级(L2)、3级(L3)、4级(L4)或其它级高速缓存)、最后一级高速缓存(LLC)和/或其组合。
处理器核和共享高速缓存均与总线或其它互连90耦合。该总线或其它互连可耦合这些核和共享高速缓存并允许通信。
处理器还包括存储器控制器集线器(MCH)76。如该示范实施例中所示,MCH与处理器71集成在一起。例如,MCH可以与处理器核同处在管芯上。处理器通过MCH与存储器78耦合。在一个或多个实施例中,存储器可包括DRAM,但这不是必需的。
芯片组包括输入/输出(I/O)集线器91。I/O集线器通过总线(例如,QuickPath Interconnect(QPI))或其它互连75与处理器耦合。第一组件互连81与I/O集线器91耦合。
这只是合适系统的一个特定实例。本领域中已知的膝上型、桌面型、手持PC、个人数字助理、工程工作站、服务器、网络装置、网络集线器、交换器、嵌入式处理器、数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持装置和各种其它电子装置的其它系统设计和配置也是合适的。一般来说,能够包括本文所公开的处理器和/或执行单元的各种各样的系统或电子装置一般都是合适的。
在以上描述中,为了说明的目的,阐述了众多具体细节以充分理解本发明的实施例。但是,对于本领域技术人员显而易见的是,没有这些具体细节中的一些细节也可实现一个或多个其它实施例。提供所描述的具体实施例不是为了限制本发明,而是为了说明本发明的实施例。本发明的范围不由以上提供的特定实例确定,而是只由随附权利要求确定。在其它情况下,以框图形式或者没有详细示出公知的电路、结构、装置和操作,以免使本描述晦涩难懂。在认为合适的情况下,各图中重复使用附图标记或附图标记的末端部分来指示对应或类似的元件,这些元件可以可选地具有类似的特性。
某些操作可由硬件组件来执行,或者能以机器可执行指令来实施,这些指令可用于造成或者至少导致用执行这些操作的指令编程的电路或硬件。该电路可包括通用或专用处理器或逻辑电路,这只是举例。这些操作也可以可选地由硬件和软件的组合来执行。执行单元和/或处理器可包括响应机器指令或从该机器指令得到的一个或多个控制信号来存储指令指定的结果操作数的具体或特定电路或其它逻辑。
还应明白,在整篇说明书中提到例如“一个实施例”、“实施例”或“一个或多个实施例”时表示,在实现本发明的实施例时可包含特定特征。类似地,应明白,在本描述中,各种特征有时集中在单个实施例、图或对其的描述中,以便使本公开流畅并帮助理解各个发明方面。但是,不应将本公开方法解释为反映本发明需要比每个权利要求中明确叙述的特征更多的特征的意图。而是,如以下权利要求所反映,发明方面可在于比单个公开的实施例的所有特征少的特征。因此,具体实施方式之后的权利要求由此明确包括在本具体实施方式中,每个权利要求独自代表本发明的一个单独的实施例。
上文描述了本发明的多个实施例。然而,将了解,在不偏离本发明的精神和范围的情况下,可以进行各种修改。例如,计算机系统无需局限于具有多个处理器或存储器访问装置的计算机系统。本发明可容易地用于单处理器系统,在其中实现读-修改-写指令。
还将明白,对存储器的共享区域的访问控制可通过不同于以上实例中所描述的测试和设置序列的方式来实现。例如,可使用简单的计数器,其中将每次访问递增指定计数。
还应明白,优选实施例的VCMPXCHG指令执行读-修改-写操作,但是修改和写阶段基本上作为单个步骤来实现。取代在读取原始数据之后计算修改值、接着随后写修改值,可预设VCMPXCHG指令的修改值以供该指令使用。尽管它们的使用取决于在进行比较时所获得的决定,但可立即将这个预设的修改值(SRC3)写入到目的地以修改目的地值。
因此,描述了一种用于实现利用掩码的向量比较和交换操作的技术。应明白,本文描述的VCMPXCHG指令和实现也可在其它容量内使用,并且无需局限于控制对共享存储器空间的访问的功能。例如,VCMPXCHG指令可用于推测性执行,其中对多个数据元素执行SIMD操作,只有当在操作过程期间这些数据元素未被另一代理修改时才将其结果写入到共享存储器空间。因此,其它实施例在随附权利要求的范围内。
Claims (22)
1.一种处理装置中的方法,包括:
通过所述处理装置中的解码器解码单个指令,所述单个指令对第一存储位置、第二存储位置和第三存储位置之间的多个数据元素指定向量比较和交换操作;以及
响应所述处理装置中的执行单元对所述单个指令的执行,
将所述第一存储位置的数据元素与所述第二存储位置的对应数据元素进行比较;以及响应确定存在匹配,
用所述第三存储位置的对应数据元素替换所述第一存储位置的所述数据元素,其中所述第三存储位置的对应数据元素的值相对于所述第一存储位置的所述数据元素的值被修改。
2.如权利要求1所述的方法,其中所述单个指令还指定用于存储对应于所述第一存储位置中的相应数据元素的多个掩码元素的掩码存储位置。
3.如权利要求2所述的方法,其中将所述第一存储位置的所述数据元素与所述第二存储位置的对应数据元素进行比较包括:
当对应于所述第一存储位置的数据元素的掩码元素激活时,将所述第一存储位置的所述数据元素与所述第二存储位置的对应数据元素进行比较。
4.如权利要求2所述的方法,其中用所述第三存储位置的对应数据元素替换所述第一存储位置的所述数据元素包括:
当对应于所述第一存储位置的数据元素的掩码元素激活时,用所述第三存储位置的对应数据元素替换所述第一存储位置的所述数据元素。
5.如权利要求1所述的方法,还包括:
当不存在所述匹配时,用所述第一存储位置的对应数据元素替换所述第二存储位置的数据元素。
6.如权利要求5所述的方法,其中所述单个指令还指定用于存储对应于所述第一存储位置中的相应数据元素的多个掩码元素的掩码存储位置。
7.如权利要求6所述的方法,其中将所述第一存储位置的数据元素与所述第二存储位置的对应数据元素进行比较包括:
当对应于所述第一存储位置的数据元素的掩码元素激活时,将所述第一存储位置的所述数据元素与所述第二存储位置的对应数据元素进行比较。
8.如权利要求6所述的方法,其中用所述第三存储位置的对应数据元素替换所述第一存储位置的所述数据元素包括:
当对应于所述第一存储位置的数据元素的掩码元素激活时,用所述第三存储位置的对应数据元素替换所述第一存储位置的所述数据元素。
9.如权利要求6所述的方法,其中用所述第一存储位置的对应数据元素替换所述第二存储位置的所述数据元素包括:
当对应于所述第一存储位置的数据元素的掩码元素激活时,用所述第一存储位置的对应数据元素替换所述第二存储位置的数据元素。
10.一种处理器,包括:
存储位置,配置成存储第一多个数据元素、第二多个数据元素和第三多个数据元素,所述第二多个和第三多个数据元素中的每个对应于所述第一多个数据元素中的一个;
解码器,配置成解码单个指令,所述单个指令对所述第一多个、第二多个和第三多个数据元素指定向量比较和交换操作;以及
执行单元,耦合到所述解码器以接收经解码的指令,并耦合到所述存储位置以执行所述向量比较和交换操作;
其中,响应所述向量比较和交换操作的执行,所述执行单元配置成:
比较所述第一多个和第二多个数据元素的对应数据元素;以及响应确定存在匹配,
用所述第三多个数据元素的对应数据元素替换所述第一多个数据元素的数据元素,其中所述第三多个数据元素的对应数据元素的值相对所述第一多个数据元素的所述数据元素的值被修改。
11.如权利要求10所述的处理器,其中,响应所述向量比较和交换操作的执行,所述执行单元还配置成:
如果不存在所述匹配,则用所述第一多个数据元素的对应数据元素替换所述第二多个数据元素的所述数据元素。
12.如权利要求11所述的处理器,其中所述单个指令还指定用于存储对应于所述第一多个数据元素中的相应数据元素的多个掩码元素的掩码存储位置。
13.如权利要求12所述的处理器,其中所述执行单元还配置成在相应掩码元素激活时比较所述第一多个和第二多个数据元素的对应数据元素。
14.如权利要求12所述的处理器,其中所述执行单元配置成在相应掩码元素激活时用所述第三多个数据元素的对应数据元素替换所述第一多个数据元素的数据元素。
15.如权利要求12所述的处理器,其中所述执行单元配置成在相应掩码元素激活时用所述第一多个数据元素的对应数据元素替换所述第二多个数据元素的数据元素。
16.如权利要求10所述的处理器,其中所述执行单元将所述向量比较和交换操作作为原子操作来执行。
17.如权利要求12所述的处理器,其中响应所述向量比较和交换操作的执行,所述执行单元还配置成:
如果在其对应掩码元素激活的所述第一和第二多个数据元素的每对对应数据元素之间存在匹配,则设置标志;以及
如果不存在所述匹配,则将所述标志清零。
18.一种处理指令的系统,包括:
存储器控制器,耦合到配置成存储第一多个数据元素的第一存储位置;以及
耦合到所述存储器控制器的处理器,所述处理器包括:
寄存器文件,配置成存储第二多个数据元素和第三多个数据元素,所述第二多个和所述第三多个数据元素中的每个对应于所述第一多个数据元素中的一个;
解码器,配置成解码单个指令,所述单个指令对所述第一多个、所述第二多个和所述第三多个数据元素指定向量比较和交换操作;以及
执行单元,耦合到所述解码器以接收经解码的指令,并耦合到所述第一存储位置和所述寄存器文件以执行所述向量比较和交换操作;
其中,响应所述向量比较和交换操作的执行,所述执行单元配置成:
比较所述第一多个和第二多个数据元素的对应数据元素;以及响应确定存在匹配,
用所述第三多个数据元素的对应数据元素替换所述第一多个数据元素的所述数据元素,其中所述第三多个数据元素的对应数据元素的值相对所述第一多个数据元素的所述数据元素的值被修改;以及响应确定不存在所述匹配,
用所述第一多个数据元素的对应数据元素替换所述第二多个数据元素的所述数据元素。
19.如权利要求18所述的系统,其中所述单个指令还指定用于存储对应于所述第一多个数据元素中的相应数据元素的多个掩码元素的掩码寄存器。
20.如权利要求19所述的系统,其中所述执行单元配置成:当相应掩码元素激活时,比较所述第一多个和所述第二多个数据元素的对应数据元素对;如果每个比较结果是匹配,则设置标志;以及如果每个比较结果是不匹配,则将所述标志清零。
21.如权利要求20所述的系统,其中所述执行单元将所述向量比较和交换操作作为原子操作来执行。
22.一种执行指令的装置,包括:
解码单个指令的部件,所述单个指令对多个数据元素指定向量比较和交换操作,每个数据元素具有对应的测试元素、对应的替换元素和对应的掩码元素;
如果相应掩码元素激活,则将所述数据元素与所述对应的测试元素进行比较的部件;以及
响应确定所有比较指示匹配,设置标志,并用所述对应的替换元素替换所比较的数据元素的部件,其中所述对应的替换元素的值不同于所比较的数据元素的值;以及
响应确定所有比较未指示匹配,将所述标志清零,并用所述对应的数据元素替换所比较的测试元素的部件。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510434397.XA CN105094749A (zh) | 2009-12-22 | 2010-12-21 | Simd向量的同步化 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/644,529 US8996845B2 (en) | 2009-12-22 | 2009-12-22 | Vector compare-and-exchange operation |
US12/644529 | 2009-12-22 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510434397.XA Division CN105094749A (zh) | 2009-12-22 | 2010-12-21 | Simd向量的同步化 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102103570A CN102103570A (zh) | 2011-06-22 |
CN102103570B true CN102103570B (zh) | 2015-08-12 |
Family
ID=44152784
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510434397.XA Pending CN105094749A (zh) | 2009-12-22 | 2010-12-21 | Simd向量的同步化 |
CN201010619577.2A Expired - Fee Related CN102103570B (zh) | 2009-12-22 | 2010-12-21 | Simd向量的同步化 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510434397.XA Pending CN105094749A (zh) | 2009-12-22 | 2010-12-21 | Simd向量的同步化 |
Country Status (9)
Country | Link |
---|---|
US (1) | US8996845B2 (zh) |
JP (2) | JP5421458B2 (zh) |
KR (1) | KR101461378B1 (zh) |
CN (2) | CN105094749A (zh) |
BR (1) | BRPI1005259A2 (zh) |
DE (1) | DE112010004963T5 (zh) |
GB (1) | GB2488619B (zh) |
TW (2) | TWI525539B (zh) |
WO (1) | WO2011087590A2 (zh) |
Families Citing this family (58)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9672019B2 (en) | 2008-11-24 | 2017-06-06 | Intel Corporation | Systems, apparatuses, and methods for a hardware and software system to automatically decompose a program to multiple parallel threads |
US10621092B2 (en) | 2008-11-24 | 2020-04-14 | Intel Corporation | Merging level cache and data cache units having indicator bits related to speculative execution |
US8996845B2 (en) | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
EP3805921B1 (en) | 2011-04-01 | 2023-09-06 | INTEL Corporation | Vector friendly instruction format and execution thereof |
WO2013048468A1 (en) | 2011-09-30 | 2013-04-04 | Intel Corporation | Instruction and logic to perform dynamic binary translation |
CN103959237B (zh) * | 2011-11-30 | 2016-09-28 | 英特尔公司 | 用于提供向量横向比较功能的指令和逻辑 |
US10318291B2 (en) | 2011-11-30 | 2019-06-11 | Intel Corporation | Providing vector horizontal compare functionality within a vector register |
CN104011657B (zh) * | 2011-12-22 | 2016-10-12 | 英特尔公司 | 用于向量计算和累计的装置和方法 |
WO2013095657A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Instruction and logic to provide vector blend and permute functionality |
US9946540B2 (en) | 2011-12-23 | 2018-04-17 | Intel Corporation | Apparatus and method of improved permute instructions with multiple granularities |
CN104011616B (zh) * | 2011-12-23 | 2017-08-29 | 英特尔公司 | 改进置换指令的装置和方法 |
WO2013095617A1 (en) * | 2011-12-23 | 2013-06-27 | Intel Corporation | Apparatus and method for propagating conditionally evaluated values in simd/vector execution |
US9507593B2 (en) | 2011-12-23 | 2016-11-29 | Intel Corporation | Instruction for element offset calculation in a multi-dimensional array |
CN110471699B (zh) * | 2011-12-23 | 2023-07-28 | 英特尔公司 | 用于指令处理的处理器核、方法和系统 |
US9489196B2 (en) | 2011-12-23 | 2016-11-08 | Intel Corporation | Multi-element instruction with different read and write masks |
CN107220029B (zh) | 2011-12-23 | 2020-10-27 | 英特尔公司 | 掩码置换指令的装置和方法 |
CN111831335A (zh) | 2011-12-23 | 2020-10-27 | 英特尔公司 | 经改进的插入指令的装置和方法 |
CN104169867B (zh) * | 2011-12-23 | 2018-04-13 | 英特尔公司 | 用于执行掩码寄存器至向量寄存器的转换的系统、装置和方法 |
US20160041827A1 (en) * | 2011-12-23 | 2016-02-11 | Jesus Corbal | Instructions for merging mask patterns |
CN104115114B (zh) | 2011-12-23 | 2018-06-12 | 英特尔公司 | 经改进的提取指令的装置和方法 |
US9552313B2 (en) * | 2011-12-28 | 2017-01-24 | Intel Corporation | Delivering real time interrupts with an advanced programmable interrupt controller |
WO2013100996A1 (en) * | 2011-12-28 | 2013-07-04 | Intel Corporation | Binary translation in asymmetric multiprocessor system |
EP2798471A4 (en) * | 2011-12-30 | 2016-12-21 | Intel Corp | PROCESSORS, METHODS, SYSTEMS AND INSTRUCTIONS FOR ACCESSING A STRUCTURE |
US9575753B2 (en) * | 2012-03-15 | 2017-02-21 | International Business Machines Corporation | SIMD compare instruction using permute logic for distributed register files |
US9405538B2 (en) | 2012-12-28 | 2016-08-02 | Intel Corporation | Functional unit having tree structure to support vector sorting algorithm and other algorithms |
CN104956322B (zh) * | 2013-03-05 | 2019-03-01 | 英特尔公司 | 分析向量化的潜在效益 |
US9411593B2 (en) * | 2013-03-15 | 2016-08-09 | Intel Corporation | Processors, methods, systems, and instructions to consolidate unmasked elements of operation masks |
US9405937B2 (en) | 2013-06-28 | 2016-08-02 | Intel Corporation | Method and apparatus for securing a dynamic binary translation system |
US9292298B2 (en) * | 2013-07-08 | 2016-03-22 | Arm Limited | Data processing apparatus having SIMD processing circuitry |
US9495155B2 (en) | 2013-08-06 | 2016-11-15 | Intel Corporation | Methods, apparatus, instructions and logic to provide population count functionality for genome sequencing and alignment |
GB2520603B (en) * | 2013-09-26 | 2016-04-06 | Imagination Tech Ltd | Atomic memory update unit and methods |
US9466091B2 (en) | 2013-09-26 | 2016-10-11 | Imagination Technologies Limited | Atomic memory update unit and methods |
US11257271B2 (en) | 2013-09-26 | 2022-02-22 | Imagination Technologies Limited | Atomic memory update unit and methods |
US9891936B2 (en) | 2013-09-27 | 2018-02-13 | Intel Corporation | Method and apparatus for page-level monitoring |
US9390023B2 (en) * | 2013-10-03 | 2016-07-12 | Cavium, Inc. | Method and apparatus for conditional storing of data using a compare-and-swap based approach |
US10445092B2 (en) * | 2014-12-27 | 2019-10-15 | Intel Corporation | Method and apparatus for performing a vector permute with an index and an immediate |
US9996350B2 (en) | 2014-12-27 | 2018-06-12 | Intel Corporation | Hardware apparatuses and methods to prefetch a multidimensional block of elements from a multidimensional array |
US10528345B2 (en) * | 2015-03-27 | 2020-01-07 | Intel Corporation | Instructions and logic to provide atomic range modification operations |
US10019264B2 (en) * | 2016-02-24 | 2018-07-10 | Intel Corporation | System and method for contextual vectorization of instructions at runtime |
GB2549737B (en) * | 2016-04-26 | 2019-05-08 | Advanced Risc Mach Ltd | An apparatus and method for managing address collisions when performing vector operations |
US20190155603A1 (en) * | 2016-07-27 | 2019-05-23 | Intel Corporation | System and method for multiplexing vector compare |
WO2018022525A1 (en) * | 2016-07-27 | 2018-02-01 | Intel Corporation | System and method for multiplexing vector mask matches |
EP3336691B1 (en) | 2016-12-13 | 2022-04-06 | ARM Limited | Replicate elements instruction |
EP3336692B1 (en) | 2016-12-13 | 2020-04-29 | Arm Ltd | Replicate partition instruction |
CN108874445A (zh) * | 2017-10-30 | 2018-11-23 | 上海寒武纪信息科技有限公司 | 神经网络处理器及使用处理器执行向量点积指令的方法 |
US12057109B2 (en) | 2018-09-13 | 2024-08-06 | Shanghai Cambricon Information Technology Co., Ltd. | Information processing method and terminal device |
CN111258638B (zh) * | 2018-11-30 | 2022-10-04 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
CN111258637B (zh) * | 2018-11-30 | 2022-08-05 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
CN111258640B (zh) * | 2018-11-30 | 2022-10-04 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
CN111258639B (zh) * | 2018-11-30 | 2022-10-04 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
CN111258642B (zh) * | 2018-11-30 | 2022-10-04 | 上海寒武纪信息科技有限公司 | 数据处理方法、处理器、数据处理装置及存储介质 |
US20200210181A1 (en) * | 2018-12-29 | 2020-07-02 | Intel Corporation | Apparatuses, methods, and systems for vector element sorting instructions |
US20200401412A1 (en) * | 2019-06-24 | 2020-12-24 | Intel Corporation | Hardware support for dual-memory atomic operations |
CN110515660B (zh) * | 2019-08-28 | 2021-08-06 | 中国人民解放军国防科技大学 | 一种加速原子指令执行的方法和装置 |
CN110515659B (zh) * | 2019-08-28 | 2021-10-01 | 中国人民解放军国防科技大学 | 一种原子指令的执行方法和装置 |
CN117561501A (zh) * | 2021-06-22 | 2024-02-13 | 华为技术有限公司 | 一种多线程数据处理方法及装置 |
CN115098165B (zh) * | 2022-06-13 | 2023-09-08 | 昆仑芯(北京)科技有限公司 | 数据处理方法、装置、芯片、设备及介质 |
CN118093143B (zh) * | 2024-04-12 | 2024-07-02 | 清华大学 | 大语言模型解码阶段的数据调度方法和装置 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6460121B1 (en) * | 1998-09-14 | 2002-10-01 | Compaq Information Technologies Group, L.P. | Method for providing an atomic memory read using a compare-exchange instruction primitive |
CN1633637A (zh) * | 2001-10-05 | 2005-06-29 | 英特尔公司 | 用于单指令/多数据指令的乘法积累单元 |
CN1662904A (zh) * | 2002-06-26 | 2005-08-31 | 国际商业机器公司 | 具有级联simd结构的数字信号处理器 |
CN1790310A (zh) * | 2004-12-17 | 2006-06-21 | 英特尔公司 | 用于单指令、多数据执行引擎标志寄存器的评估单元 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4482956A (en) * | 1982-11-04 | 1984-11-13 | International Business Machines Corporation | Parallel queueing method |
JPS61288243A (ja) * | 1985-06-17 | 1986-12-18 | Fujitsu Ltd | コンペアアンドスワツプ命令処理方式 |
JPS6285372A (ja) | 1985-10-09 | 1987-04-18 | Nec Corp | マルチプロセツサシステムにおけるコンペアアンドスワツプ方式 |
US6880071B2 (en) | 2001-04-09 | 2005-04-12 | Sun Microsystems, Inc. | Selective signalling of later reserve location memory fault in compound compare and swap |
CN100545804C (zh) * | 2003-08-18 | 2009-09-30 | 上海海尔集成电路有限公司 | 一种基于cisc结构的微控制器及其指令集的实现方法 |
US8607241B2 (en) * | 2004-06-30 | 2013-12-10 | Intel Corporation | Compare and exchange operation using sleep-wakeup mechanism |
US7509463B2 (en) | 2005-12-01 | 2009-03-24 | Sony Computer Entertainment, Inc. | Cell processor atomic compare and swap using dedicated synergistic processor element |
US20070260634A1 (en) | 2006-05-04 | 2007-11-08 | Nokia Corporation | Apparatus, system, method, and computer program product for synchronizing the presentation of media content |
US7627723B1 (en) | 2006-09-21 | 2009-12-01 | Nvidia Corporation | Atomic memory operators in a parallel processor |
US7908255B2 (en) * | 2007-04-11 | 2011-03-15 | Microsoft Corporation | Transactional memory using buffered writes and enforced serialization order |
US8996845B2 (en) | 2009-12-22 | 2015-03-31 | Intel Corporation | Vector compare-and-exchange operation |
-
2009
- 2009-12-22 US US12/644,529 patent/US8996845B2/en not_active Expired - Fee Related
-
2010
- 2010-11-11 TW TW102143765A patent/TWI525539B/zh not_active IP Right Cessation
- 2010-11-11 TW TW099138849A patent/TWI427533B/zh not_active IP Right Cessation
- 2010-11-29 GB GB1119083.2A patent/GB2488619B/en not_active Expired - Fee Related
- 2010-11-29 WO PCT/US2010/058238 patent/WO2011087590A2/en active Application Filing
- 2010-11-29 DE DE112010004963T patent/DE112010004963T5/de not_active Withdrawn
- 2010-11-29 KR KR1020127019177A patent/KR101461378B1/ko not_active IP Right Cessation
- 2010-11-29 JP JP2012517936A patent/JP5421458B2/ja not_active Expired - Fee Related
- 2010-12-21 CN CN201510434397.XA patent/CN105094749A/zh active Pending
- 2010-12-21 CN CN201010619577.2A patent/CN102103570B/zh not_active Expired - Fee Related
- 2010-12-22 BR BRPI1005259-3A patent/BRPI1005259A2/pt not_active Application Discontinuation
-
2013
- 2013-11-21 JP JP2013240725A patent/JP5876458B2/ja not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6460121B1 (en) * | 1998-09-14 | 2002-10-01 | Compaq Information Technologies Group, L.P. | Method for providing an atomic memory read using a compare-exchange instruction primitive |
CN1633637A (zh) * | 2001-10-05 | 2005-06-29 | 英特尔公司 | 用于单指令/多数据指令的乘法积累单元 |
CN1662904A (zh) * | 2002-06-26 | 2005-08-31 | 国际商业机器公司 | 具有级联simd结构的数字信号处理器 |
CN1790310A (zh) * | 2004-12-17 | 2006-06-21 | 英特尔公司 | 用于单指令、多数据执行引擎标志寄存器的评估单元 |
Also Published As
Publication number | Publication date |
---|---|
TW201428622A (zh) | 2014-07-16 |
BRPI1005259A2 (pt) | 2013-04-02 |
CN105094749A (zh) | 2015-11-25 |
US20110153989A1 (en) | 2011-06-23 |
WO2011087590A2 (en) | 2011-07-21 |
GB2488619B (en) | 2017-10-18 |
JP5876458B2 (ja) | 2016-03-02 |
TWI427533B (zh) | 2014-02-21 |
JP5421458B2 (ja) | 2014-02-19 |
TW201140435A (en) | 2011-11-16 |
CN102103570A (zh) | 2011-06-22 |
KR101461378B1 (ko) | 2014-11-20 |
GB201119083D0 (zh) | 2011-12-21 |
WO2011087590A3 (en) | 2011-10-27 |
GB2488619A (en) | 2012-09-05 |
DE112010004963T5 (de) | 2012-11-22 |
TWI525539B (zh) | 2016-03-11 |
JP2014059902A (ja) | 2014-04-03 |
US8996845B2 (en) | 2015-03-31 |
KR20120096588A (ko) | 2012-08-30 |
JP2012531682A (ja) | 2012-12-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102103570B (zh) | Simd向量的同步化 | |
US10776190B2 (en) | Hardware apparatuses and methods for memory corruption detection | |
CN102197368B (zh) | 数据处理指令的许可检查 | |
US6754859B2 (en) | Computer processor read/alter/rewrite optimization cache invalidate signals | |
US10547680B2 (en) | Systems, methods, and apparatuses for range protection | |
CN101322103A (zh) | 无约束事务存储器系统 | |
CN101470629A (zh) | 用于在事务性存储器系统中实现强原子性的机制 | |
CN106293894B (zh) | 执行事务性功率管理的硬件设备和方法 | |
TWI748970B (zh) | 用於遠端監視的設備 | |
KR20170066681A (ko) | 이진 변환된 자가 수정 코드 및 교차 수정 코드의 처리 | |
US5293602A (en) | Multiprocessor computer system with dedicated synchronizing cache | |
CN115577402A (zh) | 设备之间的安全直接对等存储器访问请求 | |
EP3716046B1 (en) | Technology for providing memory atomicity with low overhead | |
CN111095203A (zh) | 实时寄存器值的集群间通信 | |
CN104049946A (zh) | 用于确定写掩码寄存器的尾随最低有效掩码比特的系统、设备,以及方法 | |
CN114253603A (zh) | 用于处理器中的用户空间对象一致性的系统、装置和方法 | |
CN111352757A (zh) | 检测未初始化存储器读取的设备、系统和方法 | |
US10175992B2 (en) | Systems and methods for enhancing BIOS performance by alleviating code-size limitations | |
CN114924793A (zh) | 处理单元、计算设备和指令处理方法 | |
US10853078B2 (en) | Method and apparatus for supporting speculative memory optimizations | |
US20240202125A1 (en) | Coherency bypass tagging for read-shared data | |
US12131159B2 (en) | ISA opcode parameterization and opcode space layout randomization | |
CN114647443A (zh) | Isa操作码参数化和操作码空间布局随机化 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20150812 Termination date: 20181221 |
|
CF01 | Termination of patent right due to non-payment of annual fee |