CN110268390A - 相干互连***中的读取交易***生命期 - Google Patents
相干互连***中的读取交易***生命期 Download PDFInfo
- Publication number
- CN110268390A CN110268390A CN201880009409.6A CN201880009409A CN110268390A CN 110268390 A CN110268390 A CN 110268390A CN 201880009409 A CN201880009409 A CN 201880009409A CN 110268390 A CN110268390 A CN 110268390A
- Authority
- CN
- China
- Prior art keywords
- transaction
- reading
- request
- response
- direct memory
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1479—Generic software techniques for error detection or fault masking
- G06F11/1492—Generic software techniques for error detection or fault masking by run-time replication performed by the application software
- G06F11/1494—N-modular type
-
- 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
- G06F12/0831—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means
- G06F12/0835—Cache consistency protocols using a bus scheme, e.g. with bus monitoring or watching means for main memory peripheral accesses (e.g. I/O or DMA)
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1474—Saving, restoring, recovering or retrying in transactions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2201/00—Indexing scheme relating to error detection, to error correction, and to monitoring
- G06F2201/88—Monitoring involving counting
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/62—Details of cache specific to multiprocessor cache arrangements
- G06F2212/621—Coherency control relating to peripheral accessing, e.g. from DMA or I/O device
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Systems (AREA)
- Computer And Data Communications (AREA)
Abstract
提供了一种在相干互连***中的装置以及操作该装置的相应方法,相干互连***包括发出请求的主设备和数据存储从属设备。该装置在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录,并且响应于接收到来自发出请求的主设备、针对存储在数据存储从属设备中的数据条目的读取交易,以向数据存储从属设备发出直接内存传输请求。读取应答触发符被添加到直接内存传输请求,并且响应于接收到来自数据存储从属设备的读取应答信号,对应于直接内存传输请求的完成而更新由接收到读取交易而创建的记录。尽管通过直接内存传输满足了读取交易,因此减少了装置保持记录所需的生命期。还提供了相应的数据存储从属设备和操作该数据存储从属设备的方法。
Description
技术领域
本公开涉及数据处理***。更具体地,本公开涉及一种相干互连***,其中交换相干协议交易。
背景技术
在包括相干互连的数据处理***中,其中,***的组件交换相干协议交易,必须仔细管理那些交易和那些交易引起的数据处理操作,以便在***内维持所需的相干性。作为该管理的一部分,***中的装置可以保持某些交易的记录,其中在交易正在进行中时保持相应的记录,并且一旦交易完成就将其删除。
发明内容
本文描述的至少一个示例提供了一种用于相干互连***的装置,该装置包括:接口电路,用于接收来自发出请求的主设备的相干协议交易,并且与数据存储从属设备交换进一步的相干协议交易;交易跟踪电路,用于在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录;以及交易控制电路,用于响应于在接口电路处接收到来自发出请求的主设备、针对存储在数据存储从属设备中的数据条目的相干协议交易的读取交易,而向数据存储从属设备发出直接内存传输请求,其中,直接内存传输请求包括读取应答触发符以从数据存储从属设备请求读取应答信号,并且其中,交易跟踪电路响应于在接口电路处接收的来自数据存储从属设备的读取应答信号,以更新由接收到读取交易而创建的交易跟踪电路中的记录,以指示直接内存传输请求的完成。
本文描述的至少一个示例提供了一种在相干互连***中操作装置的方法,包括以下步骤:接收来自发出请求的主设备、针对存储在数据存储从属设备中的数据条目的一组相干协议交易的读取交易;在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录;响应于读取交易的接收,向数据存储从属设备发送直接内存传输请求,其中,直接内存传输请求包括读取应答触发符,以从数据存储从属设备请求读取应答信号;以及响应于接收到来自数据存储设备的读取应答信号,更新由接收读取交易而创建的记录,以指示直接内存传输请求的完成。
本文描述的至少一个示例提供了一种用于包括发出请求的主设备和数据存储从属设备的相干互连***的装置,其中该装置包括:接收装置,用于接收来自发出请求的主设备的相干协议交易;交换装置,用于与数据存储从属设备进一步交换相干协议交易;保持记录装置,用于在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录;发出装置,用于响应于接收到来自发出请求的主设备、针对存储在数据存储设备中的数据条目的读取交易,而向数据存储从属设备发出直接内存传输请求,其中,直接内存传输请求包括读取应答触发符;以及更新装置,用于响应于接收到来自数据存储设备的读取应答信号,而更新由接收到读取交易而创造的在该保持记录装置中的记录,对应于直接内存传输请求的完成。
本文描述的至少一个示例提供了一种用于相干互连***的数据存储从属设备,包括:接口电路,用于与集线器设备交换相干协议交易,并且进一步与主设备交换相干协议交易;以及交易控制电路,该交易控制电路响应于接收到来自集线器设备、包括读取应答触发符的直接内存传输请求,以将读取应答信号传输到集线器设备,并将直接内存传输请求中指定的数据直接传输到主设备。
本文描述的至少一个示例提供了一种在相干互连***中操作数据存储从属设备的方法,该方法包括以下步骤:从集线器设备接收直接内存传输请求;当直接内存传输请求包括读取应答触发符时,将读取应答信号发送到集线器设备;以及将直接内存传输请求中指定的数据直接传输到主设备。
附图说明
仅通过示例的方式,参考如附图中所示的本技术的实施例,将进一步描述本技术,其中:
图1示例性地示出了在一个实施例中包括相干互连的数据处理***;
图2示例性地示出了在一个实施例中装置的一些组件,该装置可以在例如图1所示的相干互连***中用作集线器或家庭设备;
图3示出了在一个实施例中在发出请求的主设备、家庭节点设备和数据存储从属设备之间交换的示例性消息组;
图4示出了根据一个实施例的方法采取的步骤组;
图5示出了根据一个实施例的方法采取的步骤组;
图6A示出了在一个实施例中响应于完成应答使得计数器递减所采取的步骤组;以及
图6B示出了在一个实施例中当主节点设备应该进入静止状态时所采取的步骤组。
具体实施方式
在一些示例性实施例中,存在一种用于相干互连***的装置,该装置包括:接口电路,用于接收来自发出请求的主设备的相干协议交易,并且与数据存储从属设备交换进一步的相干协议交易;交易跟踪电路,用于在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录;以及交易控制电路,用于响应于在接口电路处接收到来自发出请求的主设备、针对存储在数据存储从属设备中的数据条目的相干协议交易的读取交易,而向数据存储从属设备发出直接内存传输请求,其中,直接内存传输请求包括读取应答触发符以从数据存储从属设备请求读取应答信号,并且其中,交易跟踪电路响应于在接口电路处接收的来自数据存储从属设备的读取应答信号,以更新由接收到读取交易而创建的交易跟踪电路中的记录,以指示直接内存传输请求的完成。
该装置从发出请求的主设备接收读取交易并使得存储在数据存储从属设备中的请求的数据被检索并返回到发出请求的主设备,因此在***中扮演“主节点”或“集线器设备”的角色。装置中的交易跟踪电路(在本文中有时还简称为“***”)使其能够管理和监视在***中交换的相干协议交易,并且特别是确保观察到每个交易正确完成。然而,扮演该“主”设备的角色对装置产生了一定的负担,因为存储必须被保持在***中以保存所有当前正在进行中的交易的条目,并且装置还必须调解响应于读取请求而从数据存储从属设备取得的数据。因此优选地,在可能的情况下,装置指示数据存储从属设备直接将数据传输到发出请求的主设备(即,装置向数据存储从属设备发出“直接内存传输请求”,指定发出请求的主设备作为目标)。然而,这种方法可能存在一个困难,即主节点将不知道何时将其***中的条目标记为完成(在本文中也称为在***中解除分配请求),因为主节点没有接收到在从属数据存储设备(从属节点)处处理的请求的指示、或在发出请求的主设备(请求节点)处处理的请求的指示。虽然由发出请求的主设备发出的读取请求可能包括如下指示:一旦发出请求的主设备(节点)已经接收到所请求的数据,则主节点最终可以预期“完成应答”的指示(即,发出请求的节点将向主节点传输这种应答),然而该方案将造成主节点追踪器中与该交易相对应的条目的生命期,成为从从属节点到发出请求的节点的完全往复数据潜时,以及从发出要求的节点到主节点的完成应答潜时。
在该上下文中,本技术提供了:从装置传送到数据存储从属设备的直接内存传输请求包含读取应答触发符,而响应于该读取应答触发符,数据存储从属设备可以传输读取应答信号(在数据存储从属设备可以保证请求被接受且数据存储从属设备将不会传送重试消息时)。随后,响应于该读取应答信号,装置的交易跟踪电路在其***中解除分配请求,即,将交易追踪电路响应于接收到来自发出请求的主设备的读取请求而产生的条目标记为完成,或甚至仅将条目删除。然后,***中的该条目的生命期明显短于上文所述的情境,并且此外,这使得从数据存储从属设备到发出要求的主设备的被请求的数据的传输,能够由直接内存传输来执行,因为装置(集线器)不再需要进一步介入。因此,也改良了读取数据潜时。发出请求的主设备也不需要在接收到被请求的数据时发出完成应答(这是在对于例如直接内存传输的情况),并且然后这减少了互连上的通信量。
已认知到,在经限定的一组相干协议交易内,在交换这些交易的设备之间交换额外信息的机会是受到限制的,但本技术已识别到,可由定序限制的规格(或者相反地由定序自由度的规格)来标记这种相干协议交易,此种定序规格可以仅对发生在***中的特定设备对之间的交易具有经限定的意义。例如,在相干互连***中对集线器设备发出读取交易的发出请求的主设备,可以指定请求针对其他交易可为自由定序的,或相反地可以指定定序受到限制。在接收到定序交易时,主节点通过确保主节点在向从属节点设备发出新交易之前已观察到先前较早交易的完成,以执行该经限定的定序。然而,在由主节点执行定序时,本技术意识到交易的用于指定该定序的部分,对于发出请求的节点与主节点之间的交易可以具有意义,但对于主节点与从属节点之间的交易将不具有意义。因此,本技术提出通过额外使用交易的该部分来利用该情况,使得从主节点发送至从属节点的交易可以通过再利用该部分而被解释为包括读取应答触发符。因此,在一些实施例中,读取交易在读取交易的预定部分中包括针对其他交易的定序自由度的规格,并且读取应答触发符被包括在直接内存传输请求的相同预定部分内。
可以不同地配置指定定序自由度的读取交易的预定部分,但在一些实施例中,在直接内存传输请求的预定部分的子部分中指示读取应答触发符,并且其中,读取交易的预定部分的子部分针对读取交易对装置不具有语意意义。
在一些实施例中,预定部分为相干协议交易的位字段,该位字段被解译为交易定序规格。可以不同地限定相干协议交易的该经限定的位字段,但在一些实施例中,位字段为被解释为交易定序规格的两位字段,两位字段中的预定位组合针对读取交易对于装置不具有语意意义,并且两位字段中的预定位组合为直接内存传输请求中的读取应答触发符。因此,预定位组合将被了解为针对读取交易对装置不具有语意意义的两位字段可代表的四种可能的特定排列,即,在相干协议交易的该规格中可例如被限定为“保留”。例如,两位字段内容的其他排列,针对读取交易定序对于装置可当然具有经适当限定的意义,例如“未定序”、“请求定序”、以及“端点定序”。
如上面所提及的,本技术采用的方法的特征是该装置可以将其***中的条目标记为完成(其中,该条目是响应于从发出请求的主设备接收到读取交易而创建的)而不必等待来自发出请求的主设备的数据传输完成的确认。然而,这并不意味着禁止发出请求的主设备在读取交易中包含随后将发出这种完成应答的指示符,并且在一些实施例中,读取交易包括随后将在读取交易完成时由发出请求的主设备发出的交易完成信号的指示符。
该装置实际上可以利用这种完成应答信号作为交易在***中正确完成的另一级验证,并且针对此目的,在一些实施例中,交易跟踪电路还包括用于保持计数器值的计数器电路,并且计数器电路响应于随后将发出交易完成信号的指示符来递增计数器值,并且计数器电路响应于交易完成信号来递减计数器值。这提供了一种机制,通过该机制,装置可以监视这种交易的完成,当指示期望这种应答时递增计数器,并且当接收到应答时递减计数器。
然后可以以多种方式来使用该计数器值,例如,在一些实施例中,该装置响应于计数器值指示仍然期望交易完成信号(当装置准备进入静止状态时)来生成错误信号。因此,当装置准备进入该静止状态时,并且因此应当完成所有正在进行中的交易时,如果计数器值指示未完成的、显然不完整的交易,则可以生成错误信号。例如,尽管可以不同地限定特定计数器值的含义,但是在一个示例中,计数器值可以从零开始,在接收到指示随后将发出交易完成信号的交易时将该值往上增加,并且因此计数器的非零值可以触发错误信号。
相反,这还提供了一种机制,通过该机制,装置可以确定所接收的交易完成信号是假的,例如(在上述计数器的示例性配置下)在计数器值已经为零时接收到交易完成信号。因此,在一些实施例中,当计数器值指示不应期望交易完成信号时,该装置响应于交易完成信号的接收来产生错误信号。
交易跟踪电路可以保持用于***中所有发出请求的主设备的单个计数器,但是在一些实施例中,交易跟踪电路包括多个计数器电路的实例,该多个计数器电路对多于一个发出请求的主设备单独保持计数器值。这使得对于交易的完成的监视和错误的产生更专属于特定主设备。
由装置从发出请求的主设备接收的读取交易可以指定对于数据条目的特定相干状态(一旦由发出请求的主设备接收并存储在其缓存中)。读取交易可以指示数据条目将被缓存在非共享状态。换句话说,读取交易可以被描述为“ReadNoSnoop”交易。读取交易可以指示数据条目是可共享的,并且发出请求的主设备将不保留副本。换句话说,读取交易可以被描述为“ReadOnce”交易。读取交易可以指示数据条目的所有其他副本要被从其他主设备的缓存中清除并无效化。换句话说,读取交易可以被描述为“ReadOnceCleanlnvalidate”交易。读取交易可以指示数据条目的所有其他副本将在其他主设备的缓存中被无效化。换句话说,读取交易可以被描述为“ReadOnceMakelnvalid”交易。本领域普通技术人员将认识到上面使用的术语(即“ReadNoSnoop”、“ReadOnce”“ReadOnceCleanlnvalidate”和“ReadOnceMakelnvalid”)来自英国剑桥郡的Limited公司所提供的规格。因此,务必要注意,本公开仅仅利用已知术语来给出可以从当前公开的技术中受益的读取交易的清楚示例,但是这些技术同样可以应用于其他***和互连规格。
在一些示例性实施例中,存在一种在相干互连***中操作装置的方法,包括以下步骤:接收来自发出请求的主设备、针对存储在数据存储从属设备中的数据条目的一组相干协议交易的读取交易;在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录;响应于读取交易的接收,向数据存储从属设备发送直接内存传输请求,其中,直接内存传输请求包括读取应答触发符,以从数据存储从属设备请求读取应答信号;以及响应于接收到来自数据存储设备的读取应答信号,更新由接收读取交易而创建的记录,以指示直接内存传输请求的完成。
在一些示例性实施例中,存在一种用于包括发出请求的主设备和数据存储从属设备的相干互连***的装置,其中该装置包括:接收装置,用于接收来自发出请求的主设备的相干协议交易;交换装置,用于与数据存储从属设备进一步交换相干协议交易;保持记录装置,用于在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录;发出装置,用于响应于接收到来自发出请求的主设备、针对存储在数据存储设备中的数据条目的读取交易,而向数据存储从属设备发出直接内存传输请求,其中,直接内存传输请求包括读取应答触发符;以及更新装置,用于响应于接收到来自数据存储设备的读取应答信号,而更新由接收到读取交易而创造的在该保持记录装置中的记录,对应于直接内存传输请求的完成。
在一些示例性实施例中,存在一种用于相干互连***的数据存储从属设备,包括:接口电路,用于与集线器设备交换相干协议交易,并且进一步与主设备交换相干协议交易;以及交易控制电路,该交易控制电路响应于接收到来自集线器设备、包括读取应答触发符的直接内存传输请求,以将读取应答信号传输到集线器设备,并将直接内存传输请求中指定的数据直接传输到主设备。
响应于接收到包括读取应答触发符的直接内存传输请求,由交易控制电路触发读取应答信号可以以各种方式发生。例如,在一些实施例中,交易控制电路可以被配置为当不需要重试时,响应于直接内存传输请求的接收,将读取应答信号发送到集线器设备。换句话说,一旦从属设备接受了直接内存传输请求并且可以保证从属设备将不会拒绝该请求(即发出“重试”),则从属设备可以发送读取应答信号。因此,集线器设备可以接收对于接受直接内存传输请求的非常及时的指示,并且交易追踪电路中的记录亦相应地及时更新,从而减少了***中该记录的生命期。在其他实施例中,触发可能不是那么立即,并且从属设备可以延迟响应,直到其已完成直接内存传输请求的处理,并且因此,向发出请求的主设备发送直接内存传输数据响应,并同时向集线器(主)设备发送读取应答信号,因此简化了硬件逻辑。
在一些示例性实施例中,存在一种在相干互连***中操作数据存储从属设备的方法,该方法包括以下步骤:从集线器设备接收直接内存传输请求;当直接内存传输请求包括读取应答触发符时,将读取应答信号发送到集线器设备;以及将直接内存传输请求中指定的数据直接传输到主设备。
现在将参考附图来描述一些特定实施例。
图1示例性地示出了数据处理***10,其中在一个实施例中实现了本技术。从图中可以看出,这是一个相对异质的***,包括多个不同的主设备和多个不同的从属设备,但是其他实施例同样可以更加同质。图1中所示的主设备包括中央处理设备14、图形处理设备16、直接内存访问设备(DMA)18、和I/O相干主设备20。该I/O相干主设备20提供对于网络接口卡(NIC)40的桥接,用于与另一网络(未示出)进行通信。图1的示例中示出的从属设备包括存储器22和24、***设备26和***缓存28。所有这些设备之间的通信和数据传输由相干互连12进行调解,相干互连12在本文中也被不同地称为主节点或集线器设备。从图中还可以看出,CPU设备14被示出为包括特定CPU块30和相关联的本地(即,L1)缓存34,图形处理设备16被示出包括特定GPU块32和本地(L1)缓存36,并且I/O相干主设备20还被提供有其自身的本地(L1)缓存38。图1中所示的设备之间的通信采用来自一组相干协议交易的经限定的格式消息的形式,这使得能够保持存储在所示***周围的多个位置中的数据条目的多个副本的一致性。这组相干协议交易可以被适合于所考虑的***的各种方式来限定,但是一个这样的合适示例是由英国剑桥郡的Limited公司所提供的5 CHI(相干集线器接口)规格。本文公开的技术涉及主节点处理从发出请求的主设备接收的某些读取交易的方式,以使得能够通过直接内存传输的方式来实现那些交易,而不会对主节点施加提升的跟踪负担。
图2示例性地示出了一个实施例中的装置50,装置50可以例如在图1所示的***中扮演相干互连的角色。装置50(这里也称为“主节点”或“集线器”)包括主接口52和从属接口54,装置50通过主接口52与***中的主设备交换交易,并且通过从属接口54与从属设备交换交易。与本公开相关的特定交易是从***中的发出请求的主设备接收的读取交易以及向***中的数据存储从属设备发送的直接内存传输请求。装置50包括交易控制电路56,交易控制电路56管理装置对交易的接收、处理和发布的总体控制。该组件还参考交易跟踪电路58,交易跟踪电路58在图中被示为包括正在进行中的交易电路60和计数器62。装置50还被示为与***缓存64(例如,其可以是图1的***缓存28)进行通信。装置50经由主接口52从发出请求的主设备接收的读取交易包括两位定序字段,两位定序字段的两位内容被限定为具有关于请求读取交易定序的下列意义:
2’b00:未定序
2’b01:保留
2’b10:请求定序
2’b11:端点定序
本技术利用了位组合2’b01被限定为“保留”(即对于接收到该位组合的设备(包括装置50)不具有语意意义)的事实。在接收到来自发出请求的主设备、适合作为直接内存传输请求实现的未定序读取请求(即,未分配的读取交易,例如“ReadNoSnoop”、“ReadOnce”、“ReadOnceCleanlnvalidate”和“ReadOnceMakelnvalid”)时,在作为基于由英国剑桥郡的Limited公司所提供的规格的***的该示例中,交易控制56使得在交易***58中在正在进行中的交易存储器60中成为条目。因此,务必要注意,本公开利用已知术语来促进本领域普通技术人员的理解,但是本公开然后根据本文第一次呈现的技术(即触发来自从属设备的读取应答信号,向该从属设备转发直接内存传输请求)来增加对这种读取交易的处理。因此,交易控制56随后还标记交易(直接内存传输请求)的定序字段,然后向存储所需数据的从属设备发出交易,以指示需要读取应答。这是通过将定序字段的上述特定“保留”位组合,以装置50(主节点)和数据存储从属设备(从属节点)之间的交易的定制意义进行过载来完成的,以指示需要读取应答。在该示例中,对于主节点和从属节点之间的交易,两位定序字段中的可能位组合的排列为:
2’b00:未定序/要被视为不需要读取应答
2’b01:需要读取应答
2’b10:保留
2’b11:保留
接收直接内存传输请求的从属设备被安排为识别定序字段中的2’b01位组合的这种“新”含义,并且一旦可以保证该请求已被接受并且从属设备不会发送重试则发送读取收据(即,读取应答)。实际上,该示例中的从属设备一接收到直接内存传输请求(并且可以保证从属设备不会发出重试)就发送读取应答信号(读取收据)。因此,主节点接收对于直接内存传输请求被接受的非常及时的指示,以便能够在其***中解除分配条目。在该实施例的变型中,从属设备可以被配置为在完成直接内存传输请求的处理之前不发送读取收据(读取应答信号),并且因此向发出请求的主设备传送直接内存传输数据响应,同时向集线器(主)设备传送读取应答信号,从而简化了从属硬件逻辑。下面将参考以下附图更详细地描述在交易***58内的计数器62的使用。
图3示出了在一个实施例中的在发出请求的主设备、主节点和数据存储从属设备之间交换的示例性消息组。最初,发出请求的主设备向主节点发送读取请求,指定主设备需要的一个或多个数据条目。在接收到该读取请求时,主节点在其交易***中创建条目,并且然后向存储(一个或多个)数据条目的数据存储从属设备发出直接内存传输(读取请求)。该请求在其定序字段中标记有前述特定位组合(2’b01),表示需要读取应答。因此,响应于该请求的接收,数据存储从属设备向主节点发出读取收据。注意(如上所述)数据存储从属设备可以被安排为基本上立即发出该读取收据(当从属设备已经接受直接内存传输请求并且已知将不会发生重试时),或者可以被设置为仅在直接内存传输已被处理时才发送读取收据。在接收到收据后,主节点随后将其在***中创建的条目标记为完成(就好像现在已经完成完整交易一样)。数据存储从属设备从其存储器中检索所需数据,并且然后将该数据直接发送到发出请求的主设备,而无需通过主节点。该图示出了该数据的传输可以通过一次以上的传输(例如,多个分组)来进行。最后,图3中的虚线通信线示出了当已经完全接收到所请求的数据时,发出请求的主设备可以向主节点额外发出交易完成应答。在发出请求的主设备已经在初始读取请求中指示了可以期望这种完成应答(ExpCompAck=1)的情况下,主节点可以对相应的计数器(例如,图2中所示的多个计数器62之一)进行递增,并且在接收到交易完成应答时使得该计数器递减。这将在下面更详细地描述。
图4示出了在一个实施例中由主节点在操作中采取的一系列步骤。可以认为该流程开始于步骤100,其中,确定是否已经接收到未定序的ReadNoSnoop、ReadOnce、ReadOnceCleanlnvalidate或ReadOnceMake lnvalid交易。在未接收到时,流程在该阶段处等待。在接收到这些类型的交易中的一个时,流程进行到步骤102,其中主节点针对该交易在***中分配条目。然后在步骤104处,主节点向***中存储被请求的(一个或多个)数据条目的从属节点发出直接内存传输请求,其中定序字段的位设置为2’b01,其中该位组合对于定序限制的规格不具有意义,但是应该理解收据方从属节点指示应该生成读取收据。然后,流程在步骤106处等待,直到从从属节点已经接收到相应读取收据,并且最后在步骤108处,当将***中针对该交易的条目解除分配(即,标记为完成)。然后流程返回到步骤100。
图5示出了在一个实施例中在主节点的操作中采取的一系列步骤。可以认为该流程开始于步骤200,其中,流程等待直到接收到未定序的ReadNoSnoop、ReadOnce、ReadOnceCleanlnvalidate或ReadOnceMake lnvalid交易。然后流程进行到步骤202,其中,确定所接收的读取交易是否指示随后将由发出请求的主设备发出交易完成应答。如果是如下情况(即,当在读取交易中ExpCompAck=1时),则流程经过步骤204继续,其中,主节点对发出请求的主设备递增计数器。否则(即,当在读取交易中ExpCompAck=0时),流程直接进行到步骤206。在该步骤206处,对该交易在***中分配条目,并且然后在步骤208处,主节点向存储被请求的(一个或多个)数据条目的从属节点发出直接内存传输(读取)请求,其中,定序字段的位设置为2’b01。然后流程在步骤210处等待,直到从从属节点接收到相应读取收据,并且然后在步骤212处,将对于该交易的***中的条目取消分配。接下来在步骤214处,确定主节点是否已从发出请求的主设备接收到交易完成信号,并且流程自身在此处循环,直到接收到该交易完成信号为止,并且然后在步骤216处,递减对于发出请求的主设备的计数器,并且流程返回到步骤200。
图5示出了仅当发出请求的主设备正常操作时对应于发出请求的主设备的计数器的递增和递减,并且(仅为了该图中的图示的清楚)没有示出当响应于所接收信号的计数器值的可能更新指示了***中的可能错误时,主节点如何响应。在图6A和图6B中示出了两个示例。图6A示出了其中可以由主节点生成错误信号的一种方式。可以认为该流程开始于步骤220,其中,确定是否已经接收到具有ExpCompAck=1的未定序读取交易。如果接收到,则流程经过步骤222继续,其中,递增对于发出请求的主设备的计数器。然后在步骤224处,确定是否已经接收到Comp_Ack信号(即,交易完成应答)。如果未接收到,则流程返回到步骤220。然而,如果接收到Comp_Ack信号,则流程前进到步骤226,其中,确定对于相关主设备的计数器是否已经处于预定最小值(例如,零)。如果计数器已处于预定最小值,并且因此不可能进一步递减该计数器,则流程进行到步骤228,因为已经接收到假的Comp_Ack信号并且可以标记错误。换句话说,在到达流程图中的该点时,主节点已观察到的交易完成应答,多于期望此种交易完成应答的指示。否则,在步骤230处,递减对于该主设备的计数器,并且流程返回到步骤220。
图6B示出了主节点寻求进入静止状态可以采取的方式的示例。可以认为该流程开始于步骤250,其中,流程等待直到确定主节点应该寻求进入静止状态。然后在步骤252处,确定主节点对于***中的主设备保持的任何计数器是否未处于此计数器的预定最小值(即,指示仍然期望至少一个交易完成应答)。如果计数器都处于计数器最小值,则流程进行到步骤254,其中,主节点可以继续进入静止状态。然而,如果至少一个计数器未处于其最小值,则流程前进到步骤256,其中,主节点暂停一段适当周期(取决于特定***),以允许完成正在进行中的交易,并且然后在步骤258处再次确定是否存在任意计数器未处于其预定最小值。如果任何计数器未达到其预定的最小值。如果现在所有计数器都达到其最小值,则流程可以进行到步骤254并且***可以进入其静止状态,若否,则流程进行到步骤260,因为仍有交易完成应答未解决并且可以标记该错误。
总之,总体上提供了在相干互连***中的装置以及操作该装置的相应方法,相干互连***包括发出请求的主设备和数据存储从属设备。该装置在相干协议交易的完成正在进行中的同时,保持从发出请求的主设备接收的相干协议交易的记录,并且响应于接收到来自发出请求的主设备、针对存储在数据存储从属设备中的数据条目的读取交易,以向数据存储从属设备发出直接内存传输请求。读取应答触发符被添加到直接内存传输请求,并且响应于接收到来自数据存储从属设备的读取应答信号,对应于直接内存传输请求的完成而更新由接收到读取交易而创建的记录。尽管通过直接内存传输满足了读取交易,因此减少了装置保持记录所需的生命期。还提供了相应的数据存储从属设备和操作该数据存储从属设备的方法。
在本申请中,词语“被配置为......”或“被安排为”用于表示装置的元件具有能够执行所限定的操作的配置。在该上下文中,“配置”表示硬件或软件的布置或互连的方式。例如,该装置可以具有提供所限定操作的专用硬件、或者可被编程为执行功能的处理器或其他处理设备。“被配置为”或“被安排为”并不意味着需要以任何方式来改变装置元件以便提供所限定的操作。
尽管本文已经参考附图详细描述了本发明的示例性实施例,但是应该理解,本发明并不限于那些精确的实施例,并且在不脱离由所附权利要求限定的本发明的范围的情况下,本领域技术人员可以在其中实现各种改变、添加和修改。例如,在不脱离本发明的范围的情况下,从属权利要求的特征可以与独立权利要求的特征进行各种组合。
Claims (18)
1.一种用于相干互连***的装置,包括:
接口电路,用于接收来自发出请求的主设备的相干协议交易,并且与数据存储从属设备交换进一步的相干协议交易;
交易跟踪电路,用于在所述相干协议交易的完成正在进行中的同时,保持从所述发出请求的主设备接收到的所述相干协议交易的记录;以及
交易控制电路,用于响应于在所述接口电路处接收到来自所述发出请求的主设备、针对存储在所述数据存储从属设备中的数据条目的所述相干协议交易的读取交易,而向所述数据存储从属设备发出直接内存传输请求,其中,所述直接内存传输请求包括读取应答触发符以从请求来自所述数据存储从属设备的读取应答信号,
并且其中,所述交易跟踪电路响应于在所述接口电路处接收到来自所述数据存储从属设备的所述读取应答信号,以更新由接收到所述读取交易而创建的所述交易跟踪电路中的记录,以指示所述直接内存传输请求的完成。
2.根据权利要求1所述的装置,其中,所述读取交易包括在所述读取交易的预定部分中的针对其他交易的定序自由度规格,并且所述读取应答触发符被包括在所述直接内存传输请求的相同预定部分内。
3.根据权利要求2所述的装置,其中,所述读取应答触发符被指示在所述直接内存传输要求的预定部分的子部分中,并且其中,所述读取交易的预定部分的子部分针对所述读取交易对所述装置不具有语意意义。
4.根据权利要求2或3所述的装置,其中,所述预定部分为所述相干协议交易的位字段,所述位字段被解译为交易定序规格。
5.根据权利要求4所述的装置,其中,所述位字段为被解释为所述交易定序规格的两位字段,所述两位字段中的预定位组合针对所述读取交易对于所述装置不具有语意意义,并且所述两位字段中的预定位组合为所述直接内存传输请求中的所述读取应答触发符。
6.根据权利要求1-5中任一项所述的装置,其中,所述读取交易包括随后在所述读取交易完成时所述发出请求的主设备将发出交易完成信号的指示符。
7.根据权利要求6所述的装置,其中,所述交易跟踪电路还包括计数器电路,所述计数器电路用于保持计数器值,并且所述计数器电路响应于随后将发出所述交易完成信号的指示符来递增所述计数器值,并且所述计数器电路响应于所述交易完成信号来递减所述计数器值。
8.根据权利要求7所述的装置,其中,当所述装置准备进入静止状态时,所述装置响应于所述计数器值指示仍然期望所述交易完成信号,以产生错误信号。
9.根据权利要求7或8所述的装置,其中,当所述计数器值指示不应期望交易完成信号时,所述装置响应于接收到所述交易完成信号来产生错误信号。
10.根据权利要求7-9中任一项所述的装置,其中,所述交易跟踪电路包括多个计数器电路的实例,所述多个计数器电路对多于一个发出请求的主设备单独保持所述计数器值。
11.根据权利要求1-10中任一项所述的装置,其中,所述读取交易指示所述数据条目将被缓存在非共享状态中。
12.根据权利要求1-10中任一项所述的装置,其中,所述读取交易指示所述数据条目是可共享的,并且所述发出请求的主设备将不保留副本。
13.根据权利要求12所述的装置,其中,所述读取交易指示所述数据条目的所有其他副本要被从其他主设备的缓存中清除并无效化。
14.根据权利要求12所述的装置,其中,所述读取交易指示所述数据条目的所有其他副本将在其他主设备的缓存中被无效化。
15.一种用于在相干互连***中操作装置的方法,包括以下步骤:
接收来自发出请求的主设备的一组相干协议交易的读取交易,该读取交易针对存储在数据存储从属设备中的数据条目;
在所述相干协议交易的完成正在进行中的同时,保持从所述发出请求的主设备接收到的相干协议交易的记录;
响应于接收到所述读取交易,向所述数据存储从属设备发送直接内存传输请求,其中,所述直接内存传输请求包括读取应答触发符,以从所述数据存储从属设备请求读取应答信号;以及
响应于接收到来自所述数据存储设备的读取应答信号,更新由接收所述读取交易而创建的记录,以指示所述直接内存传输请求的完成。
16.一种用于相干互连***的数据存储从属设备,包括:
接口电路,用于与集线器设备交换相干协议交易,并且与主设备交换进一步的相干协议交易;以及
交易控制电路,响应于接收到来自所述集线器设备、包括读取应答触发符的直接内存传输请求,将读取应答信号传输到所述集线器设备,并将所述直接内存传输请求中指定的数据直接传输到所述主设备。
17.根据权利要求16所述的数据存储从属设备,其中,所述交易控制电路被配置为响应于接受所述直接内存传输请求,当不需要重试时将所述读取应答信号发送到所述集线器设备。
18.一种用于在相干互连***中操作数据存储从属设备的方法,包括以下步骤:
接收来自集线器设备的直接内存传输请求;
当所述直接内存传输请求包括读取应答触发符时,将读取应答信号发送到所述集线器设备;以及
将所述直接内存传输请求中指定的数据直接传输到所述主设备。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US15/427,435 US10795820B2 (en) | 2017-02-08 | 2017-02-08 | Read transaction tracker lifetimes in a coherent interconnect system |
US15/427,435 | 2017-02-08 | ||
PCT/GB2018/050226 WO2018146451A1 (en) | 2017-02-08 | 2018-01-26 | Read transaction tracker lifetimes in a coherent interconnect system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110268390A true CN110268390A (zh) | 2019-09-20 |
CN110268390B CN110268390B (zh) | 2023-09-01 |
Family
ID=61132824
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201880009409.6A Active CN110268390B (zh) | 2017-02-08 | 2018-01-26 | 相干互连***中的读取交易***生命期 |
Country Status (8)
Country | Link |
---|---|
US (1) | US10795820B2 (zh) |
EP (1) | EP3580662B1 (zh) |
JP (1) | JP7140768B2 (zh) |
KR (1) | KR102526436B1 (zh) |
CN (1) | CN110268390B (zh) |
IL (1) | IL268322B (zh) |
TW (1) | TWI770107B (zh) |
WO (1) | WO2018146451A1 (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10795820B2 (en) * | 2017-02-08 | 2020-10-06 | Arm Limited | Read transaction tracker lifetimes in a coherent interconnect system |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6681293B1 (en) * | 2000-08-25 | 2004-01-20 | Silicon Graphics, Inc. | Method and cache-coherence system allowing purging of mid-level cache entries without purging lower-level cache entries |
CN1470019A (zh) * | 2000-08-21 | 2004-01-21 | ض� | 用于在一个分布式存储器、高速缓存相干的多处理器***中把有序的输入/输出事务流水线处理到相干存储器的方法和装置 |
GB201401670D0 (en) * | 2014-01-31 | 2014-03-19 | Ibm | Bridge and method for coupling a requesting interconnect and a serving interconnect in a computer system |
US20160055085A1 (en) * | 2014-08-25 | 2016-02-25 | Arm Limited | Enforcing ordering of snoop transactions in an interconnect for an integrated circuit |
CN105900076A (zh) * | 2014-01-13 | 2016-08-24 | Arm 有限公司 | 用于处理多个交易的数据处理***及方法 |
Family Cites Families (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5197146A (en) * | 1989-06-21 | 1993-03-23 | Hewlett-Packard Company | Method for maintaining cache coherence in a multiprocessor computer system |
EP0600626A1 (en) * | 1992-11-13 | 1994-06-08 | Cyrix Corporation | Coherency for write-back cache in a system designed for write-through cache |
US5504874A (en) * | 1993-09-29 | 1996-04-02 | Silicon Graphics, Inc. | System and method of implementing read resources to maintain cache coherency in a multiprocessor environment permitting split transactions |
US5696910A (en) * | 1995-09-26 | 1997-12-09 | Intel Corporation | Method and apparatus for tracking transactions in a pipelined bus |
US5953538A (en) * | 1996-11-12 | 1999-09-14 | Digital Equipment Corporation | Method and apparatus providing DMA transfers between devices coupled to different host bus bridges |
US6014690A (en) * | 1997-10-24 | 2000-01-11 | Digital Equipment Corporation | Employing multiple channels for deadlock avoidance in a cache coherency protocol |
US6622216B1 (en) * | 2001-05-10 | 2003-09-16 | Lsi Logic Corporation | Bus snooping for cache coherency for a bus without built-in bus snooping capabilities |
US6862646B2 (en) * | 2001-12-28 | 2005-03-01 | Thomas J. Bonola | Method and apparatus for eliminating the software generated ready-signal to hardware devices that are not part of the memory coherency domain |
US8185602B2 (en) * | 2002-11-05 | 2012-05-22 | Newisys, Inc. | Transaction processing using multiple protocol engines in systems having multiple multi-processor clusters |
US7305524B2 (en) * | 2004-10-08 | 2007-12-04 | International Business Machines Corporation | Snoop filter directory mechanism in coherency shared memory system |
US20070233932A1 (en) * | 2005-09-30 | 2007-10-04 | Collier Josh D | Dynamic presence vector scaling in a coherency directory |
US20070143550A1 (en) * | 2005-12-19 | 2007-06-21 | Intel Corporation | Per-set relaxation of cache inclusion |
US7734857B2 (en) * | 2007-07-31 | 2010-06-08 | Intel Corporation | Cache coherent switch device |
US7925840B2 (en) * | 2008-09-05 | 2011-04-12 | Arm Limited | Data processing apparatus and method for managing snoop operations |
US8375170B2 (en) * | 2010-02-12 | 2013-02-12 | Arm Limited | Apparatus and method for handling data in a cache |
JP2012118906A (ja) * | 2010-12-03 | 2012-06-21 | Sony Corp | 相互接続装置、および、その制御方法 |
US9304924B2 (en) * | 2012-08-17 | 2016-04-05 | Futurewei Technologies, Inc. | Cache coherent handshake protocol for in-order and out-of-order networks |
WO2015108522A1 (en) * | 2014-01-16 | 2015-07-23 | Intel Corporation | An apparatus, method, and system for a fast configuration mechanism |
GB2533972B (en) * | 2015-01-12 | 2021-08-18 | Advanced Risc Mach Ltd | An interconnect and method of operation of an interconnect |
GB2536871A (en) * | 2015-03-04 | 2016-10-05 | Advanced Risc Mach Ltd | An apparatus and method to generate trace data in response to transactional execution |
GB2538764B (en) * | 2015-05-28 | 2018-02-14 | Advanced Risc Mach Ltd | Register renaming |
US10235297B2 (en) * | 2015-11-04 | 2019-03-19 | International Business Machines Corporation | Mechanism for creating friendly transactions with credentials |
US9916247B2 (en) * | 2016-02-04 | 2018-03-13 | International Business Machines Corporation | Cache management directory where hardware manages cache write requests and software manages cache read requests |
GB2557254B (en) * | 2016-12-02 | 2020-02-12 | Advanced Risc Mach Ltd | Filtering coherency protocol transactions |
US10489323B2 (en) * | 2016-12-20 | 2019-11-26 | Arm Limited | Data processing system for a home node to authorize a master to bypass the home node to directly send data to a slave |
US11256623B2 (en) * | 2017-02-08 | 2022-02-22 | Arm Limited | Cache content management |
US10795820B2 (en) * | 2017-02-08 | 2020-10-06 | Arm Limited | Read transaction tracker lifetimes in a coherent interconnect system |
US10649684B2 (en) * | 2017-03-16 | 2020-05-12 | Arm Limited | Memory access monitoring |
US10761987B2 (en) * | 2018-11-28 | 2020-09-01 | Arm Limited | Apparatus and method for processing an ownership upgrade request for cached data that is issued in relation to a conditional store operation |
-
2017
- 2017-02-08 US US15/427,435 patent/US10795820B2/en active Active
-
2018
- 2018-01-16 TW TW107101499A patent/TWI770107B/zh active
- 2018-01-26 WO PCT/GB2018/050226 patent/WO2018146451A1/en unknown
- 2018-01-26 CN CN201880009409.6A patent/CN110268390B/zh active Active
- 2018-01-26 EP EP18702540.8A patent/EP3580662B1/en active Active
- 2018-01-26 JP JP2019541407A patent/JP7140768B2/ja active Active
- 2018-01-26 KR KR1020197024441A patent/KR102526436B1/ko active IP Right Grant
-
2019
- 2019-07-29 IL IL268322A patent/IL268322B/en unknown
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1470019A (zh) * | 2000-08-21 | 2004-01-21 | ض� | 用于在一个分布式存储器、高速缓存相干的多处理器***中把有序的输入/输出事务流水线处理到相干存储器的方法和装置 |
US6681293B1 (en) * | 2000-08-25 | 2004-01-20 | Silicon Graphics, Inc. | Method and cache-coherence system allowing purging of mid-level cache entries without purging lower-level cache entries |
CN105900076A (zh) * | 2014-01-13 | 2016-08-24 | Arm 有限公司 | 用于处理多个交易的数据处理***及方法 |
GB201401670D0 (en) * | 2014-01-31 | 2014-03-19 | Ibm | Bridge and method for coupling a requesting interconnect and a serving interconnect in a computer system |
US20160055085A1 (en) * | 2014-08-25 | 2016-02-25 | Arm Limited | Enforcing ordering of snoop transactions in an interconnect for an integrated circuit |
Also Published As
Publication number | Publication date |
---|---|
WO2018146451A1 (en) | 2018-08-16 |
TWI770107B (zh) | 2022-07-11 |
IL268322B (en) | 2021-12-01 |
KR20190116326A (ko) | 2019-10-14 |
US10795820B2 (en) | 2020-10-06 |
IL268322A (en) | 2019-09-26 |
KR102526436B1 (ko) | 2023-04-27 |
JP2020506482A (ja) | 2020-02-27 |
US20180225206A1 (en) | 2018-08-09 |
JP7140768B2 (ja) | 2022-09-21 |
TW201830238A (zh) | 2018-08-16 |
EP3580662A1 (en) | 2019-12-18 |
EP3580662B1 (en) | 2021-04-21 |
CN110268390B (zh) | 2023-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP0404369B1 (en) | A method for maintaining cache coherence in a multiprocessor computer system | |
US5317739A (en) | Method and apparatus for coupling data processing systems | |
CN101625664B (zh) | 满足部分写和非监听存取之间的存储器排序要求 | |
CN101802796B (zh) | 防止多核处理器中的写回竞争 | |
US5900020A (en) | Method and apparatus for maintaining an order of write operations by processors in a multiprocessor computer to maintain memory consistency | |
US4837680A (en) | Controlling asynchronously operating peripherals | |
EP0383474B1 (en) | Processor interrupt control | |
US6801986B2 (en) | Livelock prevention by delaying surrender of ownership upon intervening ownership request during load locked / store conditional atomic memory operation | |
TWI239187B (en) | System and method for managing and validating remote keys which correspond to outstanding data transactions | |
CN103080921B (zh) | 多核处理器***、同步控制***、同步控制装置、信息生成方法 | |
US7502876B1 (en) | Background memory manager that determines if data structures fits in memory with memory state transactions map | |
JP4660064B2 (ja) | 分散処理システムにおけるロックの実行 | |
JPH04308956A (ja) | 受信バッファ | |
CN104798111A (zh) | 基于云的无线通信***及方法 | |
KR101529036B1 (ko) | 데이터 없이 추론적 소유권에 대한 지원 | |
WO2009002862A1 (en) | Avoiding livelock using intervention messages in multiple core processors | |
JP5505516B2 (ja) | 情報処理システムおよび情報送信方法 | |
CN100594482C (zh) | 在存储器部件之间保持数据一致性的方法和*** | |
US6904465B2 (en) | Low latency inter-reference ordering in a multiple processor system employing a multiple-level inter-node switch | |
CN108121686A (zh) | 多处理器和多处理器*** | |
CN110268390A (zh) | 相干互连***中的读取交易***生命期 | |
TW521189B (en) | System and method for implementing a separate virtual channel for posted requests in a multiprocessor computer system | |
CN104636280B (zh) | 用于管道仲裁的电路和方法 | |
JP2013512520A (ja) | システムのいくつかの構成要素のメモリ間の直接データ転送を許可するそのシステム | |
JP3667585B2 (ja) | 分散メモリ型並列計算機及びそのデータ転送終了確認方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |