CN112445688A - 生成图形处理器代码的不同踪迹 - Google Patents
生成图形处理器代码的不同踪迹 Download PDFInfo
- Publication number
- CN112445688A CN112445688A CN202010506104.5A CN202010506104A CN112445688A CN 112445688 A CN112445688 A CN 112445688A CN 202010506104 A CN202010506104 A CN 202010506104A CN 112445688 A CN112445688 A CN 112445688A
- Authority
- CN
- China
- Prior art keywords
- trace
- binary code
- processor
- execution
- instrumented binary
- 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.)
- Pending
Links
Images
Classifications
-
- 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/42—Syntactic analysis
- G06F8/427—Parsing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/3604—Software analysis for verifying properties of programs
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/36—Preventing errors by testing or debugging software
- G06F11/362—Software debugging
- G06F11/3636—Software debugging by tracing the execution of the program
-
- 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
-
- 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/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T1/00—General purpose image data processing
- G06T1/20—Processor architectures; Processor configuration, e.g. pipelining
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
系统、方法、计算机程序产品和设备用于:确定在图形处理器上执行的经插桩的二进制代码的多个块中的每个块所生成的踪迹记录的计数,每个踪迹记录包括踪迹记录类型,踪迹记录类型具有多个踪迹记录类型;确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数;以及基于确定的每个块生成的踪迹记录的计数和每个块的执行计数来确定要在存储器中分配的多个踪迹缓冲区中每个踪迹缓冲区的相应大小,每个踪迹缓冲区存储多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
Description
相关申请的交叉引用
本申请涉及2019年3月8日提交的题为“用于追踪图形处理器代码的二进制插桩(BINARY INSTRUMENTATION TO TRACE GRAPHICS PROCESSOR CODE)”的美国专利申请第16/296,357号。前述专利申请通过引用整体并入本文中。
背景技术
由于当在计算系统上执行代码时可以生成剖析数据,动态剖析成为分析和调整计算机代码的有用手段。一些此类解决方案需要捕获踪迹,诸如控制流踪迹和/或存储器访问踪迹。随着诸如图形处理器之类的现代系统实现可并行执行代码的多个处理元件,捕获此类踪迹数据的复杂度增加了。
附图说明
图1示出系统的实施例。
图2示出第一逻辑流程的示例。
图3示出用于生成图形处理器代码的不同踪迹的预处理阶段的实施例。
图4A-4B示出处理阶段期间用于收集数据的动态踪迹缓冲区的实施例。
图5示出用于组合图形处理器代码的不同踪迹的后处理阶段的示例。
图6示出第二逻辑流程的示例。
图7示出第三逻辑流程的示例。
图8示出第四逻辑流程的示例。
图9示出存储介质的实施例。
图10示出系统的实施例。
具体实施方式
本文公开的实施例提供了经由二进制代码的插桩,从在一个或多个图形处理器(GPU)的多个执行单元上执行的二进制代码动态地生成不同类型和/或大小的多个踪迹的技术。通常,本文公开的实施例可以为每个类型的踪迹在共享存储器中分配踪迹缓冲区。在GPU上执行经插桩的二进制代码期间,可以在相应的缓冲区中收集和存储踪迹数据。一旦经插桩的二进制代码的执行完成,本文公开的实施例就可以组合存储在每个缓冲区中的数据以生成最终踪迹。
更一般地,本文公开的实施例可包括三个处理阶段,即预处理阶段、处理阶段和后处理阶段。在预处理阶段,本文公开的实施例可以分析二进制代码以确定二进制代码的一个或多个基本块,以及执行每个基本块的频率。基于该分析,本文公开的实施例可以针对每个踪迹类型确定共享存储器中相对应的踪迹缓冲区的大小。在处理阶段,在共享存储器中分配不同的踪迹缓冲区,并且由GPU执行经插桩的二进制代码。这样做并行地生成踪迹数据,可以将其存储在相对应的踪迹缓冲区中。在后处理阶段,基于经插桩的二进制代码的执行顺序来解析、分析来自每个踪迹缓冲区的踪迹数据,并将其组合成最终踪迹。
有利地,即使GPU硬件表现出高度不确定性的行为,实施例提供了用于组合来自同一二进制代码的一次或多次执行的不同类型的多个踪迹的有效技术,因为GPU的数百个执行单元和/或硬件线程可以并行执行代码。此外,本文公开的实施例可被应用于任何应用的任何类型的踪迹生成,无论该应用实现的应用编程接口(API)的数量和/或类型。更进一步地,本文公开的实施例不需要中央处理单元(CPU)与GPU之间的同步,因为缓冲区大小是预定义的并且不会溢出。因此,GPU存储最小量信息,并且不需要停止执行二进制代码。此外,通过并行生成多个踪迹,本文公开的实施例不需要二进制代码的多个执行实例,并且不需要与组合由多个执行实例生成的踪迹以生成最终踪迹相关联的复杂分析。
根据对本文中使用的标记法和命名法的一般引用,可在计算机或计算机网络上执行的程序过程方面来呈现以下具体实施方式的一个或多个部分。这些过程描述和表示是领域内技术人员使用以便最有效地将他们的工作本质传达给其他本领域技术人员。过程在此或一般被构想为导致所期望结果的自洽的操作序列。这些操作是要求对物理量进行物理操纵的那些操作。通常但非必要地,这些量采取能够被存储、被传输、被组合、被比较并以其他方式被操纵的电、磁或光信号的形式。主要出于惯用法的原因,将这些信号称为位、值、元素、符号、字符、项、数字等等有时被证明是方便的。然而,应当注意,这些项和/或类似项旨在与适当的物理量相关联,并且仅仅是应用于那些量的方便的标记。
此外,通常按术语将这些操纵称为通常与由人类操作者执行的脑力操作相关联的相加或比较。然而,在形成一个或多个实施例的部分的本文中所描述的操作中的任何操作中,在大多数情况下,没有人类操作者的此类能力是必要的或期望的。相反,这些操作是机器操作。用于执行各实施例的操作的有用的机器包括通用数字计算机和/或包括出于所要求的目的而专门构造的装置,该通用数字计算机由存储于其中的、根据本文中的教导而被写入的计算机程序选择性地激活或配置。各实施例也涉及用于执行这些操作的装置或系统。这些装置可出于所要求的目的而专门被构造,或者可包含通用计算机。根据给定的描述,各种这些机器的所要求结构将是显而易见的。
现在将参考附图,自始至终相同的附图标记用于指相同的要素。在以下描述中,出于解释的目的,阐述了众多具体细节以便提供对该描述的透彻理解。然而,可能显而易见的是,可以在不具有这些具体细节的情况下实施新颖的实施例。在其他实例中,以框图形式示出了公知的结构和设备以便于对这些结构和设备的描述。本发明旨在涵盖权利要求范围之内的所有修改、等效方案和替换方案。
图1示出系统100的实施例。如图所示,系统100包括至少一个计算系统101。计算系统101可以是任何类型的计算系统,诸如服务器、工作站、膝上型设备、移动设备或虚拟化计算系统。例如,计算系统101是嵌入式系统,诸如深度学习加速器卡、具有深度学习加速的处理器、神经计算棒等。在一些示例中,计算系统101包括片上系统(SoC),并且在其他实施例中,计算系统101包括具有两个或更多个分立组件的印刷电路板或芯片封装。
如图所示,系统101包括一个或多个处理器102、一个或多个图形处理器103以及在CPU 102与图形处理器103之间共享的存储器104。CPU 102和图形处理器103可各自包括多个处理器核,其中每个核可包括多个处理线程。处理器102可包括通用处理器、专用处理器、中央处理器单元、控制器、微控制器等。图形处理器103可包括并行处理器单元(PPU)、图形处理器单元(GPU)等。由于在CPU 102与图形处理器103之间共享存储器104,因此可以将存储器104的至少一部分分配给CPU 102,并且可以将存储器104的至少不同的部分分配给图形处理器103。
如图所示,存储器104包括插桩引擎106、经插桩的二进制代码107和多个踪迹缓冲区108。尽管被描绘成具体化为软件,但是插桩引擎106可包括硬件、软件和/或硬件和软件的组合。例如,硬件实现可包括诸如可编程逻辑阵列(PLA)、现场可编程门阵列(FPGA)、复杂可编程逻辑器件(CPLD)之类的可配置逻辑,或使用诸如例如专用集成电路(ASIC)、互补金属氧化物半导体(CMOS)或晶体管-晶体管逻辑(TTL)技术之类的电路技术的固定功能逻辑硬件,或者其任何组合。
经插桩的二进制代码107代表经插桩以生成可以存储在踪迹缓冲区108中的踪迹数据的任何类型的汇编代码。例如,经插桩的二进制代码107可包括GEN ISA指令、SIMD8指令、SIMD16指令等。在一些实施例中,经插桩的二进制代码107包括浮点和/或整数数据类型。经插桩的二进制代码107可以由图形处理器103执行。在一些实施例中,在经插桩的二进制代码107由图形处理器103执行时,可以被称为内核和/或着色器代码。图形处理器103包括多个执行单元(例如,对称的多线程处理器)。因此,可以由图形处理器103的一个或多个执行单元并行地执行经插桩的二进制代码107的至少一部分。由此,管理由经插桩的二进制代码107生成的踪迹数据是复杂的过程。
插桩引擎106可以在处理器102上执行,来对经插桩的二进制代码107的底层代码进行插桩以生成经插桩的二进制代码107。此外,在由图形处理器103执行经插桩的二进制代码107时,插桩引擎106可以分析所生成的经插桩的二进制代码107、分配和初始化共享存储器104中的一个或多个踪迹缓冲区108,并组合存储在踪迹缓冲区108中的数据(例如,以创建最终踪迹)。
图2示出逻辑流程200的实施例。逻辑流程200可代表由本文所述的一个或多个实施例执行的操作中的一些或全部。例如,逻辑流程200可以反映由系统100的各组件实现的一个或多个处理阶段。实施例不限于此上下文。
在框210处,插桩引擎106可以执行预处理阶段,该预处理阶段用于分析经插桩的二进制代码107以确定经插桩的二进制代码107所需的踪迹缓冲区108的数量,以及所确定的每个踪迹缓冲区108的相应大小。例如,通过分析经插桩的二进制代码107,插桩引擎106可以确定生成存储器访问踪迹的第一踪迹缓冲区108-1、指令流踪迹的第二踪迹缓冲区108-2、单指令多数据(SIMD)活动通道的踪迹的第三踪迹缓冲区108-3,以及寄存器值踪迹的第四踪迹缓冲区108-4。更一般地,插桩引擎106可以确定任意数量的踪迹缓冲区108,其中每个踪迹缓冲区108具有由插桩引擎106确定的相应大小,并且每个踪迹缓冲区108对应于由经插桩的二进制代码107生成的特定踪迹类型。
在预处理阶段期间,插桩引擎106一般可以认为,经插桩的二进制代码107包括多个基本块1-M,其中M是正整数。基本块(也称为块)可包括一行或多行具有定义的入口点和定义的出口点的汇编代码。因此,插桩引擎106可以分析经插桩的二进制代码107以标识其中的多个基本块。此外,插桩引擎106可以考虑多个不同踪迹类型1-N中的每个踪迹类型,其中N是正整数。因此,在预处理阶段分析期间,插桩引擎106确定所有踪迹类型1-N的每个所标识的基本块1-M的单次执行所需的记录数。换句话说,插桩引擎106确定X(type,bbl),其中“X”对应于针对每个基本块“bbl”的执行、每个踪迹“类型”的踪迹数据记录的数量,其中1≤bbl≤M。例如,插桩引擎106可以确定第一基本块生成5个第一踪迹类型的踪迹数据记录,而第二基本块生成20个第一踪迹类型的踪迹数据记录。此外,插桩引擎106可以确定经插桩的二进制代码107中每个基本块的动态执行实例的数量。换句话说,插桩引擎106可以确定BBLCount(bbl),其中1≤bbl≤M。例如,通过执行经插桩的二进制代码107,插桩引擎106可以确定第一基本块具有10个动态执行实例,而第二基本块具有20个动态执行实例。这样做可以允许插桩引擎106确定每个类型所需的踪迹数据记录数,其可被称为Records(type),其中1≤type(类型)≤N。例如,插桩引擎106可以基于以下等式1来确定Records(type):
因此,通过应用等式1,插桩引擎106可以基于由每个基本块生成的记录的静态数量X(type,bbl)乘以经插桩的二进制代码107中的每个基本块的执行实例的数量BBLCount(bbl)、来计算每个记录类型的相对应的记录数。因此,继续前面的示例,插桩引擎106可以确定需要第一踪迹类型的450个(例如,10x5+20x20)踪迹数据记录来追踪经插桩的二进制代码107。
每个记录类型可以具有已知的大小(例如,以字节为单位),其可以称为RecordSize(type)。因此,插桩引擎106可以例如通过将每个记录类型的已知大小乘以根据等式1确定的每个类型生成的记录数,来确定要在共享存储器104中分配的每个踪迹缓冲区108的大小。换句话说,对于给定的缓冲区108,可以基于以下来计算缓冲区的大小:RecordSize(type)×Records(type),其中1≤type≤N。因此,继续前面的示例,如果第一踪迹类型是10字节(例如,RecordSize=10字节),则第一踪迹类型的缓冲区108-1的大小可以是4,500字节(例如,450个记录乘以10字节)。然后插桩引擎106可以在存储器104中分配每个缓冲区108。
此外,在一个实施例中,通过执行经插桩的二进制代码107的实例,插桩引擎106可以确定经插桩的二进制代码107的执行流程。如下面更详细地描述的,在框230处,插桩引擎106可以使用执行流程以生成最终踪迹109。例如,通过(例如,基于每个基本块的标识符)标识基本块之间的流程,插桩引擎106可以重组每个踪迹缓冲区108中的数据以生成最终踪迹109。
逻辑流程200的框220可包括处理阶段。在处理阶段期间,将确定的缓冲区108分配到存储器104中,经插桩的二进制代码107由图形处理器103的多个执行单元执行,并将每个类型的踪迹数据记录存储在相对应的踪迹缓冲区108中。例如,存储器踪迹记录可以被存储在存储器踪迹缓冲区108-1中,控制流踪迹记录可以被存储在控制流踪迹缓冲区108-2中,等等。在2019年3月8日提交的美国专利申请16/296,357中描述了与踪迹数据的生成和存储有关的示例,该专利申请通过引用整体并入本文。更一般地,在由图形处理器103的每个处理器核的硬件线程执行经插桩的二进制代码107时,(针对给定的硬件线程)按顺序将记录存储在踪迹缓冲区108中。这样做允许插桩引擎106基于踪迹缓冲区108中记录的顺序反映的有序执行流程来生成最终踪迹109。
框230可包括后处理阶段。在后处理阶段期间,插桩引擎106可以基于在执行经插桩的二进制代码107期间存储在缓冲区108中的踪迹数据来生成最终踪迹109。如所述,插桩引擎106可以通过根据经插桩的二进制代码107的执行流程,解析每个踪迹缓冲区108中的数据、分析所解析的数据,并组合每个踪迹缓冲区108中的数据来生成最终踪迹109。如所述,在框210处的预处理阶段期间和/或框220的处理阶段期间,可以基于经插桩的二进制代码107的执行实例来确定执行的顺序。
最终踪迹109可用于任何目的。例如,最终踪迹109可以作为输入被提供给架构和性能模拟器,或用于在系统101中原生地重放执行。作为另一示例,指令(或控制流)踪迹可用于嵌套式二进制循环检测和行程计数计算,以提高编译器质量。作为又一个示例,性能分析器可以使用存储器(或地址)踪迹来检测存储器模式并提供有关存储器访问更改的建议,以便提高性能。
图3是描绘了由插桩引擎106执行的至少一部分预处理阶段的示例的示意图300。如所述,插桩引擎106可以分析经插桩的二进制代码107以标识经插桩的二进制代码107的一个或多个基本块(bbl)1-M。作为分析的一部分,插桩引擎106针对每个基本块1-M确定在相对应基本块的单个执行实例中需要被保存到存储器104的每个类型的踪迹数据记录的数量。例如,基本块M的单个执行实例可以生成第一踪迹类型(例如,存储器访问踪迹)的10个踪迹数据记录、生成第二踪迹类型(例如,控制流踪迹)的5个踪迹数据记录,等等。
因此,如图2所示,插桩引擎106针对经插桩的二进制代码107的每个基本块1-M确定在相对应的基本块的单个执行实例中每个类型的生成的记录的数量X(type,bbl),其中1≤type≤N。在一些实施例中,基本块1-M中的一个或多个基本块可能不产生给定类型的记录,例如,不包括存储器访问指令的基本块不产生存储器访问踪迹数据。对于这些基本块,X(type,bbl)可以等于0。
如所述,插桩引擎106然后可以分析经插桩的二进制代码107,以确定每个基本块的动态频率BBLcount(bbl)(例如,执行次数)。在一个实施例中,插桩引擎106通过执行经插桩的二进制代码107并记录每个基本块的执行次数来确定每个基本块的动态频率。插桩引擎106然后可以通过将记录量X(type,bbl)乘以每个基本块的动态频率BBLcount(bbl),来确定每个踪迹类型所需的踪迹数据记录的总数。基于每个踪迹数据记录类型的记录大小,插桩引擎106可以确定每个踪迹缓冲区108的大小,并在存储器104中分配踪迹缓冲区108。
图4A是示出根据一个实施例的示例踪迹缓冲区108-1至108-N的示意图400。如所述,每个踪迹缓冲区108可以对应于指定踪迹类型,也称为子踪迹。例如,踪迹缓冲区108-1可以对应于存储器踪迹,踪迹缓冲区108-2可以对应于指令流踪迹,而踪迹缓冲区108-N可以对应于控制流踪迹。在执行经插桩的二进制代码107期间,图形处理器103可以将踪迹数据记录添加到踪迹缓冲区108-1至108-N。通常,每个踪迹缓冲区108的最左边的元素(例如,零偏移)存储指针,该指针在任何给定时间指向缓冲区108中的下一个可用条目。指针值可以(例如,在执行之前通过插桩引擎106)被初始化为等于([(缓冲区总大小)/(单个记录大小)]–1)的值,以指向缓冲区108的最后一个(最右边)元素。在图4A所示的示例中,阴影框对应于已写入踪迹数据的108的条目。因此,缓冲区108的发展方向开始于缓冲区108的右侧,向左侧移动。
当在图形处理器103上执行的经插桩的二进制代码107尝试将踪迹数据记录写入缓冲区108之一时,引用缓冲区108中的指针值以标识踪迹数据记录应被写入的位置(例如,缓冲区108中的记录、元素和/或条目)。然后可以将踪迹数据记录原子地写入指针所指向的缓冲区108的部分。每个踪迹数据记录可以存储要从中保存记录的基本块的唯一标识符、执行经插桩的二进制代码107的实例的基本块的硬件线程的硬件线程ID,以及任何其他数据。例如,如果踪迹缓冲区108-1是存储器访问踪迹缓冲区,则可以将由基本块访问的存储器地址写入缓冲区108-1中的记录。类似地,如果踪迹缓冲区108-2是控制流踪迹缓冲区,则可以将正在执行的下一个基本块的基本块ID写入缓冲区108-2中的记录。一旦记录被写入到踪迹缓冲区108,经插桩的二进制代码107就可以例如经由原子减法操作原子地更新指针,以使指针指向缓冲区108中的下一个空闲记录。这样做可以防止在图形处理器103的不同硬件线程上并发地运行的经插桩的二进制代码107的多个实例与将数据保存在踪迹缓冲区108的相同位置内之间的冲突。相反,在图形处理器103的不同硬件线程上并发地运行的经插桩的二进制代码107的多个实例可以有利地将数据保存到缓冲区108,而不会产生冲突。在此类实施例中,为了防止冲突,给定的硬件线程可以执行指针值的原子读取,并且在缓冲区108中保留相对应的记录(或多个记录)以供存储踪迹数据。
图4B是示出了其中在存储器104中分配了单个踪迹缓冲区108的实施例的示意图410。为了分配单个踪迹缓冲区108,插桩引擎106可以确定如上所述通过执行每个基本块以及每个基本块的执行实例数而生成的踪迹数据记录的总数。基于每个踪迹数据记录的记录大小,插桩引擎106可以计算单个踪迹缓冲区108的总大小。然后,插桩引擎106可以分配和初始化踪迹缓冲区108。但是,如图所示,单个踪迹缓冲区108被分为多个部分,其中每个部分被分配给一特定踪迹类型。例如,如图所示,对于每个踪迹类型,缓冲区108被划分为部分411-1至411-N,其中N是正整数。每个部分411-1到411-N包括如上参考图4A所述的指针。通过标识踪迹类型的第零偏移并写入指针所指向的地址,可以将记录写入单个缓冲区108。
图5是示出了由插桩引擎106执行的后处理阶段的示意图500。如图所示,插桩引擎106基于两个示例踪迹缓冲区108-1和108-2来生成最终踪迹109。如图所示,踪迹缓冲区108-1是指令踪迹缓冲区,而踪迹缓冲区108-2是存储器踪迹缓冲区。通常,在后处理阶段期间,插桩引擎106例如基于每个缓冲区108中的基本块ID来从每个缓冲区108收集所有数据并且组合所收集的数据以生成最终踪迹109。例如,通过标识踪迹缓冲区108-1中的基本块ID,插桩引擎106可以标识存储器访问缓冲区108-2中相对应的基本块ID,其可以指明基本块按顺序访问了哪些存储器地址。通过对与缓冲区108-1、108-2中的每个基本块相关联的数据进行组合,插桩引擎106可以生成最终踪迹109,最终踪迹109反映每个基本块与被执行的每个基本块所访问的存储器地址之间的控制流。更一般地,由于每个踪迹缓冲区108中的记录是按图形处理器103的给定硬件线程的顺序存储的,因此插桩引擎106可以组合每个踪迹缓冲区108中的数据以反映在图形处理器103的多个硬件线程中执行经插桩的二进制代码107时执行的每个操作的顺序。
图6示出逻辑流程600的实施例。逻辑流程600可代表由本文所述的一个或多个实施例执行的操作中的一些或全部。例如,逻辑流程600可以表示在预处理阶段期间执行的一些或全部操作。实施例不限于此上下文。
如图所示,逻辑流程600开始于框610,其中插桩引擎106可以对经插桩的二进制代码107进行静态分析,以基于经插桩的二进制代码107的每个基本块的单次执行来确定生成的每个踪迹类型的踪迹数据记录的数量。通常,在框610处,插桩引擎106可以解析经插桩的二进制代码107的每个语句,以标识经插桩的二进制代码107的每个基本块以及每个基本块生成的任何踪迹数据。例如,通过标识经插桩的二进制代码107中每个基本块的给定执行实例,插桩引擎106可以确定每个基本块的存储器踪迹数据记录、指令踪迹数据记录和时间戳踪迹数据记录的所生成的数量。在一个实施例中,插桩引擎106至少部分地基于标识和分析经插桩的二进制代码107的生成踪迹数据记录的部分来确定每个类型的记录的生成数量。这样做可以允许插桩引擎106确定每个踪迹数据记录的不同属性,诸如通过执行经插桩的二进制代码107的每个基本块而生成的每个踪迹数据记录的实例的类型、大小和/或数量。
在框620处,插桩引擎106对经插桩的二进制代码107进行动态分析,以确定每个基本块的执行次数。例如,插桩引擎106可以在图形处理器103上启动经插桩的二进制代码107的执行实例,以确定在经插桩的二进制代码107的执行实例期间每个基本块被执行了多少次。在此类示例中,经插桩的二进制代码107的经插桩部分可以维护反映经插桩的二进制代码107的每个基本块的执行实例的计数的日志。作为另一个示例,插桩化引擎106可以参考此类日志以确定经插桩的二进制代码107的每个基本块的执行实例的计数。此外,基于预处理阶段期间经插桩的二进制代码107的执行实例,插桩引擎106可以存储反映经插桩的二进制代码107的执行流程的模板,其可由插桩引擎106用于在后处理阶段期间生成最终踪迹109。
在框630处,插桩引擎106可以确定经插桩的二进制代码107的单个执行实例的每个踪迹类型所需的踪迹数据记录的总数。例如,插桩引擎106可以使用在框610-620处生成的数据以确定对于每个踪迹类型、针对经插桩的二进制代码107的单个执行实例生成的踪迹数据记录的总数。在一个实施例中,插桩引擎106可以在框630处应用等式1。更一般地,对于每个踪迹类型,插桩引擎106可以将在框610确定的每个基本块生成的踪迹数据记录的数量乘以在框620确定的每个基本块的执行实例的总数,并计算每个乘积的总和。例如,如果第一基本块产生10个存储器踪迹记录、2个指令踪迹记录和零个控制流记录,并且第一基本块被执行20次,则插桩引擎106可以确定:执行经插桩的二进制代码107可以产生200个存储器踪迹记录、40个指令踪迹记录和零个控制流记录。然后,插桩引擎106可以对经插桩的二进制代码107的每个其他基本块执行这些操作,以确定每个踪迹类型的记录总数。
在框640处,插桩引擎106可以针对每个踪迹类型确定每个踪迹缓冲区108的大小。例如,插桩引擎106可以例如基于在框610处执行的分析和/或反映每个踪迹数据记录类型的已知大小的日志来确定每个踪迹数据记录类型的大小。基于每个踪迹数据记录类型的大小和由在框630处确定的经插桩的二进制代码107的执行实例生成的踪迹数据记录的总数,插桩引擎106可以确定每个踪迹数据缓冲区108的大小。例如,如果经插桩的二进制代码107的执行实例生成2000个控制流踪迹数据记录,并且每个控制流踪迹数据记录是10字节,则插桩引擎106可以确定控制流踪迹数据的踪迹缓冲区108的20000字节的大小。因此,当经插桩的二进制代码107的后续执行实例出现时,插桩引擎106可以在共享存储器104中为控制流踪迹数据分配20000字节的踪迹缓冲区108(以及用于其他踪迹数据类型的缓冲区108)。
图7示出逻辑流程700的实施例。逻辑流程700可代表由本文所述的一个或多个实施例执行的操作中的一些或全部。实施例不限于此上下文。
如图所示,逻辑流程700开始于框710,其中插桩引擎106可以初始化存储器104中的每个踪迹数据类型的踪迹缓冲区108。通常,插桩引擎106可以在预处理阶段期间确定每个踪迹缓冲区的大小。因此,当调度和/或启动经插桩的二进制代码107的执行实例时,可以在存储器104中分配和/或初始化踪迹缓冲区108。如所述,在一个实施例中,踪迹缓冲区108可以是单个缓冲区和/或多个缓冲区。在框720处,在图形处理器103的多个执行单元(例如,核)的多个硬件线程上并行地执行经插桩的二进制代码107。这样做可以使经插桩的二进制代码107生成踪迹数据记录。在框730处,在执行经插桩的二进制代码107期间生成的踪迹数据记录被存储到相对应的踪迹缓冲区108。例如,存储器访问踪迹数据记录可以被写入存储器访问踪迹缓冲区108-1,同时控制流程踪迹数据记录可以被写入控制流踪迹缓冲区108-2。如所述,基本块ID、硬件线程ID和数据可以存储在踪迹缓冲区108中的每个记录中。
图8示出逻辑流程800的实施例。逻辑流程800可代表由本文所述的一个或多个实施例执行的操作中的一些或全部。例如,逻辑流程800可以代表被执行以生成最终踪迹109的一些或全部操作。实施例不限于此上下文。
如图所示,逻辑流程800开始于框810,其中在CPU 102上执行的插桩引擎106可以在处理阶段、执行经插桩的二进制代码107期间接收存储在踪迹缓冲区108中的踪迹数据记录。在框820处,在CPU 102上执行的插桩引擎106确定经插桩的二进制代码107的每个基本块的信息,例如,在预处理阶段期间收集的信息。例如,插桩引擎106可以确定每个基本块的静态信息(例如,执行什么指令、生成什么踪迹数据等)和每个基本块的动态信息(例如,执行实例的数量,每个基本块的执行顺序等)。在框830处,例如,基于在预处理阶段期间确定的执行流程和踪迹缓冲区108中每个记录中的基本块ID,在CPU 102上执行的插桩引擎106可以组合来自所有踪迹缓冲区108的数据以生成最终踪迹109。例如,通过基于硬件线程ID过滤每个缓冲区中的记录,并基于每个缓冲区108中的基本块ID组合记录,插桩引擎106可以生成最终踪迹109。更一般地,由于由给定硬件线程生成的每个踪迹缓冲区108中的记录按执行顺序被存储,因此插桩引擎106可以组合每个踪迹缓冲区108中的记录以生成最终踪迹109。
图9示出存储介质900的实施例。存储介质900可包括任何非暂态计算机可读存储介质或机器可读存储介质,诸如光存储介质、磁存储介质或半导体存储介质。在各实施例中,存储介质900可包括制品。在一些实施例中,存储介质900可以存储计算机可执行指令,诸如用于实现本文中所描述的逻辑流程或操作(诸如图2、6、7和图8的逻辑流程200、600、700和800的指令901、902、903、904)中的一者或多者的计算机可执行指令。类似地,存储介质900可以存储插桩引擎106的计算机可执行指令905。存储介质900可进一步存储经插桩的二进制代码107的计算机可执行指令906。计算机可读存储介质或机器可读存储介质的示例可包括能够存储电子数据的任何有形介质,包括易失性存储器或非易失性存储器、可移除或不可移除存储器、可擦除或不可擦除存储器、可写入或可重写存储器,等等。计算机可执行指令的示例可包括任何合适类型的代码,诸如源代码、经编译的代码、经解释的代码、可执行代码、静态代码、动态代码、面向对象代码、可视代码等。实施例不限于此上下文。
图10示出示例系统1000。系统1000是具有多个处理器核的计算机系统,诸如,分布式计算系统、超级计算机、高性能计算系统、计算集群、大型计算机、小型计算机、客户端-服务器系统、个人计算机(PC)、工作站、服务器、便携式计算机、膝上型计算机、平板计算机、诸如个人数字助理(PDA)之类的手持式设备、或用于处理、显示或传送信息的其他设备。类似的实施例被实现为例如,诸如便携式音乐播放器或便携式视频播放器的娱乐设备、智能电话或其他蜂窝电话、电话、数字视频相机、数字静止相机、外部存储设备等等。进一步的实施例实现了更大规模的服务器配置。在其他实施例中,系统1000可具有含有一个核的单个处理器或者不止一个处理器。注意,术语“处理器”是指具有单个核的处理器或者具有多个处理器核的处理器封装。
如图所示,系统1000包括用于安装平台组件的主板1005。主板1005是包括经由点对点互连1056(诸如超路径互连(UPI))耦合的第一处理器1010和第二处理器1030的点对点互连平台。在其他实施例中,系统1000可以是诸如多分支总线之类的另一总线架构。此外,处理器1010和1030中的每个处理器可以是具有多个处理器核的处理器封装,处理器1010和1030分别包括(多个)处理器核1020和1040。处理器1010和1030代表图1的CPU 102和/或图形处理器103。类似地,核1020和1040可以代表图形处理器103的核(或执行单元),其中每个核1020、1040具有多个硬件线程,这些硬件线程可以执行经插桩的二进制代码107的至少一部分并将踪迹数据存储到由插桩引擎106分配的踪迹缓冲区108。尽管系统1000是两个插槽的(2S)平台的示例,但其他实施例可包括多于两个插槽或者包括一个插槽。例如,一些实施例可包括四个插槽的(4S)平台或八个插槽的(8S)平台。每个插槽是对处理器的安装,并且可与插槽标识符相关联。注意,术语平台是指具有诸如处理器1010和芯片组1060之类的某些所安装的组件的主板。一些平台可包括附加组件,并且一些平台可仅包括用于安装处理器和/或芯片组的插槽。
第一处理器1010包括集成存储器控制器(IMC)1014以及点对点(P-P)接口1018和1052。类似地,第二处理器1030包括IMC 1034以及P-P接口1038和1054。IMC 1014和1034分别将处理器1010和1030耦合至相应的存储器——存储器1012和存储器1032。存储器1012和1032可以是用于平台的主存储器(例如,动态随机存取存储器(DRAM))(诸如,双倍数据速率类型3(DDR3)或类型4(DDR4)同步DRAM(SDRAM))的部分。在本实施例中,存储器1012和1032本地地附连至相应的处理器1010和1030。在其他实施例中,主存储器可经由总线和共享存储器中枢而与处理器耦合。
第一处理器1010经由P-P互连1052和1062耦合至芯片组1060,并且第二处理器1030经由P-P互连1054和1064耦合至芯片组1060。直接媒体接口(DMI)1057和1058可分别耦合P-P互连1052和1062、以及P-P互连1054和1064。DMI可以是诸如DMI 3.0之类的促进例如八千兆传输每秒(GT/s)的高速互连。在其他实施例中,处理器1010和1030可经由总线进行互连。
芯片组1060可包括诸如平台控制器中枢(PCH)之类的控制器中枢。芯片组1060可包括用于执行时钟计时功能的系统时钟,并且包括用于I/O总线的接口以促进平台上的外围设备的连接,该I/O总线诸如,通用串行总线(USB)、外围组件互连(PCI)、串行外围互连(SPI)、集成互连(I2C)等等。在其他实施例中,芯片组1060可包括多于一个控制器中枢,诸如,具有存储器控制器中枢、图形控制器中枢、以及输入/输出(I/O)控制器中枢的芯片组。
在本实施例中,芯片组1060经由接口(I/F)1070与受信任平台模块(TPM)1072以及UEFI、BIOS、闪存组件1074耦合。TPM 1072是被设计成用于通过将密码密钥集成到设备中来保护硬件的专用微控制器。UEFI、BIOS、闪存组件1074可提供预引导代码。
在一些实施例中,芯片组1060包括将芯片组1060与高性能图形引擎、图形卡1065耦合的接口(I/F)1066。I/F 1066可以是例如外围组件互连增强(PCI-e)。在此类示例中,图形卡1065可包括一个或多个处理器1010、1030和相对应的处理器核以用于处理经插桩的二进制代码107。在一些实施例中,系统1000可包括处理器1010和1030与芯片组1060之间的灵活显示接口(FDI)。FDI将处理器中的图形处理器核与芯片组1060互连。
各种I/O设备1092连同总线桥1080和I/F 1068耦合至总线1081,总线桥1080将总线1081耦合至第二总线1091,而I/F 1068将总线1081与芯片组1060进行连接。在一个实施例中,第二总线1091可以是低引脚数(LPC)总线。各设备可耦合至第二总线1091,这些设备包括例如,键盘1082、鼠标1084、通信设备1086以及可存储诸如经插桩的二进制代码107之类的代码的数据存储单元1088。此外,音频I/O 1090可耦合至第二总线1091。I/O设备1092、通信设备1086以及数据存储单元1088中的许多设备或单元可驻留在主板1005上,而键盘1082和鼠标1084可以是附加外围设备。在其他实施例中,一些或所有的I/O设备1092、通信设备1086以及数据存储单元1088是附加外围设备,并且不驻留在主板1005上。
至少一个示例的一个或多个方面可由存储在至少一个机器可读介质上的表示性指令来实现,指令表示处理器内的各种逻辑,指令在由机器、计算设备或系统读取时使得该机器、计算设备或系统制造用于执行本文中所描述的技术的逻辑。被称为“IP核”的此类表示可被存储在有形的机器可读介质上,并被供应给各个客户或制造设施以加载到制作该逻辑或处理器的制造机器中。
可使用硬件元件、软件元件或两者的组合来实现各示例。在一些示例中,硬件元件可包括:设备、组件、处理器、微处理器、电路、电路元件(例如,晶体管、电阻器、电容器、电感器等等)、集成电路、专用集成电路(ASIC)、可编程逻辑器件(PLD)、数字信号处理器(DSP)、现场可编程门阵列(FPGA)、存储器单元、逻辑门、寄存器、半导体器件、芯片、微芯片、芯片组等等。在一些示例中,软件元件可包括:软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、应用编程接口(API)、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、码元或它们的任何组合。判定是否使用硬件元件和/或软件元件来实现示例可能根据任何数量的因素而不同,这些因素诸如,如对于给定实现方式所期望的所需的计算速率、功率电平、热容限、处理周期预算、输入数据速率、输出数据速率、存储器资源、数据总线速度以及其他设计或性能约束。
一些示例可包括制品或至少一种计算机可读介质。计算机可读介质可包括用于存储逻辑的非暂态存储介质。在一些示例中,非暂态存储介质可包括能够存储电子数据的一种或多种类型的计算机可读存储介质,包括易失性存储器或非易失性存储器、可移除存储器或不可移除存储器,可擦除存储器或不可擦存储器,可写入存储器或可重写的存储器等等。在一些示例中,逻辑可包括各种软件元件,诸如软件组件、程序、应用、计算机程序、应用程序、系统程序、机器程序、操作系统软件、中间件、固件、软件模块、例程、子例程、函数、方法、过程、软件接口、API、指令集、计算代码、计算机代码、代码段、计算机代码段、字、值、码元或其任何组合。
根据一些实施例,计算机可读介质可包括用于存储或维持指令的非暂态存储介质,这些指令在由机器、计算设备或系统执行时使得机器、计算设备或系统执行根据所描述示例的方法和/或操作。指令可包括任何合适类型的代码,如源代码、经编译的代码、经解释的代码、可执行代码、静态代码、动态代码等等。指令可根据预定义的计算机语言、方式或语法来实现,以用于指令机器、计算设备或系统执行某一功能。指令可使用任何合适的高级的、低级的、面向对象的、可视的、经编译的和/或经解释的编程语言来实现。
可使用表达“在一个示例中”或“示例”以及它们的派生词来描述某些示例。这些术语意味着,参考示例所描述的特定功能、结构或特征被包括在至少一个示例中。在本说明书中的不同位置出现短语“在一个示例中”不一定都是指同一个示例。
可以使用表达“耦合”和“连接”以及它们的派生词来描述某些示例。这些术语并不必旨在作为彼此的同义词。例如,使用术语“连接”和/或“耦合”的描述可指示两个或更多元件彼此处于直接的物理或电接触。然而,术语“耦合”还可以指两个或更多个元件彼此未直接接触,但仍然彼此进行合作或交互。
下列示例涉及进一步的实施例,根据这些实施例,众多置换和配置将是显而易见的。
示例1是一种设备,包括:处理器;图形处理器;以及耦合到处理器和图形处理器的存储器,该存储器存储指令,该指令在由处理器执行时使处理器用于:确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数,每个踪迹记录包括踪迹记录类型,该踪迹记录类型具有多个踪迹记录类型;确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数;以及基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数来确定要在存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小,每个踪迹缓冲区用于存储多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
示例2包括示例1的主题,该存储器存储在由处理器执行时使处理器用于以下操作的指令:确定多个踪迹记录类型中的每个踪迹记录类型的相应大小;以及基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数来确定要在存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小。
示例3包括示例1的主题,基于经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在图形处理器上的经插桩的二进制代码的第一执行实例来确定多个块中的每个块的执行计数,处理器或图形处理器中的一个用于分配和初始化存储器中的多个踪迹缓冲区。
示例4包括示例3的主题,存储器存储指令,这些指令在由处理器执行时使经插桩的二进制代码的第二执行实例由图形处理器的多个处理器核的多个执行线程并行地执行。
示例5包括示例4的主题,经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要被存储在踪迹缓冲区中的踪迹数据记录。
示例6包括示例5的主题,踪迹数据记录包括相应的执行线程的标识符、经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
示例7包括示例6的主题,该存储器存储在由处理器执行时使处理器用于以下操作的指令:解析存储在多个踪迹缓冲区的每个踪迹缓冲区中的踪迹数据记录;以及至少部分地基于经插桩的二进制代码的块的标识符来组合经解析的踪迹数据记录,以生成经插桩的二进制代码的最终踪迹。
示例8包括示例1的主题,多个踪迹缓冲区包括单个踪迹缓冲区或多个分开的踪迹缓冲区中的一种情况,经插桩的二进制代码包括汇编代码,每个块包括至少一个汇编代码行。
示例9包括示例1的主题,该存储器存储在由处理器执行时使处理器用于以下操作的指令:确定每个踪迹记录类型的相应大小;针对每个踪迹记录类型,基于由经插桩的二进制代码的多个块生成的踪迹记录的总和来计算该踪迹记录类型的踪迹记录的总数;以及基于踪迹记录类型的踪迹记录的相应总数与每个踪迹记录类型的相应大小的乘积来确定每个踪迹缓冲区的大小。
示例10是一种存储指令的非暂态计算机可读存储介质,这些指令在由处理器执行时使处理器用于:确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数,每个踪迹记录包括踪迹记录类型,该踪迹记录类型具有多个踪迹记录类型;确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数;以及基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数,来确定要在处理器和图形处理器共享的存储器中分配的多个踪迹缓冲区中的每个踪迹缓冲区的相应大小,每个踪迹缓冲区存储多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
示例11包括示例10的主题,存储在由处理器执行时使处理器用于以下操作的指令:确定多个踪迹记录类型中每个踪迹记录类型的相应大小;以及基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数,来确定要在存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小。
示例12包括示例10的主题,基于对经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在图形处理器上经插桩的二进制代码的第一执行实例来确定多个块中的每个块的执行计数,处理器或图形处理器之一用于分配和初始化存储器中的多个踪迹缓冲区。
示例13包括示例12的主题,存储指令,这些指令在由处理器执行时使经插桩的二进制代码的第二执行实例由图形处理器的多个处理器核的多个执行线程并行地执行。
示例14包括示例13的主题,经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要被存储在踪迹缓冲区中的踪迹数据记录。
示例15包括示例14的主题,踪迹数据记录包括相应的执行线程的标识符、经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
示例16包括示例14的主题,存储在由处理器执行时使处理器用于以下操作的指令:解析存储在多个踪迹缓冲区的每个踪迹缓冲区中的踪迹数据记录;以及至少部分地基于经插桩的二进制代码的块的标识符来组合经解析的踪迹数据记录,以生成经插桩的二进制代码的最终踪迹。
示例17包括示例10的主题,多个踪迹缓冲区包括单个踪迹缓冲区或多个分开的踪迹缓冲区中的一种情况,经插桩的二进制代码包括汇编代码,每个块包括至少一个汇编代码行。
示例18包括示例10的主题,该存储器存储在由处理器执行时使处理器用于以下操作的指令:确定每个踪迹记录类型的相应大小;针对每个踪迹记录类型,基于由经插桩的二进制代码的多个块生成的踪迹记录的总和来计算该踪迹记录类型的踪迹记录的总数;以及基于踪迹记录类型的踪迹记录的相应总数与每个踪迹记录类型的相应大小的乘积来确定每个踪迹缓冲区的大小。
示例19是一种方法,包括:通过处理器确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数,每个踪迹记录包括踪迹记录类型,该踪迹记录类型具有多个踪迹记录类型;确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数;以及基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数,来确定要在处理器和图形处理器共享的存储器中分配的多个踪迹缓冲区中的每个踪迹缓冲区的相应大小,每个踪迹缓冲区存储多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
示例20包括示例19的主题,进一步包括:确定多个踪迹记录类型中每个踪迹记录类型的相应大小;以及基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数,来确定要在存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小。
示例21包括示例19的主题,基于经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在图形处理器上经插桩的二进制代码的第一执行实例来确定多个块的每个块的执行计数。
示例22包括示例21的主题,进一步包括:在使由图形处理器的多个处理器核的多个执行线程并行执行经插桩的二进制代码的第二执行实例之前,在存储器中分配和初始化多个踪迹缓冲区,处理器或图形处理器之一用于分配和初始化存储器中的多个踪迹缓冲区。
示例23包含示例22的主题,经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要被存储在踪迹缓冲区中的踪迹数据记录。
示例24包括示例23的主题,踪迹数据记录包括相应的执行线程的标识符、经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
示例25包括示例24的主题,进一步包括:解析存储在多个踪迹缓冲区的每个踪迹缓冲区中的踪迹数据记录;以及至少部分地基于经插桩的二进制代码的块的标识符来组合经解析的踪迹数据记录,以生成经插桩的二进制代码的最终踪迹。
实例26包括示例19的主题,多个踪迹缓冲区包括单个踪迹缓冲区或多个分开的踪迹缓冲区中的一种情况,经插桩的二进制代码包括汇编代码,每个块包括至少一个汇编代码行。
示例27包括示例19的主题,进一步包括:确定每个踪迹记录类型的相应大小;针对每个踪迹记录类型,基于由经插桩的二进制代码的多个块生成的踪迹记录的总和来计算该踪迹记录类型的踪迹记录的总数;以及基于踪迹记录类型的踪迹记录的相应总数与每个踪迹记录类型的相应大小的乘积来确定每个踪迹缓冲区的大小。
示例28是一种设备,包括:用于确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数的装置,每个踪迹记录包括踪迹记录类型,该踪迹记录类型具有多个踪迹记录类型;用于确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数的装置;以及用于基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数,确定要在处理器和图形处理器共享的存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小的装置,每个踪迹缓冲区用于存储多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
示例29包括示例28的主题,进一步包括:用于确定多个踪迹记录类型中的每个踪迹记录类型的相应大小的装置;以及用于基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数来确定要在存储器中分配的多个踪迹缓冲区中的每个踪迹缓冲区的相应大小的装置。
示例30包括示例28的主题,基于经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在图形处理器上的经插桩的二进制代码的第一执行实例来确定多个块中的每个块的执行计数。
示例31包括示例30的主题,进一步包括:用于在使由图形处理器的多个处理器核的多个执行线程并行执行经插桩的二进制代码的第二执行实例之前,在存储器中分配和初始化多个踪迹缓冲区的装置,处理器或图形处理器之一用于分配和初始化存储器中的多个踪迹缓冲区。
示例32包括示例31的主题,经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要被存储在踪迹缓冲区中的踪迹数据记录。
示例33包括示例32的主题,踪迹数据记录包括相应的执行线程的标识符、经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
示例34包括示例33的主题,进一步包括:用于解析存储在多个踪迹缓冲区的每个踪迹缓冲区中的踪迹数据记录的装置;以及用于至少部分地基于经插桩的二进制代码的块的标识符来组合经解析的踪迹数据记录,以生成经插桩的二进制代码的最终踪迹的装置。
示例35包括示例28的主题,多个踪迹缓冲区包括单个踪迹缓冲区或多个分开的踪迹缓冲区中的一种情况,经插桩的二进制代码包括汇编代码,每个块包括至少一个汇编代码行。
示例36包括示例28的主题,进一步包括:用于确定每个踪迹记录类型的相应大小的装置;用于针对每个踪迹记录类型,基于由经插桩的二进制代码的多个块生成的踪迹记录的总和来计算该踪迹记录类型的踪迹记录的总数的装置;以及用于基于踪迹记录类型的踪迹记录的相应总数与每个踪迹记录类型的相应大小的乘积来确定每个踪迹缓冲区的大小的装置。
另外,在前述中,各种特征被一起编组在单个示例中以精简本公开。这种公开方法不应被解释为反映要求保护的示例需要比每一项权利要求中明确陈述的更多的特征的意图。相反,如所附权利要求所反映的那样,发明主题在于少于单个所公开的示例的所有特征。因此,所附权利要求在此被合并到具体实施方式中,其中每项权利要求作为单独的示例而独立存在。在所附权利要求中,术语“包括”和“其中”分别被用作相应的术语“包括”和“其中”的简明英语对等词。此外,术语“第一”、“第二”、“第三”等仅用作标记,而不旨在对它们的对象施加数值要求。
虽然已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求中定义的主题不一定限于上文所描述的特定特征或动作。相反,以上所描述的具体特征和动作作为实现权利要求的示例形式被公开。
适合用于存储和/或执行程序代码的数据处理系统将包括通过系统总线直接或间接地耦合至存储器元件的至少一个处理器。该存储器元件可包括在程序代码的实际执行期间所采用的本地存储器、大容量存储器、以及高速缓存存储器,该高速缓存存储器提供至少某些程序代码的临时存储以减少在执行期间必须从大容量存储中检索代码的次数。术语“代码”涵盖广泛的软件组件和构造,包括应用、驱动器、进程、例程、方法、模块、固件、微代码、以及子程序。因此,术语“代码”可用于指代在由处理系统执行时执行所期望的一个或多个操作的任何指令的集合。
本文中所描述的逻辑电路、设备和接口可执行以硬件实现的功能以及利用在一个或多个处理器上执行的代码实现的功能。逻辑电路是指实现一个或多个逻辑功能的硬件或者硬件和代码。电路系统是硬件并且可指代一个或多个电路。每个电路可执行特定的功能。电路系统中的电路可包括与一个或多个导体互连的分立的电气组件、集成电路、芯片封装、芯片组、存储器等等。集成电路包括被创建在诸如硅晶圆之类的衬底上的电路并且可包括组件。并且集成电路、处理器封装、芯片封装和芯片组可包括一个或多个处理器。
处理器可在(多个)输入端接收诸如指令和/或数据之类的信号并处理这些信号以生成至少一个输出。在执行代码的同时,代码改变组成处理器流水线的晶体管的物理状态和特性。晶体管的物理状态转换为存储在处理器内的寄存器中的逻辑位1和0。处理器可以将晶体管的物理状态传输到寄存器中,并且将晶体管的物理状态传输到另一存储介质。
处理器可包括用于执行被实现以执行处理器的整体功能的一个或多个子功能的电路。处理器的一个示例为包括至少一个输入和至少一个输出的状态机或专用集成电路(ASIC)。状态机可通过对至少一个输入执行预定的一系列串行和/或并行操纵或变换来操纵该至少一个输入以生成至少一个输出。
如上文所描述的逻辑可以是用于集成电路芯片的设计的部分。芯片设计以图形计算机编程语言来创建并被存储在计算机存储介质或数据存储介质(诸如盘、磁带、物理硬驱动器或诸如存储访问网络中的虚拟硬驱动器)中。如果设计者不制造芯片或用于制造芯片的光刻掩模,则设计者直接或间接地通过物理手段(例如,通过提供存储设计的存储介质的副本)或通过电子方式(例如,通过因特网)将所得的设计传送至此类实体。然后,所存储的设计被转换成适当的格式(例如,GDSII)以供制造。
可以由制造商按照原始晶圆形式(即,作为具有多个未经封装的芯片的单个晶圆)、作为裸管芯、或以经封装的形式来分发所得到的集成电路芯片。在后一种情况下,将芯片安装在单芯片封装(诸如塑料载体,具有固定至主板或其他更高层级的载体的引线)中或安装在多芯片封装(诸如具有单面或双面互连或掩埋互连的陶瓷载体)中。在任何情况下,芯片随后与其他芯片、分立的电路元件、和/或其他信号处理设备集成,以作为(a)中间产品(诸如处理器板、服务器平台、主板)或(b)最终产品的部分。
已出于说明和描述的目的呈现了示例实施例的前述描述。不旨在穷尽或者将本公开限制于所公开的准确的形式。根据本公开,许多修改和变型是可能的。本公开的范围不是由该具体实现方式而是由所附权利要求限定。未来提出的要求本申请优先权的申请可以以不同的方式要求所公开的主题,并且通常可包括如在此多方面地公开或以其他方式展示的一个或多个限制的任何集合。
Claims (25)
1.一种设备,包括:
处理器;
图形处理器;以及
耦合到所述处理器和所述图形处理器的存储器,所述存储器存储指令,所述指令在由所述处理器执行时使所述处理器用于:
确定要在所述图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数,每个踪迹记录包括踪迹记录类型,所述踪迹记录类型具有多个踪迹记录类型;
确定要在所述图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数;以及
基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数来确定要在存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小,每个踪迹缓冲区用于存储多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
2.如权利要求1所述的设备,所述存储器存储在由所述处理器执行时使所述处理器用于以下操作的指令:
确定多个踪迹记录类型中的每个踪迹记录类型的相应大小;以及
基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数来确定要在存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小。
3.如权利要求1所述的设备,基于所述经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在所述图形处理器上的所述经插桩的二进制代码的第一执行实例来确定多个块中的每个块的执行计数,所述处理器或所述图形处理器中的一个用于分配和初始化所述存储器中的多个踪迹缓冲区。
4.如权利要求3所述的设备,所述存储器存储指令,所述指令在由所述处理器执行时使经插桩的二进制代码的第二执行实例由所述图形处理器的多个处理器核的多个执行线程并行地执行。
5.如权利要求4所述的设备,所述经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要被存储在所述踪迹缓冲区中的踪迹数据记录。
6.如权利要求5所述的设备,所述踪迹数据记录包括相应的执行线程的标识符、所述经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向所述经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
7.如权利要求6所述的设备,所述存储器存储在由所述处理器执行时使得所述处理器用于以下操作的指令:
解析存储在所述多个踪迹缓冲区的每个踪迹缓冲区中的所述踪迹数据记录;以及
至少部分地基于所述经插桩的二进制代码的块的标识符来组合经解析的踪迹数据记录,以生成所述经插桩的二进制代码的最终踪迹。
8.如权利要求1所述的设备,所述多个踪迹缓冲区包括单个踪迹缓冲区或多个分开的踪迹缓冲区中的一种情况,经插桩的二进制代码包括汇编代码,每个块包括至少一个汇编代码行。
9.如权利要求1所述的设备,所述存储器存储在由所述处理器执行时使得所述处理器用于以下操作的指令:
确定每个踪迹记录类型的相应大小;
针对每个踪迹记录类型,基于由所述经插桩的二进制代码的多个块生成的踪迹记录的总和来计算所述踪迹记录类型的踪迹记录的总数;以及
基于所述踪迹记录类型的踪迹记录的相应总数与每个踪迹记录类型的相应大小的乘积来确定每个踪迹缓冲区的大小。
10.一种方法,包括:
通过处理器确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数,每个踪迹记录包括踪迹记录类型,所述踪迹记录类型具有多个踪迹记录类型;
确定要在所述图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数;以及
基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数,来确定要在所述处理器和所述图形处理器共享的存储器中分配的多个踪迹缓冲区中的每个踪迹缓冲区的相应大小,每个踪迹缓冲区存储所述多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
11.如权利要求10所述的方法,进一步包括:
确定所述多个踪迹记录类型中每个踪迹记录类型的相应大小;以及
基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数,来确定要在所述存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小。
12.如权利要求10所述的方法,基于所述经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在所述图形处理器上的所述经插桩的二进制代码的第一执行实例来确定多个块中的每个块的执行计数。
13.如权利要求12所述的方法,进一步包括:
在使由所述图形处理器的多个处理器核的多个执行线程并行执行所述经插桩的二进制代码的第二执行实例之前,在所述存储器中分配和初始化所述多个踪迹缓冲区,所述处理器或所述图形处理器之一用于分配和初始化所述存储器中的所述多个踪迹缓冲区。
14.如权利要求13所述的方法,所述经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要存储在所述踪迹缓冲区中的踪迹数据记录。
15.如权利要求14所述的方法,所述踪迹数据记录包括相应执行线程的标识符、所述经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向所述经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
16.如权利要求15所述的方法,进一步包括:
解析存储在所述多个踪迹缓冲区的每个踪迹缓冲区中的踪迹数据记录;以及
至少部分地基于所述经插桩的二进制代码的块的标识符来组合经解析的踪迹数据记录,以生成所述经插桩的二进制代码的最终踪迹。
17.如权利要求10所述的方法,所述多个踪迹缓冲区包括单个踪迹缓冲区或多个分开的踪迹缓冲区中的一种情况,所述经插桩的二进制代码包括汇编代码,每个块包括至少一个汇编代码行。
18.如权利要求10所述的方法,进一步包括:
确定每个踪迹记录类型的相应大小;
针对每个踪迹记录类型,基于由所述经插桩的二进制代码的多个块生成的踪迹记录的总和来计算所述踪迹记录类型的踪迹记录的总数;以及
基于所述踪迹记录类型的踪迹记录的相应总数与每个踪迹记录类型的相应大小的乘积来确定每个踪迹缓冲区的大小。
19.一种设备,包括:
用于确定要在图形处理器上执行的经插桩的二进制代码的多个块中的每个块生成的踪迹记录的计数的装置,每个踪迹记录包括踪迹记录类型,所述踪迹记录类型具有多个踪迹记录类型;
用于确定要在所述图形处理器上执行的经插桩的二进制代码的多个块中的每个块的相应执行计数的装置;以及
用于基于所确定的每个块生成的踪迹记录的计数和每个块的执行计数,来确定要在所述处理器和所述图形处理器共享的存储器中分配的多个踪迹缓冲区的每个踪迹缓冲区的相应大小的装置,每个踪迹缓冲区存储所述多个踪迹记录类型中的相应一个踪迹记录类型的踪迹记录。
20.如权利要求19所述的设备,进一步包括:
用于确定所述多个踪迹记录类型中的每个踪迹记录类型的相应大小的装置;以及
用于基于每个踪迹记录类型的相应大小、每个块生成的踪迹记录的相应计数以及每个块的执行计数来确定要在所述存储器中分配的多个踪迹缓冲区中的每个踪迹缓冲区的相应大小的装置。
21.如权利要求19所述的设备,基于所述经插桩的二进制代码的分析来确定由每个块生成的踪迹记录的计数,基于在所述图形处理器上的所述经插桩的二进制代码的第一执行实例来确定多个块中的每个块的执行计数。
22.如权利要求21所述的设备,进一步包括:
用于在使由所述图形处理器的多个处理器核的多个执行线程并行执行经插桩的二进制代码的第二执行实例之前,在所述存储器中分配和初始化所述多个踪迹缓冲区的装置,所述处理器或所述图形处理器之一用于分配和初始化所述存储器中的所述多个踪迹缓冲区。
23.如权利要求22所述的设备,所述经插桩的二进制代码的第二执行实例基于每个踪迹数据记录的类型来生成要被存储在所述踪迹缓冲区中的踪迹数据记录。
24.如权利要求23所述的设备,所述踪迹数据记录包括相应的执行线程的标识符、所述经插桩的二进制代码的相应块的标识符以及踪迹数据,每个踪迹缓冲区包括指向所述经插桩的二进制代码的第二执行实例期间相应踪迹缓冲区的下一个可用元素的指针。
25.一种机器可读介质,包括代码,所述代码在被执行时使得机器执行如权利要求10-18中任一项所述的方法。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/553,614 US11093366B2 (en) | 2019-08-28 | 2019-08-28 | Generating different traces for graphics processor code |
US16/553,614 | 2019-08-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112445688A true CN112445688A (zh) | 2021-03-05 |
Family
ID=69102089
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010506104.5A Pending CN112445688A (zh) | 2019-08-28 | 2020-06-05 | 生成图形处理器代码的不同踪迹 |
Country Status (4)
Country | Link |
---|---|
US (1) | US11093366B2 (zh) |
KR (1) | KR20210028088A (zh) |
CN (1) | CN112445688A (zh) |
DE (1) | DE102020118022A1 (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10949330B2 (en) * | 2019-03-08 | 2021-03-16 | Intel Corporation | Binary instrumentation to trace graphics processor code |
US11070621B1 (en) * | 2020-07-21 | 2021-07-20 | Cisco Technology, Inc. | Reuse of execution environments while guaranteeing isolation in serverless computing |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9535815B2 (en) * | 2014-06-04 | 2017-01-03 | Nvidia Corporation | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads |
US10698792B2 (en) * | 2018-05-02 | 2020-06-30 | Microsoft Technology Licensing, Llc | Execution control with cross-level trace mapping |
-
2019
- 2019-08-28 US US16/553,614 patent/US11093366B2/en active Active
-
2020
- 2020-06-05 CN CN202010506104.5A patent/CN112445688A/zh active Pending
- 2020-07-08 DE DE102020118022.5A patent/DE102020118022A1/de active Pending
- 2020-07-28 KR KR1020200093522A patent/KR20210028088A/ko unknown
Also Published As
Publication number | Publication date |
---|---|
US11093366B2 (en) | 2021-08-17 |
KR20210028088A (ko) | 2021-03-11 |
DE102020118022A1 (de) | 2021-03-04 |
US20200012585A1 (en) | 2020-01-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111881013B (zh) | 以扰乱时序的模式进行的软件向后兼容性测试 | |
US6539500B1 (en) | System and method for tracing | |
US11544461B2 (en) | Early exit for natural language processing models | |
US6212625B1 (en) | General purpose dynamically programmable state engine for executing finite state machines | |
Bouvier et al. | Applying AMD's Kaveri APU for heterogeneous computing. | |
Banger et al. | OpenCL programming by example | |
US20110289357A1 (en) | Information processing device | |
US11789734B2 (en) | Padded vectorization with compile time known masks | |
CN112445688A (zh) | 生成图形处理器代码的不同踪迹 | |
CN112631657A (zh) | 用于字符串处理的字节比较方法以及指令处理装置 | |
CN111666202A (zh) | 二进制插桩来跟踪图形处理器代码 | |
WO2023107789A1 (en) | Deterministic replay of a multi-threaded trace on a multi-threaded processor | |
US8949777B2 (en) | Methods and systems for mapping a function pointer to the device code | |
CN114610394A (zh) | 指令调度的方法、处理电路和电子设备 | |
US9483379B2 (en) | Randomly branching using hardware watchpoints | |
Heath | Microprocessor architectures and systems: RISC, CISC and DSP | |
US20040088682A1 (en) | Method, program product, and apparatus for cache entry tracking, collision detection, and address reasignment in processor testcases | |
KR20240025019A (ko) | 니어 메모리 컴퓨팅을 사용한 복합 연산에 대한 원자성 제공 | |
Intel | ||
US11907118B2 (en) | Interleaved data conversion to change data formats | |
US11106846B1 (en) | Systems and methods for emulation data array compaction | |
Bhimani et al. | Design space exploration of GPU Accelerated cluster systems for optimal data transfer using PCIe bus | |
US20230131430A1 (en) | Compiler device, instruction generation method, program, compiling method, and compiler program | |
US11847462B2 (en) | Software-based instruction scoreboard for arithmetic logic units | |
US11474798B2 (en) | Method and system for optimizing access to constant memory |
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 |