阵列比较和交换操作的制作方法

文档序号:6454471阅读:135来源:国知局
专利名称:阵列比较和交换操作的制作方法
阵列比较和交换操作
背景技术
软件事务存储器(STM)系统是本领域中众所周知的系统。 一般 来说,这些系统提供对于并行编程和其它应用有用的原语以便允许程 序指定一组动作作为事务,因为事务内的动作是自动执行的。通常, 原语包括开始事务、正常终止事务、以及异常中止事务并回滚(roll back)所中止的事务的所有效果的命令或调用。已存在多种已知的 STM系统的实现。STM系统在软件中实现,因此可以与基于硬件的 事务存储器(HTM)系统有所区分。
用于并行程序的有用原语有原子多字比较和交换(MCAS)。该 原语自动执行。它将存储器的一组存储单元中的值与所提供的一组对 应值进行比较。如果所提供的每个值与存储器中的对应值匹配,则 MCAS原语将所提供的一组新值存储到这组存储单元中,并返回指示 成功的完成代码;否则,不对存储器做任何改变,并且MCAS返回指 示失败的完成代^马。i者如Fraser的Practical Lock Freedom (见Keir Fraser的博士论文Practical Lock Freedom)的现有的MCAS实现利用 指针值以及对更新的日志记录或緩冲(在MCAS操作期间)来确保原 子性。该緩沖或日志记录会使这些MCAS增加开销。


图l描绘一个实施例中的基于处理器的系统。 图2描绘一个实施例中的处理流程。
具体实施例方式
参照图l,如图所示的基于处理器的系统可以包括耦合到总线110 的一个或多个处理器105。或者,该系统可以具有一个为多核处理器的处理器,或在其它情况下,可以具有多个多核处理器。在一些实施 例中,处理器可以超线程化,或者能够以多核处理器的方式执行(尽
管只有单个核)。在一个简单的实例中,总线110可以耦合到系统存 储器115、诸如磁盘驱动器或其它存储设备的存储设备120、外围设 备145。存储设备120可以存储各种软件或数据。该系统可以经由一 个或多个总线系统连接到各种外围设备145。众所周知,这些外围设 备可以包括显示器和打印系统等。
图1中的系统只是一个实例,本发明不限于任何特定的体系结构。 具有其它体系结构的系统中的特定组件可以包括以下变化在一些情 况下,增加事务存储器作为系统的一个或多个处理器的组件;而在其 它情况下,增加的事务存储器可以是总线上连接到处理器的独立组 件。在其它实施例中,系统可以具有用于管理无锁定事务的额外指令。 在其它实施例中,指令的实际形式或格式可以有所不同。可以存在额 外的存储器或存储组件。还可以有大量的其它变化。
在一个实施例中,可以利用为支持通用软件事务存储器(STM) 实现而提供的功能性来提供MCAS操作,这种MCAS操作作为系统 (例如,如图1中描绘的系统)的软件的一部分。具体来说,MCAS 操作可以利用由STM保持的读取器-写入器锁定来实现事务所需的基 本的并行性控制。
下面将从高层次描述在该实施例中使用的STM系统的一个实例 的一些特征。该STM实现保持读取器-写入器锁定阵列(an array of reader-writer lock)。读取器-写入器锁定是这样一种锁定它允许多个 读取器获得对该锁定的访问权,然后读取存储单元;但只允许单个写 入器获得对该锁定的访问权,然后写入到该存储单元。STM所用的每 个存储单元(memory location)映射到唯一的读取器-写入器锁定。STM 保持的唯一读取器-写入器锁定的数量取决于映射函数。在一个实例
中,实现可以利用屏蔽一个地址的4交低位(如6个位)的散列函数作 为映射函数来获得对应于该地址处的存储单元的高速緩存行地址。然后,可以利用该高速緩存行地址作为对读取器-写入器锁定阵列的索 引。
因此,例如,如果处理器正在执行的程序试图利用STM的服务 来从地址处的存储单元进行事务读取,则STM系统首先计算该存 储单元的地址的散列。然后,STM系统计算对应于该散列的读取器-写入器锁定L。接着,系统试图获得L上的读取锁定。如果STM系 统成功,则STM系统返回位置A处的值并将STM系统已经获得L 上的读取锁定的指示存储到本地事务读集合中。类似地,如果程序试 图利用STM的服务来进行到地址爿处的存储单元的事务写入,则STM 如同之前一样计算读取器-写入器锁定丄,然后尝试获得L上的独占写 入锁定。如果STM系统成功,则STM系统更新存储单元爿并在日志 中保留j的旧值的副本,以防必须回滚该事务。此外,STM系统也将 STM系统已经获得L上的写入锁定的指示存储到本地事务写集合中。
如果在该实现中通过STM系统的事务实现未能获得读取器或写 入器锁定,则STM系统在放弃一段时间之后重新尝试,这段时间可 以是随机确定的时间周期。允许重新尝试固定次数,在这之后,STM 系统中止事务并解除所有锁定。在一些实施例中,可以使用计数器来 跟踪重新尝试的次数。也可以基于STM系统为该事务保持的日志来 将在该事务开始之后经过修改的任何存储单元返回到它们的原始值。 这种中止机制用于防止死锁。
如果事务成功地获得所有必需的锁定并完成处理,则STM系统 解除所有锁定,并丟弃所有记入日志的值。这标志着在该STM系统 中成功提交了事务。
如前所述,MCAS原语为程序提供了这样一种原子方法,该方法 用于测试存储器中的一组值是否与作为参数提供给MCAS函数的一 组预定值匹配,并且如果比4交得到肯定的结果,即,所述一组预定值 与所述存储器中的一组值相同,则用作为参数传入的一组替换值换出 所述存储器中的一组值。在一个实施例中,MCAS原语可以通过一种同样提供STM的系统利用用于实现该STM系统的基本机制来实现。 在下文中,在一个实施例中,假定具有读取器-写入器锁定的STM系 统(例如,上文描述的STM系统)支持(underlie)MCAS实现。该实 施例的一个特征在于,MCAS实现利用与STM机制所用的读取器-写 入器锁定相同的读取器-写入器。
该实施例中的实现具有几个特征。首先,该实施例包括MCAS的 一般化实现,因为该实施例涉及的实现可以扩展到任意大小的一组单 元。其次,该实施例的MCAS实现不存在与现有MCAS实现关联的、 由于在执行的中间阶段进行日志记录或緩沖而引起的过度开销。最 后,该MCAS实现与基本的STM不千扰地共存,这是因为利用了为 STM提供并行控制和同步的相同的锁定机制来实现MCAS,因此, STM事务与MCAS操作之间不太可能出现干扰。
图2中的流程图从高层次描绘该实施例中的利用STM机制的 MCAS实现。该图描绘了一种MCAS原语的实现,该MCAS原语可 视为具有可以表示成以下函数调用的接口
Bool MCAS ( int k, void* addr [], uint32 oldValue[], uint32 newValue[]);
用类似C的语法表示的该调用提供了函数MCAS,该函数MCAS 取以下项作为参数整数k;提供将用于MCAS操作的一组k个存储 地址的引用或指针参数addr;以及两个值参数,即,用于比较的整数 数组oldValue和用于交换到存储器阵列中的整数数组newValue,这 两个数组的大小都为k。当该函数执行时,效果如下如果通过addr 中的地址而指定的一组存储单元中的值与数组参数oldValue中的对应 值匹配,则函数将数组newValue中的新值存储在通过addr中的地址 而指定的这组存储单元中,并返回逻辑值真;否则,函数令存储单元 保持不变,并返回假。
为了实现MCAS的功能性,如图2所示的基本操作从215开始, 首先,在220,计算在MCAS中涉及的k个单元中的每个单元的读取器-写入器锁定地址。接着,在225,该实现尝试获得所有fc个读取器 -写入器锁定上的写入锁定。在一些实施例中,如果在第一次尝试时没 有获得锁定,则该实现可以进行固定次数的重新尝试以获得锁定,并 且可以使用计数器来跟踪尝试次数。如果获得所有锁定235,则该实 现检查阵列中的所有A:个单元是否都具有预期值(即,在参数oWKa/we 中提供的值)。如杲即使在重新尝试(如果有)之后仍没有获得所有 锁定(路径235-240),或者如果并非阵列中的所有单元都具有预期 值(路径230-240),则在240,解除所获得的所有锁定并且函数返回 鱼值,并在255终止。但是,如果获得了所有锁定并且这A个单元都 具有预期值,则在245,存储"ewFb/i^数组中的新值,并在贯穿流程 的该路径中,在250解除所有锁定,函数返回l值,并在255终止。
在该实施例中,还可参照之前描述的读取器-写入器锁定的机制来 进一步说明图2中的220处的动作,具体来说,即计算MCAS中涉及 的单元的读取器-写入器锁定。在尝试获得锁定时,该MCAS实现执 行与基本STM系统相同的动作。具体来说,正如STM —样,该MCAS 调用的实现通过以下方法来计算读取器-写入器锁定阵列中的锁定的 索引从通过指定的A个存储单元中的每个存储单元的地址开始, 首先屏蔽每个存储单元的地址的最低6个位以便获得该单元的高速緩 存行地址;然后,该MCAS实现利用该高速緩存行地址作为对读取器 -写入器锁定阵列的索引。
上文描述的实现的一个特征在于,该实施例不需要在245写入新 值之前对通过指定的存储单元中的值作日志记录或进行检查点 操作。这是因为,当MCAS实现到达245时,有几个断言可以视为是 真的。首先,因为是按值传递参数oldValue和newValue的,所以对 于那些参数而言不可能出现地址异常。因为所有比较都完成了,所以 该阶段不可能出现算术异常。此外,因为已经使用了通过addr而指定 的k个元素的地址集合中的所有地址来计算高速緩存行地址并且因此 引用锁定,所以对阵列中的地址的访问不可能产生存储器异常,这是因为锁定阵列计算也已经有效地验证了阵列中的所有地址。因此,可 以假设,新值在存储器中阵列中的存储可以无误地完成,因此可以避 免在该阶段对旧值作日志记录或进行检查点操作,从而潜在地减少延 迟开销。
尽管以上描述是关于上述实施例的,但也可以有许多变化。首先,
如上文那样,通常按如下方式描述MCAS函数通过将存储器中的一 组值与传递给该函数的一组预定值的等同性进行比较,并且只有当这 组存储单元中的每个值等于作为参数传递的对应值时才交换传递到 该函数中的值。但是,在其它实施例中,可以使用类似MCAS的函数, 这些函数利用等同性之外的比较。许多此类比较和结果在本领域中已 知。例如,技术人员可以容易地设想这样一个操作,在该操作中,存 储器中的这组值与参数数组之间的比较是"小于"或"大于"的比较, 并且只有在存储器中的值"小于"或"大于"对应参数值时才会发生 交换。这种MCAS类函数可以通过与图2中所示的MCAS的处理类 似的处理来容易地实现。类似地,还可以有其它比较和随比较结果而 定的其它动作。
此外,存储在阵列中的值可以是任意的数据类型,而不限于固定 大小的数据。例如,阵列中的每个元素可以是文本串、图形图像、或 其它多部分数据类型,对此定义了一些数据相关的比较判定。因此, 例如,可以容易地设想用于换出文本串阵列的MCAS类操作。 为通用起见,下文将上述所有改变称为是MCAS类。 此外,尽管参照与STM共享的基本机制描述了以上MCAS和 MCAS类操作的实现,但是即使在缺少STM的情况下,参照图2描 述的处理仍是可能的。如果满足MCAS操作的要求的读取器-写入器 锁定阵列可用,则尽管系统中缺少STM,但仍可实现以上处理。此外, 在一些情况下,基于硬件的事务存储器系统可以釆用与在上述实施例 的描述中由STM实现提供的方式类似的方式来提供实现MCAS所需 的锁定机制。本领域的技术人员将容易地理解,实际上,基于存储地址的读取
器-写入器锁定引用的实际计算可以通过无限种方法来完成,其中许多 方法与参照上文提到的实施例描述的高速緩存行计算无关。例如,可
以使用任意的散列函数和散列表来计算锁定地址并存储存储单元的锁定。
最后,本领域的技术人员应明白,MCAS函数的代表性接口和图 2中描绘的处理只是在一个实例性实施例中的接口和处理。众所周知, 在表述MCAS的接口时可以有许多语法和命名的变化,此外,可以用 无限种方法来改变处理流程,而不会影响软件函数的实现的基本输入 -输出功能性。因此,上文论述的MCAS和其它MCAS类原语的实现 可以有许多备选方案。
在以上描述中,出于说明的目的,阐述了众多具体细节以便充分 理解所描述的实施例,但是,本领域的技术人员将明白,在没有这些 具体细节的情况下,也可以实现许多其它实施例。
以上的部分详细描述介绍了基于处理器的系统内对数据位的操 作的算法和符号表示。这些算法描述和表示是本领域的技术人员用来 向本领域的其它人员最有效地传达他们的工作实质的方式。操作是指 那些需要物理量的物理操纵的操作。这些量可以采用电、磁、光、或 能够被存储、传送、组合、比较及以其它方式操纵的其它物理信号的 形式。已证实很多时候将这些信号称为位、值、元素、符号、字符、 项、数字等很方便,这主要是出于惯用的原因。
但是,应记住,所有这些和类似术语将与合适的物理量关联,它 们仅仅是适用于这些量的方便的标记。除非另外特外说明,否则从本 描述显而易见,诸如"执行"、"处理"、"计算"、"演算"或"确 定"等术语可以指操纵在基于处理器的系统的存储设备内表示成物理 量的数据并将该数据变换为类似表示的其它数据的基于处理器的系 统或类似的电子计算装置、或其它此类信息存储、传输或显示设备的 动作和过程。在对实施例的描述中,可以参照附图。附图中,这几个视图中相 同的数字描述基本上类似的组件。可以利用其它实施例,并且可以做 出结构、逻辑和电改变。此外,应了解,尽管各个实施例有所不同, 但它们不一定相互排斥。例如,在一个实施例中描述的特定特征、结 构、或特性可以包含在其它实施例中。
此外,在处理器中实现的实施例的设计可以经历从创建到才莫拟到 制作各个不同阶段。代表设计的数据可以用多种方式来表示这个设 计。首先,可以使用硬件描述语言或另一种功能描述语言来表示硬件, 这在才莫拟中有用。另外,可以在设计过程中的某些阶段产生具有逻辑 和/或晶体管门的电路级模型。此外,在某个阶段,大部分设计达到表 示硬件模型中的各种设备的物理替换的数据级。在使用常规半导体制 造技术的情况下,代表硬件才莫型的数据可以是指定在用来制造集成电 路的掩模的不同掩模层上各种特征存在与否的数据。在设计的任意表 示中,数据可以存储在任意形式的机器可读介质中。经调制或以其它 方式生成而用来传送该信息的光波或电波、存储器、或诸如盘的磁或 光存储设备都可以作为机器可读介质。所有这些介质都可以"携带" 或"指示"该设计或软件信息。当指示或携带代码或设计的电载波得 以传送时,在执行电信号的复制、緩沖或重新传送的意义上,进行新 的复制。因此,通信提供者或网络提供者可以复制物品(例如,载波), 这些复本构成或表示一个实施例。
实施例可以作为程序产品来提供,该程序产品可以包括其上存储 有数据的机器可读介质,当该数据被机器访问时可使机器执行权利要 求保护主题所述的方法。机器可读介质可以包括但不限于软盘、光盘、
DVD-ROM盘、DVD-RAM盘、DVD-RW盘、DVD+RW盘、CD-R 盘、CD-RW盘、CD-ROM盘、及^兹-光盘、ROM、 RAM、 EPROM、 EEPROM、磁或光卡、闪速存储器、或其它类型的适于存储电子指令 的介质/机器可读^h质。此外,实施例也可以作为程序产品下载,其中 可以经由通信链路(如调制解调器或网络连接)通过在栽波或其它传播介质中实施的数据信号将程序从远程数据源传送给请求的设备。
虽然许多方法是以它们的最基本的形式进行描述的,但是在不偏 离所要求保护的主题的基本范围的情况下,可以在其中任何一个方法 中增减步骤,并且可以在所描述的任何消息中增减信息。本领域的技 术人员将明白,可以做出许多其它修改和改变。提供特定实施例不是 为了限制所要求保护的主题,而是为了说明它。所要求保护的主题的 范围不是由上文提供的具体实例确定的,而只由随附权利要求确定。
权利要求
1. 一种方法,包括尝试为软件事务存储器(STM)系统的一组存储单元中的每个存储单元获得通过所述STM的实现而提供的写入锁定;如果为所述一组存储单元中的每个存储单元获得了写入锁定,则将所述一组存储单元中的每个存储单元中的值与对应的预期值进行比较;以及如果对于所述一组存储单元中的每个存储单元,所述比较产生相同的预定结果,则将对应的新值存储在每个存储单元中。
2. 如权利要求l所述的方法,其中所述比4交还包括检查所述一组存储单元中的每个存储单元中的 值是否等于所述对应的预期值;以及 所述比较的预定结果为真。
3. 如权利要求1所述的方法,其中尝试为所述一组存储单元中的 每个存储单元获得写入锁定还包括如果没有为所述一组存储单元中的每个存储单元获得写入锁定, 则递增失败尝试次数的计数器;如果在等待一段时间之后所述计数器不大于预定值,则重复为所 述一组存储单元中的每个存储单元获得写入锁定所做的所述尝试;以 及如果所迷计数器大于所述预定值,则中止为获得所述写入锁定所 做的所述尝试。
4. 如权利要求1所述的方法,还包括如果对于所述一组存储单元中的每个存储单元,所述比较未能获 得相同的预定结果,则解除所获得的写入锁定。
5. 如权利要求1所述的方法,其中尝试为所述一组存储单元中的 每个存储单元获得写入锁定还包括至少部分地基于相应存储单元的地址来计算对所述一组存储单元中的每个存储单元的唯一读取器-写 入器锁定的引用。
6. 如权利要求5所述的方法,其中计算所述引用还包括至少部 分地基于相应存储单元的地址来计算散列值;至少部分地利用所述散 列值来获得对应于所述存储单元的高速緩存行地址;以及至少部分地 利用所述高速緩存行地址来计算对读取器-写入器锁定阵列的索引。
7. 如权利要求1所述的方法,其中将对应的新值存储在每个存储 单元中还包括存储所述新值而不在日志和/或緩冲器中保存和/或记 录存储在所述存储单元中的先前值。
8. 如权利要求7所述的方法,其中尝试为所述一组存储单元中的 每个存储单元获得所述STM系统的写入锁定还包括至少部分地基于所述一组存储单元中的每个存储单元的地址来 计算散列值;至少部分地利用所述散列值来获得对应于所述一組存储单元中 的每个存储单元的高速《爰存行地址;以及至少部分地利用所述高速緩存行地址来计算对所述STM的读取 器-写入器锁定阵列的索引。
9. 一种其上存储有数据的有形机器可读介质,所迷数据在被机器 访问时使所述机器执行一种方法,所述方法包括尝试为软件事务存储器(STM)系统的一组存储单元中的每个存 储单元获得通过所述STM的实现而提供的写入锁定;如果为所述一组存储单元中的每个存储单元获得了写入锁定,则 将所述一组存储单元中的每个存储单元中的值与对应的预期值进行 比l交;以及如果对于所述一组存储单元中的每个存储单元,所述比较产生相 同的预定结果,则将对应的新值存储在每个存储单元中。
10. 如权利要求9所迷的机器可读介质,其中所述比4交还包括检查所述一组存储单元中的每个存储单元中的值是否等于所述对应的预期值;以及 所述比较的预定结果为真。
11. 如权利要求9所述的机器可读介质,其中尝试为所述一组存 储单元中的每个存储单元获得写入锁定还包括如果没有为所述一組存储单元中的每个存储单元获得写入锁定, 则递增失败尝试次数的计数器;如果在等待一段时间之后所述计数器不大于预定值,则重复为所 述一组存储单元中的每个存储单元获得写入锁定所做的所述尝试;以 及如果所述计数器大于所述预定值,则中止为获得所述写入锁定所 做的所迷尝试。
12. 如权利要求9所述的机器可读介质,其中所述方法还包括 如果对于所述一组存储单元中的每个存储单元,所述比较未能获得相同的预定结果,则解除所获得的写入锁定。
13. 如权利要求9所述的机器可读介质,其中尝试为所述一组存储单元中的每个存储单元获得写入锁定还包括至少部分地基于相应存储单元的地址来计算对所述一组存储单元中的每个存储单元的唯 一读取器-写入器锁定的引用。
14. 如权利要求13所述的机器可读介质,其中计算所述引用还包 括至少部分地基于相应存储单元的地址来计算散列值;至少部分地 利用所迷散列值来获得对应于所述存储单元的高速緩存行地址;以及 至少部分地利用所述高速緩存行地址来计算对读取器-写入器锁定阵 列的索引。
15. 如权利要求9所述的机器可读介质,其中将对应的新值存储 在每个存储单元中还包括存储所述新值而不在日志和/或緩沖器中保 存和/或记录存储在所述存储单元中的先前值。
16. 如权利要求15所述的机器可读介质,其中尝试为所述一组存 储单元中的每个存储单元获得所述STM系统的写入锁定还包括至少部分地基于所述一组存储单元中的每个存储单元的地址来计算散列值;至少部分地利用所述散列值来获得对应于所述一组存储单元中 的每个存储单元的高速緩存行地址;以及至少部分地利用所述高速纟爰存行地址来计算对所述STM的读取 器-写入器锁定阵列的索引。
17. —种系统,包括 处理器;以通信方式耦合到所迷处理器的存储器; 可在所述存储器中加载的软件事务存储器(STM)系统; 可在所述存储器中加载的多字比较和交换(MCAS)模块,所述 MCAS用于尝试为所述STM的一组存储单元中的每个存储单元获得通过所 述STM系统的实现而提供的写入锁定;如果为所述一组存储单元中的每个存储单元获得了写入锁定,则 将所述一组存储单元中的每个存储单元中的值与对应的预期值进行 比车交;以及如果对于所述一组存储单元中的每个存储单元,所述比较产生相 同的预定结果,则将对应的新值存储在每个存储单元中。
18. 如权利要求17所述的系统,其中所述比较还包括检查所述一组存储单元中的每个存储单元中的 值是否等于所述对应的预期值;以及 所述比较的预定结果为真。
19. 如权利要求17所述的系统,其中尝试为所述一组存储单元中 的每个存储单元获得写入锁定还包括如果没有为所述一组存储单元中的每个存储单元获得写入锁定, 则递增失败尝试次数的计数器;如果在等待一段时间之后所述计数器不大于预定值,则重复为所述一组存储单元中的每个存储单元获得写入锁定所做的所述尝试;以 及如果所述计数器大于所述预定值,则中止为获得所述写入锁定所 做的所述尝试。
20.如权利要求17所述的系统,其中所述存储器还包括DRAM。
全文摘要
尝试为软件事务存储器(STM)系统的一组存储单元中的每个存储单元获得通过所述STM的实现而提供的写入锁定;如果为所述一组存储单元中的每个存储单元获得了写入锁定,则将所述一组存储单元中的每个存储单元中的值与对应的预期值进行比较;以及如果对于所述一组存储单元中的每个存储单元,所述比较产生相同的预定结果,则将对应的新值存储在每个存储单元中。
文档编号G06F13/00GK101416168SQ200780012449
公开日2009年4月22日 申请日期2007年3月30日 优先权日2006年3月31日
发明者A·-R·阿德尔-塔巴塔拜, B·萨哈 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1