CN102722401A - 一种硬件事务内存系统中的伪相联多版本数据管理方法 - Google Patents

一种硬件事务内存系统中的伪相联多版本数据管理方法 Download PDF

Info

Publication number
CN102722401A
CN102722401A CN2012101253592A CN201210125359A CN102722401A CN 102722401 A CN102722401 A CN 102722401A CN 2012101253592 A CN2012101253592 A CN 2012101253592A CN 201210125359 A CN201210125359 A CN 201210125359A CN 102722401 A CN102722401 A CN 102722401A
Authority
CN
China
Prior art keywords
affairs
data
puppet
links
transaction
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
Application number
CN2012101253592A
Other languages
English (en)
Other versions
CN102722401B (zh
Inventor
冯丹
晏志超
江泓
谭玉娟
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huazhong University of Science and Technology
Original Assignee
Huazhong University of Science and Technology
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huazhong University of Science and Technology filed Critical Huazhong University of Science and Technology
Priority to CN201210125359.2A priority Critical patent/CN102722401B/zh
Publication of CN102722401A publication Critical patent/CN102722401A/zh
Application granted granted Critical
Publication of CN102722401B publication Critical patent/CN102722401B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种硬件事务内存系统中的伪相联多版本数据管理方法,包括:(1)检查硬件事务内存系统中已有的多版本共享数据的事务依赖关系,同时判断该事务是否可以正常调度执行;(2)如果不可以,则撤销该事务或等待;(3)如果可以,则:对于读操作,指派未提交的共享数据的多个版本中的任一个版本给该事务,并将该事务的依赖关系加入到事务依赖关系中去,最后再访问该版本数据;对于写操作,在多个版本中添加一个新的版本给该事务,并将该事务的依赖关系加入到事务依赖关系中去,最后再访问新的版本的数据。本发明在减少数据移动和硬件开销的同时,也降低了冲突事务对系统并发性能的影响,提升了硬件事务内存系统的性能。

Description

一种硬件事务内存系统中的伪相联多版本数据管理方法
技术领域
本发明属于计算机硬件事务内存系统领域,具体涉及一种事务内存系统中多版本数据的管理方法。 
背景技术
事务内存系统将对共享数据的操作以事务为单位管理,使事务具备原子性和隔离性。其中,原子性表现为事务执行的结果要么是提交后生效,要么是撤销后无效;隔离性表现为事务提交前其对共享数据的修改不被事务外的程序所感知。 
因此,每个事务需要将其执行期间对共享数据的修改记录下来,同时为了应对事务因撤销需要恢复原始状态,被修改的共享数据的原始值也同样要保存起来,并在一个事务结束(提交或者撤销)时,将其中的新版本或者旧版本提交到内容一致的存储空间中去,这些操作被称之为事务内存系统中的版本管理,是事务内存系统的一个重要组成部分。 
同时,事务内存系统在多个事务并发执行期间,还要同时检查事务之间的冲突情况,并根据冲突情况调度冲突事务按照一定的顺序执行以确保共享数据的一致性。其中,事务冲突定义为多个事务的内存访问操作同时访问同一个共享数据,并且在这些访问操作中至少有一个执行的是写操作,相应的事务就因为对该共享数据的访问而导致了事务冲突,事务内存系统中检测和解决事务冲突的模块被称之为事务内存的冲突管 理模块,同版本管理模块一样,也是事务内存系统的一个重要组成部分。 
现有硬件事务内存系统中的额外开销主要来自于版本管理中数据的移动操作和对于冲突事务调度时造成的额外的撤销和等待操作。现有的版本管理方式多将事务新旧版本数据存储在不同的存储层次上,这样会带来数据移动的开销。专利文献CN201010231134.6中提出了一种采用重定向表格的方式避免数据移动的方法,但是需要维护重定向表格,需要增加额外的硬件开销。同时针对冲突的事务,并发对共享数据的访问照成的冲突在很多情况下是可以通过一定的调度在保证共享数据一致的前提下,使更多的事务可以并发的执行,而不是像传统的方式那样将冲突的事务暂停或者撤销。 
但是,现有硬件事务内存系统在数据版本管理方式上要么存在数据额外移动开销的弊病,要么是需要额外增加硬件模块去消除这类开销。同时,现有的事务内存系统冲突管理方式对于多个并发事务同时对同一个共享数据的修改通常采取了比较严格的调度控制策略,使过多的冲突事务被暂停或撤销,降低了并行程序的线程级并行度。 
伪相联数据缓存技术最早被提出是为了解决传统直接映射数据缓存中缓存块命中率过低的弊端,该技术将在传统直接映射数据缓存技术中需要被替换出数据缓存的数据块放置在相应的伪相联空间上(伪相联空间实际上就是将缓存块地址中SET地址的最高位反转后的那个空间),后续访问在直接映射空间没有找到相应数据块时,还会直接去检查伪相联的空间,以降低因为缓存块缺失导致需要访问内存而造成更大的访存开销。 
多版本并发控制技术在传统的分布式系统中应用比较多,主要是将数据被修改的版本按照一定的顺序维持其依赖关系,提高整个系统的并发性,传统的方式一般在实现中采用软件方式在分布式系统中实现这个功能。 
发明内容
本发明的目的在于提出一种硬件事务内存系统中的伪相联多版本数据管理方法,将伪相联缓存一致性协议引入到硬件事务内存系统中,同时在伪相联缓存一直性协议中添加对共享数据多版本的管理,通过维护多版本数据之间的相互依赖关系来调度冲突的事务,从而可以避免不同版本数据在事务结束时的移动,同时使系统支持共享数据的多版本管理,维护多版本数据值的依赖关系调度冲突的事务同时运行,降低因为冲突而直接简单地撤销或者挂起冲突的事务。采用本发明可以挖掘出更大的并发性,提高系统的性能。 
实现本发明的目的所采用的具体技术方案如下。 
一种硬件事务内存系统中的伪相联多版本数据管理方法,用于对新加入硬件事务内存系统中的事务进行并发处理控制,其具体步骤如下: 
(1)检查硬件事务内存系统中已有的多版本共享数据的事务依赖关系,同时判断该事务是否可以正常调度执行; 
(2)如果判断该事务可能会引起事务环状依赖,撤销该事务,或等待重新执行; 
(3)如果该事务可以正常调度, 
对于读操作,则指派未提交的共享数据的多个版本中的任一个版本 给该事务,并将该事务的依赖关系加入到所述多版本共享数据的事务依赖关系中去,最后再访问该任一个版本数据; 
对于写操作,则在未提交的共享数据的多个版本中添加一个新的版本给该事务,并将该事务的依赖关系加入到多版本共享数据的事务依赖关系中去,最后再访问该新的版本的数据。 
作为本发明的改进,所述步骤(3)中,所述读操作访问该任一个版本数据的具体过程为: 
检查该缓存块是否已经执行了伪相联操作,如果访问的缓存块标记表面该缓存块已经被伪相联了,则通过伪相联的模块得到伪相联的地址,并读取伪相联空间中的数据,否则,直接读取该缓存块中的数据。 
作为本发明的改进,所述步骤(3)中,所述写操作添加一个新的版本的步骤具体为: 
将该缓存块执行伪相联操作,分配一个伪相联的空间用来存储该新的版本的数据,并在缓存数据块中设置伪相联标记位,对于该事务内后续的对该共享数据的写操作,写操作的新数据值直接存储到该分配的伪相联的空间中。 
本发明除了通过伪相关缓存一致性协议为嵌套事务和挂起的事务提供更多的空间来存放未提交的数据版本以外,还扩展了冲突管理模式,即允许多个事务同时修改同一个共享数据,通过维护它们修改的顺序调度冲突的事务,在确保数据一致性的前提下增加系统的并发度。 
本发明中,通过检查事务依赖关系图,查看该事务受到那些已有的依赖关系的制约。如果新事务中执行对共享数据的读操作,按照事务已 有的依赖关系,得到可以访问的数据版本,并选择其中的一个版本数据返回给读操作,同时增加该事务和返回数据版本的事务之间的依赖关系到事务依赖关系图中。如果新事务中执行对共享数据的写操作,按照事务已有的依赖关系,将新版本的数据插入到一个多版本依赖的数据结构中去,维护这个多版本依赖的数据结构,并将其关系反应到事务依赖关系图中。如果新事务中执行对共享数据的读或者写操作,按照事务已有的依赖关系,无法返回可以调度的数据版本,那么目前的冲突是没有办法串行化的调度了,即必须要选择暂停或者撤销其中冲突的一个或多个事务。 
本发明的硬件事务内存系统中的伪相联多版本数据管理方法,首先,利用扩展的伪相联缓存一致性协议,对事务内存系统中事务内部共享数据的写操作所产生的新版本数据和事务执行之前已有的旧版本数据之间维护一个伪相联的映射关系,当该事务在成功提交时,后续对该共享数据的访问将被缓存一致性协议定向到新版本数据上,当该事务因为事务之间的冲突需要撤销时,后续对该共享数据的访问还将是对旧版本数据的访问。本方法可以降低不同版本数据在事务提交或者撤销时的移动;与此同时,除了支持前述的新、旧两个版本数据以外,本方法扩展了不同事务对相同的共享数据修改的多版本支持,通过伪相联关系增加版本号标记后,逻辑上可以对数据的修改操作标记出相应的顺序,每个事务因此对共享数据新、旧版本数据的判断将分别维护一个新版本号和旧版本号,当产生冲突时,系统可以依据冲突事务中共享数据的版本号来调度冲突事务的执行,避免不必要的事务撤销和等待操作并调度好发生冲 突的事务。 
本发明结合了伪相联数据缓存和多版本并发控制技术,将其应用在硬件事务内存系统中,节省了数据移动的时间,同时支持多个事务对相同共享数据的修改,通过维护多版本依赖关系转化成事务依赖关系解决冲突事务之间的调度操作,在减少数据移动和硬件开销的同时,也降低了冲突事务对系统并发性能的影响,整体上提升了硬件事务内存系统的性能。该方法具有以下优点: 
1.事务在执行期间,通过伪相联缓存一致性协议,可以避免额外的数据移动操作。 
2.伪相联缓存一致性协议提供了更多的空间用于存放未提交的事务修改版本。 
3.采用了多版本支持的管理方式,可以动态、灵活地调度冲突的事务,在确保数据一致性的前提下,提高系统的并发度。 
附图说明
图1为本发明的一种硬件事务内存系统中的伪相联多版本数据管理方法的结构示意图; 
图2为本发明的伪相联缓存一致性协议示意图; 
图3为本发明的事务内读操作流程示意图; 
图4为本发明的事务内写操作流程示意图。 
具体实施方式
下面结合附图和具体实施例对本发明作进一步说明。 
本发明的一种硬件事务内存系统中的伪相联多版本数据管理方法,允许多个事务同时修改同一个共享数据,通过维持共享数据版本的依赖关系维护出并发事务的依赖关系来调度冲突的事务;同时,利用伪相联缓存一致性协议,挖掘组相联数据缓存的结构,将事务内存中的写操作数据存储到伪相联的空间中,并在其原始的数据缓存块上标记出该数据块已经被伪相联操作过了,原始的数据缓存块地址用来保存事务操作之前的数据的值,伪相联的地址用来保存事务操作修改后的数据的值。 
扩展的伪相联缓存一致性协议如图2所示,其中M、E、S和I分别对应传统MESI协议中的状态;TO标示该缓存块为被伪相联后的旧版本数据;TN标示该缓存块为被伪相联后的新版本数据;TR标示该块数据已经被事务读取。系统运行时,当事务写操作施加到一个未被伪相联的缓存块时,伪相联缓存一致性协议将通过一个特定的消息分配得到一个对应的伪相联空间,作为TN来存放未提交的新版本数据;当缓存块被事务读时将转换成TR,如果其进一步被事务写操作修改的时候会转换成TO,在事务提交时会转换成S,当事务撤销时会转换成I;TO在事务提交时会转换成M,当事务撤销时转换成I;TN在事务提交后将转换为M,在事务撤消后转换成I。 
本发明的方法用于对新加入硬件事务内存系统中的事务进行并发处理控制,其具体包括对该事务内的读操作和事务内的写操作两个过程。具体为: 
(1)事务内对读操作的处理步骤,如图(3)所示: 
(1.1)检查硬件事务内存系统中已有的多版本共享数据的事务依赖 关系,同时判断该事务是否可以正常调度执行。 
当多个事务对同一个共享变量进行读写访问时,会形成一个依赖关系,多个事务在提交前对不同的共享变量进行访问时会形成一个依赖图,如果依赖图中形成一个环的话,说明相关的冲突事务出现了死锁,必须选择部分事务将其撤销以消除环状依赖。 
(1.2)如果步骤(1.1)的检查操作发现该事务可能会引起事务环状依赖,即不能正常调度时,该事务需要撤销或等待,其中撤销操作指直接撤销该事务的所有操作内容。等待操作指该事务等待冲突的事务完成相应的工作后再重新执行前,该事务会暂时挂起然后择机重新执行。 
当新加入的事务会引入环状依赖,为了避免出现死锁,同时也尽量少地撤销该事务已执行的内容,调度程序会让该事务暂停执行以等待与之冲突的事务正常提交后再继续执行,这个称之为事务挂起然后择机重新执行。 
(1.3)如果步骤(1.1)的检查操作发现该事务可以正常调度时,指派未提交的多个版本中的某一个版本给该事务,并将本事务的依赖关系加入到多版本共享数据的事务依赖关系中去,最后再访问前述该版本数据。 
因为本方法允许通过维护同一个共享数据的多版本值来增加系统的并发性,因此,读取某一个版本时,读取该版本的事务就依赖于写入该版本的事务了,因为多版本都是针对未提交的事务的,如果被依赖的事务因为事务冲突需要被撤销的话,那依赖它的事务也都必须被撤销,同时,如果被依赖的事务没有提交,那么依赖于它的事务也不能提交。 
(1.4)如果步骤(1.3)访问该版本数据时,检查该缓存块是否已经执行了伪相联操作,以决定如何访问共享的数据。 
伪相联操作可以为一个被事务修改的数据维护新、旧两个版本的数据,因此为了支持对缓存块检查其是否已经被伪相联,需要在缓存块上增加相应的标记位来标识。 
(1.5)如果步骤(1.4)中访问的缓存块标记说明该缓存块已经被伪相联了,那么会通过伪相联的模块得到伪相联的地址,并读取伪相联空间中的数据。 
(1.6)如果步骤(1.4)中访问的缓存块标记说明该数据块没有被伪相联,那么直接读取该缓存块中的数据即可。 
(2)事务内对写操作的处理步骤,如图(4)所示: 
(2.1)检查已有的多版本共享数据的事务依赖关系,同时判断该事务是否可以正常调度执行。 
(2.2)如果步骤(2.1)的检查操作发现该事务可能会引起事务环状依赖,该事务需要撤销或等待,其中撤销操作指直接撤销该事务的所有操作内容,等待操作指该事务等待冲突的事务完成相应的工作后再重新执行前,该事务会暂时挂起然后择机重新执行。 
(2.3)如果步骤(2.1)的检查操作发现事务可以正常调度时,会在未提交的共享数据的多个版本中添加一个新的版本,并将本事务的依赖关系加入到多版本共享数据的事务依赖关系中去,最后再访问该新的版本的数据。 
(2.4)如果步骤(2.3)将添加新的版本数据时,需要将该缓存块 执行伪相联操作,分配一个伪相联的空间用来存储该新的版本的数据,并在缓存数据块中设置伪相联标记位。 
(2.5)如果该事务内后续还有对该共享数据的写操作的话,系统将直接将写操作的新数据值存储到伪相联的空间中。 

Claims (4)

1.一种硬件事务内存系统中的伪相联多版本数据管理方法,用于对新加入硬件事务内存系统中的事务进行并发处理控制,其具体步骤如下:
(1)检查硬件事务内存系统中已有的多版本共享数据的事务依赖关系,同时判断该新加入事务是否可以正常调度执行;
(2)如果该新加入事务可能会引起事务环状依赖,则撤销该新加入事务,或等待重新执行;
(3)如果该新加入事务可以正常调度,则进行如下处理:
对于读操作,指派未提交的共享数据的多个版本中的任一个版本给该新加入事务,并将该新加入事务的依赖关系加入到所述多版本共享数据的事务依赖关系中去,最后再访问该任一个版本数据;
对于写操作,则在未提交的共享数据的多个版本中添加一个新的版本给该新加入事务,并将该新加入事务的依赖关系加入到多版本共享数据的事务依赖关系中去,最后再访问该新的版本的数据。
2.根据权利要求1所述的一种硬件事务内存系统中的伪相联多版本数据管理方法,其特征在于,步骤(3)中,所述读操作访问该任一个版本数据的具体过程为:
检查该缓存块是否已经执行了伪相联操作,如果访问的缓存块标记表面该缓存块已经被伪相联了,则通过伪相联的模块得到伪相联的地址,并读取伪相联空间中的数据,否则,直接读取该缓存块中的数据。
3.根据权利要求1或2所述的一种硬件事务内存系统中的伪相联多版本数据管理方法,其特征在于,步骤(3)中,所述写操作添加一个新的版本的步骤具体为:
将该缓存块执行伪相联操作,分配一个伪相联的空间用来存储该新的版本的数据,并在缓存数据块中设置伪相联标记位,对于该事务内后续的对该共享数据的写操作,写操作的新数据值直接存储到该分配的伪相联的空间中。
4.根据权利要求1-3之一所述的一种硬件事务内存系统中的伪相联多版本数据管理方法,其特征在于,所述步骤(2)中,所述撤销指直接撤销该事务的所有操作内容;所述等待指该事务等待冲突的事务完成相应的工作后再重新执行时,该事务会暂时挂起然后择机重新执行。
CN201210125359.2A 2012-04-25 2012-04-25 一种硬件事务内存系统中的伪相联多版本数据管理方法 Active CN102722401B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210125359.2A CN102722401B (zh) 2012-04-25 2012-04-25 一种硬件事务内存系统中的伪相联多版本数据管理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210125359.2A CN102722401B (zh) 2012-04-25 2012-04-25 一种硬件事务内存系统中的伪相联多版本数据管理方法

Publications (2)

Publication Number Publication Date
CN102722401A true CN102722401A (zh) 2012-10-10
CN102722401B CN102722401B (zh) 2014-07-09

Family

ID=46948180

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210125359.2A Active CN102722401B (zh) 2012-04-25 2012-04-25 一种硬件事务内存系统中的伪相联多版本数据管理方法

Country Status (1)

Country Link
CN (1) CN102722401B (zh)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105938446A (zh) * 2016-01-12 2016-09-14 上海交通大学 基于rdma和htm支持的数据复制容错方法
CN106648840A (zh) * 2016-08-30 2017-05-10 周烜 事务之间的时序确定方法和装置
CN110865874A (zh) * 2019-11-08 2020-03-06 广州华多网络科技有限公司 事务提交的方法和装置
CN112445587A (zh) * 2019-08-30 2021-03-05 上海华为技术有限公司 一种任务处理的方法以及任务处理装置
CN116932603A (zh) * 2023-08-03 2023-10-24 上海沄熹科技有限公司 一种基于有向图的高性能事务并发复制方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0499422A2 (en) * 1991-02-15 1992-08-19 International Business Machines Corporation Page transfer in a data sharing environment with record locking
CN1347034A (zh) * 2000-09-25 2002-05-01 汤姆森许可贸易公司 数据内存管理系统和方法以及相关多处理器网络
CN1737752A (zh) * 2004-08-18 2006-02-22 华为技术有限公司 一种共享数据的管理方法
US20110055483A1 (en) * 2009-08-31 2011-03-03 International Business Machines Corporation Transactional memory system with efficient cache support

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0499422A2 (en) * 1991-02-15 1992-08-19 International Business Machines Corporation Page transfer in a data sharing environment with record locking
CN1347034A (zh) * 2000-09-25 2002-05-01 汤姆森许可贸易公司 数据内存管理系统和方法以及相关多处理器网络
CN1737752A (zh) * 2004-08-18 2006-02-22 华为技术有限公司 一种共享数据的管理方法
US20110055483A1 (en) * 2009-08-31 2011-03-03 International Business Machines Corporation Transactional memory system with efficient cache support

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105938446A (zh) * 2016-01-12 2016-09-14 上海交通大学 基于rdma和htm支持的数据复制容错方法
CN105938446B (zh) * 2016-01-12 2019-01-25 上海交通大学 基于rdma和硬件事务性内存支持的数据复制容错方法
CN106648840A (zh) * 2016-08-30 2017-05-10 周烜 事务之间的时序确定方法和装置
CN106648840B (zh) * 2016-08-30 2021-04-06 周烜 事务之间的时序确定方法和装置
CN112445587A (zh) * 2019-08-30 2021-03-05 上海华为技术有限公司 一种任务处理的方法以及任务处理装置
CN110865874A (zh) * 2019-11-08 2020-03-06 广州华多网络科技有限公司 事务提交的方法和装置
CN110865874B (zh) * 2019-11-08 2023-07-04 广州华多网络科技有限公司 事务提交的方法和装置
CN116932603A (zh) * 2023-08-03 2023-10-24 上海沄熹科技有限公司 一种基于有向图的高性能事务并发复制方法

Also Published As

Publication number Publication date
CN102722401B (zh) 2014-07-09

Similar Documents

Publication Publication Date Title
US7350034B2 (en) Architecture support of best-effort atomic transactions for multiprocessor systems
JP6342970B2 (ja) トランザクショナルメモリ(tm)システムにおける読み出し及び書き込み監視属性
CN104375958B (zh) 高速缓存存储器管理事务性存储器访问请求
CN100495361C (zh) 维护存储器一致性的方法和系统
CN101770397B (zh) 扩展高速缓存一致性协议以支持本地缓冲的数据的设备、处理器、系统和方法
CN101950259B (zh) 用于执行事务的装置、系统及方法
CN101308462B (zh) 管理对共享存储器单元的存储器访问的方法和计算系统
US8370584B2 (en) Predictive ownership control of shared memory computing system data
EP2378420B1 (en) Ownership reassignment in a shared-nothing database system
RU2501071C2 (ru) Механизм запроса поздней блокировки для пропуска аппаратной блокировки (hle)
KR101639672B1 (ko) 무한 트랜잭션 메모리 시스템 및 그 동작 방법
US8751748B2 (en) Reader set encoding for directory of shared cache memory in multiprocessor system
US9170949B2 (en) Simplified controller with partial coherency
CN102722401B (zh) 一种硬件事务内存系统中的伪相联多版本数据管理方法
TWI483180B (zh) 重疊原子區域執行的方法
US20080005504A1 (en) Global overflow method for virtualized transactional memory
US7945741B2 (en) Reservation required transactions
TWI637265B (zh) 支援不同優先順序之異動性儲存器存取之方法、單元、系統及電腦程式產品
CN104487946A (zh) 用于事务存储器系统中的自适应线程调度的方法、设备和系统
CN101322103A (zh) 无约束事务存储器系统
CN103119556A (zh) 用于提供在原子区内的条件提交的决策机制的装置、方法和系统
US9875108B2 (en) Shared memory interleavings for instruction atomicity violations
CN101814017A (zh) 事务存储器系统中硬件属性的存储器模型
TWI610227B (zh) 用於實施載入儲存重新排序與最佳化之指令定義
US10031697B2 (en) Random-access disjoint concurrent sparse writes to heterogeneous buffers

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