首页 / 专利库 / 电脑零配件 / 硬件 / 等待时间测量技术

等待时间测量技术

阅读:1发布:2022-09-29

专利汇可以提供等待时间测量技术专利检索,专利查询,专利分析的服务。并且公开了等待时间测量技术。系统、装置和方法可提供接收经编译的代码并标识该经编译的代码中的多个 块 的技术。通过将这些块 修改 为包括用于测量经插桩的代码在图形处理器上执行期间这些块的等待时间的探针来从经编译的代码生成经插桩的代码。,下面是等待时间测量技术专利的具体信息内容。

1.一种增强的计算系统,包括:
显示器;
图形处理器;
主机处理器;以及
存储器,所述存储器包括一组指令,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统:
接收经编译的代码,
标识所述经编译的代码中的多个
从所述经编译的代码生成经插桩的代码,其中,为了生成所述经插桩的代码,所述块将被修改成包括探针,以测量所述经插桩的代码在所述图形处理器上执行期间所述块的等待时间,
将所述经插桩的代码提供给所述图形处理器,
从由所述经插桩的代码生成的概况分析数据确定指令等待时间,以及
在所述显示器上可视地呈现所述指令等待时间。
2.如权利要求1所述的系统,其中,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统基于所述块是否具有取决于开放数据访问的数据使用来将相应的优先级分配给所述块中的每一个块,并且
其中,为了生成经插桩的代码,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统基于分配给所述块的所述相应的优先级来将所述块中的每一个块修改为包括所述探针中的基于寄存器的探针或所述探针中的基于存储器的探针。
3.如权利要求2所述的系统,其中,为了修改所述块中的每一个块,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统:
当分配给所述块的所述相应的优先级高于或等于所述优先级中的一个或多个其他优先级时,将所述基于寄存器的探针包括在所述块中,以及
当所述块的所述相应的优先级低于所述一个或多个其他优先级时,将所述基于存储器的探针包括在所述块中。
4.如权利要求1所述的系统,其中,为了确定所述指令等待时间,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统利用所述探针确定所述概况分析数据包括所述经插桩的代码由所述图形处理器执行期间所述块中的每一个块的等待时间。
5.如权利要求1所述的系统,其中,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统利用所述探针中的一个探针确定所述概况分析数据包括所述经插桩的代码由所述图形处理器执行期间所述块中的一个块的累加的等待时间,并且
其中,为了确定所述指令等待时间,所述指令在由所述图形处理器或所述主机处理器中的一者或多者执行时使得所述计算系统:
为所述一个块的多个指令中的每一个指令确定静态等待时间值,以及
为所述一个块的指令中的重指令确定动态等待时间值,其中
当所述静态等待时间值的总和小于所述累加的等待时间时,所述动态等待时间值将基于所述累加的等待时间以及除所述重指令的静态等待时间值之外的所述静态等待时间值中的每一个来确定,并且
当所述静态等待时间值的总和大于或等于所述累加的等待时间时,所述动态等待时间值将基于所述累加的等待时间和所述静态等待时间值中的每一个来确定。
6.如权利要求1-5中任一项所述的系统,其中,所述经编译的代码将是二进制代码或二进制代码的中间表示。
7.一种等待时间测量装置,包括:
一个或多个衬底;以及
逻辑,所述逻辑被耦合至所述一个或多个衬底并且至少部分地实现在可配置逻辑或固定功能逻辑硬件中的一者或多者中,所述逻辑用于:
接收经编译的代码;
标识所述经编译的代码中的多个块;以及
从所述经编译的代码生成经插桩的代码,其中,为了生成所述经插桩的代码,所述逻辑用于将所述块修改为包括探针,以测量所述经插桩的代码在图形处理器上执行期间所述块的等待时间。
8.如权利要求7所述的装置,其中,所述逻辑用于基于所述块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给所述块中的每一个块,
其中,为了生成所述经插桩的代码,所述逻辑用于基于分配给所述块的所述相应的优先级而将所述块中的每一个块修改为包括所述探针中的基于寄存器的探针或所述探针中的基于存储器的探针。
9.如权利要求8所述的装置,其中,为了修改所述块中的每一个块,所述逻辑用于:
当分配给所述块的所述相应的优先级高于或等于所述优先级中的一个或多个其他优先级时,将所述基于寄存器的探针包括在所述块中,以及
当所述块的所述相应的优先级低于所述一个或多个其他优先级时,将所述基于存储器的探针包括在所述块中。
10.如权利要求7所述的装置,其中,所述逻辑用于利用所述探针来确定所述经插桩的代码由所述图形处理器执行期间所述块中的每一个块的等待时间。
11.如权利要求7所述的装置,其中,所述逻辑用于:
为所述块中的一个块的多个指令中的每一个指令确定静态等待时间值;
利用所述探针中的一个探针来确定所述经插桩的代码由所述图形处理器执行期间所述一个块的累加的等待时间;以及
为所述一个块的指令中的重指令确定动态等待时间值,
其中,当所述静态等待时间值的总和小于所述累加的等待时间时,所述逻辑用于基于所述累加的等待时间以及除所述重指令的静态等待时间值之外的所述静态等待时间值中的每一个来确定所述动态等待时间值,并且
其中,当所述静态等待时间值的总和大于或等于所述累加的等待时间时,所述逻辑用于基于所述累加的等待时间和所述静态等待时间值中的每一个来确定所述动态等待时间值。
12.如权利要求7-11中任一项所述的装置,其中,所述经编译的代码将是二进制代码或二进制代码的中间表示。
13.如权利要求7-11中任一项所述的装置,其中,耦合至所述一个或多个衬底的所述逻辑包括定位在所述一个或多个衬底内的晶体管通道区域。
14.一种标识代码热点的方法,包括:
接收经编译的代码;
标识所述经编译的代码中的多个块;以及
通过将所述块修改为包括用于测量经插桩的代码在图形处理器上执行期间所述块的等待时间的探针,来从所述经编译的代码生成所述经插桩的代码。
15.如权利要求14所述的方法,进一步包括基于所述块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给所述块中的每一个块,
其中,生成所述经插桩的代码的步骤包括基于分配给所述块的所述相应的优先级而将所述块中的每一个块修改为包括所述探针中的基于寄存器的探针或所述探针中的基于存储器的探针。
16.如权利要求15所述的方法,其中,修改所述块中的每一个块的步骤包括:
当分配给所述块的所述相应的优先级高于或等于所述优先级中的一个或多个其他优先级时,将所述块修改为包括所述基于寄存器的探针,以及
当所述块的所述相应的优先级低于所述一个或多个其他优先级时,将所述块修改为包括所述基于存储器的探针。
17.如权利要求14所述的方法,进一步包括利用所述探针来确定所述经插桩的代码由所述图形处理器执行期间所述块中的每一个块的等待时间。
18.如权利要求14所述的方法,进一步包括:
为所述块中的一个块的多个指令中的每一个指令确定静态等待时间值;
利用所述探针中的一个探针来确定所述经插桩的代码由所述图形处理器执行期间所述一个块的累加的等待时间;以及
为所述一个块的指令中的重指令确定动态等待时间值,
其中,当所述静态等待时间值的总和小于所述累加的等待时间时,所述动态等待时间值是基于所述累加的等待时间以及除所述重指令的静态等待时间值之外的所述静态等待时间值中的每一个来确定的,并且
其中,当所述静态等待时间值的总和大于或等于所述累加的等待时间时,所述动态等待时间值是基于所述累加的等待时间和所述静态等待时间值中的每一个来确定的。
19.如权利要求14-18中任一项所述的方法,其中,所述经编译的代码是二进制代码或二进制代码的中间表示。
20.一种等待时间测量设备,包括:
用于接收经编译的代码的装置;
用于标识所述经编译的代码中的多个块的装置;以及
用于通过将所述块修改为包括用于测量经插桩的代码在图形处理器上执行期间所述块的等待时间的探针来从所述经编译的代码生成所述经插桩的代码的装置。
21.如权利要求20所述的设备,进一步包括用于基于所述块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给所述块中的每一个块的装置,并且其中,用于生成所述经插桩的代码的装置包括用于基于分配给所述块的所述相应的优先级而将所述块中的每一个块修改为包括所述探针中的基于寄存器的探针或所述探针中的基于存储器的探针的装置。
22.如权利要求21所述的设备,其中,用于修改所述块中的每一个块的装置包括:
用于在分配给所述块的所述相应的优先级高于或等于所述优先级中的一个或多个其他优先级时将所述块修改为包括所述基于寄存器的探针的装置,以及
用于在所述块的所述相应的优先级低于所述一个或多个其他优先级时将所述块修改为包括所述基于存储器的探针的装置。
23.如权利要求20所述的设备,进一步包括用于确定所述经插桩的代码由所述图形处理器执行期间所述块中的每一个块的等待时间的装置。
24.如权利要求20所述的设备,进一步包括:
用于为所述块中的一个块的多个指令中的每一个指令确定静态等待时间值的装置;
用于利用所述探针中的一个探针来确定所述经插桩的代码由所述图形处理器执行期间所述一个块的累加的等待时间的装置;以及
用于为所述一个块的指令中的重指令确定动态等待时间值的装置,
其中,当所述静态等待时间值的总和小于所述累加的等待时间时,所述动态等待时间值是基于所述累加的等待时间以及除所述重指令的静态等待时间值之外的所述静态等待时间值中的每一个来确定的,并且
其中,当所述静态等待时间值的总和大于或等于所述累加的等待时间时,所述动态等待时间值是基于所述累加的等待时间和所述静态等待时间值中的每一个来确定的。
25.如权利要求20-24中任一项所述的设备,其中,所述经编译的代码是二进制代码或二进制代码的中间表示。

说明书全文

等待时间测量技术

技术领域

[0001] 实施例总体上涉及计算系统。更具体地,实施例涉及对计算系统中的指令等待时间的测量。

背景技术

[0002] 可在数个设备上执行计算机代码和程序。可通过分析在程序的执行期间在何处花费最多时间来确定代码的效率。此类分析可被称作“指令热点分析”,并且被用于通过标记代码(例如,突出显示代码的行)来在源代码中标识性能问题,这可能在代码的执行期间花费大量的时间。附图说明
[0003] 通过阅读以下说明书和所附权利要求并通过参考以下附图,实施例的各种优点对于本领域技术人员将变得显而易见,其中:
[0004] 图1是根据实施例的等待时间测量装置的示例的示图;
[0005] 图2是根据实施例的对代码进行插桩(instrument)的方法的示例的流程图
[0006] 图3是根据实施例的测量等待时间的方法的示例的流程图;
[0007] 图4A和图4B是根据实施例的控制流图的示图;
[0008] 图5-图6是根据实施例的修改代码的方法的示例的流程图;
[0009] 图7是根据实施例的确定等待时间的方法的示例的流程图;
[0010] 图8是根据实施例的测量装置的示例的示图;
[0011] 图9图示出根据实施例的增强的指令热点分析器系统的示例;
[0012] 图10图示出根据实施例的处理器核的示例;
[0013] 图11图示出根据实施例的计算系统的框图
[0014] 图12图示出根据实施的等待时间测量装置;以及
[0015] 图13图示出根据实施例的处理器核的示例。

具体实施方式

[0016] 图1图示出包括设备28的计算架构20的示例性实施例,其中,用户可提供用于由设备28执行的代码或程序。设备28可以是具有多个执行单元的图形处理器(例如,图形处理单元/GPU)。针对GPU的指令热点分析可能是有价值的,但是由于GPU与诸如中央处理单元(CPU)之类的其他设备之间显著不同的架构,该分析也可能是困难的。例如,GPU可具有可并行地处理多个不同线程的增强的并行处理单元,并且可进一步具有有序执行架构。基于用于GPU的指令的指令热点分析,应用可修改被确定为具有高等待时间的代码,其中,该修改增强的代码的效率。
[0017] 本申请的一些示例性实施例提供了用于基于二进制插桩技术来增强可靠的GPU指令等待时间测量的技术,二进制插桩技术为在GPU上执行的内核和/或着色器确定“最热”指令(即,在程序的执行期间执行具有最长等待时间的操作的指令)以及源代码的最热行。可自动地分析代码以标识指令,其中,可对这些指令块排定优先级。随后,可基于优先级排定将探针插入到指令块中来自动地对指令块进行插桩。
[0018] 可将经插桩的代码提供给设备28以供执行。在执行期间,探针可收集经插桩的代码的测量数据(例如,等待时间和执行计数)。可基于代码的指令的静态信息来分析该测量数据以确定指令热点,并且可经由例如显示器将该测量数据呈现给用户以供查看。因此,可针对当前正在执行的代码确定等待时间测量,并且可能不一定测量整个内核/着色器。即,可仅对代码的部分进行插桩,并且此外,可能针对不同的内核/着色器参数或不同执行的部分来测量等待时间并且随后将结果进行合并。
[0019] 应用30可向驱动器26提供代码并且请求驱动器26编译该代码。驱动器26随后可调用编译器24。尽管分开地图示驱动器26和编译器24,但可理解,驱动器26可包括编译器24。对编译器24的输入可以是原始内核或着色器高级代码,并且来自该编译器24的输出可以是包含二进制代码的字节序列或者已经被后处理的二进制代码的中间表示,这两者都可被称为经编译的代码。经编译的代码可由设备28执行。
[0020] 在由设备28对经编译的代码的执行之前,驱动器26可调用插桩器32,并将经编译的代码提供给该插桩器32。插桩器32可对经编译的代码进行插桩,以生成经插桩的代码。例如,插桩器32可与概况分析器34通信,概况分析器34可以是用于执行经编译的代码的插桩的概况分析应用。可采用二进制插桩框架以用于指令级概况分析,该二进制插桩框架例如GT-PIN框架。概况分析器34可指令插桩器32在何处对经编译的代码进行插桩以及如何对经编译的代码进行插桩,并且随后在执行经插桩的代码之后处理经概况分析的代码。插桩可包括将经编译的代码划分成块,其中,每个块具有仅一个“重(heavy)”指令以及仅一个入口点和一个出口点。重指令可被定义为动态操作,或者其中用于执行该重指令的时间(即,等待时间)可能是高度可变的(例如,可能很长或很短)并且不可预测的一种指令。相比之下,“轻(light)”指令可执行具有更加可预测的等待时间的操作。因此,使用静态分析来准确地估计轻指令的等待时间会是可能的,但是使用静态分析来准确地估计重指令的等待时间是更加困难的。
[0021] 块中的每个块可具有分配给该块的探针。探针的类型可取决于块的优先级而变化。例如,基于硬件寄存器的探针可比基于存储器(例如,要求访问的高速缓存或RAM)的探针更快。因此,为了增强准确性,时间敏感的块和/或在其中获得准确定时更重要的块可被称为高优先级块,并且可被修改为包括基于硬件寄存器的探针。相比之下,具有更低的时间敏感性的块和/或可能不如指令热点分析所关心的那样重要的块可具有更低的优先级并且可被修改为包括基于存储器的探针。
[0022] 经插桩的代码可因此包括代码的多个块,其中,每个块包括基于存储器的探针或基于寄存器的探针。相较于经编译的代码,经插桩的代码可能不变。例如,经编译的代码中的所有的二进制指令可能保留在经插桩的代码中,并且另外,经插桩的代码可能包括用于收集用于等待时间分析的数据和测量的其他指令(例如,基于存储器或寄存器的探针)。
[0023] 可将经插桩的代码提供给驱动器26。驱动器26随后可将经插桩的代码提供在设备28上。设备28可执行经插桩的代码。概况分析数据可随着程序执行而被生成并存储在存储器或寄存器中。在经插桩的代码完成执行之后,概况分析数据可被维持在存储器中。概况分析数据可由插桩器32访问,该插桩器32将概况分析数据传递到概况分析器34以被处理,例如,以根据该概况分析数据确定各指令的指令等待时间。概况分析器34可以是经由例如显示器将经处理的数据呈现给用户的应用。用户可根据经处理的数据来确定指令热点。
[0024] 图2图示出对代码进行插桩以标识指令热点的方法70。方法70可在一个或多个模块中被实现为一组逻辑指令,这组逻辑指令被存储在诸如随机存取存储器(RAM)、只读存储器(ROM)、可编程ROM(PROM)、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如可编程逻辑阵列(PLA)、现场可编程阵列(FPGA)、复杂可编程逻辑器件(CPLD)之类的可配置逻辑中,存储在使用诸如例如专用集成电路(ASIC)、互补金属化物半导体(CMOS)的电路技术或晶体管-晶体管逻辑(TTL)技术之类的固定功能逻辑硬件或其任何组合中。
[0025] 例如,用于实现方法70中所示的操作的计算机程序代码能以一种或多种编程语言的任何组合来进行编写,包括RTL,诸如JAVA、SMALLTALK、C++、CUDA等等之类的面向对象编程语言,以及诸如“C”编程语言或类似编程语言之类的常规过程编程语言。另外,逻辑指令可包括汇编程序指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、状态设置数据、用于集成电路的配置数据、使对于硬件而言是原生的(native)电子电路和/或其他结构部件(例如,主机处理器、中央处理单元/CPU、微控制器等)个性化的状态信息。
[0026] 所图示的处理框72可接收经编译的代码。经编译的代码可以是二进制代码。所图示的处理框74可标识经编译的代码中的多个块。所图示的处理框78可从经编译的代码生成经插桩的代码。例如,为了生成经插桩的代码,所图示的处理框78可将块修改为包括探针以在经插桩的代码在图形处理单元上的执行期间测量这些块的等待时间。
[0027] 图3图示出用于标识指令热点的方法50。方法50可在一个或多个模块中被实现为一组逻辑指令,这组逻辑指令被存储在诸如RAM、ROM、PROM、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如PLA、FPGA、CPLD之类的可配置逻辑中,存储在使用诸如例如ASIC、CMOS或TTL技术的电路技术的固定功能逻辑硬件或其任何组合中。
[0028] 在所图示的处理框52中,可接收经编译的代码。在所图示的处理框54中,可标识经编译的代码内的指令块以生成这些块的控制流图。如以上所描述,指令块可各自包括仅一个重指令以及一个出口和一个入口。因此,可将指令划分成两个或更多个类中的一个,其中,这些类中的第一类包括潜在重指令,并且这些类中的第二类包括轻指令。
[0029] 重指令的一些示例包括与线程组内的线程的同步相关联的屏障(例如,WAIT(等待))指令。由于并行执行的不同线程的调度细节和执行差异,可能难以预测屏障指令的准确的等待时间。例如,包括WAIT指令的线程可能需要在该WAIT指令完成执行之前等待另一指令完成执行此外,可能难以准确估计与其中数据需要被检取的数据的数据使用相关联的数据请求的等待时间。在此类情况下,数据使用指令可被认为是重指令,由于访问存储在高速缓存中的数据所需要的时间可能远远少于访问RAM中的数据所需要的时间,因而取决于所要求的访问的类型而使得数据使用的等待时间不可预测并且可能很长。进一步地,如果数据使用操作对由开放数据读取操作(例如,未完成的数据读取操作)检取的数据进行操作,数据使用指令可能不得不在执行之前等待直到数据被检取。与相对接近和开放数据请求配对的数据使用操作可因此被认为是重指令,由于数据检取的定时可以是可变的。
[0030] 因此,重指令可被定义为执行动态操作或者其中时间(即,等待时间)可能是高度可变的并且不可预测的指令。即,可能难以静态地准确预测重指令等待时间。
[0031] 相比之下,轻指令可执行具有可预测静态等待时间的操作,并且可根据静态模型准确地估计等待时间。轻指令的一些示例包括简单指令,包括异步数据读取、具有不取决于开放数据请求的操作数的ADD和MOV操作。
[0032] 作为示例,由自身进行的存储器读取可以是轻量的,由于对存储器的请求是异步的,这可被认为是非阻塞操作。异步指令可发起操作并允许其他指令在该操作完成之前执行。例如,由异步指令发起的操作可在其他指令完成之后完成。潜在重指令可以是使用先前由数据请求所请求的数据的一些其他指令,其中,在潜在重指令开始执行之前,该数据请求可以是未完成的。以下提供了样本伪代码:
[0033] (1)send(8|M0)r53:f r126 0xC 0x024060FF//数据请求(轻量)
[0034] (2)cmp(8|M0)(lt)f0.0r124.0<1>:f r52.0<8;8,1>:f 0x0:f//数据使用(轻量)[0035] (3)cmp(8|M0)(lt)f0.1r122.0<1>:f r53.0<8;8,1>:f 0x0:f//数据使用(潜在重)
[0036] 行1可包括数据请求(即,发送)指令,该指令可以是异步的。异步数据请求可被认为是轻指令,由于代码不需要在例如行2的执行之前等到数据到达。一旦数据确实到达,由行1的指令发起的操作可将数据存储在寄存器r53处以完成执行。行2不包括数据请求,但替代地包括数据使用(即,cmp,其为比较命令)指令。行3要求数据使用(即,cmp命令),但进一步包括对行1的数据请求(即,寄存器r53:f)的数据引用。这可能是潜在地重的,由于这取决于行1的数据请求在行3之前被完成并且如以上所述,该数据请求可以是异步的并且在行3的执行之前可能未被完成。
[0037] 因此,为了标识指令块,可实现静态依赖性分析,其中,所有等待指令(诸如,与在数据使用之前可能未被完成的数据请求配对的每个数据使用)可被标记为重指令。因此,可分析指令以确定数据使用与数据请求对,其中,每个数据使用指令可对由数据请求中的一个数据请求检取的数据执行)。其他指令可被标记为轻指令。
[0038] 每个指令块可包括可由单个探针准确地测量的指令的最大序列,并且该指令的最大序列包括至多一个重指令,但在一些实施例中可包括多于一个重指令。在一些实施例中,如果在指令块中存在多于一个重指令,则指令块可被划分直到每个指令块中包括仅一个重指令。
[0039] 一旦代码已经由所图示的处理框54标识并划分成指令块以生成控制流图,可由所图示的处理框55将不同的优先级分配给这些指令块。例如,可针对每个指令块设置优先级。与更高优先级相关联的指令块可具有利用基于寄存器的探针来进行测量的更高的概率。与更低优先级相关联的指令块可具有利用基于寄存器的探针来进行测量的更低的概率,并且替代地可利用基于存储器的探针来进行测量。因此,优先级可被认为是对应于使用基于存储器的探针而不是基于寄存器的探针干扰多少内核的执行(以及整体结果准确性)的度量。
较高的数字可意指优先级较低并且因此允许较高的干扰,而较低的数字可意指优先级较高并且允许较低的干扰。
[0040] 例如,优先级值可以是从1到N的数字,其中,1是最高优先级,并且N是最低优先级。N可以是任何数字,并且可等于内核和/或着色器中的指令块的总数量。
[0041] 包含数据请求和数据使用的指令块和/或一对指令块的数据请求与数据使用之间的指令块可基于下列参数被分配优先级。包含数据请求(例如,异步数据请求)而不具有对由该数据请求检取的数据的使用的每个指令块可具有最高优先级“1”,以使得可准确测量等待时间。所测量的等待时间的存储可在插桩代码内部发生,并且最小化用于完成数据请求与用于插桩代码(例如,探针)的时间的重叠时间可以是分配优先级的因素。此外,指令块中探针的执行可相对于指令块不包括探针的情况下增加指令块的执行时间。将指令块的执行时间的增加维持成低于某个百分比或因数也可以是分配优先级时的考虑。
[0042] 例如,基于存储器的探针可在大量的时间上执行,该时间可与用于完成用户的数据请求的执行的时间重叠。这可能导致测量要求与该数据请求相关联的数据的指令的等待时间的数据不准确性。因此,如果基于存储器的探针被插入到不包括对应的数据使用的数据请求指令块中,则该基于存储器的探针的执行所要求的时间可掩盖用于完成由数据请求指令发起的操作和数据由其他指令块中的另一指令的操作等待所需要时间中的一些,这可能导致不准确的结果。
[0043] 例如,由数据请求指令发起操作可具有探针可测量的可预测且较低的等待时间。完成由数据请求发起的操作可能花费更久并且在探针已经执行之后结束。数据请求可导致数据由要求由该数据请求检取的数据的另一指令(其可能在不同于该数据请求的指令块中)的操作等待。为了准确测量另一指令的等待时间,使某些指令块处的探针的执行时间最小化可增强分析,以避免掩盖完成数据请求所需要的时间。即,对探针的仔细放置可增强要求由数据请求检取的数据的指令的等待时间的确定。
[0044] 因此,不包括对所检取的数据的数据使用的数据请求块可通过被分配最高优先级来使用基于寄存器的探针。进一步地,具有打开的数据请求的指令块之后的每个指令块具有获得先前所请求的数据的增加的概率,所以相对于数据请求指令块降低(例如,降低至“K”)针对此类指令块的优先级可以是可能的,但仍允许该指令块使用基于寄存器的探针来进行测量的高概率。
[0045] 如果指令块具有等于“K”的优先级,则若下一指令块不包含与来自另一块的数据使用配对的任何数据请求,该下一指令块可具有“K+1”的优先级。若该下一指令块包含与数据请求配对的数据使用,则可给该下一指令块分配“K+2”。例如,数据使用(由于一些情况下的数据等待)可花费比计算代码更多的时间,所以对于此类指令块优先级降低。即,基于存储器的探针可能不太可能显著地偏斜等待时间分析,因为此类指令块在更长的时间上执行。由此,基于存储器的探针可将该指令块的执行时间增加可接受的百分比。如果下一指令块包含针对一组先前打开的数据请求的最后数据使用(在此数据块之后将不再存在打开的数据请求),则可给该指令块分配“N”。如果对该指令块没有任何开放数据请求,则所有其他指令块可具有优先级N。
[0046] 所图示的处理框56可对代码进行插桩以生成包括基于寄存器的探针和/或基于存储器的探针的经插桩的代码。下文提供了经插桩的代码的示例:
[0047] 1.T1=READ-TIME-STAMP-COUNTER()//在开始时读取时间
[0048] 2.mov(8|M0)r124.0<1>:f 0x3F800000:f
[0049] 3.mov(8|M0)r125.0<1>:f 0x3F800000:f
[0050] 4.mov(8|M0)r126.0<1>:f 0x0:f
[0051] 5.mov(8|M0)r127.0<1>:f 0x3F800000:f
[0052] 6.T2=READ-TIME-STAMP-COUNTER()//在结束时读取时间
[0053] 7.LATENCY_DELTA=T2-T1//计算Δ
[0054] 8.INCREMENT-IN-MEMORY-OR
[0055] REGISTER(LATENCY_DELTA)//累加存储器或寄存器中的等待时间结果
[0056] 9.INCREMENT-IN-MEMORY-OR-REGISTER(EXECUTION_COU NTER)//递增存储器或寄存器中的指令块执行计数
[0057] 行1和行6-9可以是探针,而行2-5可以是来自经编译的代码的代码的指令块。在行1中,读取执行代码的指令块之前的时间T1。随后,在行2-5中代码执行。在行6中,读取代码的指令块的执行结束时的时间T2。在行7中,通过从时间T2中减去时间T1来计算等待时间。
在行8处可递增存储器计数器或寄存器计数器以反映T2-T1之间的差。例如,可将T2与T1之间的差加到已经存储在存储器计数器或寄存器计数器中的时间值。该时间值可反映跨代码的所有迭代的代码已经执行的时间总量。在行9处可递增存储器或寄存器计数器中的指令块执行计数器,以递增指令块执行计数。随后可从行1对代码进行重新迭代,如果其被如此编程(例如,诸如“for循环”之类的迭代程序)。因此,对于以上,每个探针可收集两个值:1)第8行处的指令块持续时间(等待时间),以及2)第9行处的指令块执行计数(该指令块被执行了多少次)。
[0058] 时间戳读取操作对于GPU可以是轻量的,并且可以不干扰执行单元流线。因此,如行1和行6中的时间戳读取操作可对内核和/或着色器的正常执行具有几乎零时序影响。
[0059] 如行8-9中所描述,可使用两种类型的探针(例如,存储器和寄存器)。在代码中可使用这些探针中的仅一种探针。为了节省每块等待时间,探针的插桩代码(行6-9)在所测量的指令块(行2-5)之后直接被添加。下文描述存储器和寄存器探针。
[0060] 存储器探针将所测量的结果存储到存储器中。此类探针的数量实质上可以是无限的,但这可能导致入以上所描述的显著开销,并且结果是,一些数据不准确性可能发生(例如,行8-9可花费大量时间来执行,这可能使等待时间分析偏斜)。
[0061] 寄存器探针可将所测量的结果暂时存储到空闲的硬件寄存器中,并且仅在内核和/或着色器结束之后将其移动到存储器中。寄存器探针可以是轻量探针(例如,当采用寄存器探针时,行8-9是轻量的)。可用寄存器探针的数量可受特定内核和/或着色器的执行时可用空闲寄存器的数量限制。如果可能,则代码的每个指令块可具有寄存器探针。在许多实例中,将要测量的指令块的数量可能超过可用寄存器探针的数量,尤其就内核和/或着色器而言。
[0062] 由此,一些实施例的增强是对基于寄存器的探针的仔细采用,以将基于寄存器的探针放置在可能最需要基于寄存器的探针的地方,以便获得可靠的等待时间值。例如,对基于寄存器的探针和基于存储器的探针的分发可基于由所图示的处理框54所分配的优先级。可给较高优先级指令块分配基于寄存器的探针。当所有的基于寄存器的探针已经被分配时,可将基于存储器的探针分配给指令块中可具有比较高优先级指令块更低的优先级的剩余指令块。即,因为基于寄存器的探针由于硬件配置而可能存在有限的数量,因此基于寄存器的探针被分配给较高优先级指令块以增强操作并降低数据收集期间的等待时间不准确性。
[0063] 在已经对代码进行插桩之后,所图示的处理框58可收集经插桩的代码的执行期间分析数据。例如,经插桩的代码可由GPU执行。所图示的处理框58可使用探针将等待时间值(例如,针对每个指令块的执行计数和等待时间)存储在存储器和寄存器中。在执行之后,所图示的处理框60可通过组合静态信息与动态信息来从由所图示的处理框58存储的等待时间值确定指令等待时间值。在一些实施例中,所图示的处理框60可从等待时间值确定由指令块的指令发起的每个操作的最终等待时间(即,指令等待时间值)。
[0064] 指令等待时间值可由所图示的处理框62输出到例如显示器。专用图形用户界面可显示该等待时间值。
[0065] 图4A和图4B分别图示出表示被划分成块的用户代码的控制流图(CFG)140、172的示例性实施例。CFG 140、172可在一个或多个模块中被实现为一组逻辑指令,这组逻辑指令被存储在诸如RAM、ROM、PROM、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如PLA、FPGA、CPLD之类的可配置逻辑中,存储在使用诸如例如ASIC、CMOS或TTL技术的电路技术的固定功能逻辑硬件或其任何组合中。
[0066] CFG 140、172可以是已经被划分成指令块的经编译的代码。CFG 140、172可基于不同的用户代码。此外,CFG 140、172的用户代码可被编程以用于在特定设备上执行,该特定设备例如GPU。
[0067] 在图4A的CFG 140中,示出了指令块142-152。指令块142可与指令块150配对,因为与指令块142的数据请求1相关联的数据可由指令块150的数据使用1利用。指令块146可与指令块152配对,因为与指令块146的数据请求2相关联的数据可由指令块152的数据使用2利用。
[0068] 可给指令块142-152分配优先级。如以上所描述,优先级对应于基于寄存器的探针将被分配给该指令块的概率。控制优先级因此允许对哪些指令块将被分配基于寄存器的探针上的控制,并且可增强等待时间测量。
[0069] 将基于寄存器的探针放置在特定的指令块处可降低生成不准确的等待时间测量的概率。例如,指令块可对应于内核和/或着色器。如果存储器探针的放置显著增加了指令块的定时(例如,将针对指令块的执行的定时增加了若干时间),则内核执行可被干扰,并且可生成不准确的指令热点分析。由此,可放置基于寄存器的探针以使得指令块的等待时间的增加保持在预定量以下。
[0070] 例如,可限制探针的插入,以将指令块的总执行时间增加5%或更少。因此,可给一些指令块分配优先级,以由比基于存储器的探针更快的基于寄存器的探针来进行插桩。另外,GPU可以是并行系统,并且可在若干执行单元上并行地运行相同的代码。为了获得对等待时间的更准确的理解,正确地标识某些存储器请求可提供对更长等待时间的存储器请求的增强的理解。因此,可使用基于寄存器的探针来测量存储器请求,以增强准确性。
[0071] 当分配优先级时,包括数据请求但不包括数据使用的每个指令块可具有最高优先级,以增加基于寄存器的探针被分配给该指令块的概率,从而避免两个不同数据请求之间的交叉。例如,基于存储器的探针可包括数据请求(例如,读取操作)。由此,如果基于存储器的探针被包括在指令块142中,则指令块142将包括两个存储器请求:1)指令块142的经编译的用户代码的数据请求1;以及2)由等待时间测量装置插入的基于存储器的探针存储器请求。如以上所描述,这可导致不准确的结果,并将指令块142的等待时间增加不利的余量。
[0072] 因此,指令块142包括数据请求1而不具有数据使用,并且指令块146包括数据请求2而不具有数据使用。所以,在图4A的示例性实施例中,应当给指令块142、146分配高优先级,诸如“1”。通过分配高优先级,可给指令块142、146分配基于寄存器的探针而不是基于存储器的探针是可能的。
[0073] 在具有存储器请求的指令块之后直接执行的指令块可被分配以相对高的优先级,但低于具有存储器请求的块的优先级。例如,在具有数据请求而不具有该数据请求的数据使用的指令块之后执行的指令块具有对已经到达例如高速缓存存储器或寄存器中的数据进行操作的增加的概率,并且因此可具有相较于必须从硬件驱动器检取数据并随后使用该数据的指令块减少的等待时间。尽管附加数据请求(即,经由存储器探针)可能不干扰指令块,然而其可由于可能减少的等待时间而增强操作以包括基于寄存器的探针并且避免将指令块的总执行时间增加到不利的量。另外,数据请求可能仍然是开放的(即,还未完成),所以可理想地利用基于寄存器的探针来增强准确性。
[0074] 因此,较高的优先级被分配给直接跟随数据请求的指令块。例如,如果指令块(例如,数据请求指令块)具有等于“K”的优先级,则若下一指令块不包含与来自另一指令块的数据请求配对的任何数据使用,该下一指令块可具有“K+1”的优先级。若该下一指令块包含数据使用,则可给该下一指令块分配“K+2”。例如,指令块144、148直接跟随指令块142、146。指令块144、148可不包括数据访问或数据使用。由于指令块144、148邻近于指令块142、146的数据请求1、2,可给指令块144、148分配相对高的优先级但比指令块142、146更低的优先级,以使得指令块144、148可能具有基于寄存器的探针分配。例如,可给指令块144、148分配优先级“2”。因此,由于指令块144、148两者都可具有获得先前所请求的数据的增加的概率并且邻近指令块142、146,所以指令块144、148具有将要利用基于寄存器的探针来进行测量的第二级的优先级。此外,即使这些指令块由于第2优先级而被分配基于存储器的探针,对结果准确性的影响也将小于将基于存储器的探针分配给具有数据请求1、2的块142、146。
[0075] 指令块150可基于由指令块142的数据请求1所请求的数据来执行第一数据使用1。可给指令块150分配第3级优先级,因为根据CFG 140,指令块150是自指令块146起的第二指令块,该指令块146为数据请求。即,指令块150的优先级可以是指令块146的优先级(即,第
1)递增2。此外,由于对数据使用1的数据等待,指令块150可具有较高的等待时间,并且因此,存储器探针可将指令块150的总等待时间增加可接受的百分比(例如,小于5%)。因此,由于分配给指令块150的较低的优先级,基于存储器的探针可能将被分配给指令块150。基于存储器的探针可最小地影响准确性,因为可能存在开放数据请求(例如,数据请求1)。在一些实施例中,可给指令块150分配第4级优先级而不是第3级优先级,因为数据使用1具有较高的等待时间,并且基于存储器的探针不太可能限制偏移跟随指令块152的等待时间结果。
[0076] 指令块152可基于由指令块146的数据请求2所请求的数据来执行数据使用2。在CFG 140中,指令块152可最后执行,并且由此,所有其他数据请求和数据使用可被完成。因此,可给指令块152分配存储器探针,因为由存储器探针导致的等待时间可能不影响等待时间测量,因为在指令块152之后,数据请求1、2与数据使用1、2的所有对都被关闭。因此,可给指令块152分配优先级N,并且指令块152可能具有分配给其的基于存储器的探针。
[0077] 在一些实施例中,CFG 140可包括跟随指令块152的指令块。跟随指令块152的指令块可被分配以优先级N,直到检测到数据请求指令块,此时,可类似于以上来设置优先级。
[0078] 图4B图示出CFG 172。CFG 172包括指令块160-170。指令块162的数据请求1与指令块170的数据使用1配对。即,数据使用1可基于数据请求1来执行,并且因此可能需要等待直到数据使用1已完成。可给指令块160分配优先级N,因为指令块160不具有数据使用或数据请求,并且先于数据块162的数据请求1。指令块162包括数据请求1并且因此被分配以高优先级(诸如,优先级1),以被修改为包括基于寄存器的探针。指令块164不包括数据请求或数据使用,并且在指令块162之后直接执行,并且所以可给指令块164分配优先级2。在指令块164之后,或者指令块166或者指令块168执行。这两个指令块都被分配以优先级3,因为它们都不具有与数据使用配对的数据请求,并且任一指令块可在指令块164之后直接执行。可给指令块170分配优先级N,因为块170最后执行并且不具有数据优先级。
[0079] 图5示出了对用户代码进行插桩的方法100。方法100可在一个或多个模块中被实现为一组逻辑指令,这组逻辑指令被存储在诸如RAM、ROM、PROM、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如PLA、FPGA、CPLD之类的可配置逻辑中,存储在使用诸如例如ASIC、CMOS或TTL技术的电路技术的固定功能逻辑硬件或其任何组合中。在所图示的示例性实施例中,如以上所描述,经编译的用户代码可已经被划分成指令块并被分配以优先级。
[0080] 在所图示的处理框102中,可检取经编译的用户代码的指令块。这些块能以其优先级的降序来检取。所图示的处理框118可判定任何基于寄存器的探针是否可用。如果在将执行经插桩的用户代码的设备上不存在可用的硬件寄存器,则基于寄存器的探针可能是不可用的。例如,如果用于执行经插桩的用户代码的GPU的寄存器中的每个寄存器将用于执行代码和指针的一些方面,则没有可用的寄存器可能剩余。如果没有基于寄存器的探针是可用的,则可由处理框108将基于存储器的探针插入到指令块中。
[0081] 如果所图示的处理框118判定基于寄存器的探针是可用的,则可由所图示的处理框114确定指令块的优先级。优先级可已经如以上所描述地被分配。所图示的处理框116可判定是否插入基于寄存器的探针。例如,所图示的处理框116可考虑指令块的优先级是否高于阈值和/或高于其他剩余指令块的优先级。如果该指令块的优先级高于阈值和/或高于其他剩余指令块的优先级,则所图示的处理框106可对代码进行插桩以包括基于寄存器的探针。如果该指令块的优先级不高于阈值和/或不高于其他剩余指令块的优先级,则所图示的处理框108对指令块进行插桩以包括基于存储器的探针所图示的处理框110随后可判定是否存在要进行插桩的另一指令块。如果存在,则所图示的处理框102检取另一指令块。否则,可由所图示的处理框112将经插桩的代码提供给设备。
[0082] 图6示出了对用户代码进行插桩的方法300。方法300可在一个或多个模块中被实现为一组逻辑指令,这组逻辑指令被存储在诸如RAM、ROM、PROM、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如PLA、FPGA、CPLD之类的可配置逻辑中,存储在使用诸如例如ASIC、CMOS或TTL技术的电路技术的固定功能逻辑硬件或其任何组合中。
[0083] 在示例性实施例中,如以上所描述,经编译的用户代码可已经被划分成指令块并被分配以优先级。所图示的处理框302可根据优先级对指令块进行排序。尽管这些块的相对位置可能在经编译的用户代码中保持不变,但是所图示的处理框302可生成存储指令块与优先级之间的关联的数据结构(例如,数列或查找表),该数据结构基于优先级来排序。例如,可对该数据结构进行排序以使得与较高的优先级相关联的指令块在次序上在前。
[0084] 所图示的处理框304可将基于寄存器的探针插入到具有最高优先级的指令块中。例如,所图示的处理框304可访问数据结构、确定哪些指令块具有最高优先级、并且将基于寄存器的探针插桩到哪些指令块中直到基于寄存器的探针全部被分派或者所有指令块都被插桩。所图示的处理框306可判定是否剩余任何指令块并且未对其进行插桩。如果存在剩余指令块并且未对其进行插桩,则所图示的处理框308可将基于存储器的探针插入到剩余的指令块中。否则,或者在所图示的处理框308执行之后,所图示的处理框310可将经插桩的代码提供给设备(例如,GPU)以用于代码的执行(例如,运行时的代码)。
[0085] 图7图示出在经插桩的代码的执行期间对由探针获取的数据进行后处理的方法350。方法350可在一个或多个模块中被实现为一组逻辑指令,这组逻辑指令被存储在诸如RAM、ROM、PROM、固件、闪存等之类的机器或计算机可读存储介质中,存储在诸如例如PLA、FPGA、CPLD之类的可配置逻辑中,存储在使用诸如例如ASIC、CMOS或TTL技术的电路技术的固定功能逻辑硬件或其任何组合中。后处理可包括为用于内核和/或着色器的每个指令确定等待时间值。例如,代码在GPU上运行之后,将存在用于指令块的两个值:指令块等待时间和指令块执行计数。方法350可为特定指令块内部的每个指令确定等待时间值。方法350可对每个指令块进行操作,进而确定经插桩的代码中的每个指令的等待时间。
[0086] 所图示的处理框352可确定指令块的指令的按规范的等待时间(by specification latency)。该按规范的等待时间可以是完成由该指令发起的操作所需要的时间。例如,假设最小指令等待时间Wmin为4个周期可以是可能的。此类值可在循环准确模式下从GPU性能模拟器获取。为不同的指令执行尺寸假设等待时间可进一步是可能的。例如,由指令的执行所要求的硬件中的向量通道的数量可确定指令的尺寸。指令的尺寸的范围可例如从1到16。对于不同的指令尺寸,可修改最小指令等待时间。例如,具有执行尺寸1、2和4的指令可能彼此等同,并且具有等于Wmin的按规范的指令等待时间。对于具有执行尺寸8的指令,按规范的指令等待时间可以等于2*Wmin。对于具有执行尺寸16的指令,按规范的指令等待时间可以等于4*Wmin。
[0087] 一些指令可具有与执行尺寸无关的设置值。例如,MATH指令(无论其执行尺寸如何)可具有等于8*Wmin的按规范的指令等待时间。以上所描述的此类等待时间可被称为“按规范的等待时间”,因为它们基于预定的值而被估计。所图示的处理框352可为指令块中的每一个指令确定累加的按规范的等待时间(ASL)Wi,对于该特定指令,如下:
[0088] Wi=(指令的按规范的等待时间)*(指令块执行计数)
[0089] 等式1
[0090] 该指令块执行计数(指令块执行了多少次)可在该指令块的执行期间由指令块的探针进行计数。对于同一指令块中的不同指令,ASL Wi可以是不同的,因为按规范的等待时间将取决于特定的指令而变化。
[0091] 所图示的处理框354可确定求和S所有,其为指令的所有累加的按规范的等待时间的和。例如,所图示的处理框354可针对指令框的指令将指令1ASL Wi、指令2ASL Wi、……、指令n ASL Wi加起来。
[0092] 所图示的处理框356可判定求和S所有是否小于所测量的块等待时间。如以上所描述,所测量的块等待时间(其可被称为指令块等待时间或累加的等待时间)可在指令块的执行期间由该指令块的探针测量。例如,探针可确定指令块的执行期间该指令块的等待时间的总时间。所图示的处理框356可因此用于判定针对轻量级指令的ASL Wi是否是大约准确的。例如,如果求和S所有小于所测量的块等待时间ASL Wi,则针对轻量级指令的可被确定为接近准确的。相比之下,如果求和S所有大于所测量的块等待时间,则ASL Wi可能是不准确的。因此,第一和第二参数的不同集合可用于基于ASL Wi是否接近准确来确定重指令的等待时间。
[0093] 如果求和S所有小于所测量的块等待时间,则所图示的处理框360可根据第一参数来确定等待时间。例如,针对每个轻量级指令的最终所估计的等待时间可以是如以上为特定指令所确定的ASL Wi。可确定所有轻量级指令的ASL Wi的和Sl。重指令的ASL Wi可能未被包括在和Sl中。针对指令块的重指令的动态等待时间可通过下式确定:
[0094] 重指令的动态等待时间=所测量的块等待时间–和Sl
[0095] 等式2
[0096] 因此,轻量级指令中的每个可具有设置为以上所计算的ASL Wi值的等待时间,而相比之下,重指令可具有与ASL Wi不同的为以上所确定的重指令所估计的等待时间。
[0097] 如果所图示的处理框356中求和S所有不小于所测量的块等待时间,则等待时间由所图示的处理框358根据第二参数来确定。即,每个指令可具有通过下式确定的等待时间:
[0098] 最终等待时间=ASL Wi*(所测量的块等待时间)/S所有
[0099] 等式3
[0100] 如以上所提到,对于每个指令ASL Wi可以是不同的,从而为指令生成不同的最终等待时间。因此,估计动态指令等待时间可以是可能的。尽管未示出,但等待时间可被输出到概况分析器例如以被进一步分析并显示给用户。例如,可将调试信息显示给用户,并且该调试信息可将各指令等待时间聚合到内核/着色器的对应源行以标识热点。
[0101] 在下列数据结构中提供了等待时间分布的示例:
[0102]
[0103] 表I
[0104] 上表可以是诸如表或查找阵列之类的数据结构。指令1、2、4和5中的每个指令可被认为是轻量级指令,分别具有8、4、32和16的按规范的指令等待时间。指令3可以是重指令,具有按规范的指令等待时间8。由于执行计数为100,指令1、2、3、4和5的ASL Wi可以是800、400、800、3,200和1,600。指令1、2、4和5中可以是轻量级指令,由于它们不要求来自先前指令的数据访问。相比之下,指令3要求来自指令1的数据访问(即,r53)。因此,由于指令3可以有效地具有等待功能,由于指令3必须等待来自指令1的数据(这可能是异步操作)。因此,指令3可以是重指令。
[0105] 如由探针计算的所测量的块等待时间为20,000。可为指令1、2、3、4和5计算总累加的按规范的等待时间Wi。这些指令的总求和值S所有为6,800(即,指令1、2、3、4和5的ASL Wi被加在一起)。该示例中的S所有小于20,000。由于S所有小于20,000,可如以上所描述地利用第一参数来确定最终等待时间。因此,代码的第一、第二、第四和第五行的等待时间可被估计为针对该指令的ASL Wi值,其被如以上所描述地计算。代码的第三行可以是所测量的指令块等待时间(即20,000)减去总求和值6,000,即14,000。因此,行3的等待时间等于14,000。
[0106] 在一些实施例中,指令框可不包括重指令。在此类情况下,指令等待时间可基于根据以上第二参数并根据等式3来计算。完成由指令发起的操作所需要的时间可被称为指令的等待时间。
[0107] 图8示出了半导体封装装置500。装置500可实现方法70、50、100、300、350(分别为图2、图3、图5、图6和图7)的一个或多个方面并且可容易地替换概况分析器34和插桩器32(图1)。所图示的装置500包括一个或多个衬底520(例如,、蓝宝石、砷化镓)和耦合至(多个)衬底540的逻辑520(例如,晶体管阵列和其他集成电路/IC组件)。逻辑540可被至少部分地实现于可配置逻辑或固定功能逻辑硬件中。在一个示例中,逻辑540包括定位(例如,嵌入)在(多个)衬底520内的晶体管通道区域。因此,逻辑540与(多个)520之间的接口可以不是突变结。逻辑540还可被认为包括在(多个)衬底520的初始晶片上生长的外延层。
[0108] 图9图示出等待时间检测增强的计算系统900。所图示的系统900包括芯片上系统(SoC)924,其具有主机处理器(例如,中央处理单元/CPU)902、图形处理器908(例如,图形处理单元/GPU)和输入/输出(IO)模块910。在所图示的示例中,主机处理器902包括与系统存储器906(例如,DRAM)进行通信的集成存储器控制器(IMC)904。
[0109] 主机处理器902可耦合至图形处理器908和IO模块910,该图形处理器908可包括图形流水线916。IO模块910可耦合至网络控制器912(例如,无线和/或有线的)、显示器914(例如,固定的或头戴式液晶显示器/LCD、发光二极管/LED显示器等,以可视地呈现3D场景的视频)和大容量存储918(例如,闪存、光盘、固态驱动器/SSD)。
[0110] 所图示的系统900包括指令热点分析器922,该指令热点分析器922可如本文中所描述地操作并且包括如本文中所描述的特征,并且可实现方法70、50、100、300、350(分别为图2、图3、图5、图6和图7)的一个或多个方面并且可容易地替换概况分析器34和插桩器32(图1)。热点分析器922可被连接到SoC 924。热点分析器922可与图形处理器908通信以如本文中所描述地确定用户代码中的热点。热点分析器922可以在显示器914上可视地呈现用户代码的热点分析(例如,指令等待时间)。
[0111] 在一些实施例中,热点分析器922可以是SoC 924的部分。在一些实施例中,系统存储器906和/或大容量存储918可包括指令920,该指令920在由主机处理器902和/或图形处理器908执行时使得系统900执行方法70、50、100、300、350(图2、图3、图5、图6和图7)的一个或多个方面并且可容易地替换概况分析器34和插桩器32(图1)。在一些实施例中,热点分析器922的部分可由SoC 924实现,而该热点分析器922的其他部分由系统存储器906和/或大容量存储918实现。
[0112] 图10图示出根据实施例的处理器核200。处理器核200可以是用于任何类型的处理器的核,这些处理器诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、或用于执行代码的其他设备。虽然图10中仅图示了一个处理器核200,但处理元件可替代地包括多于一个图10中所图示的处理器核200。处理器核200可以是单线程核,或对于至少一个实施例,处理器核200可以是多线程的,因为其每个核可包括多于一个的硬件线程上下文(或“逻辑处理器”)。
[0113] 图10还图示出耦合至处理器核200的存储器270。存储器270可以是本领域技术人员已知的或以其他方式对本领域技术人员可用的各种各样的存储器(包括存储器层次结构的各个层)中的任何一种。存储器270可包括要由处理器核200执行的一个或多个代码213指令,其中代码213可实现已讨论的方法70、50、100、300、350(图2、图3、图5、图6和图7)的一个或多个方面,并且可容易地替换概况分析器34和插桩器32(图1)。例如,代码213可执行在例如图1中所图示的插桩器32和/或概况分析器34的逻辑和/或方法70、50、100、300、350(图2、图3、图5、图6和图7)。所以,例如,处理器核200可编译用户代码、对用户代码进行插桩和/或确定指令等待时间值。处理器核200遵循由代码213指示的指令的程序序列。每个指令可进入前端部分210,并由一个或多个解码器220处理。解码器220可生成微操作(诸如,按预定义格式的固定宽度的微操作)作为其输出,或者可生成反映原始代码指令的其他指令、微指令或控制信号。所图示的前端部分210还包括寄存器重命名逻辑225和调度逻辑230,这些逻辑一般分配资源并将与转换指令相对应的操作进行排队以供执行。
[0114] 处理器核200被示出为包括具有一组执行单元255-1至255-N的执行逻辑250。一些实施例可包括专用于特定功能或功能集的数个执行单元。其他实施例可包括仅一个执行单元或可执行特定的功能的仅一个执行单元。所图示的执行逻辑250执行由代码指令指定的操作。
[0115] 在完成执行由代码指令指定的操作之后,后端逻辑260对代码213的指令进行引退。在一个实施例中,处理器核200允许乱序执行,但是要求指令的有序引退。引退逻辑265可采取如本领域技术人员已知的各种形式(例如,重排序缓冲器等等)。以此方式,至少根据由解码器生成的输出、由寄存器重命名逻辑225利用的硬件寄存器和表、以及由执行逻辑250修改的任何寄存器(未示出),处理器核200在代码213的执行期间被转换。
[0116] 虽然未在图10中图示,但处理元件可包括与处理器核200一起在芯片上的其他元件。例如,处理元件可包括与处理器核200一起的存储器控制逻辑。处理元件可包括I/O控制逻辑和/或可包括与存储器控制逻辑集成的I/O控制逻辑。处理元件还可包括一个或多个高速缓存。
[0117] 现在参考图11,所示为根据实施例的计算系统1000实施例的框图。图11中所示出的是多处理器系统1000,其包括第一处理元件1070和第二处理元件1080。尽管示出了两个处理元件1070和1080,但是要理解,系统1000的实施例还可包括仅一个此类处理元件。
[0118] 系统1000被图示为点对点互连系统,其中第一处理元件1070和第二处理元件1080经由点对点互连1050耦合。应当理解,图11中所图示的互连中的任何或全部可被实现为多分支总线而不是点对点互连。
[0119] 如图11中所示,处理元件1070和1080中的每个处理元件可以是包括第一和第二处理器核(即,处理器核1074a和1074b以及处理器核1084a和1084b)的多核处理器。此类核1074a、1074b、1084a、1084b可被配置成用于以与上面结合图10所讨论的方式类似的方式来执行指令代码。
[0120] 每个处理元件1070、1080可包括至少一个共享高速缓存1896a、1896b。共享高速缓存1896a、1896b可存储分别由处理器的一个或多个组件(诸如核1074a、1074b以及1084a、1084b)利用的数据(例如,指令)。例如,共享高速缓存1896a、1896b可本地地对存储器1032、
1034中所存储的数据进行高速缓存以供处理器的各组件的更快速访问。在一个或多个实施例中,共享高速缓存1896a、1896b可包括一个或多个中级高速缓存(诸如,第2级(L2)、第3级(L3)、第4级(L4)、或其他级的高速缓存)、末级高速缓存(LLC)和/或其组合。
[0121] 尽管被示出为具有仅两个处理元件1070、1080,但要理解,实施例的范围并不限于此。在其他实施例中,在给定的处理器中可存在一个或多个附加处理元件。替换地,处理元件1070、1080中的一者或多者可以是除处理器之外的元件,诸如加速器或现场可编程门阵列。例如,(多个)附加处理元件可包括与第一处理器1070相同的(多个)附加处理器、与第一处理器1070异构或不对称的(多个)附加处理器、加速器(诸如例如,图形加速器数字信号处理(DSP)单元)、现场可编程门阵列、或任何其他处理元件。在包括架构、微架构、热、功耗特性等等一系列品质度量方面,处理元件1070、1080之间可存在各种差异。这些差异自身可有效地表现为处理元件1070、1080之中的不对称性和异构性。对于至少一个实施例,各处理元件1070、1080可驻留在同一管芯封装中。
[0122] 第一处理元件1070可进一步包括存储器控制器逻辑(MC)1072以及点对点(P-P)接口1076和1078。类似地,第二处理元件1080可包括MC1082以及P-P接口1086和1088。如图11中所示,MC 1072和1082将处理器耦合至相应的存储器,即存储器1032和存储器1034,这些存储器可以是本地附连到相应处理器的主存储器的部分。尽管MC 1072和1082被图示为被集成到处理元件1070、1080中,但对于替代实施例,MC逻辑可以是处理元件1070、1080外部的分立逻辑,而不是被集成于其中。
[0123] 第一处理元件1070和第二处理元件1080可分别经由P-P互连1076、1086耦合至I/O子系统1090。如图11中所示,I/O子系统1090包括P-P接口1094和1098。此外,I/O子系统1090包括将I/O子系统1090与高性能图形引擎1038耦合的接口1092。在一个实施例中,可使用总线1049将图形引擎1038耦合至I/O子系统1090。替代地,点对点互连可耦合这些组件。
[0124] 进而,I/O子系统1090可经由接口1096耦合至第一总线1016。在一个实施例中,第一总线1016可以是外围组件互连(PCI)总线,或诸如PCI高速总线或另一第三代I/O互连总线之类的总线,但是实施例的范围不限于此。
[0125] 如图11中所示,各种I/O设备1014(例如,扬声器、相机、传感器)可与总线桥1018一起耦合至第一总线1016,该总线桥1018可将第一总线1016耦合至第二总线1020。在一个实施例中,第二总线1020可以是低引脚数(LPC)总线。在一个实施例中,各种设备可被耦合至第二总线1020,这些设备包括例如键盘/鼠标1012、(多个)通信设备1026、以及诸如可包括代码1030的盘驱动器或其他大容量存储设备之类的数据存储单元1019。可类似于代码213(图10)的所图示的代码1030可实现方法70、50、100、300、350(图2、图3、图5、图6和图7)的一个或多个方面并且可容易地替换概况分析器34和插桩器32(图1),可进一步由处理元件1070和1080中的一个或多个来实现。进一步地,音频I/O 1024可被耦合至第二总线1020,并且电池端口1010可向计算系统1000提供功率。
[0126] 图12示出了等待时间测量装置132(134-136),该装置132可实现方法70、50、100、300、350(分别为图2、图3、图5、图6和图7)的一个或多个方面并且可容易地替换概况分析器
34和插桩器32(图1)。等待时间测量装置132可包括逻辑指令、可配置逻辑、固定功能逻辑硬件等或其任何组合。插桩器136和概况分析器134可标识用户代码中的块、对这些块排定优先级并且基于优先级将探针插入到这些块中。插桩器136和概况分析器134可进一步基于用户代码的执行期间探针的等待时间测量来确定块中的指令的等待时间值,并且此外,给用户提供这些等待时间值。
[0127] 图13图示出根据实施例的核700。核700可以用于任何类型的处理器的核,该处理器诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、GPU或用于执行代码的其他设备,该代码例如以上所描述的经插桩的代码。尽管图13中仅图示了一个核700,但处理元件可替代地包括多于一个的图13中所图示的核700。核700还可以是如以上所描述的执行经插桩的代码的GPU处理器。
[0128] 图13还图示出耦合至核700的存储器770。存储器770可以是本领域技术人员已知的或以其他方式对本领域技术人员可用的各种各样的存储器(包括存储器层次结构的各个层)中的任何一种。存储器770可包括要由核700执行的一个或多个代码713指令,其中代码713可实现已讨论的方法70、50、100、300、350(图2、图3、图5、图6和图7)的一个或多个方面,并且可容易地替换概况分析器34和插桩器32(图1)。例如,代码713可执行在例如图1中所图示的插桩器32和/或概况分析器34的逻辑和/或方法70、50、100、300、350(图2、图3、图5、图6和图7)。核700遵循由代码713指示的指令的程序序列。
[0129] 核700被示出为包括执行单元755-1至755-N。一些实施例可包括数个执行单元755-1至755-N,其可能是基本处理器核。其他实施例可包括仅一个执行单元或可执行特定的功能的仅一个执行单元。所图示的执行单元755-1至755-N执行由代码指令713所指定的操作。
[0130] 执行单元755-1至755-N可以是具有指令取出的有序核,但可进一步执行静态调度的指令。尽管图示出了多个执行单元755-1至755-N,但可仅提供一个执行单元。
[0131] 虽然未在图13中图示,但处理元件可包括与核700一起在芯片上的其他元件。例如,处理元件可包括与核700一起的存储器控制逻辑。处理元件可包括I/O控制逻辑和/或可包括与存储器控制逻辑集成的I/O控制逻辑。处理元件还可包括一个或多个高速缓存。
[0132] 附加注解与示例:
[0133] 示例1可包括一种增强的计算系统,该系统包括:显示器;图形处理器;主机处理器;以及存储器,包括一组指令,这些指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统:接收经编译的代码,标识该经编译的代码中多个块,从该经编译的代码生成经插桩的代码,其中,为了生成经插桩的代码,这些块将被修改成包括探针以测量经插桩的代码在图形处理器上执行期间这些块的等待时间,将该经插桩的代码提供给图形处理器,从由该经插桩的代码生成的概况分析数据确定指令等待时间,以及在显示器上可视地呈现该指令等待时间。
[0134] 示例2可包括如示例1所述的系统,其中,指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统基于块是否具有取决于开放数据访问的数据使用来将相应的优先级分配给这些块中的每一个块,并且其中,为了生成经插桩的代码,指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统基于分配给该块的相应的优先级来将这些块中的每一个块修改为包括探针中的基于寄存器的探针或探针中的基于存储器的探针。
[0135] 示例3可包括如示例2所述的系统,其中,为了修改块中的每一个块,指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统:当分配给块的相应的优先级高于或等于优先级中的一个或多个其他优先级时,将基于寄存器的探针包括在该块中,以及当块的相应的优先级低于一个或多个其他优先级时,将基于存储器的探针包括在该块中。
[0136] 示例4可包括如示例1所述的系统,其中,为了确定指令等待时间,指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统利用探针确定概况分析数据包括经插桩的代码由图形处理器执行期间块中的每一个块的等待时间。
[0137] 示例5可包括如示例1所述的系统,其中,指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统利用探针中的一个探针确定概况分析数据包括经插桩的代码由图形处理器执行期间块中的一个块的累加的等待时间,并且其中,为了确定指令等待时间,指令在由图形处理器或主机处理器中的一者或多者执行时使得计算系统:为一个块的多个指令中的每一个指令确定静态等待时间值,以及为该一个块的指令中的重指令确定动态等待时间值,其中当静态等待时间值的总和小于累加的等待时间时,动态等待时间值将基于累加的等待时间以及除重指令的静态等待时间值之外的这些静态等待时间值中的每一个来确定,并且当静态等待时间值的总和大于或等于累加的等待时间时,动态等待时间值将基于累加的等待时间和这些静态等待时间值中的每一个来确定。
[0138] 示例6可包括如示例1-5中任一项所述的系统,其中,经编译的代码将是二进制代码或二进制代码的中间表示。
[0139] 示例7可包括一种等待时间测量装置,该装置包括:一个或多个衬底;以及逻辑,所述逻辑被耦合至该一个或多个衬底并且至少部分地实现在可配置逻辑或固定功能逻辑硬件中的一者或多者中,该逻辑用于:接收经编译的代码;标识该经编译的代码中的多个块;以及从该经编译的代码生成经插桩的代码,其中,为了生成经插桩的代码,该逻辑用于将这些块修改为包括探针,以测量经插桩的代码在图形处理器上执行期间这些块的等待时间。
[0140] 示例8可包括如示例7所述的装置,其中,逻辑用于基于块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给这些块中的每一个块,其中,为了生成经插桩的代码,该逻辑用于基于分配给块的相应的优先级而将这些块中的每一个块修改为包括探针中的基于寄存器的探针或探针中的基于存储器的探针。
[0141] 示例9可包括如示例8所述的装置,其中,为了修改块中的每一个块,逻辑用于:当分配给块的相应的优先级高于或等于优先级中的一个或多个其他优先级时,将基于寄存器的探针包括在该块中;以及当块的相应的优先级低于一个或多个其他优先级时,将基于存储器的探针包括在该块中。
[0142] 示例10可包括如示例7所述的装置,其中,逻辑用于利用探针来确定经插桩的代码由图形处理器执行期间块中的每一个块的等待时间。
[0143] 示例11可包括如示例7所述的装置,其中,逻辑用于:为块中的一个块的多个指令中的每一个指令确定静态等待时间值;利用探针中的一个探针来确定经插桩的代码由图形处理器执行期间该一个块的累加的等待时间;以及为该一个块的指令中的重指令确定动态等待时间值,其中,当静态等待时间值的总和小于累加的等待时间时,该逻辑用于基于累加的等待时间以及除重指令的静态等待时间值之外的这些静态等待时间值中的每一个来确定动态等待时间值,并且其中,当静态等待时间值的总和大于或等于累加的等待时间时,该逻辑用于基于累加的等待时间和这些静态等待时间值中的每一个来确定动态等待时间值。
[0144] 示例12可包括如示例7-11中任一项所述的装置,其中,经编译的代码将是二进制代码或二进制代码的中间表示。
[0145] 示例13可包括如示例7-11中任一项所述的装置,其中,耦合至一个或多个衬底的逻辑包括定位在该一个或多个衬底内的晶体管通道区域。
[0146] 示例14可包括一种标识代码热点的方法,该方法包括:接收经编译的代码;标识该经编译的代码中的多个块;以及通过将这些块修改为包括用于测量该经插桩的代码在图形处理器上执行期间这些块的等待时间的探针以来从经编译的代码生成经插桩的代码。
[0147] 示例15可包括如示例14所述的方法,进一步包括:基于块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给这些块中的每一个块,其中,生成经插桩的代码的步骤包括基于分配给块的相应的优先级而将这些块中的每一个块修改为包括探针中的基于寄存器的探针或探针中的基于存储器的探针。
[0148] 示例16可包括如示例15所述的方法,其中,修改块中的每一个块的步骤包括:当分配给块的相应的优先级高于或等于优先级中的一个或多个其他优先级时,将该块修改为包括基于寄存器的探针;以及当块的相应的优先级低于一个或多个其他优先级时,将该块修改为包括基于存储器的探针。
[0149] 示例17可包括如示例14所述的方法,进一步包括利用探针来确定经插桩的代码由图形处理器执行期间块中的每一个块的等待时间。
[0150] 示例18可包括如示例14所述的方法,进一步包括:为块中的一个块的多个指令中的每一个指令确定静态等待时间值;利用探针中的一个探针来确定经插桩的代码由图形处理器执行期间该一个块的累加的等待时间;以及为该一个块的指令中的重指令确定动态等待时间值,其中,当静态等待时间值的总和小于累加的等待时间时,动态等待时间值是基于累加的等待时间以及除重指令的静态等待时间值之外的这些静态等待时间值中的每一个来确定的,并且其中,当静态等待时间值的总和大于或等于累加的等待时间时,动态等待时间值是基于累加的等待时间和这些静态等待时间值中的每一个来确定的。
[0151] 示例19可包括如示例14-18中任一项所述的方法,其中,经编译的代码用于是二进制代码或二进制代码的中间表示。
[0152] 示例20可包括至少一种非暂态计算机可读存储介质,包括一组指令,这些指令在被执行时使得计算系统:接收经编译的代码;标识该经编译的代码中的多个块;以及从该经编译的代码生成经插桩的代码,其中,为了生成经编译的代码,这些块将被修改为包括探针,以测量经插桩的代码在图形处理器上执行期间的这些块的等待时间。
[0153] 示例21可包括如示例20所述的至少一种非暂态计算机可读存储介质,其中,这些指令在被执行时使得计算系统基于块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给这些块中的每一个块,并且其中,为了生成经插桩的代码,该组指令在被执行时使得计算系统基于分配给块的相应的优先级而将这些块中的每一个块修改为包括探针中的基于寄存器的探针或探针中的基于存储器的探针。
[0154] 示例22可包括如示例21所述的至少一种非暂态计算机可读存储介质,其中,为了修改经编译的代码的块中的每一个块,该组指令在被执行时使得计算系统:当分配给块的相应的优先级高于或等于优先级中的一个或多个其他优先级时,将该块修改为包括基于寄存器的探针;以及当块的相应的优先级低于一个或多个其他优先级时,将该块修改为包括基于存储器的探针。
[0155] 示例23可包括如示例20所述的至少一种非暂态计算机可读存储介质,其中,这些指令在被执行时使得计算系统利用探针来确定经插桩的代码由图形处理器执行期间块中的每一个块的等待时间。
[0156] 示例24可包括如示例20所述的至少一种非暂态计算机可读存储介质,其中,这些指令在被执行时使得计算系统:为块中的一个块的多个指令中的每一个指令确定静态等待时间值;利用探针中的一个探针来确定经插桩的代码由图形处理器执行期间该一个块的累加的等待时间;以及为该一个块的指令中的重指令确定动态等待时间值,其中,当静态等待时间值的总和小于累加的等待时间时,动态等待时间值将基于累加的等待时间以及除重指令的静态等待时间值之外的这些静态等待时间值中的每一个来确定,并且其中,当静态等待时间值的总和大于或等于累加的等待时间时,动态等待时间值将基于累加的等待时间和这些静态等待时间值中的每一个来确定。
[0157] 示例25可包括如示例20-24中任一项所述的至少一种非暂态计算机可读存储介质,其中,经编译的代码用于是二进制代码或二进制代码的中间表示。
[0158] 示例26可包括一种等待时间测量设备,该设备包括:关于接收经编译的代码的装置;用于标识该经编译的代码中的多个块的装置;以及用于通过将这些块修改为包括用于测量该经插桩的代码在图形处理器上执行期间这些块的等待时间的探针来从经编译的代码生成经插桩的代码的装置。
[0159] 示例27可包括如示例26所述的设备,进一步包括:用于基于块是否具有取决于开放数据访问的数据使用而将相应的优先级分配给这些块中的每一个块的装置,其中,用于生成经插桩的代码的装置包括用于基于分配给块的相应的优先级而将这些块中的每一个块修改为包括探针中的基于寄存器的探针或探针中的基于存储器的探针的装置。
[0160] 示例28可包括如示例27所述的设备,其中,用于修改块中的每一个块的装置包括:用于在分配给块的相应的优先级高于或等于优先级中的一个或多个其他优先级时将该块修改为包括基于寄存器的探针的装置;以及用于在块的相应的优先级低于一个或多个其他优先级时将该块修改为包括基于存储器的探针的装置。
[0161] 示例29可包括如示例26所述的设备,进一步包括用于确定经插桩的代码由图形处理器执行期间块中的每一个块的等待时间的装置。
[0162] 示例30可包括如示例26所述的设备,进一步包括:用于为块中的一个块的多个指令中的每一个指令确定静态等待时间值的装置;用于利用探针中的一个探针来确定经插桩的代码由图形处理器执行期间该一个块的累加的等待时间的装置;以及用于为该一个块的指令中的重指令确定动态等待时间值的装置,其中,当静态等待时间值的总和小于累加的等待时间时,动态等待时间值是基于累加的等待时间以及除重指令的静态等待时间值之外的这些静态等待时间值中的每一个来确定的,并且其中,当静态等待时间值的总和大于或等于累加的等待时间时,动态等待时间值是基于累加的等待时间和这些静态等待时间值中的每一个来确定的。
[0163] 示例31可包括如示例26-30中任一项所述的设备,其中,经编译的代码用于是二进制代码或二进制代码的中间表示。
[0164] 实施例适用于与所有类型的半导体集成电路(“IC”)芯片一起使用。这些IC芯片的示例包括但不限于处理器、控制器、芯片组组件、可编程逻辑阵列(PLA)、存储器芯片、网络芯片、芯片上系统(SoC)、SSD/NAND控制器ASIC等等。另外,在一些附图中,信号导线是用线表示的。一些线可以是不同的以指示更具构成性的信号路径,可具有数字标号以指示构成性信号路径的数目,和/或可在一端或多端具有箭头以指示主要信息流向。然而,这不应以限制性方式来解释。相反,此类增加的细节可与一个或多个示例性实施例结合使用以促进更容易地理解电路。任何所表示的信号线,不管是否具有附加信息,实际上都可包括一个或多个信号,这一个或多个信号可在多个方向上行进,并且可用任何适合类型的信号方案来实现,例如利用差分对来实现的数字或模拟线路、光纤线路,和/或单端线路。
[0165] 示例尺寸/模型/值/范围可能已经被给出,但是实施例不限于此。随着制造技术(例如,光刻法)随时间变得成熟,预料到能制造出更小尺寸的设备。另外,为了说明和讨论的简单,到IC芯片和其他组件的公知的功率/接地连接可在附图内示出也可不示出,并且这样做也是为了不使所述实施例的某些方面模糊。进一步地,能以框图形式示出布置以避免使实施例模糊,还鉴于相对于此类框图布置的实现的细节高度依赖于将在其内实现实施例的计算系统这一事实,即,此类细节应当很好地在本领域技术人员的见识范围之内。在阐述了具体细节(例如,电路)以描述示例实施例的情况下,对本领域技术人员应当显而易见的是,实施例可以在没有这些具体细节的情况下或者利用这些具体细节的变型来实施。说明书因此被视为是说明性的而不是限制性的。
[0166] 术语“耦合的”在本文中被用于表示所讨论的部件之间的任何类型的直接或间接关系,且可应用于电气的、机械的、流体的、光学的、电磁的、机电的或其他连接。另外,术语“第一”、“第二”等在本文中仅用于便于讨论,不带有特定时间的或按时间顺序的意义,除非另有陈述。
[0167] 如在本申请和权利要求书中所使用的,由术语“一个或多个”联接的项列表可意指着所列项的任何组合。例如,短语“A、B或C中的一个或多个”可意指A;B;C;A和B;A和C;B和C;或A、B和C。
[0168] 本领域技术人员从前面的描述将领会,实施例的广泛技术能以各种形式来实现。因此,尽管已结合其特定示例描述了实施例,但实施例的真实范围不应当限于此,因为在研究附图、说明书和所附权利要求书之后,其他修改对于本领域技术人员将变得显而易见。
高效检索全球专利

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

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

申请试用

分析报告

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

申请试用

QQ群二维码
意见反馈