CN112650539B - 面向异构众核处理器的动态链接运行支撑方法 - Google Patents
面向异构众核处理器的动态链接运行支撑方法 Download PDFInfo
- Publication number
- CN112650539B CN112650539B CN201910918622.5A CN201910918622A CN112650539B CN 112650539 B CN112650539 B CN 112650539B CN 201910918622 A CN201910918622 A CN 201910918622A CN 112650539 B CN112650539 B CN 112650539B
- Authority
- CN
- China
- Prior art keywords
- dynamic
- core
- hybrid
- heterogeneous
- library
- 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
Images
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/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
本发明公开一种面向异构众核处理器的动态链接运行支撑方法,包括以下步骤:S1、将用户的控制核心程序、加速核心程序及加速核心静态库链接到可执行程序中,获得异构混合动态链接的可执行程序;S2、运行异构混合动态链接的可执行程序;S3、提供一动态混合链接选项,实现异构程序的混合链接;S4、程序加载器分析异构混合动态链接的可执行程序的各个段,通过interp段解析标准动态链接器的地址;S5、向操作系统申请页氏空间,用于加载控制核心动态库;S6、实现基于众核空间的动态分配策略;S7、新增接口dlopen_hybrid,支持异构混合动态库中控制核心代码和加速核心代码正确运行。本发明既能保证控制核心代码兼容动态链接功能和动态运行模式,也能通过充分发挥加速核心的加载和运行效率。
Description
技术领域
本发明涉及一种面向异构众核处理器的动态链接运行支撑方法,属于计算机编译优化技术领域。
背景技术
静态链接是由链接器将程序代码和依赖库都融入到可执行程序中去,在链接时完成符号解析和地址重定位,静态链接程序在运行时会执行一次性的程序加载。静态链接的最大缺点是生成的可执行文件很大,需要更多的系统资源,装入内存时也更耗时,库的更新和管理也比较困难。
动态链接在链接时不会将依赖的外部库加入到可执行程序中去,而是在运行时链接,完成动态库的符号解析、重定位和加载等工作。动态链接程序更加节省内存,便于库的更新和管理,适合大规模软件开发,当前大数据、AI领域的大部分软件系统都采用动态链接模式。
随着大数据、人工智能等领域的快速发展,单纯静态运行的课题执行方式已不能满足这些领域应用动态化、实时性的需求。而与传统程序不同,异构混合程序中包含两种面向不同处理器核心的程序代码,异构程序在动态符号解析、地址重定位和动态库加载的过程中都需要考虑更加复杂的情况,也会降低动态链接程序的效率,再加上异构众核复杂的存储空间设计,导致简单的动态链接模式并不适合异构众核处理器。
鉴于异构混合程序中包含两种面向不同处理器核心的程序代码,如果采用传统的动态链接模式,那么在动态符号解析、地址重定位和动态库加载的过程中都要根据两种程序代码做不同的处理,这会大大降低动态程序的执行效率。另一方面,异构众核处理器采用段式地址空间映射方案,程序地址空间高位固定,与动态链接程序在运行时实时映射地址空间实现程序加载的流程相矛盾,且如何实现异构众核复杂存储层次的动态管理也是一个难点,所以当前异构混合程序只支持静态运行模式。
发明内容
本发明的目的是提供一种面向异构众核处理器的动态链接运行支撑方法,该面向异构众核处理器的动态链接运行支撑方法既能保证控制核心代码兼容动态链接功能和动态运行模式,也能通过充分发挥加速核心的加载和运行效率。
为达到上述目的,本发明采用的技术方案是:一种面向异构众核处理器的动态链接运行支撑方法,包括以下步骤:
S1、通过异构混合链接器,将用户的控制核心程序、加速核心程序及加速核心静态库链接到可执行程序中,获得异构混合动态链接的可执行程序;
S2、运行S1中获得的异构混合动态链接的可执行程序,采用动态链接模式,在异构混合动态链接的可执行程序运行开始时,根据步骤S1中程序链接时获取的动态库依赖信息,查找环境变量LD_LIBRARY_PATH指定的目录下的控制核心动态库和异构混合动态库,并将查找到的控制核心动态库和异构混合动态库加载到众核异构处理器的存储空间上;
S3、基础编译系统在基础编译环境之上,在传统链接选项的基础上,提供一动态混合链接选项,该动态混合链接选项可使用基础链接器进行标准的动态链接模式,并选择预先配置好的混合动态链接脚本,针对于控制核心和加速核心的基础库,分别选择动态版本的混合动态链接脚本和静态版本的混合动态链接脚本,实现异构程序的混合链接;
S4、程序加载器分析异构混合动态链接的可执行程序的各个段,通过interp段解析标准动态链接器的地址,并向操作系统申请显式的段式空间,用于加载标准动态链接器,由标准动态链接器进行动态符号的解析、重定位及动态库的预解析和加载,并将运行指令转向可执行程序的程序入口;
S5、程序加载器向操作系统申请页氏空间,用于加载控制核心动态库,并将众核段式空间,作为加载异构混合动态库的基地址,使用预先保留好的特殊空间,保证与纯静态链接模式的兼容性;
S6、程序加载器还根据异构混合动态链接的可执行程序的特点,实现基于众核空间的动态分配策略,具体包括以下步骤:
S61、程序加载器向操作系统申请核组共享空间,用于保存核组内控制核心和加速核心交互的关键变量,避免可执行程序的运行过程中出现线程库变量地址不一致的情况;
S62、针对每个加速核心的局存空间,实现动态化的管理方案,即在每个异构混合动态库中,加速核心局存变量访问时都使用不同的基地址,该基地址由程序加载器进行统一分配并赋值给加速核心的局存基地址寄存器;
S7、基于传统接口dlopen,在基础库里新增一针对异构混合动态库的接口dlopen_hybrid,此接口dlopen_hybrid在申请动态库加载空间时,不使用传统的mmap方式申请空间,而是与程序加载器配合,使用由程序加载器向操作系统预申请的核组共享空间,并将异构混合动态库加载到该核组共享空间上,从而有效支持异构混合动态库中的控制核心代码和加速核心代码正确运行。
由于上述技术方案的运用,本发明与现有技术相比具有下列优点:
本发明面向异构众核处理器的动态链接运行支撑方法,其根据异构众核处理器的结构特点和内存管理模式,基于处理器的空间映射和寻址设计方案,扩展基础编译系统和运行时系统的功能模块,支撑面向异构混合程序的动态运行模式,在运行时实现控制核心代码动态加载、加速核心代码静态加载,并实现基于众核地址空间的动态管理策略,既能保证控制核心代码兼容动态链接功能和动态运行模式,也能通过充分发挥加速核心的加载和运行效率。
附图说明
附图1为本发明面向异构众核处理器的动态链接运行支撑方法流程示意图;
附图2为本发明面向异构众核处理器的动态链接运行支撑方法流程图。
具体实施方式
实施例:一种面向异构众核处理器的动态链接运行支撑方法,包括以下步骤:
S1、通过异构混合链接器,将用户的控制核心程序、加速核心程序及加速核心静态库链接到可执行程序中,获得异构混合动态链接的可执行程序;
S2、运行S1中获得的异构混合动态链接的可执行程序,采用动态链接模式,在异构混合动态链接的可执行程序运行开始时,根据步骤S1中程序链接时获取的动态库依赖信息,查找环境变量LD_LIBRARY_PATH指定的目录下的控制核心动态库和异构混合动态库,并将查找到的控制核心动态库和异构混合动态库加载到众核异构处理器的存储空间上;
S3、基础编译系统在基础编译环境之上,在传统链接选项的基础上,提供一动态混合链接选项,该动态混合链接选项可使用基础链接器进行标准的动态链接模式,并选择预先配置好的混合动态链接脚本,针对于控制核心和加速核心的基础库,分别选择动态版本的混合动态链接脚本和静态版本的混合动态链接脚本,实现异构程序的混合链接;
S4、程序加载器分析异构混合动态链接的可执行程序的各个段,通过interp段解析标准动态链接器的地址,并向操作系统申请显式的段式空间,用于加载标准动态链接器,由标准动态链接器进行动态符号的解析、重定位及动态库的预解析和加载,并将运行指令转向可执行程序的程序入口;
S5、程序加载器向操作系统申请页氏空间,用于加载控制核心动态库,并将众核段式空间,作为加载异构混合动态库的基地址,使用预先保留好的特殊空间,保证与纯静态链接模式的兼容性,即预先留一段起始地址为固定值的空间,后面静态库直接使用这个固定地址进行关键性变量的访存;
S6、程序加载器还根据异构混合动态链接的可执行程序的特点,主要是内存需求,实现基于众核空间的动态分配策略,具体包括以下步骤:
S61、程序加载器向操作系统申请核组共享空间,用于保存核组内控制核心和加速核心交互的关键变量,避免可执行程序的运行过程中出现线程库变量地址不一致的情况;
S62、针对每个加速核心的局存空间,实现动态化的管理方案,即在每个异构混合动态库中,加速核心局存变量访问时都使用不同的基地址,该基地址由程序加载器进行统一分配并赋值给加速核心的局存基地址寄存器;
S7、基于传统接口dlopen,在基础库里新增一针对异构混合动态库的接口dlopen_hybrid,此接口dlopen_hybrid在申请动态库加载空间时,不使用传统的mmap方式申请空间,而是与程序加载器配合,使用由程序加载器向操作系统预申请的核组共享空间,并将异构混合动态库加载到该核组共享空间,即步骤S4中向操作系统申请的众核段式空间上,从而有效支持异构混合动态库中的控制核心代码和加速核心代码正确运行。
接口dlopen_hybrid与传统接口dlopen参数一致,接口功能流程基本相同,但是在一开始申请动态库加载空间时,不使用传统的mmap方式,而是与程序加载器配合,使用由程序加载器向操作系统预申请的核组共享空间,并将异构混合动态库加载到该核组共享空间,即步骤S4中向操作系统申请的众核段式空间上,因为只有将混合动态库加载到该空间上,加速核心的程序代码才能正确运行。
实施例进一步解释如下:
本发明方案整体流程图如图1所示。
本发明技术方案主要包括3个部分:
1)异构混合的动态链接支持。
基于异构众核处理器的混合编程模型,支持异构混合的动态链接模式,通过异构混合链接器,将用户的控制核心程序、加速核心程序及加速核心静态库链接到可执行程序中去,而外部依赖的控制核心动态库和异构混合动态库采用动态链接模式,并不融入到可执行程序中去,而是在运行时动态解析和加载。
基础编译系统支持一键式的异构混合链接,自动搜索并链接加速核心依赖库,同时保持整体链接模式的动态化,从而减少可执行程序所占空间大小,兼容人工只能应用领域的链接方式和运行模式。
2)程序加载器针对异构混合动态链接程序的运行支持。
程序加载器是异构混合程序的运行工具,负责程序的加载、众核空间申请与分配、加速核心启动等工作。
为支持异构混合动态链接程序的运行,加载器首先会分析程序的各个段,通过interp段解析动态链接器的地址,通过显式的空间申请,加载动态链接器,由动态链接器负责动态符号的解析、重定位及动态库的预解析和加载,并转入程序入口。
程序加载器还要根据动态链接程序的特点,实现基于众核空间的动态分配策略:申请核组共享空间用于保存核组内控制核心和加速核心交互的关键变量,避免动态运行过程中出现的线程库变量地址不一致的情况;针对每个加速核心的局存空间实现动态化的管理方案,每个动态库的加速核心局存变量访问时都使用不同的基地址,该基地址由加载器进行分配并赋值给加速核心的局存基地址寄存器,从而实现各动态库之间的局存地址隔离和保护。
3)实现基于异构众核地址空间打开异构混合动态库的接口。针对非异构程序,运行时打开动态库一般使用dlopen接口,该接口会通过mmap的方式自动映射页式空间,并加载动态库到该空间,同时完成动态符号的解析和重定位。但是对于异构混合动态库,由于其中包含加速核心代码,无法访问页式空间,故设计并实现了一种专门针对异构混合动态库的新接口,该接口不通过mmap申请空间,而是与程序加载器配合,使用预申请的众核空间,并将异构混合动态库加载到该空间上,从而保证加速核心代码的正确运行。通过该技术,能有效支撑Python导入异构混合的众核优化库。
采用上述面向异构众核处理器的动态链接运行支撑方法时,其根据异构众核处理器的结构特点和内存管理模式,基于处理器的空间映射和寻址设计方案,扩展基础编译系统和运行时系统的功能模块,支撑面向异构混合程序的动态运行模式,在运行时实现控制核心代码动态加载、加速核心代码静态加载,并实现基于众核地址空间的动态管理策略,既能保证控制核心代码兼容动态链接功能和动态运行模式,也能通过充分发挥加速核心的加载和运行效率。
为了便于更好的理解本发明,下面将对本文中使用的术语进行简要的解释:
异构众核:不同架构的中央处理器或特定硬件加速单元依据相关技术标准和规范有机内在融合在一颗芯片上,不同异构内核之间实现协同计算,其中异构中的某一特定硬件加速单元属于众核架构,拥有数十个、数百个或更多的加速计算核心。
控制核心:在异构众核架构中,主要起到控制和管理作用的处理器核心。
加速核心:在异构众核架构中,主要起到计算加速作用的处理器核心。
静态运行:程序通过静态方式链接,将所有程序代码和依赖库都链接到目标程序中,程序运行过程中只执行一次静态加载。
动态运行:程序通过动态方式链接,依赖的外部动态库并不链接到目标程序中,而是在程序运行过程中动态加载外部库。
interp段:通用的段,用于指示动态链接器位置。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (1)
1.一种面向异构众核处理器的动态链接运行支撑方法,其特征在于:包括以下步骤:
S1、通过异构混合链接器,将用户的控制核心程序、加速核心程序及加速核心静态库链接到可执行程序中,获得异构混合动态链接的可执行程序;
S2、运行S1中获得的异构混合动态链接的可执行程序,采用动态链接模式,在异构混合动态链接的可执行程序运行开始时,根据步骤S1中程序链接时获取的动态库依赖信息,查找环境变量LD_LIBRARY_PATH指定的目录下的控制核心动态库和异构混合动态库,并将查找到的控制核心动态库和异构混合动态库加载到众核异构处理器的存储空间上;
S3、基础编译系统在基础编译环境之上,在传统链接选项的基础上,提供一动态混合链接选项,该动态混合链接选项使用基础链接器进行标准的动态链接模式,并选择预先配置好的混合动态链接脚本,针对于控制核心和加速核心的基础库,分别选择动态版本的混合动态链接脚本和静态版本的混合动态链接脚本,实现异构程序的混合链接;
S4、程序加载器分析异构混合动态链接的可执行程序的各个段,通过interp段解析标准动态链接器的地址,并向操作系统申请显式的段式空间,用于加载标准动态链接器,由标准动态链接器进行动态符号的解析、重定位及动态库的预解析和加载,并将运行指令转向可执行程序的程序入口;
S5、程序加载器向操作系统申请页氏空间,用于加载控制核心动态库,并将众核段式空间,作为加载异构混合动态库的基地址,使用预先保留好的特殊空间,保证与纯静态链接模式的兼容性;
S6、程序加载器还根据异构混合动态链接的可执行程序的特点,实现基于众核空间的动态分配策略,具体包括以下步骤:
S61、程序加载器向操作系统申请核组共享空间,用于保存核组内控制核心和加速核心交互的关键变量,避免可执行程序的运行过程中出现线程库变量地址不一致的情况;
S62、针对每个加速核心的局存空间,实现动态化的管理方案,即在每个异构混合动态库中,加速核心局存变量访问时都使用不同的基地址,该基地址由程序加载器进行统一分配并赋值给加速核心的局存基地址寄存器;
S7、基于传统接口dlopen,在基础库里新增一针对异构混合动态库的接口dlopen_hybrid,此接口dlopen_hybrid在申请动态库加载空间时,不使用传统的mmap方式申请空间,而是与程序加载器配合,使用由程序加载器向操作系统预申请的核组共享空间,并将异构混合动态库加载到该核组共享空间上,从而有效支持异构混合动态库中的控制核心代码和加速核心代码正确运行。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910918622.5A CN112650539B (zh) | 2019-09-26 | 2019-09-26 | 面向异构众核处理器的动态链接运行支撑方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910918622.5A CN112650539B (zh) | 2019-09-26 | 2019-09-26 | 面向异构众核处理器的动态链接运行支撑方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112650539A CN112650539A (zh) | 2021-04-13 |
CN112650539B true CN112650539B (zh) | 2022-07-12 |
Family
ID=75342387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910918622.5A Active CN112650539B (zh) | 2019-09-26 | 2019-09-26 | 面向异构众核处理器的动态链接运行支撑方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112650539B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114116167B (zh) * | 2021-11-25 | 2024-03-19 | 中国人民解放军国防科技大学 | 一种面向高性能计算的区域自治异构众核处理器 |
CN114546515B (zh) * | 2022-01-20 | 2023-09-12 | 上海合宙通信科技有限公司 | 动态加载静态库的模块、固件及设备和C库转Lua库的方法 |
CN114564150B (zh) * | 2022-02-28 | 2024-03-22 | 无锡江南计算技术研究所 | 动态链接模式片上存储器空间分配方法 |
CN116361272B (zh) * | 2023-05-17 | 2023-12-01 | 广东广宇科技发展有限公司 | 一种双态数据链接库的关联调整方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101984409A (zh) * | 2010-11-10 | 2011-03-09 | 南京南瑞继保电气有限公司 | 一种用于Linux系统测试代码注入的方法 |
US20120222010A1 (en) * | 2009-11-20 | 2012-08-30 | Zte Corporation | Loading and Debugging Method and Debugging System Thereof |
-
2019
- 2019-09-26 CN CN201910918622.5A patent/CN112650539B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20120222010A1 (en) * | 2009-11-20 | 2012-08-30 | Zte Corporation | Loading and Debugging Method and Debugging System Thereof |
CN101984409A (zh) * | 2010-11-10 | 2011-03-09 | 南京南瑞继保电气有限公司 | 一种用于Linux系统测试代码注入的方法 |
Non-Patent Citations (2)
Title |
---|
《Design of OpenCL framework_for embedded multi-core processors》;Jung-Hyun Hong 等;《IEEE Transactions on Consumer Electronics》;20140623;全文 * |
《一种面向异构众核处理器的并行编译框架》;李雁冰 等;《软件学报》;20190430;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN112650539A (zh) | 2021-04-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112650539B (zh) | 面向异构众核处理器的动态链接运行支撑方法 | |
US5167023A (en) | Translating a dynamic transfer control instruction address in a simulated CPU processor | |
US4951195A (en) | Condition code graph analysis for simulating a CPU processor | |
US5301302A (en) | Memory mapping and special write detection in a system and method for simulating a CPU processor | |
US5774722A (en) | Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems | |
US5632034A (en) | Controlling method invocation sequence through virtual functions in an object-oriented class library | |
KR100518584B1 (ko) | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 | |
US11119918B2 (en) | Execution using multiple page tables | |
US20070169070A1 (en) | In-kernel virtual machine for low overhead startup and low resource usage | |
JPH01166141A (ja) | デバッグ情報提供方法 | |
EP3350696A1 (en) | Overriding a migrated method of an updated type | |
US6658657B1 (en) | Method and apparatus for reducing the overhead of virtual method invocations | |
JP5261503B2 (ja) | Riscプロセッサ装置及びその命令アドレスの変換検索方法 | |
WO2023133990A1 (zh) | 一种基于嵌入式实时操作系统实现轻量级安全容器的设计方法 | |
EP4237951A1 (en) | Tracking garbage collection states of references | |
US20140222410A1 (en) | Hybrid emulation and kernel function processing systems and methods | |
US11347487B2 (en) | Confining reflective access based on module boundaries | |
CN108647087B (zh) | 实现php内核可重入的方法、装置、服务器和存储介质 | |
EP0327198A2 (en) | Processor simulation | |
Pedersen et al. | Resumable Java Bytecode-Process Mobility for the JVM. | |
CN112558978B (zh) | 支撑异构众核全芯片视角的加速编程和编译方法 | |
CN114063917B (zh) | 快速读取程序数据的方法和微控制器 | |
US11803487B2 (en) | Transitioning between thread-confined memory segment views and shared memory segment views | |
US20060288338A1 (en) | Offset threaded code | |
EP4288866A1 (en) | Implementing state-based frame barriers to process colorless roots during concurrent execution |
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 |