CN103299272B - 使用存储的原子程序的可编程原子内存 - Google Patents
使用存储的原子程序的可编程原子内存 Download PDFInfo
- Publication number
- CN103299272B CN103299272B CN201180064250.6A CN201180064250A CN103299272B CN 103299272 B CN103299272 B CN 103299272B CN 201180064250 A CN201180064250 A CN 201180064250A CN 103299272 B CN103299272 B CN 103299272B
- Authority
- CN
- China
- Prior art keywords
- sequence
- instruction
- cache line
- checking
- atom
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 230000015654 memory Effects 0.000 title claims abstract description 74
- 238000000034 method Methods 0.000 claims abstract description 128
- 230000008569 process Effects 0.000 claims abstract description 84
- 238000003860 storage Methods 0.000 claims abstract description 29
- 238000012795 verification Methods 0.000 claims description 18
- 230000004044 response Effects 0.000 claims description 17
- 238000012545 processing Methods 0.000 abstract description 12
- 238000010586 diagram Methods 0.000 description 13
- 230000006870 function Effects 0.000 description 6
- 230000000712 assembly Effects 0.000 description 5
- 238000000429 assembly Methods 0.000 description 5
- 238000004519 manufacturing process Methods 0.000 description 5
- 230000007246 mechanism Effects 0.000 description 5
- 230000002093 peripheral effect Effects 0.000 description 4
- 238000001514 detection method Methods 0.000 description 3
- 238000005516 engineering process Methods 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 230000003287 optical effect Effects 0.000 description 3
- 238000004321 preservation Methods 0.000 description 3
- 239000004065 semiconductor Substances 0.000 description 3
- 230000015572 biosynthetic process Effects 0.000 description 2
- 238000004364 calculation method Methods 0.000 description 2
- 230000015556 catabolic process Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000006731 degradation reaction Methods 0.000 description 2
- 230000008676 import Effects 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000003786 synthesis reaction Methods 0.000 description 2
- ZICZZIRIRHGROF-UHFFFAOYSA-N 1-$l^{1}-oxidanyl-2,2,4,5,5-pentamethylimidazole Chemical compound CC1=NC(C)(C)N([O])C1(C)C ZICZZIRIRHGROF-UHFFFAOYSA-N 0.000 description 1
- 108010076504 Protein Sorting Signals Proteins 0.000 description 1
- 101100078188 Saccharomyces cerevisiae (strain ATCC 204508 / S288c) MST27 gene Proteins 0.000 description 1
- 230000002411 adverse Effects 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000033228 biological regulation Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 230000001143 conditioned effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 210000003127 knee Anatomy 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000001693 membrane extraction with a sorbent interface Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 239000000523 sample Substances 0.000 description 1
- 230000002194 synthesizing effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000010200 validation analysis Methods 0.000 description 1
- 230000000007 visual 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
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
-
- 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/30181—Instruction operation extension or modification
- G06F9/30189—Instruction operation extension or modification according to execution mode, e.g. mode flag
-
- 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
-
- 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
-
- 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
- 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/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- 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/46—Multiprogramming arrangements
-
- 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/46—Multiprogramming arrangements
- G06F9/466—Transaction processing
- G06F9/467—Transactional memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种多处理核心系统中的处理核心被配置来执行指令序列作为单原子内存事务。所述处理核心验证序列满足一组一个或多个原子性标准,包括序列中的没有指令指示处理核心访问共享内存。在验证序列后,所述处理核心诸如通过以下步骤执行序列作为单原子内存事务:锁定存储共享内存数据的源缓存线;执行验证的指令序列;将序列结果存储到所述源缓存线中;和将所述源缓存线解锁。
Description
发明背景
现代的计算机架构趋势已走向多重处理,其中单系统和/或处理器包括共享内存并且每个能够进行独立的并行执行的多个处理核心。如今,单芯片上具有2、4或8个处理核心的片上多处理器(CMP)或具有更多处理核心的通用图形处理单元(GPGPU)已相对普遍。此外,在将来每个芯片和/或系统上处理核心的数量可能甚至进一步增加。
为了利用现代处理器增大的并行能力,软件编程员会利用不同的同步设备,诸如支持指令集架构(ISA)的原子指令。处理核心可针对系统中的其它处理核心原子地执行这些指令,即使指令自身包含多个微指令。例如,x86架构中的原子指令CMPXCHG(比较和交换)是指示处理核心原子地比较给定内存位置的内容与给定值并且只要两个值相同就将内存位置的内容修改为给定新值的通用原子指令。
ISA有时提供限量的专用原子指令,诸如原子XADD、BTS等。在由编程员所要的特定功能不存在专用指令的情况下,编程员可以尝试使用通用指令(诸如CMPXCHG)建立这个逻辑。然而,这些建立可能是复杂、难以实施的,并且执行起来缓慢。
实施方案概述
一种多处理核心系统中的处理核心被配置来执行指令序列作为单原子内存事务。处理核心验证序列满足一组一个或多个原子性标准,包括原子序列中的指令不指示处理核心访问共享内存。在验证序列后,处理核心执行序列作为单原子内存事务。所述执行可以包括锁定存储共享内存数据的源缓存线,执行验证的指令序列,将原子序列的结果存储到源缓存线中,和对源缓存线解锁。在某些实施方案中,处理核心在保证转发进度下执行序列。
在某些实施方案中,微代码验证代理可以执行验证并将验证序列的副本存储在受保护内存区中。在这些实施方案中,验证代理可以将识别符返回到用户代码,其中用户代码可随后使用识别符调用原子序列。
附图简述
图1是示出了根据某些实施方案的被配置来在保证转发进度下验证和执行原子序列指令的计算机系统的方框图。
图2是示出了根据某些实施方案的用于原子地执行自定义微指令序列的方法的流程图,其中指令序列符合给定原子性标准。
图3是示出了根据某些实施方案的处理核心使用指令执行流水线中的运行时间验证单元验证和执行原子序列指令指令的方法的流程图。
图4是示出了根据某些实施方案的处理核心使用预执行验证(例如,微编码的验证代理)验证和执行原子序列指令的方法的流程图。
图5是示出了根据某些实施方案的用于在运行时间前使用微编码的验证代理验证和执行原子序列的更详细方法的方法的流程图。
图6是示出了根据某些实施方案的包括被配置来代表一个或多个处理核心和/或装置执行原子序列指令的专用处理器的系统的方框图。
图7是示出了根据某些实施方案的用于使用原子程序执行单元执行原子序列的方法的流程图。
图8是示出了根据某些实施方案的被配置来使用代码验证代理执行原子序列指令作为单原子事务的计算机系统的方框图,如本文描述。
实施方案详述
本说明书包括对“一个实施方案”或“实施方案”的参考。短语“在一个实施方案中”或“在实施方案中”的出现无需指相同实施方案。特定特征、结构或特性可以按与本公开一致的任何合适方式进行组合。
术语:以下段落提供存在于本公开(包括随附权利要求书)中的术语的定义和/或语境。
“包括”:这个术语是开放式的。如随附权利要求书中使用,这个术语不排除额外结构或步骤。考虑引用“包括一个或多个处理单元的装置”的权利要求,这个权利要求不排除包括额外组件(例如,网络接口单元、图形电路等)的装置。
“被配置来”:不同单元、电路或其它组件可以描述或声称为“被配置来”执行任务。在这些情形下,“被配置来”是用来通过指示单元/电路/组件包括在操作期间执行任务的结构(电路)来对结构进行暗示。照此,单元/电路/组件可视作被配置来甚至在指定单元/电路/组件目前不可操作(例如,未开启)时执行任务。与“被配置来”语言一起使用的单元/电路/组件包括硬件-例如,存储可执行以实施操作的程序指令的电路、内存等。引用单元/电路/组件“被配置来”执行一个或多个任务并非明确旨在对单元/电路/组件调用35U.S.C.§112第六段。此外,“被配置来”可包括由软件和/或硬件(例如,FPGA或执行软件的通用处理器)操控以按能够执行待解决任务的方式进行操作的一般结构。“被配置来”还可以包括调节制造过程(例如,半导体制造设备)以制造被调节来实施或执行一个或多个任务的装置(例如,集成电路)。
“第一”、“第二”等:如本文使用,这些术语用作其前面名词的标签并且不暗示任何类型的排序(例如,空间、时间、逻辑等)。例如,在具有八个处理元件或核心的处理器中,术语“第一”和“第二”处理元件可用来指八个处理元件的任何两个。换句话说,“第一”和“第二”处理元件不限于逻辑处理元件0和1。
“基于”:如本文使用,这个术语用来描述影响决定的一个或多个因素。这个术语不排除可能影响决定的额外因素。即,决定可以单独基于所述因素或至少部分基于所述因素。考虑短语“基于B决定A”:虽然B可以是影响A的决定的因素,但是这个短语不排除A的决定也基于C。在其它实例中,A的决定可以单独基于B。
通用原子指令(诸如CMPXCHG)可用来原子地建立用于访问单内存位置(例如,单缓存线)的任意逻辑。如本文使用,术语原子地是指其中间结果不被其它程序执行线程观测到的执行。因此,原子执行序列(即,原子序列)中的指令对所有其它线程来说似乎已执行作为单原子操作。
使用通用原子指令建立原子逻辑的方法具有多个缺点。首先,使用这些通用指令实施不同功能通常需要更复杂的无锁算法或软件信号量。此外,由于CMPXCHG操作可能在存在竞用时中止,所以利用这些操作的算法无法保证转发进度并且需要软件竞用管理机构以在并行执行线程之间进行仲裁。这导致性能损失,因为利用CMPXCHG的用户程序或客户OS无法保证其将通过算法继续进行而不存在中断或页面错误的可能性。此外,CMPXCHG操作自身的执行会有些低效,从而一次操作需要至少访问目标缓存线两次。
编程员通常需要不易于以有限组的固定功能原子操作执行和/或如果使用这些原子指令建置那么可能遭受性能退化的单线原子事务。例如,某些多核任务管理技术需要原子事务具有可以在相同缓存线中的两个或两个以上数据值。
最近,已提议硬件事务内存系统(HTM)作为用于允许编程员原子地执行自定义指令序列的构件。然而,这些系统需要复杂的硬件支持并且仍经受活锁情况,诸如中止的事务尝试。因此,这些系统仍会在存在竞用下经受性能退化并且需要竞用管理机构以避免死锁和/或活锁。
如本文使用,术语死锁是指给定执行线程由于与另一线程竞用(例如,两个线程的每个并行地等待另一线程释放各自锁)而无限期地安装的情况。如本文使用,术语活锁是指执行线程重复尝试重复执行相同指令序列并且由于与另一线程竞用(例如,HTM系统由于内存竞用而重复尝试并中止事务区的执行)而失败(至少一次)的情况。虽然给定线程是死锁或活锁的,但是其无法取得转发进度(即,执行和超越指令序列)。
根据各个实施方案,计算机系统可以被配置来提供允许编程员指定自定义指令序列为所述系统可执行为保证取得转发进度的单原子事务的原子序列。如本文使用,转发进度保证意味着原子序列指令的执行将不会经受如上文定义的死锁或活锁。
在某些实施方案中,系统可以包括被配置来确认已指定为原子的序列是否符合特定原子性标准的验证代理。在这些实施方案中,满足原子性标准确保系统可在保证转发进度下原子地执行序列。在下文更详细描述的各个实施方案中,验证代理可以位于系统中的处理器、内存子系统或别处中。
图1是示出了根据某些实施方案的被配置来在保证转发进度下验证和执行原子序列指令的计算机系统的方框图。
根据所示实施方案,系统190包括片上多处理器(CMP)100,其经由互连件160连接到其它不同CMP150并连接到共享内存155。在某些实施方案中,共享内存155可以安置在内存分级结构中-例如,包括L3缓存和主内存的一个内存分级结构中。
虽然图1示出了具有多个互连的CMP的实施方案,但是本文描述的系统和技术通常可以应用于具有多个处理核心的其它系统,而不管其在系统中是如何分布的。例如,在某些实施方案中,CMP100和/或其它CMP150的任何一个可以用常规单核处理器取代。在其它实施方案中,CMP100可以包括多个核心并且系统可以不包括其它CMP(例如,150)、处理器或处理核心。
在所示实施方案中,CMP100包括通过片上网络145连接并且被配置来通过所述片上网络145进行通信的多个处理核心(即,105、135)。片上网络145可以对应根据不同网络拓扑(例如,2D或3D网格、Torus、线性、环形)安置的任何不同类型的对点对网络。在其它实施方案中,核心105和135可以经由总线和/或另一类型的互连件而连接。
在某些实施方案中,片上互连件(例如,片上网络145)可以将CMP上的核心(例如,CMP100上的核心105和135)连接到一个或多个共享数据缓存,诸如数据缓存140(例如,L2)缓存。在某些实施方案中,核心还可以包括核心可以使用其来存储从共享内存155缓存的数据的一个或多个专用数据缓存,诸如核心105的缓存115。
为了维持缓存数据的一致性,每个核心还可以包括不同的缓存一致性机构,诸如120。缓存一致性机构120可以包括用于与其它处理核心交换缓存一致性消息(例如,MESI协议消息)和/或执行同步功能(例如,标记缓存115中专有的缓存线、拒绝、接受、和/或回答来自其它处理核心的缓存一致性探测)的设备。
根据所示实施方案,核心105还可以包括可用于暂时存储数据(诸如指令或堆栈指针、中间结果或其它数据)的不同寄存器110。寄存器110可以包括不同专用和/或通用寄存器。
在所示实施方案中,核心105包括专用内存区130,其可以包括用于存储专用数据(诸如微代码132)的受保护快速内存区。微代码132可以包括由处理核心105执行以实施不同程序指令(例如,CMPXCHG)和/或任意微程序的微指令。在某些实施方案中,如下文描述,微代码132可以包括已由验证代理(例如,134)确认满足特定原子性标准的微程序和/或原子微程序。
在图1的特定实施方案中,专用内存区130包括用于实施微编码的验证代理134的微代码,其被配置来接收指令序列的指示,验证序列是否为满足给定原子性标准的序列,将序列的副本存储在专用内存区130中,和/或将识别存储的序列副本的处理程序返回到其它程序代码。在图3的描述中更详细描述这种方法。
在其它实施方案中,验证代理134无需一定被微编码并存储在内存区130中。例如,在某些实施方案中,可以由内建到核心105的硬件单元中的硬件逻辑(例如,指令解码器165)实施验证代理134。在另外的其它实施方案中,如下文描述,可以诸如通过内存子系统中的专用处理器与核心105完全分开地实施验证代理134。
图2是示出了根据某些实施方案的用于原子地执行自定义微指令序列的方法的流程图,其中指令序列符合给定原子性标准。方法200可以由处理核心(诸如图1的处理核心105)在保证转发进度下执行作为执行原子序列指令的部分。
如图2所示,方法200包括三个阶段:开场阶段210(其中可以读取要在事务中使用的任何数据)、主体执行阶段220(其中执行指令)和收场阶段230(其中将任何结果写回到内存)。在开场阶段期间,如在212,处理核心锁定给定源缓存线。如本文使用,锁定缓存线的处理核心具有对缓存线的专属读取/写入特权,使得其它处理核心无法读取缓存线内容或造成其被修改直到保持锁定的核心释放其为止。必需确保这个特性的特定步骤将随实施方案改变并且取决于其它系统详情,诸如采用的特定一致性机构和协议。例如,在某些实施方案中,锁定给定缓存线的核心可以在其从另一处理器接收的探测或其它缓存一致性消息涉及锁定的缓存线时拒绝所述探测或消息。在某些实施方案中,核心还可以延迟处理核心接收的不同硬件中断和/或软件信号直到执行原子序列和对缓存线解锁后为止。通过执行这些步骤,核心可以读取和/或修改缓存线的内容而不会中断。
在如在212锁定缓存线后,如在214,处理器可以读取来自源缓存线的数据。在214读取源缓存线可以包括将来自缓存线的数据存储在一个或多个目标寄存器中以供一个或多个序列指令进行后续访问。在某些实例中,处理器可以将少于整个源缓存线读取到目标寄存器中。例如,处理器可以仅将源缓存线的一部分(例如,64字节)读取到单个目标寄存器中或可以读取源缓存线的多个(或所有)部分,每个部分读取到各自目标寄存器中。
如图2所示,一旦开场阶段完成,执行可以继续进行到主体执行阶段220,其中诸如在222,核心执行原子序列指令作为单原子事务。这些指令各个可以读取来自目标寄存器的数据和/或将数据写入到目标寄存器。
如在222所指示,原子序列指令符合使核心能够执行序列作为单原子事务的特定原子性标准。在某些实施方案中,可以选择原子性标准以确保序列快速而简单地执行并且可保证执行核心的转发进度。这个标准可以包括序列中的指令不访问内存或跳转到原子序列外的代码区段的条件。在某些实施方案中,原子性标准可以包括对整个序列的条件,诸如执行序列的指令数限制或时间限制。下文更详细论述原子性标准。
当已执行原子序列中的所有指令时,过程进入收场阶段230。在收场阶段230中,处理核心可以将执行结果写回到锁定的缓存线232。例如,核心可以将目标寄存器中的数据写入到源缓存线。一旦这个过程完成,如在234执行核心可以立即释放源缓存线。
在执行指令序列前,系统可以首先确定序列实际上是符合特定原子性标准的原子序列。在不同实施方案中,这个决定可以在不同时间和/或通过不同系统组件完成。例如,在某些实施方案中,序列可以在执行其时诸如通过指令执行流水线内(例如,在解码器165中)的硬件实施验证代理得以验证。在其它实施方案中,序列可以在被执行前诸如通过在执行指令序列前调用的微编码的验证代理而得以统计地验证。在另外的其它实施方案中,可以由被配置来代表其它处理核心执行原子序列指令的专用片外处理器验证和/或执行序列。虽然存在其它可能性,但是下文进一步详述这三个配置。
图3是示出了根据某些实施方案的使用指令执行流水线中(例如,在解码器中)的运行时间验证单元验证和执行原子序列指令的处理核心的方法的流程图。在某些这类实施方案中,解码器(例如,图1的165)可以包括被配置来在解码阶段期间验证序列中的每个指令的验证单元。响应于发现序列(和/或序列中的任何指令)不符合原子性标准,这个验证代理可以停止执行,引发异常,和/或以其它方式指示错误和对源缓存线解锁。
图3示出了在这个实施方案中验证代理可以通过其操作的一种方法的实例。在不同实施方案中,可以由解码器、由作为解码器的部分实施的验证单元和/或由处理器或处理核心的另一硬件组件执行图3的方法300。
如在305所示,方法300是响应于系统检测指定用于原子执行的程序指令序列的开始而开始。例如,在某些实施方案中,在程序代码中可以使用分别表示序列开始和结束的“START”和“STOP”程序指令区别序列。
响应于读取START指令,如在305,核心可以执行对应图2的开场的一个或多个步骤。这些步骤可以包括读取源缓存线(如在212)和对缓存线解锁(如在214)。
在某些实施方案中,可以由START指令(例如,在一个或多个字段或参数中)指示源缓存线和/或目标寄存器。例如,在利用x86兼容架构的实施方案中,START指令可以包括START指令的一个字段(例如,modrm.r/m字段)中源缓存线的内存地址和另一字段(例如,modrm.reg字段)中目标寄存器的指示。响应于读取这些值,核心可以锁定识别的源缓存线(如在310)和将来自指示的源缓存线的数据加载到识别的目标寄存器(如在315)中以供序列中的一个或多个指令进行后续访问。
在某些实施方案中,执行START指令还可以包括将数据的内存地址记录在源缓存线中(如在320)和/或将指令数量记录在原子序列中(如在325)。在某些实施方案中,可以由存储在START指令的另一字段(诸如xop.vvvv字段)中的值指示原子区中指令的数量。
在完成步骤305至325(其可以对应执行的开场阶段)后,核心可以执行事务主体,如由步骤330至345所示。在这个阶段期间,核心进入代码序列并且如果序列中的下一个指令满足原子性标准(如由来自330的肯定退出指示),那么核心执行指令(如在340)。如果下一个指令不满足原子性标准(如由来自330的否定退出指示),那么系统可能引发异常,停止序列的执行,跳转到错误处理代码,和/或以其它方式指示序列不满足原子性标准,如在335。
在某些实施方案中,可以选择原子性标准以确保序列快速而简单地执行并且可保证执行核心的转发进度。例如,在某些实施方案中,标准可以包括序列中的指令无法访问内存的标准。在某些实施方案中,标准还可以包括序列中的指令无法访问(读取和/或写入)不是通用寄存器(GPR)的寄存器的标准。由于满足这些标准的指令自身无法造成与另一执行线程发生数据冲突,所以仅包括这些操作的指令序列可能不会经受死锁或活锁,且因此可以保证在执行时取得转发进度。在各个实施方案中,原子性标准可以包括其它或额外条件(例如,非跳转指令、非中间形式的指令等)。除关于原子序列可以包括的指令的类型的标准外,强制执行的原子性标准还可以包括对序列中指令的数量的限制。
虽然满足原子性标准的指令无法直接访问共享内存,那么其可以经由目标寄存器间接访问源缓存线中的数据。因此,通常将访问源缓存线中的数据的指令反可以读取来自目标寄存器的数据和/或将其写入到目标寄存器。一旦核心完成执行原子序列(例如,遭遇STOP指令)(如由来自345的否定退出指示),如在350核心可以立即将存储在目标寄存器中的计算结果写回到源缓存线,并且如在355释放源缓存线。因此,核心能够有效地执行原子序列中的指令作为单原子操作。
在某些实施方案中,确定指令是否满足原子性标准(步骤330)的解码器可以包括检查指令的操作码以确定其是否指示已知满足原子性标准的指令。例如,在某些实施方案中,如果指令的操作码指示选自以下组的任何指令:ADD、ADC、AND、XOR、OR、SBB、SUB、CMP、CMOVcc、BT、BTS、BTC、BTR、TEST和XCHG,那么x86系统中的解码器可以确定指令满足原子性标准。在这个实例中,所列指令满足不访问内存或非通用寄存器并且均无法指示处理器将程序控制传送到原子序列外的点(即,非跳转指令)的原子性标准。
虽然步骤330至345指示线性指令执行,但是所属技术领域一般人员将明白不同核心可以利用指令流水线使得多个指令可以在340并行执行,同时后续指令在330进行解码和/或与原子性标准进行比较。此外,条件词的存在可能造成序列中的不同指令执行多次或根本不执行。
在某些实施方案中,在355释放源缓存线可以包括诸如通过接受关于缓存线的后续探测、重新启用中断和/或其它实施方式特定步骤而取消在310执行的锁定程序。
在某些实施方案中,验证代理可以被配置来在执行前而非在运行时验证指令序列(如在图3)。例如,这个验证代理可以以微代码(例如,微代码132)进行实施。
图4是示出了根据某些实施方案的使用预执行验证(例如,微编码的验证代理)验证和执行原子序列指令的处理核心的方法的流程图。在这些实施方案中,专用内存区(诸如图1的130)可以存储实施被配置来验证指令序列是否为符合一个或多个原子性标准的原子序列的验证代理(例如,134)的程序指令。
根据所示实施方案,方法400开始于405,其中用户代码登记具有验证代理的程序指令序列作为原子序列。在某些实施方案中,用户代码可以使用专用指令(例如,ATOMICDEF)登记序列。这个指令可以包括指示指令序列的参数和/或字段。
响应于尝试在405登记指令序列,微代码验证代理尝试如在410验证指令序列是原子序列。如在410所指示,验证序列为原子可以包括检查序列中的每个指令并确定其满足一个或多个原子性标准。
如同运行时间验证代理,微代码验证代理可以检查序列中的每个指令满足验证标准。这些标准可以包括由运行时间验证代理强制执行的标准(例如,序列中的指令无法访问内存或除GPR外的寄存器)。此外,微代码验证代理可以确保每个指令快速而容易地解码(例如,每个指令长度有限(诸如4字节),并且不包括中间形式的指令)。如同基于硬件的运行时间验证代理,微代码验证代理可以响应于检测指令包括已知指示满足原子性标准的一组给定可接受指令的一个而确定指令满足原子性标准。
如果序列是原子序列(即,满足原子性标准),那么如在415验证代理可以将原子序列存储在专用的受保护内存区中。在某些实施方案中,核心可以包括专用内存区(诸如130),其中可以存储原子序列。专用内存区130可以包括不同受保护区(例如,c6保存区或c6保存区的子集),其中微代码验证代理可以存储指令序列而不存在其被另一处理器覆写的可能性。术语受保护内存区可以指微代码可访问但软件或其它处理器无法访问的处理器的内存区。
在420,验证代理将处理程序返回到调用的用户代码,如在420。处理程序可以包括用于存储的原子序列的唯一识别符。当用户代码需要执行原子序列时,如在425其可以使用这个处理程序调用存储的原子序列。例如,如下文描述,系统可以识别用于调用原子序列的特殊指令。
响应于用户代码使用识别的处理程序调用存储的序列(如在425),如在430处理核心可以原子地执行预验证的原子序列。在某些实施方案中,在430执行原子序列可以包括将源缓存线读取到目标寄存器中,执行原子序列,将目标寄存器中的结果写回到源缓存线,和对源缓存线解锁。由于序列已被验证,所以在430执行原子序列不可能包括重新验证序列。
图5是示出了根据某些实施方案的用于在运行时间前使用微编码的验证代理验证和执行原子序列的更详细方法的流程图。图5所示的方法500可以对应图4中用于x86架构的方法400的特定实施方式。然而,在不同实施方案中,实施方式可以稍有不同,包括特定指令名称、用来传达数据的指令字段、使用的特定寄存器等。希望本公开涵盖所有这些实施方案。
根据所示实施方案,为了登记具有微代码验证代理的指令序列,如在505用户代码首先执行例如ATOMICDEF指令。在所示实施方案中,ATOMICDEF指令包括modrm.r/m字段,其中存储序列中的第一指令的相对指令指针地址。此外,在这个实施方案中,ATOMICDEF指令包括xop.vvvv字段,其存储序列中指令的计数(即,数量)。
作为执行ATOMICDEF指令的部分(或响应于其),微代码验证代理尝试验证由ATOMICDEF(例如,在modrm.r/m字段中)指示的指令序列满足原子性标准。如上文描述,这个验证可以包括确定序列中的每个指令是满足原子性标准的预知可接受组指令的一个。在某些实施方案中,这个原子性标准可以包括以下要求:(a)序列中的指令无法访问内存,(b)序列中的指令无法访问不是GPR的寄存器,(c)使用特定的有限长度形式指定每个指令,(d)序列中的指令不使用中间形式(中间指令形式包括指定为数字而非寄存器识别符的参数),和/或在保证转发进度下使核心能够执行原子序列作为单原子事务的其它不同要求。
如果序列中的一个或多个指令不满足原子性标准,那么验证失败(如由来自515的否定退出指示)。在某些实施方案中,微代码验证代理可以通过如在520将失败指示返回到用户代码而非将处理程序返回到存储版本的序列而用信号通知序列满足原子性标准失败了。例如,如果验证失败,那么验证代理可以将值0返回到调用的用户代码而非将处理程序返回到存储的原子序列。
如果验证成功(如由来自515的肯定退出指示),那么由ATOMICDEF指令指示的序列是满足原子性标准的原子序列。在这种情况下,在525微代码代理可以将指令序列复制到受保护内存区(诸如c6保存区)或确保在ATOMICDEF指令执行后软件不覆写指令的另一实施方式特定区,从而产生死锁的可能性。
在某些实施方案中,代理可以开始具有可执行以执行原子序列指令的开场阶段的一个或多个指令的保存版本的指令序列。例如,在530,代理开始具有START指令的保存的指令序列。如上文描述,START指令可以包括可用来指示源缓存线和目标寄存器用于序列的给定原子执行的各自字段。在这些实施方案中,可以执行START指令以锁定源缓存线并且将来自其的数据加载到目标寄存器。
在535,微代码验证代码返回唯一识别存储的原子序列的处理程序(到调用的用户代码)。用户代码接着可以使用唯一处理程序调用预验证的原子序列且从而原子地执行所述序列。例如,在540,用户代码通过执行ATOMICSTART指令调用存储的原子序列。ATOMICSTART指令包括指定唯一处理程序和序列的内存位置/输入(例如,源缓存线和目标寄存器)的参数和/或字段。
响应于540的调用,如在545,处理核心原子地执行存储的原子序列。在545原子地执行序列可以包括执行开场阶段、主体阶段和收场阶段,诸如图2中方法200的开场阶段、主体阶段和收场阶段。
在某些实施方案中,可以延伸上文描述的基本START功能以允许原子序列在多个缓存线上操作。例如,START2指令可以定义成允许原子序列的开场阶段锁定和加载第二源缓存线。因此,原子序列指令可以对来自多个缓存线的数据操作。
在某些实施方案中,(例如,使用START和START2)访问多个缓存线的原子序列的开场可以按避免死锁情况的方式进行实施。例如,在某些实施方案中,可以执行START2以仅读取和锁定紧接由先前START指令锁定的一个缓存线的缓存线。通过这样做,系统避免死锁情况,其中两个线程尝试以相反次序锁定两个相同缓存线,每个线程成功锁定第一缓存线,但接着无限期地等待另一线程释放另一缓存线。
在某些实施方案中,START2可以用来指定无需一个缓存线紧接由先前START指令指定的源缓存线的任意源缓存线。然而,为了避免死锁,系统可以对锁定强制执行排序。例如,微代码可用来确保执行START和START2的核心按由源缓存线的各自物理内存地址确定的次序(例如,升或降)锁定每个源缓存线。通过跨所有线程强加这个排序,系统可避免与锁定多个缓存线相关的死锁情况。
某些原子序列可能需要执行跳转指令。然而,如果跳转指令造成程序流程跳转到原子序列外,那么其可能是有问题的。这可能未必对具有运行时间验证方案(例如,在解码器中)的实施方案造成相反效应,因为运行时间验证代理检测到在执行其前不满足原子性标准的任何指令。然而,由于预运行时间验证代理(例如,微编码的验证代理)事先检查原子序列,所以在运行时跳转到序列外可以允许执行不满足原子性标准的指令。
在某些实施方案中,为了避免跳转到预验证的原子序列指令外,原子性标准可以包括不允许跳转指令的规定。在其它实施方案中,标准可以允许跳转指令,但进行检查以确保其不会造成跳转到原子序列外的执行。
如本文描述,微编码的验证代理还可以在不同系统中强制执行不同的实施方式特定原子性标准。例如,在某些实施方案中,微编码的验证代理可能不允许利用指令指针相对寻址模式的指令。由于调用保存的原子序列可以修改指令指针,所以包括IP相对参数的指令可能造成非预期程序行为。
在某些实施方案中,可以由除核心外的实体执行原子序列验证和/或执行。例如,在某些实施方案中,系统可以包括被配置来供多个处理核心和/或供其它系统装置使用的单独片外原子程序执行单元。片外单元可以被配置来从处理核心和/或从另一系统装置接收原子序列的指示,并且作为响应而执行原子序列作为单原子内存事务。在这些实施方案中,原子执行单元可以显示地或隐式地验证指示的指令序列满足一组原子性标准。例如,如果原子执行单元仅能够解译满足该组原子性标准的序列,那么所述单元可以隐式地验证序列。下文更详细描述这些实施方案。
图6是示出了根据某些实施方案的包括被配置来代表一个或多个处理核心和/或装置执行原子序列指令的专用处理器的系统的方框图。在所示实施方案中,系统600包括片上多处理器605,其包括处理核心610和630。处理核心通过片上网络640而连接到彼此和共享缓存635。每个核心自身包括一个或多个专用缓存(例如,615)和寄存器(例如,620)。如上文参考图1描述,在各个实施方案中,系统600中的处理核心可以分布在不同安置中,包括在一个或多个单独芯片上。例如,系统600可以包括一个或多个其它CMP和/或处理器,诸如650。
根据所示实施方案,互连件645将CMP605连接到其它处理器/CMP605和共享内存子系统655。共享内存子系统655可以包括用于存储共享数据(例如,由系统中的多个处理核心共享的数据)和/或访问其的设备。例如,在所示实施方案中,共享内存子系统655包括用于存储数据的一个或多个共享存储器665和用于使由系统的处理核心访问共享数据变得容易的内存控制器660。
在图6所示的实施方案中,系统600包括原子程序执行单元670,其作为用于执行原子程序的专用处理器进行实施。在各个实施方案中,原子程序执行单元670可以作为共享内存子系统655的部分进行实施和/或位于系统的不同部分中以使快速访问内存控制器(例如,660)、共享缓存(例如,665)和/或共享内存子系统中的其它组件和/或功能变得容易。
在某些实施方案中,处理核心(例如,610)或外围装置(例如,680)可以利用专用指令集(ISA)对原子程序进行编码并将原子程序(或其指示)发送到原子执行单元(例如,670)进行执行。在某些实施方案中,ISA的表达意义可能是有限的使得使用ISA编码的任何有效程序必需满足该组原子性标准。响应于接收原子程序或其指示,原子执行单元可以解译并执行原子程序作为单原子内存事务。
在各个实施方案中,原子程序执行单元可以被配置来供一个或多个处理核心或供外围装置(例如,680)使用。在各个实施方案中,装置680可以包括图形适配器、音频适配器、I/O装置(诸如磁盘或光学驱动器)和/或其它装置。
图7是示出了根据某些实施方案的用于使用原子程序执行单元(诸如,670)执行原子序列的方法的流程图。在所示实施方案中,方法700开始于如在705处理核心使用专用编程语言指定原子序列指令。处理核心可以在处理核心的单缓存线(即,源缓存线)中指定原子序列指令为原子程序。
在某些实施方案中,专用编程语言可以被指定来在保证转发进度下隐式地强制执行允许原子执行单元执行序列的不同原子性标准。例如,在某些实施方案中,这些标准可以包括原子序列中的指令不指示原子执行单元访问共享内存和/或跳转到原子序列外的指令的标准。通过限制原子编程语言的表达意义以排除这些指令,系统可保证步骤700中所含的任何有效程序满足这些原子性标准。可以类似地执行其它原子性标准(例如,不访问除通用寄存器外的寄存器等)。
在某些实施方案中,语言可以是在缓存线中适当地执行的堆栈式语言。适当执行是指仅使用其中指定程序的内存空间执行程序的技术。例如,存储在单缓存线中的堆栈式语言可以通过弹出来自堆栈的指令和/或操作码并将指令和操作码的结果推送回到堆栈上使得堆栈绝不长到单缓存线外而适当地执行。以下指令定义用于对满足一个或多个原子性标准的原子程序进行编码的示例性堆栈式语言,使得原子执行单元可以执行原子程序作为单原子内存事务:
LOADADDR0:加载来自地址0的一个字(例如,8字节)并推送结果
LOADADDR1:加载来自地址1的一个字并推送结果
STOREADDR0:弹出堆栈顶并将字存储到地址0(存储区待定直到结束为止)
STOREADDR1:弹出堆栈顶并将字存储到地址1(存储区待定直到结束为止)
ADD,SUB:Pop2、加/减值并推送结果
DUP:推送堆栈顶的副本
DUP2:推送前两个堆栈元素的副本
SWAP:交换第一与第二堆栈元素
END:终止程序并写出存储区
BTn:弹出、推送弹出值的比特N的值
PUSHimm:推送中间值#N
CMPSIGNED:根据弹出的带符号值的差的正负号Pop2和推送-1、0、1
CMPUNSIGNED:根据弹出的无符号值的差的正负号Pop2和推送-1、0、1
DUP2CMP:将弹出值Pop2、推送回到堆栈,并根据弹出值的差的正负号推送-1、0、1
JE、JG、JL:弹出堆栈并有条件地向前跳转N个指令(如果新指令地址在缓存线外,那么中止事务)
J:无条件地向前跳转N个指令(如果新指令地址在缓存线外,那么中止事务)
CMOVE、CMOVG、CMOVL:弹出来自堆栈的3个项。堆栈顶用作条件代码:如果条件为真的,那么推送堆栈上的第二项,否则推送第三项
ENDRETURN:如同END,但是返回堆栈顶的值
cc:条件句“如果为真”
E:如果堆栈顶(TOS)是0,那么为真
L:如果堆栈底是1,那么为真
G:如果堆栈顶和堆栈底均是0,那么为真
上述示例性指令集不包括访问编码程序的缓存线外的共享内存的指令。此外,指令集不包括可能造成执行并传送到程序外的位置的跳转指令。因此,使用示例性指令集编码的任何有效程序至少满足禁止访问共享内存的原子性标准并且跳转到原子序列外的位置。
上述堆栈式语言仅是用于表达原子程序的可能指令集的一个实例。其它变化是可能的并且所属技术领域熟练人员可以明白本公开的益处。例如,在某些实施方案中,指令集可以实施寄存器对寄存器语言而非堆栈式语言。用于对满足保证原子性和转发进度的一组原子性标准的原子序列进行编码的其它语言和方案是可能的。
一旦如在705核心生成原子程序,如在710核心可以立即将执行程序的请求发送到原子执行代理。在某些实施方案中,核心可以将编码的原子程序发送到执行单元并且执行单元可以接着将程序存储在局部缓存线中。在其它实施方案中,核心可以发送可被执行单元用来定位原子程序的地址或其它指示。
在某些实施方案中,处理核心可以经由内存映射(例如,如在MMIO中)或端口映射(例如,如在PMIO中)将原子程序传达到原子执行单元。例如,使用内存映射,处理核心可以使用相同地址总线对内存和原子执行单元进行寻址。在这些实施方案中,核心的可寻址内存空间的区可暂时或永久地保存用于内存映射的原子单元。核心可以接着在映射的内存区中生成原子程序且随后通知原子执行单元这些程序何时准备好执行。响应于这个指示,如在715执行单元可以读取并执行程序作为单原子内存事务。在某些实施方案中,内存映射的执行单元可以被配置来针对指派的地址空间的修改而监控处理器的地址总线,且因此在无明确通知的情况下检测新原子程序何时准备好执行。
如在所示实施方案中所示,在接收原子程序后,如在715原子程序执行但与可以解译并执行程序作为单原子事务。在某些实施方案(诸如使用堆栈式程序编码的实施方案)中,执行原子程序可以包括锁定其中存储原子程序的局部缓存线、适当地执行程序、和对缓存线解锁。因此,在715程序执行单元可以原子地执行编码的程序。在这个实例中,由于原子程序执行单元执行所有在锁定的单缓存线内的程序,所以所述单元可以避免死锁情况。
在各个实施方案中,如在方法700中,除处理核心外的装置(例如,音频/视频卡、其它外围装置等)可以利用原子程序执行单元。例如,这个装置可以生成原子程序(如在705)并且请求程序的执行(如在710)。
在某些实施方案中,某些代码(例如,操作系统)可以生成一个或多个原子程序并将其存储在受保护内存(705)中且随后使用识别处理程序调用原子执行单元(710)以执行对应程序(715)。因此,操作系统可以创建一组一个或多个可信的原子程序以供内核随后调用。
图8是示出了根据某些实施方案的被配置来使用代码验证代理执行原子序列指令作为单原子事务的计算机系统的方框图,如本文所述。在某些实施方案中,计算机系统800可以对应图1的计算机系统190。
计算机系统800可以对应任何不同类型的装置,包括但不限于个人计算机系统、桌上型计算机、膝上型或笔记型计算机、主机系统、手持计算机、工作站、网络计算机、消费类装置、应用服务器、存储装置(诸如交换机、调制解调器、路由器等)或一般来说任何类型的计算装置。
计算机系统800可以包括一个或多个处理器860,其任何一个可以包括多个物理和/或逻辑核心。处理器860可以包括用于验证自定义原子序列满足如本文描述的特定原子性标准的各自机构,诸如验证代理870。在不同实施方案中,如本文描述,验证代理870可以对应硬件实施的、运行时间验证代理(例如,在解码器中)或微编码的预运行时间验证代理。
计算机系统800还可以包括可以永久地存储数据的一个或多个永久性存储装置850(例如,光学存储装置、磁存储装置、硬盘驱动器、磁带驱动器、固态存储器等)。
在某些实施方案中,系统800可以包括用于执行原子序列指令的专用处理器,诸如原子程序执行单元824。虽然图8示出了核外原子程序执行单元824和验证代理870,但是其它实施方案可能仅包括这些组件的一个或另一个。
根据所示实施方案,计算机系统800可以包括一个或多个共享内存810(例如,缓存、SRAM、DRAM、RDRAM、EDORAM、DDR10RAM、SDRAM、RambusRAM、EEPROM等的一个或多个),其可以在多个处理核心之间(诸如在处理器860的一个或多个上)共享。一个或多个处理器860、存储装置850、原子程序执行单元824和共享内存810可以经由互连件840而连接。在各个实施方案中,系统可以包括图8未示出的少数或额外组件(例如,视频卡、音频卡、额外网络接口、外围装置、网络接口(诸如ATM接口、以太网接口、帧中继接口)、监控器、键盘、扬声器等)。此外,图8所示的不同组件可以进一步组合或分离到额外组件中。
在某些实施方案中,共享内存810可以存储程序指令820,其可以以平台本机二进制、任何解译语言(诸如JavaTM字节代码)或以任何其它语言(诸如C/C++、JavaTM等)或以其任何组合进行编码。如本文描述,程序指令820可以包括用于实施需要同步机构的一个或多个多线程应用程序822的程序指令并且可以包括原子序列指令。在某些实施方案中,程序指令820还可以包括可执行以实施对执行应用程序822提供软件支持(例如,调度、软件信号处理等)的操作系统824的指令。
根据所示实施方案,共享内存810可以包括可以由处理器860和/或其处理核心访问的共享数据830。如本文描述,处理器860之一可以将共享数据830的不同组分缓存在局部缓存中,并且通过根据缓存一致性协议交换消息而协调这些缓存中的数据。
程序指令820(诸如用来实施多线程应用程序822和/或操作系统824的程序指令)可以存储在计算机可读存储介质上。计算机可读存储介质可以包括用于以可由机器(例如,计算机)读取的形式(例如,软件、处理应用程序)存储信息的任何机构。计算机可读存储介质可以包括但不限于磁存储介质(例如,软盘);光学存储介质(例如,CD-ROM);磁光存储介质;只读存储器(ROM);随机访问存储器(RAM);可擦除可编程存储器(例如,EPROM和EEPROM);快速存储器;适合于存储程序指令的电介质或其它类型的介质。
在某些实施方案中,如上文描述的计算机可读存储介质可以用来存储由程序读取的指令并且直接或间接用来制造包括处理器860的一个或多个的硬件。例如,指令可以描述一个或多个数据结构,其描述以高级设计语言(HDL)(诸如Verilog或VHDL)的硬件功能的行为能力或寄存器传送级(RTL)描述。可以由可合成用于产生网表的描述的合成工具读取所述描述。网表可以包括表示处理器500的功能的(例如,合成库中定义的)一组门。网表可以接着被定位和路由来产生描述应用于掩码的几何形状的数据集。掩码可以接着用于不同半导体制造步骤以生产半导体电路或对应处理器100、605和/或860的电路。或者,根据要求,数据库可以是网表(有或无合成库)或数据集。
本公开的范围包括本文公开(明确地或隐含地)的任何特征或特征组合或其任何泛化,无论如何其减轻了本文处理的任何或所有问题。因此,可以在对任何这类特征组合实施本申请(或要求其优先权的申请)期间规划新权利要求。特定来说,参考随附权利要求书,来自相关权利要求的特征可以与独立权利要求的特征进行组合,并且来自各自独立权利要求的特征可以以任何适当方式进行组合并且不仅仅以随附权利要求书中列举的特定组合的形式。
Claims (15)
1.一种用于验证和执行原子指令序列的装置,其包括:
多处理核心系统中的处理核心,其中所述处理核心被配置来:
验证指定的指令序列满足一组一个或多个原子性标准,包括所述序列中的没有指令指示所述处理核心访问共享内存;且
其中所述多处理核心系统被配置来执行所述验证的序列作为原子内存事务,
其中执行所述验证的序列作为原子内存事务包括:
将来自源缓存线的内存数据存储到目标寄存器中;
执行所述指令序列以修改存储在所述目标寄存器中的所述内存数据;和
将来自所述目标寄存器的值存储到所述源缓存线。
2.根据权利要求1所述的装置,其中执行所述验证的序列作为原子内存事务还包括:在将来自所述源缓存线的内存数据存储到所述目标寄存器中前锁定所述源缓存线,和在将来自所述目标寄存器的所述值存储到所述源缓存线后对所述源缓存线解锁,其中锁定所述源缓存线造成所述处理核心防止在锁定所述源缓存线时一个或多个其它处理核心读取或造成对存储在所述源缓存线中的共享数据的修改。
3.根据权利要求1所述的装置,其中所述指令序列在指示所述序列要被执行为原子内存事务的专用开始指令之前,其中所述专用开始指令指示所述源缓存线。
4.根据权利要求1所述的装置,其中所述处理核心被配置来使用微代码验证代理执行所述验证。
5.根据权利要求4所述的装置,其中所述微代码验证代理被配置来:
从用户程序接收所述序列的指示;
响应于接收所述序列的所述指示,执行所述验证;和
响应于所述验证,存储所述序列的副本。
6.根据权利要求5所述的装置,其中所述微代码验证代理还被配置来将所述序列的存储副本的识别符返回到所述用户程序,且其中响应于所述用户程序使用所述识别符调用所述验证的序列而执行所述原子内存事务。
7.根据权利要求5所述的装置,其中所述微代码验证代理还被配置来在所述序列的所述存储副本开始时存储专用原子开始指令。
8.根据权利要求1所述的装置,其中所述处理核心在保证转发进度下执行所述原子内存事务。
9.根据权利要求1所述的装置,其中所述组的一个或多个原子性标准包括以下项的一个或多个:所述序列中的指令不指示所述处理核心在所述序列外的指令下继续执行的标准、所述序列中的指令不指示所述处理核心访问除通用寄存器外的所述处理内核的寄存器的标准、以预指定、有限的长度格式表达所述序列中的每个指令的标准、和所述指令序列中指令的数量不超过给定最大限度的标准。
10.一种用于验证和执行原子指令序列的方法,其包括:
多处理核心系统中的处理核心验证指令序列满足一组一个或多个原子性标准,包括所述序列中没有指令指示所述处理核心访问共享内存;和
执行验证的序列作为原子内存事务,
其中执行所述验证的序列作为原子内存事务包括:
将来自源缓存线的内存数据存储到目标寄存器中;
执行所述指令序列以修改存储在所述目标寄存器中的所述内存数据;和
将来自所述目标寄存器的值存储到所述源缓存线。
11.根据权利要求10所述的方法,其中执行所述验证的序列作为原子内存事务还包括:在将来自所述源缓存线的内存数据存储到所述目标寄存器中前锁定所述源缓存线,和在将来自所述目标寄存器的所述值存储到所述源缓存线后对所述源缓存线解锁,其中锁定所述源缓存线造成所述处理核心防止在锁定所述源缓存线时一个或多个其它处理核心读取或造成对存储在所述源缓存线中的共享数据的修改。
12.根据权利要求10所述的方法,其中所述处理核心被配置来使用微代码验证代理执行所述验证,其被配置来:
从用户程序接收所述序列的指示;
响应于接收所述序列的所述指示,执行所述验证;和
响应于所述验证,存储所述序列的副本。
13.根据权利要求12所述的方法,其中所述微代码验证代理还被配置来将所述序列的存储副本的识别符返回到所述用户程序,且其中响应于所述用户程序使用所述识别符调用所述验证的序列而执行所述原子内存事务。
14.根据权利要求10所述的方法,其中所述处理核心在保证转发进度下执行所述原子内存事务。
15.根据权利要求10所述的方法,其中所述组的一个或多个原子性标准包括以下项的一个或多个:所述序列中的指令不指示所述处理核心在所述序列外的指令下继续执行的标准、所述序列中的指令不指示所述处理核心访问除通用寄存器外的所述处理内核的寄存器的标准、以预指定、有限的长度格式表达所述序列中的每个指令的标准、和所述指令序列中指令的数量不超过给定最大限度的标准。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/961,819 | 2010-12-07 | ||
US12/961,819 US8788794B2 (en) | 2010-12-07 | 2010-12-07 | Programmable atomic memory using stored atomic procedures |
PCT/US2011/063772 WO2012078775A1 (en) | 2010-12-07 | 2011-12-07 | Programmable atomic memory using stored atomic procedures |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103299272A CN103299272A (zh) | 2013-09-11 |
CN103299272B true CN103299272B (zh) | 2016-04-27 |
Family
ID=45496251
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180064250.6A Active CN103299272B (zh) | 2010-12-07 | 2011-12-07 | 使用存储的原子程序的可编程原子内存 |
Country Status (6)
Country | Link |
---|---|
US (1) | US8788794B2 (zh) |
EP (2) | EP3021215B1 (zh) |
JP (1) | JP5752261B2 (zh) |
KR (1) | KR101968711B1 (zh) |
CN (1) | CN103299272B (zh) |
WO (1) | WO2012078775A1 (zh) |
Families Citing this family (34)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120254589A1 (en) * | 2011-04-01 | 2012-10-04 | Jesus Corbal San Adrian | System, apparatus, and method for aligning registers |
US20130339680A1 (en) | 2012-06-15 | 2013-12-19 | International Business Machines Corporation | Nontransactional store instruction |
US9772854B2 (en) | 2012-06-15 | 2017-09-26 | International Business Machines Corporation | Selectively controlling instruction execution in transactional processing |
US9384004B2 (en) | 2012-06-15 | 2016-07-05 | International Business Machines Corporation | Randomized testing within transactional execution |
US10437602B2 (en) | 2012-06-15 | 2019-10-08 | International Business Machines Corporation | Program interruption filtering in transactional execution |
US9448796B2 (en) | 2012-06-15 | 2016-09-20 | International Business Machines Corporation | Restricted instructions in transactional execution |
US9348642B2 (en) | 2012-06-15 | 2016-05-24 | International Business Machines Corporation | Transaction begin/end instructions |
US9740549B2 (en) | 2012-06-15 | 2017-08-22 | International Business Machines Corporation | Facilitating transaction completion subsequent to repeated aborts of the transaction |
US9436477B2 (en) | 2012-06-15 | 2016-09-06 | International Business Machines Corporation | Transaction abort instruction |
US9430166B2 (en) | 2012-08-10 | 2016-08-30 | International Business Machines Corporation | Interaction of transactional storage accesses with other atomic semantics |
US9129071B2 (en) * | 2012-10-24 | 2015-09-08 | Texas Instruments Incorporated | Coherence controller slot architecture allowing zero latency write commit |
US9547594B2 (en) | 2013-03-15 | 2017-01-17 | Intel Corporation | Instructions to mark beginning and end of non transactional code region requiring write back to persistent storage |
US9830210B2 (en) * | 2013-03-15 | 2017-11-28 | Nvidia Corporation | CPU-to-GPU and GPU-to-GPU atomics |
JP6221500B2 (ja) * | 2013-08-19 | 2017-11-01 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US9824039B2 (en) * | 2013-09-09 | 2017-11-21 | International Business Machines Corporation | Signal interrupts in a transactional memory system |
US9552205B2 (en) * | 2013-09-27 | 2017-01-24 | Intel Corporation | Vector indexed memory access plus arithmetic and/or logical operation processors, methods, systems, and instructions |
US9501243B2 (en) * | 2013-10-03 | 2016-11-22 | Cavium, Inc. | Method and apparatus for supporting wide operations using atomic sequences |
US20150378939A1 (en) * | 2014-06-27 | 2015-12-31 | Analog Devices, Inc. | Memory mechanism for providing semaphore functionality in multi-master processing environment |
KR102346629B1 (ko) | 2014-12-05 | 2022-01-03 | 삼성전자주식회사 | 메모리 접근 제어 방법 및 장치 |
US10528345B2 (en) * | 2015-03-27 | 2020-01-07 | Intel Corporation | Instructions and logic to provide atomic range modification operations |
US9858074B2 (en) * | 2015-06-26 | 2018-01-02 | International Business Machines Corporation | Non-default instruction handling within transaction |
US10019264B2 (en) * | 2016-02-24 | 2018-07-10 | Intel Corporation | System and method for contextual vectorization of instructions at runtime |
FR3048526B1 (fr) * | 2016-03-07 | 2023-01-06 | Kalray | Instruction atomique de portee limitee a un niveau de cache intermediaire |
GB2551523B (en) * | 2016-06-20 | 2019-07-03 | Imagination Tech Ltd | Livelock recovery circuit |
GB2554442B (en) | 2016-09-28 | 2020-11-11 | Advanced Risc Mach Ltd | Apparatus and method for providing an atomic set of data accesses |
US10748637B2 (en) | 2018-07-26 | 2020-08-18 | International Business Machines Corporation | System and method for testing processor errors |
US11467962B2 (en) * | 2020-09-02 | 2022-10-11 | SiFive, Inc. | Method for executing atomic memory operations when contested |
US11693690B2 (en) | 2020-10-20 | 2023-07-04 | Micron Technology, Inc. | Method of completing a programmable atomic transaction by ensuring memory locks are cleared |
US11403023B2 (en) * | 2020-10-20 | 2022-08-02 | Micron Technology, Inc. | Method of organizing a programmable atomic unit instruction memory |
US11409539B2 (en) * | 2020-10-20 | 2022-08-09 | Micron Technology, Inc. | On-demand programmable atomic kernel loading |
US11740929B2 (en) | 2020-10-20 | 2023-08-29 | Micron Technology, Inc. | Registering a custom atomic operation with the operating system |
US11436187B2 (en) | 2020-10-20 | 2022-09-06 | Micron Technology, Inc. | Method of notifying a process or programmable atomic operation traps |
US11600332B2 (en) | 2020-10-20 | 2023-03-07 | Micron Technology, Inc. | Programmable atomic operator resource locking |
WO2023205387A1 (en) * | 2022-04-21 | 2023-10-26 | Microchip Technology Incorporated | Atomic instruction set and architecture with bus arbitration locking |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101297270A (zh) * | 2005-08-23 | 2008-10-29 | 先进微装置公司 | 计算器系统内主动同步的方法 |
CN101308462A (zh) * | 2007-05-14 | 2008-11-19 | 国际商业机器公司 | 管理对共享存储器单元的存储器访问的方法和计算系统 |
Family Cites Families (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4847754A (en) | 1985-10-15 | 1989-07-11 | International Business Machines Corporation | Extended atomic operations |
US5218712A (en) | 1987-07-01 | 1993-06-08 | Digital Equipment Corporation | Providing a data processor with a user-mode accessible mode of operations in which the processor performs processing operations without interruption |
US5175829A (en) | 1988-10-25 | 1992-12-29 | Hewlett-Packard Company | Method and apparatus for bus lock during atomic computer operations |
US5428761A (en) | 1992-03-12 | 1995-06-27 | Digital Equipment Corporation | System for achieving atomic non-sequential multi-word operations in shared memory |
US5701501A (en) | 1993-02-26 | 1997-12-23 | Intel Corporation | Apparatus and method for executing an atomic instruction |
JPH09146838A (ja) * | 1995-11-21 | 1997-06-06 | Matsushita Electric Ind Co Ltd | キャッシュ制御方法及びキャッシュ制御装置 |
US6170038B1 (en) | 1997-10-23 | 2001-01-02 | Intel Corporation | Trace based instruction caching |
US6430657B1 (en) | 1998-10-12 | 2002-08-06 | Institute For The Development Of Emerging Architecture L.L.C. | Computer system that provides atomicity by using a tlb to indicate whether an exportable instruction should be executed using cache coherency or by exporting the exportable instruction, and emulates instructions specifying a bus lock |
US6370625B1 (en) | 1999-12-29 | 2002-04-09 | Intel Corporation | Method and apparatus for lock synchronization in a microprocessor system |
US6463511B2 (en) | 2000-12-29 | 2002-10-08 | Intel Corporation | System and method for high performance execution of locked memory instructions in a system with distributed memory and a restrictive memory model |
US6801986B2 (en) | 2001-08-20 | 2004-10-05 | Hewlett-Packard Development Company, L.P. | Livelock prevention by delaying surrender of ownership upon intervening ownership request during load locked / store conditional atomic memory operation |
US7103528B2 (en) | 2002-09-19 | 2006-09-05 | Lsi Logic Corporation | Emulated atomic instruction sequences in a multiprocessor system |
US7418577B2 (en) | 2003-02-13 | 2008-08-26 | Sun Microsystems, Inc. | Fail instruction to support transactional program execution |
US8402224B2 (en) * | 2005-09-20 | 2013-03-19 | Vmware, Inc. | Thread-shared software code caches |
US20070186056A1 (en) | 2006-02-07 | 2007-08-09 | Bratin Saha | Hardware acceleration for a software transactional memory system |
US8095741B2 (en) * | 2007-05-14 | 2012-01-10 | International Business Machines Corporation | Transactional memory computing system with support for chained transactions |
JP4973730B2 (ja) * | 2007-06-20 | 2012-07-11 | 富士通株式会社 | 演算処理装置及び演算処理装置の制御方法 |
US7945741B2 (en) | 2007-07-09 | 2011-05-17 | International Business Machines Corporation | Reservation required transactions |
US8065490B2 (en) * | 2007-09-28 | 2011-11-22 | Intel Corporation | Hardware acceleration of strongly atomic software transactional memory |
CN102144218A (zh) * | 2008-07-28 | 2011-08-03 | 超威半导体公司 | 可虚拟化的先进同步设备 |
US8533436B2 (en) | 2009-06-26 | 2013-09-10 | Intel Corporation | Adaptively handling remote atomic execution based upon contention prediction |
US8489864B2 (en) | 2009-06-26 | 2013-07-16 | Microsoft Corporation | Performing escape actions in transactions |
US8392661B1 (en) * | 2009-09-21 | 2013-03-05 | Tilera Corporation | Managing cache coherence |
US8239635B2 (en) * | 2009-09-30 | 2012-08-07 | Oracle America, Inc. | System and method for performing visible and semi-visible read operations in a software transactional memory |
US8739164B2 (en) * | 2010-02-24 | 2014-05-27 | Advanced Micro Devices, Inc. | Automatic suspend atomic hardware transactional memory in response to detecting an implicit suspend condition and resume thereof |
US9626187B2 (en) | 2010-05-27 | 2017-04-18 | International Business Machines Corporation | Transactional memory system supporting unbroken suspended execution |
-
2010
- 2010-12-07 US US12/961,819 patent/US8788794B2/en active Active
-
2011
- 2011-12-07 KR KR1020137015787A patent/KR101968711B1/ko active IP Right Grant
- 2011-12-07 WO PCT/US2011/063772 patent/WO2012078775A1/en active Application Filing
- 2011-12-07 EP EP15193965.9A patent/EP3021215B1/en active Active
- 2011-12-07 CN CN201180064250.6A patent/CN103299272B/zh active Active
- 2011-12-07 JP JP2013543316A patent/JP5752261B2/ja active Active
- 2011-12-07 EP EP11808979.6A patent/EP2649518B1/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101297270A (zh) * | 2005-08-23 | 2008-10-29 | 先进微装置公司 | 计算器系统内主动同步的方法 |
CN101308462A (zh) * | 2007-05-14 | 2008-11-19 | 国际商业机器公司 | 管理对共享存储器单元的存储器访问的方法和计算系统 |
Also Published As
Publication number | Publication date |
---|---|
KR20130127473A (ko) | 2013-11-22 |
JP2013546088A (ja) | 2013-12-26 |
US8788794B2 (en) | 2014-07-22 |
WO2012078775A1 (en) | 2012-06-14 |
KR101968711B1 (ko) | 2019-04-12 |
US20120144119A1 (en) | 2012-06-07 |
JP5752261B2 (ja) | 2015-07-22 |
EP3021215A1 (en) | 2016-05-18 |
EP3021215B1 (en) | 2018-07-11 |
CN103299272A (zh) | 2013-09-11 |
EP2649518A1 (en) | 2013-10-16 |
EP2649518B1 (en) | 2016-02-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103299272B (zh) | 使用存储的原子程序的可编程原子内存 | |
US9122476B2 (en) | Programmable atomic memory using hardware validation agent | |
US8793471B2 (en) | Atomic program verification | |
Dechev et al. | Understanding and effectively preventing the ABA problem in descriptor-based lock-free designs | |
JP5421458B2 (ja) | Simdベクトルの同期 | |
Hoeflinger | Extending OpenMP to clusters | |
TWI537831B (zh) | 多核心處理器、用於執行處理程序切換之方法、用於保全一記憶體區塊之方法、用於致能使用一多核心裝置之異動處理之設備、以及用於執行記憶體異動處理之方法 | |
US20100205408A1 (en) | Speculative Region: Hardware Support for Selective Transactional Memory Access Annotation Using Instruction Prefix | |
EP2641171B1 (en) | Preventing unintended loss of transactional data in hardware transactional memory systems | |
Raad et al. | On library correctness under weak memory consistency: Specifying and verifying concurrent libraries under declarative consistency models | |
JPH08278886A (ja) | データ処理システムでの拡張システム管理操作のための方法およびシステム | |
CN101652761A (zh) | 使用缓存写和强制串行化次序的事务存储器 | |
US7809894B2 (en) | Compare, swap and store facility with no external serialization | |
CN106293894B (zh) | 执行事务性功率管理的硬件设备和方法 | |
Dechev | The ABA problem in multicore data structures with collaborating operations | |
US11119925B2 (en) | Apparatus and method for managing capability metadata | |
US20220229691A1 (en) | Persistent Multi-Word Compare-and-Swap | |
US20090198695A1 (en) | Method and Apparatus for Supporting Distributed Computing Within a Multiprocessor System | |
US11960922B2 (en) | System, apparatus and method for user space object coherency in a processor | |
Pirkelbauer et al. | A portable lock-free bounded queue | |
RAAD et al. | On Library Correctness under Weak Memory Consistency | |
Zhang et al. | PipeGen: Automatically Transforming a Single-Core Pipeline into a Multi-core Pipeline Enforcing a given Memory Model | |
Zyulkyarov et al. | Transaction processing core for accelerating software transactional memory |
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 |