首页 / 专利库 / 电脑零配件 / 硬件 / 用于向自修改代码提供硬件支持的方法和装置

用于向自修改代码提供硬件支持的方法和装置

阅读:881发布:2021-09-19

专利汇可以提供用于向自修改代码提供硬件支持的方法和装置专利检索,专利查询,专利分析的服务。并且用于向自 修改 访客代码提供支持的方法和装置。装置包括 存储器 、 硬件 缓冲器 和处理器。处理器被配置成将访客代码转换成本机代码并且将等同于访客代码的转换得到的本机代码存储到处理器的代码高速缓存部分中。处理器还被配置成维护被配置用于 跟踪 转换后的代码在代码高速缓存中的相应 位置 的硬件缓冲器。硬件缓冲器基于对与转换后的代码在代码高速缓存中的相应位置相关联的存储器中的相应位置的相应 访问 来被更新。处理器还被配置成执行在访问硬件缓冲器之后修改存储器位置的 请求 。,下面是用于向自修改代码提供硬件支持的方法和装置专利的具体信息内容。

1.一种用于在处理器中将访客代码转换成本机代码的装置,所述装置包括:
存储器
硬件缓冲器;以及
与所述存储器和所述硬件缓冲器耦合的处理器,所述处理器被配置成:
将访客代码转换成本机代码;
将转换后的访客代码存储到所述处理器的代码高速缓存部分中;
维护被配置成用于跟踪转换后的代码在代码高速缓存中的相应位置的所述硬件缓冲器,其中所述硬件缓冲器基于对所述存储器中的相应位置的相应访问来被更新,所述存储器中的相应位置与转换后的代码在所述代码高速缓存中的相应位置相关联;以及在访问所述硬件缓冲器之后执行对于修改存储器位置的请求
其中所述存储器包括用于跟踪存在于所述代码高速缓存中的转换后的代码的、与所述硬件缓冲器相关联的表格,包括跟踪对访客代码的修改、响应于对访客代码的修改而发起的异常类型、以及所述访客代码是否已经被转换成本机代码。
2.根据权利要求1所述的装置,其中所述硬件缓冲器被配置成用作与所述硬件缓冲器相关联的所述表格的高速缓存,并且所述硬件缓冲器包括与所述硬件缓冲器相关联的所述表格的数据的子集。
3.根据权利要求1或2所述的装置,其中所述处理器被配置成在所述请求要修改与包括转换后的访客代码的所述代码高速缓存中的位置相关联的存储器中的位置的情况下发起异常。
4.根据权利要求1或2所述的装置,其中所述处理器被配置成响应于访客代码分支来发起异常。
5.根据权利要求1或2所述的装置,其中所述请求是通过自修改代码的存储。
6.根据权利要求1或2所述的装置,其中所述请求是直接存储器访问DMA写入。
7.根据权利要求1或2所述的装置,其中所述硬件缓冲器在所述处理器内部。
8.一种用于在处理器中将访客代码转换成本机代码的计算系统,所述计算系统包括:
与存储器耦合的处理器,所述处理器包括硬件缓冲器和代码高速缓存,其中所述处理器被配置成:
将访客代码转换成本机代码;
将转换后的访客代码存储到所述处理器中的代码高速缓存中;以及
维护被配置成用于跟踪转换后的代码在代码高速缓存中的相应位置的所述硬件缓冲器,其中所述硬件缓冲器基于对所述存储器中的相应位置的相应访问来被更新,所述存储器中的相应位置与转换后的代码在所述代码高速缓存中的相应位置相关联;
其中所述处理器进一步被配置成:
维护用于跟踪存在于所述代码高速缓存中的转换后的代码的、与所述硬件缓冲器相关联的表格,其中所述存储器包括与所述硬件缓冲器相关联的所述表格;以及其中所述处理器被配置成:
在访问所述硬件缓冲器之后执行对于修改存储器位置的请求,
其中所述存储器包括用于跟踪存在于所述代码高速缓存中的转换后的代码的、与所述硬件缓冲器相关联的表格,包括跟踪对访客代码的修改、响应于对访客代码的修改而发起的异常类型、以及所述访客代码是否已经被转换成本机代码。
9.根据权利要求8所述的计算系统,其中所述硬件缓冲器被配置成用作与所述硬件缓冲器相关联的所述表格的高速缓存,并且所述硬件缓冲器包括与所述硬件缓冲器相关联的所述表格的数据的子集。
10.根据权利要求8所述的计算系统,其中所述处理器被配置成在所述请求要修改与包括转换后的访客代码的所述代码高速缓存中的位置相关联的存储器中的位置的情况下发起异常。
11.根据权利要求8、9或10所述的计算系统,其中所述处理器被配置成响应于访客代码分支来发起异常。
12.根据权利要求8、9或10所述的计算系统,其中所述请求是通过自修改代码的存储。
13.根据权利要求8、9或10所述的计算系统,其中所述请求是直接存储器访问DMA写入。
14.一种由用于将访客代码转换成本机代码的计算装置执行的方法,所述方法包括:
将访客代码转换成本机代码;
将转换后的访客代码存储到处理器的代码高速缓存部分中;
维护被配置成用于跟踪转换后的代码在代码高速缓存中的相应位置的硬件缓冲器,其中所述硬件缓冲器基于对所述存储器中的相应位置的相应访问来被更新,所述存储器中的相应位置与转换后的代码在所述代码高速缓存中的相应位置相关联;以及在访问所述硬件缓冲器之后执行对于修改存储器位置的请求,
其中所述存储器包括用于跟踪存在于所述代码高速缓存中的转换后的代码的、与所述硬件缓冲器相关联的表格,包括跟踪对访客代码的修改、响应于对访客代码的修改而发起的异常类型、以及所述访客代码是否已经被转换成本机代码。
15.根据权利要求14所述的方法,其中所述硬件缓冲器被配置成用作与所述硬件缓冲器相关联的所述表格的高速缓存,并且所述硬件缓冲器包括与所述硬件缓冲器相关联的所述表格的数据的子集。
16.根据权利要求14或15所述的方法,其中所述处理器被配置成在所述请求要修改与包括转换后的访客代码的所述代码高速缓存中的位置相关联的存储器中的位置的情况下发起异常。
17.根据权利要求14或15所述的方法,其中所述处理器被配置成响应于访客代码分支来发起异常。
18.根据权利要求14或15所述的方法,其中所述请求是通过自修改代码的存储。
19.根据权利要求14或15所述的方法,其中所述请求是直接存储器访问DMA写入。
20.根据权利要求14或15所述的方法,其中所述硬件缓冲器在所述处理器内部。
21.一种计算机可读介质,其中存储有包括用于在处理器中将访客代码转换成本机代码的代码,所述代码在被执行时使机器执行权利要求14或15所述的方法。

说明书全文

用于向自修改代码提供硬件支持的方法和装置

[0001] 相关申请的交叉引用
[0002] 本申请要求2014年5月12日提交的名称为“METHOD AND APPARATUS FOR PROVIDING HARDWARE SUPPORT FOR SELF MODIFYING CODE”代理人备案编号为SMII-207.A的共同拥有的先前父专利申请美国第61/991,951号的优先权和权益,其全部内容通过引用合并于此。

背景技术

[0003] 自修改代码(SMC)是一种优化技术,其中一些软件代码在执行之前修改自身的一部分。SMC可以用在即时编译(JIT)编译系统中,诸如使用Java编程语言。在使用代码转换的系统中,访客代码的自修改提出了具体的问题,因为访客代码修改(GCM)必须被检测并且代码高速缓存中的对应的转换后的轨迹必须基于新的代码而被无效或再生。
[0004] 由于可能发生的极端情况,GCM的检测可能是具有挑战性的。极端情况可以包括被细微地交错并且用于Harvard处理器的代码和可写入数据,例如具有单独的指令和数据路径,GCM可能需要访客架构中的具体代码序列以在代码存储在可高速缓存的存储器中的情况下使得代码变化可见。
[0005] 极端情况还可以包括代码位置何时使用不同于中央处理单元(CPU)的存储器主机来写入。例如,某个直接存储器访问(DMA)过程在执行代码之前从外部外围设备下载代码。通常,存在输入/输出存储器管理单元(IOMMU),使得DMA存储器写入操作对于CPU可见并且能够被考虑在内。
发明内容
[0006] 存在对于处理自修改访客代码和访客代码的DMA修改(统称为GCM)的需要。实施例被配置用于标识对应于代码高速缓存中存储的代码轨迹的存储器区域的变化。实施例还可以被配置用于跟踪转换后的代码在代码高速缓存中的位置。其中可能存在自修改代码的数据的取回可以被支持。在检测自修改代码的同时增强了性能并且执行代码高速缓存中的代码的轨迹的替换。
[0007] 实施例被实现为用于向自修改代码提供支持的装置。装置包括存储器、硬件缓冲器和处理器。处理器被配置成将访客代码转换成本机代码并且将经转换的访客代码存储到处理器的代码高速缓存部分中。处理器还被配置成维护被配置用于跟踪转换后的代码在代码高速缓存中的相应位置的硬件缓冲器。硬件缓冲器基于对与转换后的代码在代码高速缓存中的相应位置相关联的存储器中的相应位置的相应访问来被更新。处理器还被配置成执行在访问硬件缓冲器之后修改存储器位置的请求
[0008] 以上是概述并且因此必然包含细节的简化、概括和省略;因此,本领域技术人员应当理解,概括仅是说明性的,而非意图以任何方式限制。仅由权利要求定义的本发明的其他的方面、发明特征和优点在下面给出的非限制性详细描述中将变得很清楚。附图说明
[0009] 根据被给出仅作为示例的以下描述并且参考附图,本公开的另外的特征将会变得很清楚,在附图中:
[0010] 图1示出了描绘根据各种实施例的其中访客指令被转换成本机转换块的基于块的翻译过程的图。
[0011] 图2示出了根据各种实施例的示例性硬件加速的转换系统的图,该转换系统图示将访客指令块及其对应本机转换块存储在高速缓存中的方式。
[0012] 图3示出了根据各种实施例的用于以小于系统的页面大小的粒度来跟踪访客代码的系统的示例性部件。
[0013] 图4A到图4B示出了根据各种实施例的用于跟踪转换后的代码在代码高速缓存中的位置的示例性电子部件控制的过程的流程图
[0014] 图5是包括各种实施例的示例性计算系统的框图

具体实施方式

[0015] 在以下详细描述中,给出了大量具体细节,诸如具体的方法顺序、结构、元件和连接。然而应当理解,这些和其他具体的细节不需要用于实践本发明的实施例。在其他情况下,省略了或者没有特别详细地描述众所周知的结构、元件或连接以防不必要地模糊本描述。
[0016] 说明书中对“一个实施例”或“实施例”的引用意图表示结合实施例描述的具体的特征、结构或特性被包括在本发明的至少一个实施例中。短语“在一个实施例中”在说明书内各个地方的出现不一定全部指代相同的实施例,也不是与其他实施例相互排除的单独的或备选的实施例。注意,任何要求保护的实施例不一定包括本公开的所有“目的”或“实施例”。
[0017] 另外,描述了能够通过一些实施例而非其他实施例呈现的各种特征。类似地,描述了能够是针对一些实施例而非其他实施例的要求的各种要求。
[0018] 以下详细描述的一些部分在过程、步骤、逻辑块、处理以及对计算机存储器内的数据比特的操作的其他符号表示方面来呈现。这些描述和表示是由数据处理领域的技术人员用于向本领域其他技术人员最有效地传达其工作的本质的手段。过程、计算机执行的步骤、逻辑块、处理等在此并且通常被认为是产生期望结果的步骤或指令的自相合序列。步骤需要物理量的物理操纵。通常而非必须,这些量采用计算机可读存储介质的电或磁信号的形式,并且能够在计算机系统中被存储、传送、组合、比较和操纵。已经证明,出于一般使用的原因,将这些信号称为比特、值、元素、符号、字幕、条目、数字等有时很方便。
[0019] 然而,应当注意,所有这些和类似术语都应当与适当的物理量相关联并且仅是应用于这些量的方便的标记。除非具体陈述,否则根据以下讨论很清楚的是,应当理解,遍及本描述,使用诸如“处理”或“访问”或“写入”或“存储”或“复制”等术语的讨论指代计算机系统、或者将被表示为计算机系统的寄存器和存储器以及其他计算机可读介质中的物理(电子)量的数据操纵和转换成类似地被表示为计算机系统存储器或寄存器或其他这样的信息存储、传输或显示器设备中的物理量的其他数据的类似的电子计算设备的动作和处理。
[0020] 现在将详细参考本公开的各种实施例,其示例在附图中图示。另外,在本公开的以下详细描述中,给出大量具体细节以便提供对本公开的透彻理解。然而,应当理解,本公开可以在没有这些具体细节的情况下来实践。在其他情况下,没有详细描述众所周知的方法、过程、部件和电路以免不必要地模糊本公开的各个方面。
[0021] 实施例被配置用于标识对应于代码高速缓存中存储的代码的轨迹的存储器区域的变化。实施例还可以被配置用于跟踪转换后的代码在代码高速缓存中的位置。在检测自修改代码的同时增强了性能并且执行代码高速缓存中的代码的轨迹的位移。
[0022] 附图图示由各种实施例使用的示例部件。虽然附图中公开了具体的部件,然而应当理解,这样的部件是示例性的。即,实施例很好地适合具有各种其他部件或者附图中描绘的部件的变化。应当理解,附图中的部件可以与除了所呈现的之外的其他部件一起操作,并且实现实施例的目的并非需要附图的所有部件。
[0023] 图1示出了描绘根据各种实施例的基于块的转换过程的图,其中访客指令块被转换成本机转换块。如图1所示,多个访客指令块101被示出为被转换成对应的多个本机转换块102。
[0024] 本发明的实施例通过将访客指令块的指令转换成本机转换块的对应指令来工作。每个块101包括访客指令。这些访客指令可以来自大量不同的访客指令架构(例如,Java、JavaScript、x86、MIPS、SPARC等)。可以将多个访客指令块转换成一个或多个对应的本机转换块。这一转换基于每个指令来发生。
[0025] 图2示出了根据各种实施例的示例性硬件加速的转换系统200的图,该转换系统200图示在高速缓存中存储访客指令块及其对应的本机转换块的方式。如图2所示,转换旁视缓冲器(CLB)206被用于高速缓存访客块与本机块之间的地址映射;使得能够通过到处理器208的低延迟可用性来访问最频繁地遇到的本机转换块。
[0026] 图2的图图示在高速低延迟高速缓存、转换旁视缓冲器206中维护频繁地遇到的本机转换块的方式。图2中描绘的部件实现递送远远更高平的性能的硬件加速的转换过程。
[0027] 访客取回逻辑单元202用作从系统存储器201取回访客指令的基于硬件的访客指令取回单元。给定应用的访客指令驻留在系统存储器201内。在程序发起之后,基于硬件的访客取回逻辑单元202开始预先取回访客指令到访客取回缓冲器203。访客取回缓冲器207累积访客指令并且将它们组装成访客指令块。通过使用转换表格204将这些访客指令块转换成对应的本机转换块。转换后的本机指令在本机转换缓冲器205中累积直到本机转换块完成。本机转换块然后被传送给本机高速缓存207,并且映射关系被存储在转换旁视缓冲器206中。本机高速缓存207然后用于向处理器208馈送本机指令用于执行。在一个实施例中,由访客取回逻辑单元202实现的功能由访客取回逻辑状态机来产生。
[0028] 随着这一过程继续,转换旁视缓冲器206被填充有访客块到本机块的地址映射。转换旁视缓冲器206使用一个或多个算法(例如,最近使用的等)来确保最频繁地遇到的块映射关系被保持在缓冲器中,而罕见地遇到的块映射关系从缓冲器中被驱逐。通过此方式,热本机转换块映射关系被存储在转换旁视缓冲器206中。另外,应当注意,本机块内很好地预测的远的访客分支不需要在CLB中插入新的映射关系,因为其目标块在单个映射本机块内被缝合,从而保留用于CLB结构的小的容量效率。另外,在一个实施例中,CLB 206被构造为仅存储结束访客到本机地址映射关系。这一方面也保留CLB的小的容量效率。
[0029] 访客取回逻辑202查看转换旁视缓冲器206以确定来自访客指令块的地址是否已经被转换成本机转换块。如上文所述,本发明的实施例提供用于转换处理的硬件加速。因此,访客取回逻辑202将先于从系统存储器201取回访客地址用于新的转换来针对预先存在的本机转换块映射关系来查看转换旁视缓冲器206。
[0030] 在一个实施例中,转换旁视缓冲器通过访客地址范围或者通过各个访客地址来被索引。访客地址范围是已经被转换成本机转换块的访客指令块的地址的范围。由转换旁视缓冲器存储的本机转换块映射关系经由对应访客指令块的其对应访客地址范围来被索引。因此,访客取回逻辑可以将访客地址与转换后的块的访客地址范围或各个访客地址相比较,其映射关系被保持在转换旁视缓冲器206中以确定预先存在的本机转换块是否驻留在存储在本机高速缓存207或图3的代码高速缓存中的内容中。如果预先存在的本机转换块在本机高速缓存中或者在代码高速缓存中,则将对应的本机转换指令从这些高速缓存直接转发给处理器。
[0031] 通过此方式,热访客指令块(例如,被频繁地执行的访客指令块)使其对应热本机转换块映射关系被维护在高速低延迟转换旁视缓冲器206中。当块被触摸时,适当的替换策略确保热块映射关系保持在转换旁视缓冲器中。因此,访客取回逻辑202可以快速地标识所请求的访客地址先前是否已经被转换,并且可以直接向本级高速缓存207转发先前转换的本机指令供处理器208执行。这些方面节省了大量循环,因为到系统存储器的跳脱(trip)占用40到50个循环或更多。这些属性(例如,之前的CLB、访客分支序列预测、访客和本机分支缓冲器、本机高速缓存)使得本发明的实施例的硬件加速功能能够实现到相当的本机应用的应用性能的80%到100%的访客应用的应用性能。
[0032] 在一个实施例中,访客取回逻辑202独立于来自处理器208的访客指令请求连续地预先取回用于转换的访客指令。本机转换块可以在用于不太频繁地使用的块的系统存储器201中的转换缓冲器“代码高速缓存”中被累积。转换旁视缓冲器206还保持最频繁地使用的映射关系。因此,如果所请求的访客地址没有映射到转换旁视缓冲器中的访客地址,则访客取回逻辑可以检查系统存储器201以确定访客地址是否对应于其中存储的本机转换块。
[0033] 在一个实施例中,转换旁视缓冲器206被实现为高速缓存并且使用高速缓存一致性协议来维护与存储在较高水平的高速缓存和系统存储器201中的远远更大的转换缓冲器的一致性。存储在转换旁视缓冲器206内的本机指令映射关系也被写回到较高水平的高速缓存和系统存储器201。到系统存储器的写回维护一致性。因此,可以使用高速缓存管理协议来确保热本机转换块映射关系存储在转换旁视缓冲器206中,并且冷本机转换映射关系块存储在系统存储器201中。因此,转换缓冲器206的远远更大的形式驻留在系统存储器201中。
[0034] 在一个实施例中,图2的架构实现使用能够接收大量不同指令架构作为输入的灵活的转换过程的虚拟指令集处理器/计算机。在这样的虚拟指令集处理器中,处理器的前端被实现为使得其能够被软件控制,同时利用硬件加速的转换过程来递送远远更高水平的性能。使用这样的实现方式,可以处理和转换不同的访客架构,同时每个访客架构接收硬件加速的优点以享受远远更高水平的性能。示例访客架构包括Java、JavaScript、x86、MIPS、SPARC等。在一个实施例中,“访客架构”可以是本机指令(例如,来自本机应用/宏操作)并且转换过程产生最佳本机指令(例如,优化本机指令/微操作)。软件控制的前端可以提供较大程度的灵活性用于在处理器上执行的应用。如上文所述,硬件加速可以实现几乎本机硬件速度用于访客应用的访客指令的执行。
[0035] 跟踪代码高速缓存中的转换后的代码
[0036] 采用二进制翻译来将访客(例如,源)代码转换成本机(例如,目标)代码的架构在相同或不同的指令集架构(ISA)中必须处理I/O设备经由DMA产生的自参考代码、自修改代码、和跨代码修改的问题。实施例被配置成处理访客代码的真假自修改以及访客代码的DMA修改。
[0037] 在处理涉及访客代码的DMA修改的情况时,能够对访客页面写保护,指令从该访客页面已经被转换并且被保持在代码高速缓存中。然而,在没有采用IOMMU的系统中,写保护的页面不能够防止代码高速缓存中的访客代码的副本由于DMA设备的修改而变得陈旧。另外,如果代码与相同页面中的数据混合或者在稀疏地转换大的页面时,访客页面粒度的写保护具有明显的性能影响。
[0038] 图3示出了根据各种实施例的用于以小于系统的页面大小的粒度来跟踪访客代码的系统的示例性部件。图3描绘用于执行代码、执行自修改代码、以及响应于自修改代码来维护代码高速缓存的部件。系统300包括处理器302和存储器310。注意,系统300还可以包括存在于其他附图中的其他部件。
[0039] 处理器302被配置成执行存储器310中存储的程序和/或代码。处理器302包括当前代码高速缓存缓冲器(PCB)308、PCB相关联的寄存器314、高速缓存320、自修改代码(SMC)检测模块330和执行功能模块350。存储器310包括当前代码高速缓存表格(PCT)312。执行功能模块350可以包括一个或多个处理核和用于取回指令的功能。
[0040] SMC检测模块330被配置成检测和/或确定通过自修改代码对代码的修改。在一些实施例中,SMC检测模块330与执行功能模块350通信以确定自修改代码合适修改自身。
[0041] 执行功能模块350被配置成使得处理器302能够执行从高速缓存320和/或存储器310访问的程序和/或代码。高速缓存320包括代码高速缓存322和数据高速缓存324。代码高速缓存322被配置成高速缓存来自存储器310的代码以增加处理器302的性能。数据高速缓存324被配置成高速缓存来自存储器310的数据以增加处理器302的性能。
[0042] 在一些实施例中,代码高速缓存322和数据高速缓存324组合,从而高速缓存322包括存储在一起的代码和数据。例如,可以在高速缓存320中对代码和数据交错。
[0043] 实施例被配置成以小于最小页面大小的粒度来跟踪访客代码,从而改善访客代码的跟踪和保护。以这一较小粒度,用于例如MMU的高速缓存线的大小可以不能够在存储上被绑成转换后的访客代码页面。实施例使用当前代码高速缓存表格(PCT)312来映射和跟踪代码高速缓存322中的转换后的代码。存储或DMA写入在存储或DMA写入全局可见之前咨询PCT 312。
[0044] 在一些实施例中,为了隐藏与访问PCT 312(其是存储器居住结构)相关联的存储器延迟,PCT 312的较小的高速缓存的版本被存储在处理器302上并且被称为当前代码高速缓存缓冲器(PCB)308。在给定页面地址(PA)发生存储或DMA写入时,在PCB 308中执行访问。如果访问在PCB 308中丢失,则在PCT 312中执行访问。在查找PCB 308和/或PCT 312时,如果存储是已经被转换的高速缓存线,则提供在执行存储的线程/核上发起异常的选项,其称为急切方法。注意,通过在系统寄存器中存储线程/核的异常目标ID,能够将异常转向不同于执行存储的线程/核的线程/核。
[0045] 在一些实施例中,当访客分支PCB 308和/或PCT 312时,可以在稍后的时间发起异常,其称为懒惰方法。还能够抑制参考和修改二者上的任何异常。
[0046] 在到已经被转换的页面(例如,4K页面)中的高速缓存线的存储或DMA写入时,在PCB 308中添加条目,并且将条目标记为已修改。在一些实施例中,到尚未被转换的数据或访客代码的存储没有去往PCT 312用于每个存储。如果PCB 308被定尺寸为匹配高速缓存(例如,L2高速缓存)中的每个页面(例如,4K页面)并且PCB 308将PCT 312比特和丢失信息高速缓存在PCB 308中,则可以避免在尚未被转换的数据或访客代码的每个存储时对PCB 308的访问。
[0047] 代码高速缓存322可以具有各种大小。例如,访客代码的大小可以最高达64MB。在一些实施例中,在没有访客高速缓存线属于其中的访客页面(例如,4K页面)的情况下,访客高速缓存线的在代码高速缓存322中的转换后的本机指令没有在PCT 312中被映射。换言之,在访客高速缓存线属于其中的访客页面的情况下,访客高速缓存线的在代码高速缓存322中的转换后的高速缓存线在PCT 312中被映射。例如,代码高速缓存322中的每个64字节高速缓存线可以来自唯一的访客代码4K页面并且具有包括1百万个条目的PCT 312(例如,
64MB/64B)。PCT312也可以被定尺寸为使得能够以大量不同的方式来组织代码高速缓存
322。表1示出了PCT 312中的条目的比特布局,其被称为当前代码高速缓存中的表格条目(PCTE)(例如,可以类似于翻译表格条目(TTE))。
[0048]
[0049]
[0050] 表1——用于PCTE的示例性布局
[0051] 在一些实施例中,PCT 312的多个PCTE被分组成单个高速缓存线,从而使得能够响应于取回高速缓存线来高速缓存多个PCTE。例如,可以将四个连续的PCTE分组成一个64B高速缓存线,并且在取回分组之后,将四个连续的PCTE高速缓存到单个L2高速缓存线中。PCT 312可以在存储器中被组织为哈希表或作为N向集合联合的高速缓存。
[0052] 在一些实施例中,在向LCB/CLT中插入条目以使得转换对于访客分支可见之前,向PCT 312中插入条目。PCT 312可以通过软件来维护,在从PCB 308写回之后,使用硬件将修改后的比特设置为1。对PCT 312的更新可以通过软件或硬件或者其组合来处理。对PCT 312的更新可以被高速缓存在基于硬件的高速缓存中并且通过一个线程/核的更新对其他线程/核可见。在一些实施例中,与PCB 308相关联的逻辑更新PCTE的已修改比特(例如,0到1过渡)并且软件可以更新PCTE的每个比特。为了避免由于硬件和软件产生的同时更新导致的数据冲突,可以将对PCTE的已修改比特的七个较高顺序的比特保持为保留。这使得能够实现对已修改比特的软件进行的字节写入,而没有与对相同的高速缓存线的软件更新的冲突。
[0053] PCB相关联的寄存器314可以包括PCT标签寄存器(PCTTR)。在一些实施例中,翻译者或转换者对PCTTR寄存器编程以向硬件(例如,处理器302)表示PCT 312的标签和索引比特。表2示出了PCTTR的示例性字段。
[0054]
[0055] 表2——PCTTR的示例性字段
[0056] 在一些实施例中,页面地址掩码(PAM)被配置成不具有非连续的1s。PAM字段用作在PCTE标签中找到的页面地址值的掩码(例如,作为PCTE.Tag[39:12]&PAM[39:12])。例如,如果PAM[39:12]==0xFFF_FF00,则PAM[39:12]用作到PCT 312中的索引,而PAM[39:12]是PCT 312中的标签比特。因此,在将PCTE放在PCT 312中时,转换者对PCTE.Tag[101:82]中的PAM[39:12]编程。可以不关心PCTE.Tag[81:74]比特。
[0057] PCB相关联的寄存器314可以包括PCT配置寄存器(PCTCR)。本文中使用的GCM指代异常。表3示出了PCTCR的示例性字段。
[0058]
[0059]
[0060] 表3——PCTCR的示例性字段
[0061] 在一些实施例中,如果SETV和BETV为1,则在SET和BET字段中编程的线程/核上发起异常(与PCTE.A字段一致)。否则,在从其执行存储或分支的线程/核上发起异常(与PCTE.A字段一致)。在一些实施例中,DETV字段通常为1。在DET字段中编程的线程/核上发起异常(与PCTE.A字段一致)。如果SEV为零,则在存储上不发起任何异常。如果BEV为零,则在分支上不发起任何异常。如果DEV为零,则在DMA访问上不发起任何异常(例如,DMA存储)。如果DMAGCMEN为零,则允许逻辑处理DMA访问,而不必查找PCB 308和/或PCT 312。如果GCMEN为零,则可以断电PCB 308(例如,包括阵列和逻辑)。
[0062] 在一些实施例中,PCB 308在芯片上(例如,处理器302的一部分)并且在存储和访客分支时是高速缓存PCT 312的PCTE的线程/核不可知结构。PCB 308通过经由扩展系统寄存器提供的维护操作对于软件是可见的。
[0063] 使用从MMU获取的页面地址,存储在PCB 308中查找条目。如果PCB 308中的访问命中并且匹配的高速缓存线具有被设置为1的C(转换后的)比特,则存储在M0(Mold)不是1的情况下将Mn(Mnew)设置为1。
[0064] 如果存储在PCB 308中丢失,则发起PCT行走(walk)(PCTW)以从PCT 312取回PCTE。在完成PCTW之后,如果找到匹配的PCTE,则在PCB 308中安装PCTE,否则使用被设置为0的C、Mnew和Mold比特在PCB 308中创建新的条目。在PCB 308中安装PCTE的过程中,如果被代替的条目具有被设置为1的Mn比特,则写回可能是必须的。
[0065] 注意,负载可以没有与PCB 308直接交互。然而,通过将用于由负载最近访问的页面(例如,4K页面)的PCTE取回到PCB 308中,能够利用负载与存储之间的参考的本地性。
[0066] DMA写入和读取可以被路由通过以通过处理器302的处理器核来维护存储器。这些DMA写入可以窥探PCB 308以设置M比特并且可选地生成急切异常。
[0067] 在一些实施例中,访客分支并行地在CLB和PCB 308中查找条目(例如,使用从TLB查找获取的访客物理地址)。期望在CLB、CLT、PCB 308和PCT 312之间,存在用于给定访客物理地址的恒定的视图。例如,条目不能是CLB/CLT中的命中以及PCT 312中的丢失或者PCT 312中的命中但是没有C比特被设置为1。
[0068] 如果访客分支是PCB 308中的丢失,则发起PCTW,即使其可以是CLB中的丢失。
[0069] 在PCTW完成时,可以在PCB 308中安装PCTE(例如,实现到相同目标的另外的访客分支的性能的增加)。在PCB 308中安装PCTE的过程中,如果被代替的条目具有被设置为1的Mn比特,则可能需要写回。
[0070] 在一些实施例中,访客分支诱捕或者没有基于PCB 308的PCTE.M[new]和PCTE.M[old]连同PCTE.A比特。
[0071] 实施例被配置成支持分支指令。分支指令在PCB 308和/或PCT 312中查找以确认转换由于访客修改而已经变得陈旧。分支指令发起TLB查找,之后是PCB 308和/或PCT 312中的查找。例如,如果查找产生PCB 308中的丢失,则发起PCTW以从PCT 312中取回PCTE。
[0072] 在PCTW完成时,可以在PCB 308中安装PCTE(例如,实现到相同轨迹的另外的分支指令的性能的增加)。在向PCB 308中安装PCTE的过程中,如果被代替的条目具有被设置为1的Mn比特,则可能需要写回。
[0073] 在一些实施例中,PCB 308存储PCT比特和丢失信息。这基于以下事实:多数存储是到尚未被转换的数据或代码的并且这样的存储将在PCT 312中丢失。为了避免对被期望在PCT 312中丢失的多数这样的存储执行PCT查找,使用PCB 308来高速缓存PCT命中和丢失信息。这使得能够避免响应于到相同页面(例如,4K页面)的存储的另外的PCT查找。
[0074] 例如,由于PCB 308被配置成映射驻留在L2高速缓存中的每个可能的4K页面,所以PCB 308可以被配置为与L2高速缓存具有相同数目的方向的高速缓存(例如,L2高速缓的每个方向中可以有最大34个4K页面)。
[0075] 在一些实施例中,PCB 308是每个方向上具有32个条目的8向关联高速缓存。每个条目提供4K页面的PCT命中和丢失信息。PA[16:12]比特是用于选择集合的索引比特。表4示出了示例性PCB条目(PCBE)的布局。
[0076]
[0077] 表4——用于PCB条目的示例性布局
[0078] *y的值可以与在PCTE.Tag中找到的相同。在支持最高达40b的地址的大型物理地址扩展(LPAE)系统中,y为39。
[0079] 在一些实施例中,PCB 308可以使用系统寄存器通过软件来维护。PCBE可以基于PA来被解激活。例如,当转换变得陈旧或者创建新的轨迹时,软件可以解激活PCB中的条目。PCBE可以基于PA被清除。例如,如果Mold和Mnew被设置并且条目有效,则PCBE被写入存储器
310和PCTE 312并且PCBE继续保持有效。这一操作使得转换者能够在PCT 312中的PA上的任何维护之前将PCTE与PCBE同步。PCBE可以基于PA来被清除和解激活。例如,如果Mold和Mnew被设置并且条目有效,则将PCBE写入存储器310并且解激活PCBE。每个PCBE条目可以在初始化期间或者在转换者清除代码高速缓存322时被解激活。注意,修改后的条目不可以被写回存储器310和PCT 312。每个PCBE可以被清除和解激活。例如,这一操作使得能够将PCB 308中的每个已修改条目写回PCT 312并且然后解激活PCB 308中的每个条目。
[0080] PCB相关联的寄存器314可以包括PCB维护寄存器(PCBMR)。表5示出了PCBMR的字段。在一些实施例中,如果维护基于索引,则使用PA[16:12]作为索引比特联通WAY比特。
[0081]
[0082]
[0083] 表5——PCBMR的示例性字段
[0084] PCB相关联的寄存器314可以包括PCT基本地址寄存器(PCTBAR)。表6示出了PCTBAR的字段。
[0085]比特 名称 描述 类型 访问 重置
5:0 保留 ——     0
39:6 PA BAR PA Cfg RW 0
[0086] 表6——PCTBAR的字段
[0087] PCB相关联的寄存器314可以包括GCM伴随式(syndrome)0寄存器(GCMS0R)。表7示出了GCMS0R的字段。
[0088]
[0089]
[0090] 表7——GCMS0R的示例性字段
[0091] PCB相关联的寄存器314可以包括GCM伴随式1寄存器(GCMS1R)。表8示出了GCMS1R的字段。
[0092]比特 名称 描述 类型 访问 重置
63:0 C PCTE.C Cfg RW 0
[0093] 表8——GCMS1R的示例性字段
[0094] 实施例被配置成使用各种技术来处理极端情况,包括但不限于中断访客指令分支(GIB)交互上的轨迹、PCT维护、和PCB预先取回。
[0095] 在一些实施例中,使用访客分支来检测代码高速缓存中的陈旧代码。转换者在遭遇访客分支时中断轨迹并且以单个轨迹继续。
[0096] 在一些实施例中,使用负载和存储通过软件来维护PCT 312。PCB 308的逻辑可以向PCT 308写回已修改PCBE。
[0097] 在一些实施例中,每个PCBE映射到4K页面。如果采用更大的访客页面大小,则PCB逻辑可以依次预先取回用于下一依次4K页面的PCTE,用于在PCB 308中命中的每个负载或存储参考。
[0098] 参考图4,流程图400图示本文中描述的由各种实施例使用用于保护数据的示例功能。虽然流程图400中公开了具体的功能块(“块”),然而这样的步骤是示例性的。也就是,实施例很好地适合执行流程图400中给出的各种其他块或者块的变化。应当理解,流程图400中的块可以按照不同于所呈现的顺序来执行,并且并非需要执行流程图400中的所有块。
[0099] 图4A到图4B示出了根据各种实施例的用于跟踪代码高速缓存中的转换后的代码的位置的示例性电子部件控制的过程的流程图。图4A到图4B描绘如本文所述关于一些实施例的用于跟踪转换后的代码是否在具有PCB和PCT的代码高速缓存中的过程400。应当理解,虽然关于PCB和PCT来描述过程400,然而过程400可以使用具有类似功能的其他数据结构和配置来执行。
[0100] 在块402,访问访客指令。在一些实施例中,访客指令被将访客指令转换成本机指令的翻译者访问,如本文所述。
[0101] 在块404,确定访客指令是否为分支。如果访客指令不是分支指令,则执行块406。如果访客指令是分支指令,则执行块450。
[0102] 在块406,确定访客指令是否为访客物理地址的存储。如果访客指令时访客物理地址的存储,则执行块408。如果访客指令不是访客物理地址的存储,则执行块440。
[0103] 在块408,确定PCB中是否存在丢失。可以基于访客指令的页面或地址来确定PCB中的丢失。如果PCB中存在丢失,则执行块410。如果PCB中没有丢失,则执行块422。
[0104] 在块410,确定PCT中是否存在丢失。可以基于访客指令的页面或地址来确定PCT中的丢失。如果PCT中存在丢失,则执行块420。如果PCT中没有丢失,则执行块412。
[0105] 在块412,选择PCB条目用于驱逐。用于驱逐的PCB条目的选择可以基于最近使用的基础,如本文所述。
[0106] 在块414,执行所选择的PCB的驱逐。在块416,取回来自PCT的高速缓存线定尺寸的选择。如本文所述,高速缓存线定尺寸的选择可以包括多个PTC条目(例如,4个PCTE)。
[0107] 在块418,将来自PCT的条目存储到PCB中(例如,到被驱逐的PCB条目的位置)。
[0108] 在块420,执行转换后的访客指令。在一些实施例中,更新代码高速缓存作为访客指令转换的部分。然后可以针对下一访客指令执行块420。
[0109] 在块422,确定位置是否具有转换后的代码,如本文所述。如果位置具有转换后的代码,则执行块424。如果位置没有转换后的代码,则执行块420。
[0110] 在块424,发起异常,如本文所述。这可以称为急切方法。在一些实施例中,没有发起异常。在一些实施例中,在发起异常时,暂停代码转换以使得能够更新代码高速缓存和/或访问存储器等。
[0111] 在块426,解激活与访客指令中的地址相关联的代码高速缓存线。例如,解激活可以基于代码高速缓存线被确定为PCB和/或PCT的基于陈旧的修改指示符,如本文所述。
[0112] 在块428,确定PCT中是否存在丢失。可以基于访客指令的页面或地址来确定PCT中的丢失。如果PCT中存在丢失,则执行块420。如果PCT中没有丢失,则执行块430。
[0113] 在块430,转换访客指令。在一些实施例中,更新代码高速缓存作为访客指令转换的部分。
[0114] 在块432,更新PCB和/或PCT,如本文所述,以反映到访客物理地址以及代码高速缓存中的相关联的位置的存储指令的性能。例如,可以更新PCB和/或PCT以反映请求已经修改代码高速缓存线。然后可以针对下一访客指令执行块402。
[0115] 在块440,执行基于访问指令的转换之后的指令。然后针对下一访客指令执行块402。
[0116] 参考图4B,在块450,使用访客分支指令代替分支指令。
[0117] 在块452,确定位置是否具有转换之后的代码,如本文所述。如果位置具有转换之后的代码,则执行块460。如果位置不具有转换之后的代码,则执行块454。
[0118] 在块454,转换访客分支指令(例如,成为本机分支指令)。在块456,执行转换之后的访客分支指令的位置处的代码。
[0119] 在块460,确定访客分支指令的位置(例如,地址)是否已经被修改。基于访问PCB和/或PCT来确定访客分支指令的位置的内容是否已经被修改。如果位置的内容已经修改,则执行图4A的块424。这可以称为懒惰方法。如果位置的内容尚未修改,则执行块462。
[0120] 在块462,访问访客分支指令的位置。可以从代码高速缓存或存储器来访问这一位置。
[0121] 在块464,执行访客分支指令的位置处的代码。
[0122] 图5是包括各种实施例的示例性计算系统500的框图。计算系统500广义上表示能够执行计算机可读指令的任何单处理器或多处理器计算设备或系统。计算系统500的示例包括但不限于工作站、膝上型电脑、客户端侧终端、服务器、超级计算机、分布式计算设备、手持式设备、或者任何其他计算系统或设备。在其最基本的配置中,计算系统500可以包括至少一个处理器514以及系统存储器516。
[0123] 处理器514通常表示能够处理数据或者解释和执行指令的任何类型或形式的处理单元。在某些实施例中,处理器514可以从软件应用或模块接收指令。这些指令可以引起处理器514执行本文中描述和/或说明的示例实施例中的一个或多个的功能。例如,处理器514可以单独地或者结合其他元件执行以下中的一项或多项和/或是用于单独地或者结合其他元件执行以下中的一项或多项的装置:本文中描述的标识、确定、使用、实现、翻译、跟踪、接收、移动、并且提供。处理器514还可以执行本文中描述和/或说明的任何其他步骤、方法或过程和/或可以是用于执行本文中描述和/或说明的任何其他步骤、方法或过程的装置。
[0124] 系统存储器516通常表示能够存储数据和/或其他计算机可读指令的任何类型或形式的易失性或非易失性存储设备或介质。系统存储器516的示例包括但不限于RAM、ROM、FLASH存储器、或者任何其他合适的存储器设备。虽然没有要求,然而在某些实施例中,计算系统500可以包括易失性存储器单元(诸如例如系统存储器516)和非易失性存储设备(诸如例如主存储设备532)二者。
[0125] 计算系统500还可以包括除了处理器514和系统存储器516之外的一个或多个部件或元件。例如,在图5的实施例中,计算系统500包括存储器控制器518、I/O控制器520和通信接口522,这些部件中的每个可以经由通信基础设施512互连。
[0126] 通信基础设施512通常表示能够促进计算设备的一个或多个部件之间的通信的任何类型或形式的基础设施。通信基础设施512的示例包括但不限于通信总线(诸如,ISA、PCI、PCIe、或类似总线)和网络。在一个实施例中,系统存储器516经由专用存储器总线来通信。
[0127] 存储器控制器518通常表示能够处理存储器或数据或者控制计算系统500的一个或多个部件之间的通信的任何类型或形式的设备。例如,存储器控制器518可以经由通信基础设施512来控制处理器514、系统存储器516、和/或I/O控制器520之间的通信。存储器控制器可以单独地或者结合其他元件执行本文中描述的操作或特征中的一个或多个和/或可以是用于单独地或者结合其他元件执行本文中描述的操作或特征中的一个或多个的装置。
[0128] I/O控制器520通常表示能够协调和/或控制计算设备的输入和输出功能的任何类型或形式的模块。例如,I/O控制器520可以控制或促进数据在计算系统500的一个或多个元件(诸如处理器514、系统存储器516、通信接口522、显示器适配器526、输入接口530、和存储接口534)之间的传送。I/O控制器520可以用于例如单独地或者结合其他元件执行本文中描述的操作中的一个或多个和/或可以是用于例如单独地或者结合其他元件执行本文中描述的操作中的一个或多个的装置。I/O控制器520还可以用于执行实例公开中给出的其他操作和特征和/或可以是用于执行实例公开中给出的其他操作和特征的装置。
[0129] 通信接口522广义上表示能够促进实例计算系统500与一个或多个另外的设备之间的通信的任何类型或形式的通信设备或适配器。例如,通信接口522可以促进计算系统500与包括另外的计算系统的专用或公共网络之间的通信。通信接口522的示例包括但不限于有线网络接口(诸如,网络接口卡)、无线网络接口(诸如,无线网络接口卡)、调制解调器以及任何其他合适的接口。在一个实施例中,通信接口522经由到网络、诸如因特网的直接链接提供到远程服务器的直接连接。通信接口522还可以通过例如局域网(诸如,以太网网络)、个域网、电话或线缆网络、蜂窝电话连接、卫星数据连接、或者任何其他合适的连接来间接地提供这样的连接。
[0130] 通信接口522还可以表示被配置成经由外部总线或通信信道来促进计算系统500与一个或多个另外的网络或存储设备之间的通信的主机适配器。主机适配器的示例包括但不限于SCSI主机适配器、USB主机适配器、IEEE(电气与电子工程师协会)594主机适配器、串行高级技术附件(SATA)和外部SATA(eSATA)主机适配器、高级技术附件(ATA)和并行ATA(PATA)主机适配器、光纤通道接口适配器、以太网适配器等。通信接口522还可以使得计算系统500能够结合分布式或远程计算。例如,通信接口522可以从远程设备接收指令或者向远程设备发送指令用于执行。通信接口522可以单独地或者结合其他元件执行本文中公开的操作中的一个或多个和/或可以是用于单独地或者结合其他元件执行本文中公开的操作中的一个或多个的装置。通信接口522还可以用于执行实例公开中给出的其他操作和特征和/或可以是用于执行实例公开中给出的其他操作和特征的装置。
[0131] 如图5所示,计算系统500还可以包括经由显示器适配器526耦合至通信基础设施512的至少一个显示器设备524。显示器设备524通常表示能够在视觉上显示由显示器适配器526转发的信息的任何类型或形式的设备。类似地,显示器适配器526通常表示被配置成从通信基础设施512(或者从缓冲器,如现有技术中已知的)转发图形、文本和其他数据用于在显示器设备524上显示的任何类型或形式的设备。
[0132] 如图5所示,计算系统500还可以包括经由输入接口530耦合至通信基础设施512的至少一个输入设备528。输入设备528通常表示能够向计算系统500提供计算机生成的或者人类生成的输入的任何类型或形式的输入设备。输入设备528的示例包括但不限于键盘、指示设备、速度标识设备、或者任何其他输入设备。在一个实施例中,输入设备528可以单独地或者结合其他元件执行本文中公开的操作中的一个或多个和/或可以是用于单独地或者结合其他元件执行本文中公开的操作中的一个或多个的装置。输入设备528还可以用于执行实例公开中给出的其他操作和特征和/或可以是用于执行实例公开中给出的其他操作和特征的装置。
[0133] 如图5所示,计算系统500还可以包括经由存储接口534耦合至通信基础设施512的主存储设备532和后备存储设备533。存储设备532和533通常表示能够存储数据和/或其他计算机可读指令的任何类型或形式的存储设备或介质。例如,存储设备532和533可以是磁盘驱动器(例如所谓的硬盘驱动器)、固态磁盘、软盘驱动器、磁带驱动器、光盘驱动器、FLASH驱动器等。存储接口534通常表示用于在存储设备532和533与计算系统500的其他部件之间传送数据的任何类型或形式的接口或设备。
[0134] 继续参考图5,存储设备532和533可以被配置成从可移除存储单元读取和/或向可移除存储单元写入,可移除存储单元被配置成存储计算机软件、数据或其他计算机可读信息。合适的可移除存储单元的示例包括但不限于软盘、磁带、光盘、FLASH存储器设备等。存储设备532和533还可以包括用于使得能够将计算机软件、数据或其他计算机可读指令加载到计算系统500中的其他类似结构或设备。例如,存储设备532和533可以被配置成读取和写入软件、数据、或其他计算机可读信息。存储设备532和533也可以是计算系统500的部分,或者可以是通过其他接口系统访问的单独的设备。
[0135] 存储设备532和533可以用于单独地或者结合其他元件执行本文中公开的操作中的一个或多个和/或可以是用于单独地或者结合其他元件执行本文中公开的操作中的一个或多个的装置。存储设备532和533也可以用于执行实例公开中给出的其他操作和特征和/或可以是用于执行实例公开中给出的其他操作和特征的装置。
[0136] 很多其他设备或子系统可以连接至计算系统500。相反,并非图5所示所有部件和设备都需要存在以实践本文中描述的实施例。以上提及的设备和子系统也可以按照不同于图5所示的方式来互连。计算系统500也可以采用任何数目的软件、固件和/或硬件配置。例如,本文中公开的示例实施例可以被编码作为计算机可读介质上的计算机程序(也称为计算机软件、软件应用、计算机可读指令或计算机控制逻辑)。
[0137] 包含计算机程序的计算机可读介质可以加载到计算系统500中。然后可以将计算机可读介质上存储的计算机程序的全部或部分存储在系统存储器516和/或存储设备532和533的各个部分中。在由处理器514执行时,被加载到计算系统500中的计算机程序可以引起处理器514执行本文中描述和/或说明的示例实施例的功能和/或可以是用于执行本文中描述和/或说明的示例实施例的功能的装置。另外地或者备选地,本文中描述和/或说明的示例实施例可以用固件和/或硬件来实现。例如,计算系统500可以被配置作为被适配成实现本文中公开的实施例中的一个或多个的ASIC。
[0138] 虽然以上公开内容使用具体的框图、流程图和示例来给出各种实施例,然而本文中描述和/或说明的每个框图部件、流程图步骤、操作、和/或部件可以使用各种硬件、软件、或固件(或者其组合)配置单独地和/或联合来实现。另外,其他部件中包含的部件的任何公开应当被认为是示例,因为可以实现很多其他架构以实现相同的功能。
[0139] 已经出于解释的目的参考具体的实施例描述了以上描述。然而,以上说明性讨论并非意图排他或者将本公开限于所公开的精确形式。很多修改和变化鉴于以上教示是可能的。实施例被选择和描述以便最佳地解释本公开的原理及其实际应用,从而使得本领域其他技术人员能够最佳地使用具有能够适合所考虑的具体使用的各种修改的本公开和各种实施例。
[0140] 因此描述根据本公开的实施例。虽然已经在具体实施例中描述了本公开,然而应当理解,本公开不应当被理解为受到这样的实施例的限制,而是应当根据以下权利要求来理解。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈