CN103999036A - 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 - Google Patents
在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 Download PDFInfo
- Publication number
- CN103999036A CN103999036A CN201180075572.0A CN201180075572A CN103999036A CN 103999036 A CN103999036 A CN 103999036A CN 201180075572 A CN201180075572 A CN 201180075572A CN 103999036 A CN103999036 A CN 103999036A
- Authority
- CN
- China
- Prior art keywords
- instruction
- instructions
- response
- sequence
- computer
- 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
- 238000000034 method Methods 0.000 title claims abstract description 58
- 230000015654 memory Effects 0.000 claims description 44
- 230000004044 response Effects 0.000 claims description 30
- 230000008569 process Effects 0.000 claims description 17
- 230000002159 abnormal effect Effects 0.000 claims description 13
- 238000012545 processing Methods 0.000 claims description 13
- 238000005457 optimization Methods 0.000 claims description 7
- 230000005856 abnormality Effects 0.000 claims description 4
- 239000003550 marker Substances 0.000 claims 1
- 238000004590 computer program Methods 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 238000005516 engineering process Methods 0.000 description 4
- 238000000605 extraction Methods 0.000 description 4
- 230000002093 peripheral effect Effects 0.000 description 4
- 230000009471 action Effects 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 238000010586 diagram Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000012546 transfer Methods 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 230000018109 developmental process Effects 0.000 description 1
- 238000007599 discharging Methods 0.000 description 1
- 238000002474 experimental method Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005192 partition Methods 0.000 description 1
- 230000008672 reprogramming Effects 0.000 description 1
- 238000000638 solvent extraction Methods 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000013519 translation Methods 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 or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/49—Partial evaluation
-
- 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/30072—Arrangements for executing specific machine instructions to perform conditional operations, e.g. using predicates or guards
-
- 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/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- 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 or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
-
- 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 or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or 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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
- G06F9/38585—Result writeback, i.e. updating the architectural state or memory with result invalidation, e.g. nullification
-
- 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 or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
- G06F9/3863—Recovery, e.g. branch miss-prediction, exception handling using multiple copies of the architectural state, e.g. shadow registers
-
- 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/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
- G06F9/45516—Runtime code conversion or optimisation
- G06F9/45525—Optimisation or modification within the same instruction set architecture, e.g. HP Dynamo
-
- 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)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Devices For Executing Special Programs (AREA)
- Advance Control (AREA)
Abstract
在支持事务的系统中使用异常进行代码专业化的方法和系统。该方法和系统包括在计算机指令序列中插入一个或多个无分支指令。所述无分支指令包括如果满足普遍发生的条件则可执行的一个或多个指令,以及包括如果不满足该普遍发生的条件则被配置以引发异常的一个或多个指令。
Description
背景技术
一些计算机体系结构可以支持硬件和/或软件事务性存储器系统,例如限制事务性存储器(RTM)系统和软件事务性存储器(STM)系统。在事务性存储器系统中,允许并行地执行计算机指令,例如作为多线程应用的单线程操作。要做到这一点,在计算机程序中的指令序列被定义为事务,其可以独立于在其他线程上运行的指令对共享存储器执行读取和写入指令。例如,事务可以根据事务性系统的类型,由解释器、翻译器、程序编译器、优化器、或应用编程接口(API)来定义。
事务性存储器系统包括控制机制,以防止并行执行的指令在同一时间或以错误的顺序访问共享存储器。例如,验证机制验证事务已经顺利完成,例如,在事务完成之前,没有其他程序线程对该事务访问的存储器做出更改。如果验证成功,则使得该事务的结果是永久性的(例如,通过“提交”操作)。
如果该事务不能被提交,可能会引发异常或事务可能被中止。如果引发异常或事务被中止,该事务的执行可以回滚到程序代码中较早的点(例如“检查点”)。如果事务被中止,它可以从开始重新执行,直到它成功地完成或简单地终止。
计算机程序代码可以包含许多专业化的指令,其中每一条可以被设计为处理在程序执行期间可能满足的特定条件。代码专业化是在运行时试图对于普遍发生的条件优化计算机程序或其中一部分的程序优化技术。然而,代码专业化通常会添加可能影响性能的分支指令。
附图说明
在附图中,通过示例的方式而不是限制的方式示出在这里描述的本发明。为了简单和清楚地说明,附图中示出的元件不一定是按照比例绘制的。例如为了清楚起见,一些元件的尺寸相对于其他元件被夸大了。此外,在认为合适的情况下,附图中重复参考标记以指示相应的或类似的元件。
图1是计算设备的至少一个实施例的简化框图;
图2是图1的计算设备的处理器核的至少一个实施例的简化框图;
图3是用于代码专业化的方法的至少一个实施例的简化模块图;
图4是用于代码专业化的方法的至少一个实施例的简化流程图;
图5是包括比较和分支指令的经过专业化的计算机指令的至少一个实施例的简化的伪代码说明。
图6是不包括任何比较和分支指令的经过专业化的计算机指令的至少一个实施例的简化伪代码说明。
具体实施方式
尽管本公开的概念容易有各种修改和替代形式,但其中的具体示例性的实施例在附图中以示例方式示出,并且将在本文详细描述。然而,应当理解的是,不是想将本公开的概念局限在所公开的特定形式,而是相反,目的是要涵盖落在如随附权利要求所定义的本发明的精神和范围内的所有修改、等价物、以及替代物。
在下面的描述中,阐述了许多的具体细节,例如逻辑实现、操作码、用于指定操作数的方法、资源分区/共享/复制实现、系统部件的类型和相互关系、以及逻辑分区/集成选择,以便更充分地理解本公开。然而,本领域技术人员应当领会,没有这些具体细节也可实现本公开的实施例。在其他实例中,没有详细示出控制结构、门级电路、以及全软件指令序列,以免模糊本发明。利用所包括的描述,本领域技术人员将能实现合适的功能性而无需过多的实验。
本说明书中参考的“一个实施例”、“实施例”、“示例实施例”等时表示,所描述的实施例可以包含特定特征、结构、或特性,但不是每一个实施例都需要包括该特定特征、结构、或特性。而且,这些短语不一定指相同的实施例。此外,当结合一个实施例描述特定特征、结构、或特性时,认为,不管是否明确描述,本领域技术人员都知道如何结合其他实施例实现该特征、结构、或特性。
本发明的实施例可以以硬件、固件、软件、或其任意组合来实现。在计算机系统中实现的本发明的实施例可以包括部件之间的一个或多个基于总线的互连和/或部件之间的一个或多个点对点互连。本发明的实施例还可以作为承载于或存储在可以由一个或多个处理器读取和执行的暂时性或非暂时性的机器可读介质上的指令来实现。机器可读介质可以体现为用于以机器(例如,计算设备)可读的形式存储或传输信息的任何设备、机制、或物理结构。例如,机器可读介质可以体现为只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪存存储器设备、小型或微型SD卡、记忆棒、电信号、以及其他。
在附图中,为便于描述,可以显示示意性的元件(例如那些代表了设备、模块、指令块、以及数据元件的元件)的具体布置或排序。然而,本领域技术人员应当理解的是,在附图中示意性元件的具体顺序或布置并不意味着需要处理或分离过程的特定顺序或序列。此外,在附图中包含的示意性元件并不意味着在所有的实施例中需要这样的元件,或由这样的元件所代表的特征可能不被包括在或结合一些实施例中的其他元件。
通常,用于代表指令块的示意性元件可以使用机器可读指令的任何合适的形式来实现,例如软件或固件应用、程序、函数、模块、例程、进程、过程、插件、小程序、窗口小部件、代码片段、和/或其他,并且每条这样的指令可以使用任何合适的编程语言、库、应用编程接口(API)、和/或其他软件开发工具来实现。例如,一些实施例可以使用Java、C++、和/或其他编程语言来实现。
同样地,用于代表数据或信息的示意性元件可以使用任何合适的电子布置或结构来实现,例如寄存器、数据存储、表、记录、数组、索引、散列、映射、树、列表、图形、文件(任何文件类型的)、文件夹、目录、数据库、和/或其他。
此外,在附图中使用连接元件(例如实线或虚线或箭头)说明两个或多个其他示意性元件之间或者之中的连接、关系、或关联,没有任何这样的连接元件并不意味着不可以存在连接、关系、或关联。换言之,元件之间的一些连接、关系、或关联可以不被显示在附图中,以便不模糊本公开。另外,为了便于说明,单个连接元件可以被用来代表元件之间的多个连接、关系、或关联。例如,本领域的技术人员应当理解的是,在连接元件代表信号、数据、或指令的通信之处,这些元件可以视其需要代表一个或多个信号路径(例如,总线)以实现通信。
现在参考图1,说明性计算设备100包括至少一个处理器110、存储器120、输入/输出(I/O)子系统122、存储设备124、以及一个或多个外围设备140。处理器110支持在如图2中显示的事务性存储器系统222。如下面更详细描述的,在执行过程中分析计算机程序代码。专业化器228连接事务性存储器系统222以对一个或多个普遍发生的条件的代码区域或事务进行专业化。不同于如当采用传统代码专业化技术经常做的那样,添加分支指令到程序代码,专业化器228在代码区域或事务中插入一条或多条无分支指令,其被配置以便利用事务性存储器系统222的异常处理特征。更具体地,如果普遍发生的条件未得到满足,由专业化器228插入的指令被配置以便引发异常。以这种方式,响应于满足普遍发生的条件,正常程序流被允许继续不被中断,并且没有分支。
计算设备100可以体现在或作为任何类型的计算设备,例如,台式计算机系统、膝上或平板计算机系统、服务器、企业计算机系统、计算机网络、手持式计算设备、或依赖特定应用的其他电子设备。
说明性处理器110包括多个处理器核或单核的逻辑段112、114、116,为了便于描述,本文简称为“核”。一个或多个核112、114、116可以被配置以便处理多线程的计算机程序。核112、114、116包括或通信地耦合到一个或多个缓存存储器118。在专业化器228和/或计算设备100的其他部件的操作过程中,可以利用缓存118来暂时地存储数据和/或指令。
除了缓存存储器118,处理器110和/或它的核112、114、116包括或通信地耦合到存储器120。存储器120的一部分可以被体现为任何类型的合适的存储器设备,例如动态随机存取存储器设备(DRAM)、同步动态随机存取存储器设备(SDRAM)、双数据速率动态随机存取存储设备(DDRSDRAM)、和/或其他易失性存储器设备。
处理器110也通信地耦合到I/O子系统122。虽然没有具体地显示,但I/O子系统122通常包括存储器控制器(例如,存储器控制器中心(MCH)或北桥)、输入/输出控制器(例如,输入/输出控制器中心(ICH)或南桥)、以及固件设备。当然,在其他实施例中,可以使用具有其他配置的I/O子系统。例如,在一些实施例中,I/O子系统122可以连同处理器110和计算设备100的其他部件一起形成片上系统(SoC)的一部分并且被合并到单个集成电路芯片上。因此,应当领会的是,在一些实施例中,I/O子系统122的每个部件可以位于共同的集成电路芯片上。
I/O子系统122通信地耦合到一个或多个存储设备124。存储设备124的一部分可以被体现为用于存储数据和/或指令的任何合适的设备,例如磁盘存储设备(例如硬盘)、记忆卡、记忆棒、和/或其他。在一些实施例中,操作系统(O/S)126、程序代码(例如,应用代码)128的一个或多个序列、程序编译器130、和/或数据库管理系统(DBMS)132可以体现在存储设备124中。在执行过程中,O/S126的一部分、代码128、编译器130、和/或DBMS132可以被加载到存储器120和/或缓存118中,用于更快的处理或其他原因。
I/O子系统122可以通信地耦合到一个或多个外围设备140。外围设备140可以包括一个或多个网络接口、图形和/或视频适配器、键盘、触摸屏、显示器、打印机、数据存储设备、和/或其他外围设备,这例如取决于计算设备100的预期用途。此外,应当理解的是,计算设备100可以包括其他部件、子部件、以及为了描述清晰起见而未在图1中示出的设备。
通常,如图1中显示的,计算设备100的部件由一个或多个信号路径(被示意性地代表为双箭头)通信地耦合。这样的信号路径可以被体现为能够促进各自设备之间通信的任何类型的有线或无线信号路径。例如,信号路径可以体现为任意数量的线材、印刷电路板布线、导通孔、总线、点到点的互连、居间设备、和/或类似物。
现在参考图2,说明性处理器核112包括提取单元210、逻辑单元212、一个或多个寄存器214、执行单元216、以及引退单元218。虽然没有具体地示出,但是应当理解的是,一个或多个核114、116可以具有与核112相同或相似的配置。每个提取单元210、逻辑单元212、寄存器214、执行单元216、以及引退单元218可以体现为计算机电路,例如作为核112的中央处理单元的电子部件。
在计算设备100的操作过程中,提取单元210从缓存118、存储器120、和/或存储设备124中获取将由核112执行的指令。逻辑单元212处理指令并且将它们转换成能够被执行单元216执行的形式(例如,机器级指令)。按照事务性存储器系统222的设计,在由执行单元216成功执行指令之后,引退单元218可以提交并随后引退该指令(例如,通过释放寄存器或更新处理器状态)。寄存器214可以被用于存储在指令的处理和/或执行中涉及的值,例如数据值、指针地址、和/或行程计数。
通常,翻译器220被配置以便将程序员可访问的计算机指令翻译成与处理器体系结构兼容的可执行形式。在说明性实施例中,翻译器220改编程序代码以在支持事务性存储器系统222的计算机体系结构上运行。在其他实施例中,其可以包括,例如,软件事务性存储器系统,翻译器220可以根据具体的实现而体现为编译器、应用编程接口(API)、数据库管理系统、或类似物。
翻译器220包括优化器226。一般来说,优化器226被配置以便在程序的执行过程中最小化或最大化计算机程序的一个或多个属性。本领域技术人员应当理解的是,根据特定应用或系统设计的要求,可以使用多种类型的优化。例如,一些优化器检查程序代码以查看有没有任何计算机指令序列(尤其是经常执行的序列)可以用更少的代码替换。
在说明性实施例中,优化器226识别需要访问共享存储器的代码区域(例如,包括加载或存储指令的代码区域),并且将该代码区域定义为事务。优化器226插入检查点,并且根据需要来提交指令到代码区域以便定义事务。在一些实施例中,可以使用二进制翻译动态优化器、或配置以便优化遇到的指令序列并随后缓存经过优化的指令的类似设备。在其他实施例中,可以使用静态优化器。
优化器226可以包括专业化器228作为子部件,或专业化器228可被体现为如显示的与翻译器220独立的部件。专业化器228被配置以便优化计算机指令序列用于普遍发生的条件。可以预先(例如,由程序员)或“立即(on the fly)”(例如,作为计算机指令先前执行的结果)判定特定条件是否被认为是普遍发生的。可能想要进行计算机指令专业化的普遍发生的条件的一些示例包括:运行时消除歧义检查(例如,其中对出现具体别名或没有别名进行代码专业化)、值专业化(例如,其中对出现变量的频繁出现的值(例如NULL)进行代码专业化)、以及循环多版本(例如,其中对出现特定循环行程计数进行代码专业化)。
如结合图3-6的如下描述,说明性专业化器228被配置以便使用事务性存储器系统222的特征来优化计算机指令的序列用于普遍发生的条件,而不会引入任何新的分支指令。
说明性事务性存储器系统222体现为支持事务的硬件系统,例如限制事务性存储器(RTM)系统。然而,应当理解的是,在其他实施例中,可以使用软件事务性存储器系统(STM)或其他隐式地转移异常控制的系统。事务性存储器系统222包括检查点逻辑230、事务执行语义232、溢出逻辑234、以及异常处理程序236。
检查点逻辑230包括配置以便与优化器226连接而建立检查点并且在计算机指令序列中定义代码区域或事务的计算机指令。此外,响应于检查点指令,检查点逻辑230可以指定将要采取的动作。例如,响应于检查点指令,检查点逻辑222可以启动存储与核112或计算设备100的其他部件的特定状态相关的数据。
事务执行语义232包括可被用于在程序代码中调用并利用事务性存储器系统222的特征的语义(例如指令或者代码库)。例如,事务执行语义232启用对异常控制的隐式转移(例如根据系统设计,对解释器或对本地执行)。在说明性实施例中,事务执行语义232包括检查点、回滚、以及提交语义,还有布尔或按位逻辑、算术的语义,并且调用异常处理程序236。
溢出逻辑234包括被配置以便在发生溢出时(例如,值超过能够被存储在缓存118或存储器120中的最大尺寸)指定将要采取的动作的逻辑。例如,响应于溢出事件,溢出逻辑234可以存储与计算设备100或其中部件的状态相关的数据。
异常处理程序236包括被配置以便判定如果由提取单元210获取的指令引发异常则将要采取的动作的逻辑。例如,异常处理程序236可以包括被配置以便将程序执行回滚到在指令序列中先前的检查点并且从该检查点处继续执行或中止事务的逻辑。
算术和逻辑单元(ALU)224包括算术单元240和逻辑单元242。算术单元240被配置以便处理例如加、减、除、乘、和/或其他的算术运算。逻辑单元242被配置以便处理布尔和/或按位逻辑操作,例如与、或、以及异或操作。
现在参考图3,在操作中,计算机指令322的序列被输入到翻译器220中。指令322被称为“非专业化”的代码,因为它们还没有由优化器226和/或专业化器228处理。如本文中所描述的,由翻译器220(包括优化器226和专业化器228)处理之后,生产出指令322的优化的和/或专业化的版本330。优化的和/或专业化的指令330可以被存储在缓存118中,直到由执行单元216执行。
现在参考图4,显示了可由代码专业化器228执行的说明性方法400。在方框410处,方法400获取(例如,从缓存118或存储器120)已经由优化器226定义为代码区域或事务的一条或多条指令。为了本公开的目的,“代码区域”可以包括由翻译器220(例如,优化器226)判定出的计算机指令序列以包括至少一个事务。换言之,在一些实施例中,代码区域可以包括一个或多个事务,而在其他实施例中,代码区域可以包括单个事务。
在说明性实施例中,事务是由跟随有提交指令的检查点指令定义的。在方框412处,方法400分析代码区域中的每个事务,以便判定响应于普遍发生的条件,在事务中的一条或多条指令中的哪条指令被期望是可执行的。为了做出这个判定,方法400可以考虑是否有只有在普遍发生的条件被满足时才执行的某些指令。替代地或此外,方法400可以判定:虽然可以响应于普遍发生的条件执行事务中的所有或多条指令,但是可能期望仅仅响应于普遍发生的条件执行这些指令中的某些。例如,当代码的各部分针对不同的条件被优化时可能是这种情况。
在方框414处,方法400在代码区域中插入一条或多条无分支指令。该无分支指令被配置以便保持针对普遍发生的条件的正常的程序流(例如,没有分支)。在说明性实施例中,响应于没有满足普遍发生的条件,无分支指令包括被配置以便引发异常(从而调用异常处理程序236)的至少一条指令。无分支指令可以包括可以由ALU224支持的任何形式的非分支逻辑和/或算术操作。换言之,作为方框414的结果,没有比较和分支指令被插入到代码区域。
在方框416处,方法400识别出在代码区域中响应于普遍发生的条件不被期望成为可执行的任何指令,并且连接异常处理程序236以将那些指令与异常处理机制(例如,回滚或中止指令)相关联,这可以适用于特定应用或设计。在事务性存储器系统和其他隐式地转移异常控制的系统中,由异常处理程序236隐式地处理控制的转移和响应于普遍发生的条件而不可执行的指令的执行。
在方框418处,方法400将响应于普遍发生的条件而不被期望成为可执行的指令(例如,在方框416处与异常相关联的指令)从代码区域中移除。例如,这可以通过在指令周围插入注释括号而做到。该指令可以被完全移除(例如,以便如果遇到非普遍发生的条件则程序中止)或可以被移动到程序代码的顺序列表中的另一个位置。以这种方式,代码区域或事务可以被专业化,以使得它仅包含被定向到普遍发生的条件的代码。此外,如果响应于普遍发生的条件的被期望成为可执行的代码已经被优化,则代码区域可以只包含经过优化的代码。被定向到处理非普遍发生的条件、或响应于普遍发生的条件而不被期望成为可执行的任何代码,可能保持为未优化的,或可以由优化器226单独处理。
现在参考图5,显示了已经使用传统代码专业化技术进行专业化的计算机指令522的序列的示例。指令522包括代码区域532。虽然未示出,但是应当理解的是,代码522还可以包括其他的计算机指令和/或代码区域。
使用传统代码专业化技术处理后,由后面顺序地跟有提交指令550的检查点指令540定义代码区域532。在检查点指令540和提交指令550之间,已经将比较和分支指令542添加到代码区域532。比较和分支指令542比较存储在两个寄存器r1和r2中的数据。如果存储在r1和r2中的值相等,则程序执行跳过指令544,其被配置以便当普遍发生的条件没有被满足时执行,如由标签“未优化的版本”所指示的。
程序流跳转到“优化的版本”标签并从那里继续执行指令546,其被配置以便当普遍发生的条件被满足时执行。一旦指令546完成执行,程序流进行到提交指令550。
如果比较和分支指令542的结果指示存储在r1和r2中的数据不相等,则程序流继续进行以执行指令544。当指令544完成执行时,程序流跳转到通过标签548。如从上面的示例可以看出的,当普遍发生的条件(例如,r1等于r2)被满足和当非普遍发生的条件(例如,r1不等于r2)被满足时,两种情况都产生分支。
现在参考图6,显示了如本文所公开的在经过专业化器228处理后,包括代码区域632的计算机指令622的序列。指令序列的其余部分(例如,在代码区域632外部的指令622的序列的一部分)可以保持不受代码区域632的处理的影响,或可以通过处理代码区域632而改变。例如,配置成响应于非普遍条件的发生而被执行的指令可以从代码区域632中被移除,并且放置在指令序列622的其他地方。
经过专业化的代码区域632不包括任何比较和分支指令。经过专业化的代码区域632是由检查点指令640和提交指令650来定义的。在检查点指令640和提交指令650之间,在代码区域632中插入异常生成指令642、644、646的序列。在说明性示例中,异常生成指令642、644、646包括布尔或按位逻辑指令(642)、算术函数(644)、以及异常引发指令646。
更具体地,在说明性示例中,使用异或(XOR)函数以比较存储在寄存器r1和r2中的数据。如果存储在r1和r2中的数据相等,则XOR函数的结果将是零并且数值零将被存储在r1中。相加函数(例如,ADD)将r1的值加到最大允许整数(例如,$INT_MAX)。如果r1的值是非零的任意值,将设置溢出标志,因为r1和$INT_MAX的总和将大于最大允许整数。
异常引发指令(例如,INTO)引发异常,如果设置了溢出标志,则调用异常处理程序236。如果没有设置溢出标志,则存储在寄存器r1和r2中的数据相等,程序流无中断地并且没有分支地继续至被优化用于普遍发生的条件(在这个示例中,即r1和r2相等)的指令序列。例如,在一些实施例中,如果没有设置溢出标志,可以发布NOP(没有操作被执行)指令。跟随用于普遍发生的条件的指令的执行,程序流进行到提交指令650。
如果设置了溢出标志,从而表明已经满足了非普遍发生的条件,则异常处理器236可以被配置以便回滚事务和/或将程序流重定向到在非普遍发生的条件的情况下将被执行的指令的位置,或者中止该事务。
尽管在附图和以上描述中示出和详细描述了本公开,但这些示出和描述在性质上应视为是示例性而不是限制性的,应当理解的是,只是显示和描述了说明性实施例,并且期望在本公开的精神内的所有改变和修改都受到保护。此外,虽然本公开的各方面已经在基于硬件的事务性存储器系统的上下文中进行了描述,但是可以理解的是,各种方面有其他的应用,例如,任何在其中期望针对一个或多个普遍发生的条件对程序代码进行专业化的应用,其中事务性存储器系统的特征或其他隐式地转移异常控制的其他系统是可用的(例如,基于硬件和/或软件的事务系统)。这样的应用可以包括,例如编译器、系统或应用软件、和/或数据库系统。
Claims (26)
1.一种方法,包括:
在执行过程中分析计算机指令序列,所述计算机指令序列包括响应于满足普遍发生的条件而由事务性存储器系统可执行的至少一条第一指令;以及
在所述计算机指令序列中插入至少一条无分支指令,所述无分支指令被配置以便判定所述普遍发生的条件是否被满足,以及响应于没有满足所述普遍发生的条件而连接所述事务性存储器系统的异常处理特征。
2.如权利要求1所述的方法,包括在所述计算机指令序列中识别出至少一条第二指令,响应于没有满足所述普遍发生的条件,所述至少一条第二指令是可执行的,以及将所述至少一条第二指令与至少一条异常生成指令相关联,所述异常生成指令被配置以便响应于没有满足所述普遍发生的条件而调用所述事务性存储器系统的所述异常处理特征。
3.如权利要求1所述的方法,包括从所述计算机指令序列中移除所述至少一条第二指令。
4.如权利要求1所述的方法,包括针对所述普遍发生的条件优化所述至少一条第一指令。
5.如权利要求1所述的方法,包括在所述计算机指令序列中插入所述至少一条无分支指令来代替比较和分支指令。
6.如权利要求1所述的方法,包括在所述至少一条无分支指令中判定存储器寄存器是否保存具体值。
7.如权利要求6所述的方法,包括判定所述具体值是否被标记,以及如果所述具体值被标记,则屏蔽与所述具体值相关联的标记位。
8.如权利要求1所述的方法,包括在所述至少一条无分支指令中判定指针是否与具体存储器地址相关联。
9.如权利要求1所述的方法,包括在所述至少一条无分支指令中判定一段数据是否具有具体值。
10.如权利要求1所述的方法,包括在所述至少一条无分支指令中判定行程计数是否具有具体值。
11.如权利要求1所述的方法,包括在所述至少一条无分支指令中调用至少一条异常处理指令,以将所述计算机指令序列的执行回滚到检查点或中止指令序列的执行。
12.如权利要求1所述的方法,包括响应于没有满足所述普遍发生的条件而调用至少一条异常处理指令,以及响应于调用所述至少一条异常处理指令而执行未优化过的指令。
13.如权利要求1所述的方法,包括在所述计算机指令序列中的所述至少一条第一指令之前插入所述至少一条无分支指令。
14.如权利要求1所述的方法,包括定义所述计算机指令序列的至少一条指令作为事务,所述事务被配置用于由所述事务性存储器系统通过在所述计算机指令序列中插入检查点指令和提交指令来执行。
15.如权利要求1所述的方法,包括响应于没有满足所述普遍发生的条件,连接基于硬件的事务性存储器系统和基于软件的事务性存储器系统中的至少一个。
16.一种计算设备,包括:
至少一个处理器;以及
耦合到所述至少一个处理器的计算机电路,所述计算机电路被布置以使得所述至少一个处理器执行权利要求1-15所述的方法。
17.至少一种计算机可访问介质,其包括多条指令,所述多条指令响应于被执行而导致计算设备执行权利要求1-15所述的方法。
18.一种方法,包括:
识别计算机指令序列作为事务,所述事务被配置用于由计算设备的事务性存储器系统来执行,所述事务由检查点指令和提交指令定义,所述事务包括:响应于满足普遍发生的条件而能够执行的至少一条第一指令,以及响应于没有满足普遍发生的条件而能够执行的至少一条第二指令;
在指令序列中插入至少一条异常生成指令,所述至少一条异常生成指令被布置以允许所述至少一条第一指令不带任何分支地执行,以及被配置以便响应于没有满足所述普遍发生的条件而调用所述事务性存储器系统的异常处理特征;以及
从所述事务中移除所述至少一条第二指令。
19.如权利要求18所述的方法,被配置以响应于满足所述普遍发生的条件而执行至少一条经过优化的指令,以及响应于没有满足所述普遍发生的条件而将所述事务的执行回滚到所述检查点以及执行至少一条未经过优化的指令。
20.一种计算设备,包括:
至少一个处理器;以及
耦合到所述至少一个处理器的计算机电路,所述计算机电路被布置以使得所述至少一个处理器执行权利要求18-19所述的方法。
21.至少一种计算机可访问介质,其包括多条指令,所述多条指令响应于被执行而导致计算设备执行权利要求18-19所述的方法。
22.一种方法,包括:
分析计算机指令序列;
执行代码专业化例程,所述代码专业化例程被配置以便识别所述计算机指令序列的至少一个代码区域,所述至少一个代码区域作为事务由所述计算设备的事务性存储器系统执行,以及,对一个或多个所述代码区域:
在所述代码区域中插入至少一条无分支指令,所述无分支指令被配置以判定是否满足普遍发生的条件;以及
在所述代码区域中插入至少一条异常生成指令,所述异常生成指令被配置以响应于没有满足所述普遍发生的条件而引发异常。
23.如权利要求22所述的方法,其中所述至少一条无分支指令包括按位逻辑操作和算术操作。
24.如权利要求23所述的方法,其中所述按位逻辑操作是异或(XOR)指令以及所述至少一条异常生成指令包括设定溢出标志。
25.一种计算设备,包括:
至少一个处理器;以及
耦合到所述至少一个处理器的计算机电路,所述计算机电路被布置以使得所述至少一个处理器执行权利要求22-24所述的方法。
26.至少一种计算机可访问介质,其包括多条指令,所述多条指令响应于被执行而导致计算设备执行权利要求22-24所述的方法。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2011/065391 WO2013089767A1 (en) | 2011-12-16 | 2011-12-16 | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103999036A true CN103999036A (zh) | 2014-08-20 |
CN103999036B CN103999036B (zh) | 2017-07-14 |
Family
ID=48613040
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201180075572.0A Expired - Fee Related CN103999036B (zh) | 2011-12-16 | 2011-12-16 | 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9483275B2 (zh) |
EP (1) | EP2791785B1 (zh) |
JP (1) | JP5906325B2 (zh) |
KR (1) | KR101615907B1 (zh) |
CN (1) | CN103999036B (zh) |
WO (1) | WO2013089767A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107580697A (zh) * | 2015-05-07 | 2018-01-12 | Arm 有限公司 | 用于验证正确的代码执行上下文的检查指令 |
CN108121566A (zh) * | 2017-12-06 | 2018-06-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种图形指令解析设计方法 |
CN108369500A (zh) * | 2015-12-14 | 2018-08-03 | 数据仓库投资有限公司 | 扩展字段专业化 |
CN111971651A (zh) * | 2018-04-13 | 2020-11-20 | 微软技术许可有限责任公司 | 更快速短路的复合条件集重新排序 |
Families Citing this family (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2013089767A1 (en) | 2011-12-16 | 2013-06-20 | Intel Corporation | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
US20140223062A1 (en) * | 2013-02-01 | 2014-08-07 | International Business Machines Corporation | Non-authorized transaction processing in a multiprocessing environment |
US10061609B2 (en) | 2013-06-26 | 2018-08-28 | Intel Corporation | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
US10528253B2 (en) * | 2014-11-05 | 2020-01-07 | International Business Machines Corporation | Increased bandwidth of ordered stores in a non-uniform memory subsystem |
EP3594804B1 (en) * | 2018-07-09 | 2021-11-03 | ARM Limited | Transactional compare-and-discard instruction |
KR20200031402A (ko) | 2018-09-14 | 2020-03-24 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
KR20200058867A (ko) | 2018-11-20 | 2020-05-28 | 에스케이하이닉스 주식회사 | 메모리 시스템의 복구 동작 중 비휘발성 메모리 블록의 반복 접근을 줄이는 방법 및 장치 |
KR20200113387A (ko) | 2019-03-25 | 2020-10-07 | 에스케이하이닉스 주식회사 | 메모리 시스템 및 그것의 동작방법 |
CN113632432B (zh) * | 2019-09-12 | 2023-09-19 | 奇安信安全技术(珠海)有限公司 | 一种攻击行为的判定方法、装置及计算机存储介质 |
US11960730B2 (en) | 2021-06-28 | 2024-04-16 | Western Digital Technologies, Inc. | Distributed exception handling in solid state drives |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040181784A1 (en) * | 2003-02-18 | 2004-09-16 | Nec Corporation | Method of converting software program for single processor to software program for multiprocessor |
CN101501636A (zh) * | 2006-08-16 | 2009-08-05 | 高通股份有限公司 | 用于基于动态可改变延迟来执行处理器指令的方法和设备 |
CN101542437A (zh) * | 2005-12-07 | 2009-09-23 | 微软公司 | 软件事务性存储器操作的优化 |
US20100122073A1 (en) * | 2008-11-10 | 2010-05-13 | Ravi Narayanaswamy | Handling exceptions in software transactional memory systems |
CN101950259A (zh) * | 2008-12-30 | 2011-01-19 | 英特尔公司 | 在硬件中登记用户处理程序以用于事务存储器事件处理 |
US20110214016A1 (en) * | 2010-03-01 | 2011-09-01 | International Business Machines Corporation | Performing Aggressive Code Optimization with an Ability to Rollback Changes Made by the Aggressive Optimizations |
Family Cites Families (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070043934A1 (en) | 2005-08-22 | 2007-02-22 | Intel Corporation | Early misprediction recovery through periodic checkpoints |
US7870545B2 (en) | 2005-12-16 | 2011-01-11 | Intel Corporation | Protecting shared variables in a software transactional memory system |
US8180967B2 (en) | 2006-03-30 | 2012-05-15 | Intel Corporation | Transactional memory virtualization |
US7865885B2 (en) | 2006-09-27 | 2011-01-04 | Intel Corporation | Using transactional memory for precise exception handling in aggressive dynamic binary optimizations |
US20080244544A1 (en) * | 2007-03-29 | 2008-10-02 | Naveen Neelakantam | Using hardware checkpoints to support software based speculation |
US8813057B2 (en) * | 2007-03-31 | 2014-08-19 | Intel Corporation | Branch pruning in architectures with speculation support |
US20100274972A1 (en) | 2008-11-24 | 2010-10-28 | Boris Babayan | Systems, methods, and apparatuses for parallel computing |
US20100262813A1 (en) * | 2009-04-14 | 2010-10-14 | International Business Machines Corporation | Detecting and Handling Short Forward Branch Conversion Candidates |
US8694974B2 (en) | 2009-04-29 | 2014-04-08 | Hewlett-Packard Development Company, L.P. | Load-checking atomic section |
US8458403B2 (en) * | 2009-11-24 | 2013-06-04 | Honeywell International Inc. | Architecture and method for cache-based checkpointing and rollback |
US8560816B2 (en) * | 2010-06-30 | 2013-10-15 | Oracle International Corporation | System and method for performing incremental register checkpointing in transactional memory |
WO2013089767A1 (en) | 2011-12-16 | 2013-06-20 | Intel Corporation | Method and system using exceptions for code specialization in a computer architecture that supports transactions |
US8688661B2 (en) * | 2012-06-15 | 2014-04-01 | International Business Machines Corporation | Transactional processing |
-
2011
- 2011-12-16 WO PCT/US2011/065391 patent/WO2013089767A1/en active Application Filing
- 2011-12-16 JP JP2014547162A patent/JP5906325B2/ja not_active Expired - Fee Related
- 2011-12-16 US US13/976,046 patent/US9483275B2/en active Active
- 2011-12-16 EP EP11877535.2A patent/EP2791785B1/en active Active
- 2011-12-16 CN CN201180075572.0A patent/CN103999036B/zh not_active Expired - Fee Related
- 2011-12-16 KR KR1020147015915A patent/KR101615907B1/ko not_active IP Right Cessation
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040181784A1 (en) * | 2003-02-18 | 2004-09-16 | Nec Corporation | Method of converting software program for single processor to software program for multiprocessor |
CN101542437A (zh) * | 2005-12-07 | 2009-09-23 | 微软公司 | 软件事务性存储器操作的优化 |
CN101501636A (zh) * | 2006-08-16 | 2009-08-05 | 高通股份有限公司 | 用于基于动态可改变延迟来执行处理器指令的方法和设备 |
US20100122073A1 (en) * | 2008-11-10 | 2010-05-13 | Ravi Narayanaswamy | Handling exceptions in software transactional memory systems |
CN101950259A (zh) * | 2008-12-30 | 2011-01-19 | 英特尔公司 | 在硬件中登记用户处理程序以用于事务存储器事件处理 |
US20110214016A1 (en) * | 2010-03-01 | 2011-09-01 | International Business Machines Corporation | Performing Aggressive Code Optimization with an Ability to Rollback Changes Made by the Aggressive Optimizations |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107580697A (zh) * | 2015-05-07 | 2018-01-12 | Arm 有限公司 | 用于验证正确的代码执行上下文的检查指令 |
US10942739B2 (en) | 2015-05-07 | 2021-03-09 | Arm Limited | Check instruction for verifying correct code execution context |
CN107580697B (zh) * | 2015-05-07 | 2021-11-30 | Arm 有限公司 | 用于验证正确的代码执行上下文的检查指令 |
CN108369500A (zh) * | 2015-12-14 | 2018-08-03 | 数据仓库投资有限公司 | 扩展字段专业化 |
CN108121566A (zh) * | 2017-12-06 | 2018-06-05 | 中国航空工业集团公司西安航空计算技术研究所 | 一种图形指令解析设计方法 |
CN111971651A (zh) * | 2018-04-13 | 2020-11-20 | 微软技术许可有限责任公司 | 更快速短路的复合条件集重新排序 |
Also Published As
Publication number | Publication date |
---|---|
EP2791785A4 (en) | 2017-01-18 |
US9483275B2 (en) | 2016-11-01 |
KR20140091747A (ko) | 2014-07-22 |
KR101615907B1 (ko) | 2016-04-27 |
US20130305024A1 (en) | 2013-11-14 |
CN103999036B (zh) | 2017-07-14 |
JP2015507254A (ja) | 2015-03-05 |
EP2791785A1 (en) | 2014-10-22 |
JP5906325B2 (ja) | 2016-04-20 |
EP2791785B1 (en) | 2019-07-17 |
WO2013089767A1 (en) | 2013-06-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103999036A (zh) | 在支持事务的计算机体系结构中使用异常进行代码专业化的方法和系统 | |
US9747086B2 (en) | Transmission point pattern extraction from executable code in message passing environments | |
US9940229B2 (en) | Technologies for persistent memory programming | |
US8868848B2 (en) | Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform | |
US8990786B2 (en) | Program optimizing apparatus, program optimizing method, and program optimizing article of manufacture | |
US9424009B2 (en) | Handling pointers in program code in a system that supports multiple address spaces | |
US20080320282A1 (en) | Method And Systems For Providing Transaction Support For Executable Program Components | |
US10169092B2 (en) | System, method, program, and code generation unit | |
US9841958B2 (en) | Extensible data parallel semantics | |
US9715440B2 (en) | Test scope determination based on code change(s) | |
US9304762B2 (en) | Automatically customizing a computer-executable application at runtime | |
KR20220119400A (ko) | 유니터리 값 세트의 락 프리 판독 | |
CN107391539A (zh) | 事务处理方法、服务器和存储介质 | |
US10496433B2 (en) | Modification of context saving functions | |
CN107077365B (zh) | 有选择地加载预编译的头部和/或其部分 | |
US11442708B2 (en) | Compiler-generated alternate memory-mapped data access operations | |
US10061609B2 (en) | Method and system using exceptions for code specialization in a computer architecture that supports transactions | |
US11966619B2 (en) | Background processing during remote memory access | |
US20230195517A1 (en) | Multi-Cycle Scheduler with Speculative Picking of Micro-Operations | |
CN116010100A (zh) | 区块链系统中的合约调用方法、装置、设备及存储介质 | |
JP2022125690A (ja) | 情報処理装置、情報処理プログラムおよびプログラム開発支援方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20170714 Termination date: 20211216 |
|
CF01 | Termination of patent right due to non-payment of annual fee |