CN108986012B - 着色器剖析器 - Google Patents
着色器剖析器 Download PDFInfo
- Publication number
- CN108986012B CN108986012B CN201810553107.7A CN201810553107A CN108986012B CN 108986012 B CN108986012 B CN 108986012B CN 201810553107 A CN201810553107 A CN 201810553107A CN 108986012 B CN108986012 B CN 108986012B
- Authority
- CN
- China
- Prior art keywords
- instructions
- instruction
- execution
- duration
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 claims abstract description 35
- 238000012545 processing Methods 0.000 claims abstract description 16
- 230000001934 delay Effects 0.000 claims abstract description 9
- 238000011161 development Methods 0.000 abstract description 5
- 238000005070 sampling Methods 0.000 abstract description 5
- 238000012544 monitoring process Methods 0.000 abstract description 4
- 239000000872 buffer Substances 0.000 description 47
- 239000000523 sample Substances 0.000 description 18
- 239000012723 sample buffer Substances 0.000 description 15
- 239000012634 fragment Substances 0.000 description 10
- 238000009877 rendering Methods 0.000 description 10
- 238000010586 diagram Methods 0.000 description 8
- 238000004458 analytical method Methods 0.000 description 5
- 238000010606 normalization Methods 0.000 description 4
- 238000004364 calculation method Methods 0.000 description 3
- 230000006399 behavior Effects 0.000 description 2
- 238000004891 communication Methods 0.000 description 2
- 238000005516 engineering process Methods 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 239000002184 metal Substances 0.000 description 2
- 230000001133 acceleration Effects 0.000 description 1
- 239000008186 active pharmaceutical agent Substances 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000013480 data collection Methods 0.000 description 1
- 238000000354 decomposition reaction Methods 0.000 description 1
- 230000001627 detrimental effect Effects 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 239000003550 marker Substances 0.000 description 1
- 239000000463 material Substances 0.000 description 1
Images
Classifications
-
- 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
-
- 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/44—Encoding
- G06F8/443—Optimisation
- G06F8/4441—Reducing the execution time required by the program 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
- G06F9/3856—Reordering of instructions, e.g. using queues or age tags
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/38—Creation or generation of source code for implementing user interfaces
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Computer Graphics (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明题为“着色器剖析器”。本发明描述了一种用于改善图像处理密集程序的开发的系统、方法和计算机可读介质。一般来讲,公开了用于非侵入式监测图形处理单元(GPU)上的着色器程序的运行时性能(即,用于剖析着色器程序执行)的技术。更具体地,该着色器剖析包括在GPU上在经编译的代码的执行期间对数据进行采样。确定代码内的指令序列的执行持续时间。随后,基于序列内的指令的相对延迟,确定每个二进制指令的持续时间。随后将二进制指令映射到源代码,以便获取着色器中的每个源代码指令执行每个绘制调用所花费的时间量。
Description
技术领域
本公开整体涉及图形处理领域。更具体地,但并非为了限制,本公开涉及在应用程序开发期间对着色器程序执行进行非侵入式监测的方法。
背景技术
当今,很多便携式设备应用程序为图形密集型的。为了支持所需的图形操作,很多便携式设备结合一个或多个图形处理单元(GPU)。在此类环境中,优化着色器程序性能尤其重要,因为一个或几个低效执行的着色器操作可对程序的整体行为具有明显的有害影响。由于至少这些原因,获取着色器程序运行时性能的准确定量测量非常重要。
如本文所用,术语“着色器程序”或“着色器”是指专门被设计用于在GPU硬件上执行的程序。着色器程序的示例性类型包括顶点着色器、几何着色器、镶嵌(壳和域)着色器、以及片段(或像素)着色器。虽然要求保护的主题并不限于此,但顶点着色器、片段着色器和计算着色器受Metal支持,Metal为一种支持GPU加速的先进3D图形渲染和数据并行计算工作负载的熟知的框架。一般来讲,顶点着色器对涉及三维(3D)模型的场景中的位置和其他属性提供控制。具体地,顶点着色器将虚拟空间中的每个顶点的3D位置转换为将出现在屏幕上的对应二维(2D)坐标。可将来自顶点着色器的输出直接发送到光栅器或发送到GPU流水线中的下一级(例如,片段着色器)。片段着色器(也被称为像素着色器)可用于计算每个像素的颜色和其他属性。例如,片段着色器可用于输出恒定颜色或用于照明值、阴影、镜面高光和半透明度的应用。
发明内容
本发明公开了用于监测、剖析或表征图形处理单元(GPU)上的着色器程序的运行时性能的技术。一个实施方案公开了用于识别着色器中的每个源代码指令的执行所花费的时间量的着色器剖析技术。在一个实施方案中,对于每个绘制调用,确定在源代码的每一行花费了多少时间。更具体地,在一个实施方案中,本公开的着色器剖析技术提供了与着色器的每个源行相关联的GPU时间成本和百分比。此信息为程序员提供了改进代码以用于更高效的执行的能力。程序员可逐行分析源代码,以确定它们的源代码的每一步消耗了多少时间。
本公开的实施方案描述了收集采样数据以便执行着色器剖析。在一个实施方案中,在GPU上捕获GPU API跟踪并多次执行,直到生成足够的样本以用于着色器剖析分析。在GPU上执行代码期间,生成跟踪包,还跟踪包由每个指令序列(例如,子句)的偏移值、预定时间和结束时间组成。该跟踪包还与程序地址缓冲器相关联,该程序地址缓冲器由与每个着色器二进制程序相关联的开始存储器地址和结束存储器地址组成。
本公开的实施方案还描述了分析所收集的采样数据,以便确定每个源代码指令的执行成本。在一个实施方案中,基于每个序列的经记录的预定时间和结束时间来确定每个指令序列(例如,子句)的执行持续时间。然后,基于序列内的每个指令的相对延迟来测量序列内的每个指令的持续时间。执行持续时间被归一化,以考虑序列被选择而不是被预定的时间。最后,执行映射以将每个二进制代码指令映射到源代码指令。
附图说明
图1以框图形式示出了根据一个实施方案的系统。
图2示出了根据一个实施方案的帧到渲染阶段、绘制调用和着色器程序的分解。
图3示出了根据一个实施方案的数据采样操作的框图。
图4以流程图形式示出了根据一个实施方案的收集数据以用于着色器剖析分析的操作。
图5以流程图形式示出了根据一个实施方案的用于对所收集的数据进行着色器剖析分析的操作。
图6示出了根据一个实施方案的表示重叠的指令序列的图表。
图7示出了根据一个实施方案的用于归一化指令序列的执行持续时间的计算过程。
图8示出了根据一个实施方案的针对指令序列中的每个指令的持续时间的计算过程。
具体实施方式
本公开涉及用于改进图形密集程序的开发的系统、方法和计算机可读介质。一般来讲,公开了用于监测图形处理单元(GPU)上的着色器程序的运行时性能(即,用于剖析着色器程序执行)的技术。更具体地,并且根据一个实施方案,基于GPU的硬件线程可被配置为也并行地运行,并且不会在着色器程序执行期间干扰GPU的执行环境。当这样配置时,可在执行着色器程序时监测GPU的行为,并且随后对其进行分析以提供着色器中的每个源代码指令的执行所花费的时间量。
在以下描述中,为了解释的目的,阐述了很多具体细节,以便提供对发明构思的彻底理解。作为该描述的一部分,本公开的附图中的一些附图以框图形式表示结构和设备,以避免模糊各种实施方案的操作细节。为了清晰起见,未对实际的具体实施的所有特征进行描述。此外,本公开中所使用的语言已主要被选择用于可读性和指导性目的,并且可能没有被选择为划定或限定本发明的主题,从而诉诸于所必需的权利要求以确定此类发明主题。在本公开中提到“一个实施方案”或“实施方案”意指包括在本发明的至少一个实施方案中的结合该实施方案所述的特定特征、结构或特性,并且多次提到“一个实施方案”或“实施方案”不应被理解为必然地全部参考相同的实施方案。
应当理解,在任何实际具体实施的开发中(如在任何开发项目中那样),必须要作出许多决策以实现开发者的特定目标(如,符合与系统和商务相关的约束条件),并且这些目标可在不同具体实施之间变化。还应当理解,此类开发工作可能是复杂并且耗时的,但尽管如此,对于设计、开发和实施基于图形的软件程序和系统的那些普通技术人员而言,这仍然是他们的日常工作。
图1展示了根据一个实施方案的系统1000,该系统包括执行主机侧部件应用程序1111的主机计算机系统1100和通过通信链路1300而被耦接的执行设备侧部件应用程序1211的计算设备1200。例如,主机计算机1100可为服务器、工作站、台式计算机、膝上型电脑、或笔记本计算机系统。例如,计算设备1200可为智能电话、膝上型电脑、个人计算机、便携式娱乐设备、或平板计算机系统。
虽然在本公开中图1描述了着色器剖析技术相对于计算设备1200的具体实施,但本领域的技术人员应当理解,整个着色器剖析技术或至少其中的一部分也可通过主机计算机系统1100来实施。例如,在一个实施方案中,主机计算机1100可向计算设备1200发送一个或多个指令的分组。计算设备1200可在其GPU 1220上执行这些指令并向主机计算机1100返回运行时结果。最后,主机计算机1100可分析运行时数据并返回着色器剖析结果。
重新参见图1,计算设备1200包括一个或多个数据处理单元。例如,计算设备1200可包括中央处理单元(CPU)1210和图形处理单元(GPU)1220。GPU 1220可包括被设计用于在并行数据流上执行相同指令的多个内核或处理元件,从而使得其比用于其中并行地进行大数据块处理的算法的通用CPU更有效。通信链路1300可采用任何期望的技术,不管是有线的还是无线的。
主机侧部件应用程序1111可为单个应用程序、程序或代码模块,或者其可被体现在多个单独的程序模块中。同样,设备侧部件应用程序1211可被体现在一个或多个模块中。例如,应用程序1211可为通过引起应用程序编程接口(API)调用来将对图形视景的描述传送至控制单元1212以便渲染图像以用于显示的图形应用程序。由供应商和标准组织开发API,以使图形数据并行任务更易于编程。
应用程序1211可以任何编程语言诸如C、C++、Java、Fortran和MatLab编写。随后由控制单元1212对应用程序1211需要的操作进行解释以用于执行。在一个实施方案中,控制单元1212可将API调用映射到通过计算设备1200理解的功能和操作。随后,将源代码传送到编译器1213和1214,以生成用于在GPU 1220和CPU执行器1218上执行的二进制代码。更具体地,GPU编译器1213产生编译程序,该编译程序也被称为着色器程序或着色器二进制数,其可在GPU 1220上执行。
调度器1215被布置用于在对应处理单元上执行编译程序的序列。GPU驱动器1216提供对GPU源诸如GPU着色器引擎(例如,着色器引擎1222和1223)的访问。每个着色器引擎执行着色程序中的指令,以执行图像渲染操作。在根据图1的一个实施方案中,示出了示例性着色器引擎顶点着色器1223和片段着色器1222。在一个实施方案中,顶点着色器1223处理各个顶点和顶点属性数据。片段着色器1222将通过光栅化生成的片段处理成一组颜色和单个深度值。在一个实施方案中,由着色器引擎渲染的图形数据的帧被存储在帧缓冲器中以用于显示(未示出)。
在一个实施方案中,工具应用程序1217与GPU驱动器1216进行通信,以便确定可用于在由GPU 1220执行着色器程序期间收集采样数据的资源。在一个实施方案中,出于着色器剖析目的而收集的数据可被存储在采样缓冲器1231中,如下面进一步详细解释的那样。在一个实施方案中,采样缓冲器1231为设备存储器1230的一部分,但也可为GPU 1220上的片上存储器。
参见图2,示例性帧200被识别,其由多个像素组成。四元组为一组线程,它们在GPU上一起运行并共享相同的着色器指令。在一个或多个渲染阶段205中执行对帧的图形数据价值的渲染,其中每个渲染阶段包括一个或多个绘制调用210,并且其中每个绘制调用包括一个或多个着色器程序215。示例性帧200包括R个渲染阶段、D个绘制调用和S个着色器程序的序列,其中每个绘制调用包括多个着色器程序。仅为了进行示意性的说明,每个绘制调用将由两个着色器程序组成:顶点着色器,其后是片段/像素着色器。本领域的普通技术人员将认识到并理解,在任何给定具体实施中,绘制调用可由更少或更多的着色器程序组成,并且在一些实施方案中,可能甚至在绘制调用和绘制调用之间也有所不同。本领域的普通技术人员还将认识到,每个源行均可映射到多个二进制指令,并且一个二进制指令可映射到多个源行。
在一个实施方案中,着色器剖析依赖于四元组的调度,以跟踪在四元组上执行的子句的生命期。参见图3,在一个实施方案中,GPU驱动器通过在新地址处复制着色器二进制数来在程序地址缓冲器320中生成条目。在执行着色器程序时,跟踪缓冲器330包含与程序地址缓冲器320中的条目相关联的条目。例如,跟踪缓冲器330可包含具有在程序地址缓冲器320中的条目的开始范围至结束范围内的值的程序计数器。跟踪缓冲器330由每个指令序列被调度、开始执行和结束执行的时间的时间戳信息组成。程序地址缓冲器320保留用于表示存储器中的二进制着色器的开始和结束的地址范围。
着色器程序310可由一个或多个子句(例如,子句A、B、C)组成,如图所示。子句是保证从开始到结束执行而不中断的指令序列。由于子句可具有不同数量的指令,因此可在着色器程序310中彼此重叠的不同子句下运行着色器指令。例如,子句C中的着色器指令至少与子句A和B中的一些指令重叠。多个子句可在硬件上并行运行,因此它们的开始时间和结束时间可能重叠。在硬件上执行时,子句中的每个指令可能具有不同的延迟。
在一个实施方案中,子句可始终在着色器程序310中的确定性偏移位置处开始。因此,可通过将当前子句的长度与当前子句的偏移量相加来计算将要执行的下一子句的起始位置。例如,重新参见图3,子句A和B为按序列进行的,因此,为了确定子句B的起始点,将子句A的偏移量与子句A的长度相加。
跟踪为在GPU执行着色器程序310时记录信息的过程。GPU可将有关着色器程序310的执行期间的重要事件、所生成的数据以及所使用的数据的经记录的信息记录到跟踪缓冲器330中。在一个实施方案中,跟踪缓冲器330具有预先确定的尺寸。稍后可使用经记录的信息,以用于着色器剖析目的。
当特定四元组被选择用于跟踪时,跟踪包被存储在跟踪缓冲器330中并且时间戳被重置。跟踪包可包括跟踪头3301消息、程序计数器3302和事件包3303。跟踪头3301包括关于跟踪包的一些初始信息。程序计数器3302包含着色器二进制数中的第一子句的偏移值。最后,事件包3303包含有关事件类型、预定事件时间和该子句的结束时间的信息。在一个实施方案中,通过对跟踪包中的预定类型事件的数量(例如,图3中的事件1、事件2和事件3)进行计数来隐式地确定有关已执行子句的数量的信息。
在一个实施方案中,采样缓冲器可伴随着程序地址缓冲器320。在一个或多个实施方案中,对于每个GPU命令(即,渲染情况下的绘制调用和计算情况下的调度),程序地址缓冲器320包含着色器二进制数的开始地址和结束地址。如参考图2所讨论的,对于每个绘制调用,可能存在两个此类地址范围,顶点着色器二进制数和片段着色器二进制数各一个此类地址范围。GPU驱动器1216将着色器二进制数映射在GPU命令的唯一地址处,以便避免由多个GPU命令所使用的相同着色器二进制指令的模糊性。基于与跟踪头3301相关联的程序计数器3302,可确定哪个绘制调用执行百着色器程序指令。对于每个GPU命令,本发明所公开的工具也可存储用于绘制调用的着色器二进制数。
在一个实施方案中,当跟踪缓冲器330已满时,被存储在跟踪缓冲器330中的数据被复制到更大的存储空间(采样缓冲器340)。在一个实施方案中,采样缓冲器340包含来自跟踪缓冲器的信息,这些跟踪缓冲器来自迄今为止被选择用于采样的所有四元组。一个实施方案中,这些四元组可使用不同的着色器并且可为不同的GPU命令的一部分。同时,正在针对预定进行剖析的另一个四元组来生成跟踪包。
在一个实施方案中,在跟踪缓冲器330已满之前,为了生成跟踪包而选择的四元组可到达着色器的末端(即,在跟踪缓冲器中所记录的最后一个事件包中的子句包括着色器的最后一个指令)。在此类情况下,如果在跟踪缓冲器330中有足够空间,则可选择新的四元组并将所生成的跟踪包存储在跟踪缓冲器中,直到跟踪缓冲器没有任何空间。
在另一个实施方案中,可在执行着色器程序时到达分支。在着色器二进制数中到达分支时,将新的跟踪头置于跟踪缓冲器330中,以指示子句的结束。在一个实施方案中,在分支之后,新的头包将带有不同的程序计数器。在一个实施方案中,如果采用分支,则四元组将与最后一个跟踪头或事件包相同,然而,由于该分支,其可能具有不同的起始程序计数器。因此,在一个实施方案中,跟踪缓冲器330可包含不同数量的跟踪头包,其后是包含不同数量的跟踪事件包。
被存储在采样缓冲器340中的数据可用于识别着色器中的每个源代码指令的执行所花费的时间量。在一个实施方案中,对于每个绘制调用,确定在源代码的每一行花费了多少时间。更具体地,在一个实施方案中,本发明所公开的着色器剖析操作为着色器的每个源行提供相关联的GPU时间成本和百分比。此信息为程序员提供了改进其代码以更有效地执行的机会。程序员可逐行分析源代码,以确定它们的源代码的每一步消耗了多少时间。
参见图4,在一个实施方案中,其公开了根据流程图400的用于着色器剖析的采样数据方法。在框401处,捕获进行着色器剖析的应用程序的GPU API跟踪。“捕获”是指识别并隔离所有指令并且在一个实施方案中识别并隔离用于渲染完整帧的Metal状态。例如,系统可使用GPU帧调试器来捕获GPU API跟踪。然后,在框402处,在GPU上运行所捕获的API跟踪。在一个实施方案中,例如通过重放应用程序来在GPU上反复地重放所捕获的API跟踪以生成足够的样本。在框403处,生成条目以被存储在程序地址缓冲器中。在一个实施方案中,在框402处重放所捕获的API跟踪时生成程序地址缓冲器条目。程序地址缓冲器条目可包含表示存储器中的每个着色器二进制数程序的开始指令地址和结束指令地址的开始值和结束值。跟踪包头可具有在程序地址缓冲器条目的范围内的程序计数器。在一个实施方案中,驱动器在每个GPU命令(例如,绘图调用/调度调用)的不同起始程序地址处复制着色器二进制数,并将该信息存储在程序地址缓冲器中作为新的程序地址缓冲器条目。
在一个实施方案中,对于每个着色器程序,程序地址缓冲器可包含其对应的渲染索引、绘制调用索引、开始地址和结束地址。在一个实施方案中,开始地址和结束地址是指存储器中存储着色器程序的位置以及它们由GPU执行的位置。由于多个绘制调用可使用单个着色器,因此每次使用可被赋予其自身的地址范围,使得所捕获的采样信息可用于确定适当的绘制调用。
在框404处,生成跟踪包,这些跟踪包包含关于GPU上的API跟踪的执行的信息。在一个实施方案中,此信息稍后用于着色器剖析目的。在一个实施方案中,跟踪包包含诸如着色器中的第一指令序列(例如,子句)的程序计数器的信息,并且还包含与预定时间、开始时间和结束时间相关联的时间戳信息。
在框405处,将在框403处中的程序地址缓冲器生成的条目及在框404处生成的跟踪缓冲器中的与其相关联的内容被存储在采样缓冲器中。在一个实施方案中,一旦跟踪缓冲器达到其全满容量,便将内容复制到采样缓冲器中。
在一个实施方案中,对于每个渲染索引(即,编码器),重复框402至405,直到所有编码器完成。编码器为一些绘图调用的集合。在一个实施方案中,GPU驱动器可将每个编码器的执行与生成跟踪包的时间相关联。在一个实施方案中,只有与特定编码器相关联的绘制指令才能将跟踪包置于跟踪缓冲器中。
在框406处,确定GPU上的API跟踪的重复运行是否提供了足够的样本以用于分析。例如,在框407处,在API跟踪运行指定的次数或一定量的时间之后,重放器可停止。这将确保采样缓冲器340从驱动器接收到足够的样本,以便提供准确的着色器剖析结果。再次参见图1,在一个实施方案中,GPU驱动器1216与GPU 1220和工具应用程序1217进行通信,以提供所需数据并将其存储在采样缓冲器340中。
参见图5,在一个实施方案中,公开了根据流程图500的一种分析数据以进行着色器剖析的方法。在框501处,检索为进行着色器剖析而收集的数据。在一个实施方案中,根据相对于图3和图4所公开的方法来对数据进行采样。在一个实施方案中,从图3所示的采样缓冲器340来检索数据。在一个实施方案中,采样缓冲器340包含与多个四元组相关联的执行信息。由于在着色器程序的执行期间对GPU活动的跟踪,收集执行信息。
在一个实施方案中,在框502处,对所检索的数据进行解析和解码。在一个实施方案中,识别并标记保证无中断执行的指令序列。这些标记可识别与它们的预定时间、开始时间和结束时间相关联的时间戳。
例如,可基于以上所公开的数据收集技术来从跟踪头和事件包获取所需数据。在一个实施方案中,在从硬件复制每个跟踪缓冲器330之后,GPU驱动器1216可在采样缓冲器340中附加标记。然后,每个跟踪缓冲器可一次读取一个标记。在一个实施方案中,在从跟踪缓冲器的头包中提取程序计数器信息时,对配置事件类型及其时间戳进行解析。事件类型可包括“预定事件”标记和“结束事件”标记。由于事件可在GPU上重叠,因此事件类型可包含多个预定事件,其后是结束事件,其后是更多的预定事件和结束事件。在一个实施方案中,预定事件标记可指示下一子句的开始。并且,结束事件标记可指示尚未结束的最早预定子句的结束。
在框503处,计算在框502处所识别的不中断的指令序列的执行持续时间。在框502处,标记每个指令序列(例如,子句)的预定时间和结束时间。然而,多个指令序列可在执行持续时间的至少一部分内同时运行。因此,如果执行成本是基于每个子句的开始时间和结束时间造成的,则所有单个持续时间的总和超过实际时间。因此,为了计算准确的执行持续时间,必须考虑序列的重叠周期。
在一个实施方案中,执行成本可被定义为从不中断的指令序列(例如,子句)的预定到结束所花费的GPU时钟周期的数量。在一个实施方案中,跟踪头/程序计数器被插入跟踪缓冲器中时重置的时间戳指示从记录时间开始的GPU周期的数量。例如,预定时间为20意味着从对应子句的信息被记录在跟踪头中的时间开始,在20个GPU周期之后预定该子句。在目前仅单个子句正在运行的情况下,100个GPU周期的结束时间意味着该子句的执行成本为80个GPU时钟周期(100—20=80个GPU时钟周期)。
在一个实施方案中,在框503处,以线性时间计算每个序列指令(例如,子句)的执行持续时间。为了说明指令序列执行中的重叠,在重叠期的子句中平等地分配成本。例如,对于并行运行的n个子句,分配重叠区间的1/n倍的成本。换句话讲,对于其他子句同时运行的持续时间,在所有活动子句中平等地分配这个时间。以下公式总结了根据本公开的实施方案的计算执行持续时间的方法:
时间增量=当前事件时间戳-前一事件时间戳
上次持续时间=每个子句花费的时间+上一子句持续时间
如以上公式中所示的,在一个实施方案中,为了以线性时间计算每个子句的执行持续时间,每个遇到的事件存储当前事件的上次持续时间。通过将根据上次接收到事件时间戳得到的递增的时间增量除以事件到达时的活动子句的总数(1/n)来计算上次持续时间。由于这个上次持续时间的单调增加,可通过取事件结束和预定时所计算的上次持续时间的差值来计算子句的持续时间。每个时间戳(即,当前时间戳)的上次持续时间基于如上所讨论的上次持续时间。
参见图6,其示出了多个示例性子句,每个示例性子句在其执行期间与至少一个其他子句重叠。在一个实施方案中,事件的每个后续时间戳可始终大于或等于前一个时间戳(即,单调递增)。下面,表1列出了用于确定图6的示例中的每个子句的执行持续时间的计算。关于子句1,由于在时间戳1没有“当前活动子句”,因此在时间戳1处,子句1的上次持续时间为零。基于上面讨论的公式来计算剩余时间戳和子句。
表1
参见以上表1,通过将子句1结束的时间戳的上次持续时间(即,21/6,在时间戳5)减去子句1被预定的时间戳的上次持续时间(即,0,在时间戳1)来将子句1的执行持续时间计算为2 1/6。通过将子句2结束的时间戳的上次持续时间(即,3,在时间戳7)减去子句2被预定的时间戳的上次持续时间(即,1,在时间戳2)来将子句2的执行持续时间计算为2。通过将子句3结束的时间戳的上次持续时间(即,31/2,在时间戳8)减去子句3被预定的时间戳的上次持续时间(即,11/2,在时间戳2)来将子句3的执行持续时间计算为2。最后,通过将子句4结束的时间戳的上次持续时间(即,5 1/2,在时间戳10)减去子句4被预定的时间戳的上次持续时间(即,2 2/3,在时间戳6)来将子句4的执行持续时间计算为2 5/6。
在图6的示例中,子句1至4的跟踪缓冲器可指示第一事件时间戳1和上次事件时间戳10。通过将上次事件时间戳减去第一事件时间戳来计算至少一个子句活动时四个子句的执行时间。通过将所有子句的执行持续时间相加来得出子句的执行时间总和(即,2 1/6+2+2+2 5/6=9)。
重新参见图5,在框504处,将每个指令序列(例如,子句)的所计算的执行持续时间归一化。在一个实施方案中,归一化考虑到每个指令序列在执行前保留在就绪队列中的时间。例如,在指令序列被选择直到其被预定之间可存在一定的时间段。为了确定每个指令序列的准确的执行周期,必须考虑这个等待时间段。
相对于以上公开的采样方法,归一化包括跟踪头的第一子句的预定所花费的时间量的衰减。这是子句处于等待预定的就绪队列上的持续时间(即,在等待执行的硬件队列上花费的时间)。参见图7的跟踪缓冲器710,为了归一化与跟踪头7301有关的所有子句的执行持续时间,根据以上所公开的方法在子句持续时间图表715中计算每个子句的持续时间。记录时间图表720由记录时间(例如,时间1、时间2和时间3)以及用于预定事件的时间戳(即,时间戳(I))组成。最后,归一化时间图表730表明,归一化时间的计算方法是将记录时间除以时间戳。在一个实施方案中,如果跟踪缓冲器中存在多于一个跟踪头(例如,跟踪头7304),并且前一个跟踪头包与第二跟踪头7304相同来自同一个着色器,则使用相同的预定时间(即,时间戳(I))。另一方面,如果当前跟踪包来自不同的着色器,则使用第一子句的预定时间(即,着色器的时间戳)来归一化该持续时间。例如,将与事件包4和5相关联的时间4和时间5除以跟踪头7304的时间戳(II)。
返回图5,在框505处,确定是否已计算出所有采样的指令序列(例如,子句)的归一化执行持续时间。如果仍有至少一个指令序列尚未进行分析,则该方法返回到框503。在完成对所有采样序列的分析后,该方法进行到框506。
在一个实施方案中,针对在采样缓冲器中存在的每个跟踪缓冲器,重复框503和504,直到所有的跟踪缓冲器被处理。在一个实施方案中,上文所述的过程可在系统上的多个可用硬件线程上同时执行,并且数据结构对于每个线程保持分离以存储包括程序计数器、持续时间、子句索引(即,从程序计数器开始)、先前跟踪包的程序计数器(如果适用于归一化目的)的样本信息。随后执行合并步骤,以将来自所有线程的数据合并成单个数据结构,然后可通过程序计数器进行排序。
在框506处,计算指令序列(例如,子句)内的每个着色器二进制指令样本的持续时间。在一个实施方案中,确定每个指令序列内的二进制指令和每个指令序列的执行持续时间。然后,计算子句内的每个指令的相对延迟。给定子句中的所有指令的确定性延迟的分数和确定性延迟的总和为这个子句的指令的相对延迟。最后,存在于样本中的子句的执行时间基于其相对延迟而按比例分配在每个贡献指令中,以确定每个指令的持续时间。
例如,参见图8,着色器二进制数810可由多个重叠子句(例如,子句A、B和C)组成。子句C可由指令1、2、3和4组成。在一个实施方案中,计算每个着色器二进制指令的相对延迟(在相对延迟图表820中示出)。相对延迟可基于GPU周期。然后,为了计算分配时间图表830中的持续时间,先前步骤中得出的子句C的执行持续时间基于它们的相对延迟而按比例分配在指令行间。例如,由于着色器二进制数810的指令1占用子句C的整个13个周期中的4个周期,因此指令1的分配时间被计算为400个GPU周期。
在一个实施方案中,基于相对于图3和图4所述的所公开的方法来对数据进行采样。如前所述,在此类实施方案中,图3的程序地址缓冲器320包含表示存储器中的二进制着色器程序的开始和结束的程序地址范围。在一个实施方案中,确定每个给定程序地址范围内的样本数量。在一个实施方案中,通过在上文创建的合并数据结构上执行二分搜索来确定样本的数量(即,图4的框406)。在一个实施方案中,对于每个程序地址,在(样本总数的对数)+(程序地址范围内的样本数)渐近时间中确定由硬件采集的样本数。因此,在一个实施方案中,可通过(程序地址的数量乘以样本数的对数)+(采样缓冲器中的样本总数)来确定总的渐近时间。
在一个实施方案中,对于与当前处理程序地址范围相关联的每个样本,可确定构成着色器二进制数的子句的所有底层指令的偏移量以及每个底层指令在总子句持续时间中执行的时间分数。由于驱动器(例如,GPU驱动器1216)将每个单独的GPU命令的着色器二进制数映射到单独的程序地址中,因此一旦通过对每个程序地址范围的两个二进制搜索找到样本,便可找到属于特定GPU命令的所有子句。
参见图3,在一个实施方案中,为了确定第一子句(即,跟踪缓冲器330中的事件1)的偏移值,从程序地址范围中减去样本的程序计数器(即,从地址范围中的起始点减去程序计数器3302)。在一个实施方案中,在一个实施方案中,可使用助手库来模拟硬件将着色器指令转换为子句的方式。例如,助手库可基于给定子句偏移值来提供子句的长度。在一个实施方案中,可通过将子句的尺寸添加到当前子句偏移来找到下一子句的起始点。对于具有索引n的子句,这个过程被重复n次。
在一个实施方案中,助手库还可提供子句内的每个指令的相对延迟。存在于样本中的子句的执行持续时间基于其相对延迟而按比例分配在每个贡献指令之间。
参见图5中的框507,将针对每个指令序列而框504处所计算的归一化值并入,以用于该序列内的二进制指令。在一个实施方案中,基于包含同一跟踪缓冲器中的先前跟踪包的程序计数器的每个样本来确定归一化。在一个实施方案中,可针对每个底层指令来创建每个着色器二进制指令样本。在一个实施方案中,这些样本还可具有有关哪个GPU命令发布这个着色器的信息。随后可将新的样本添加到新的数据结构。在一个实施方案中,以上过程可使用可用数量的硬件线程以及在处理步骤之后合并的数据同时完成。
在图5的框508处,将二进制地址偏移量映射到源行数量。在一个实施方案中,二进制地址与源行偏移量之间可能存在多对多关系。在一个实施方案中,可使用软件调试器应用程序来获取该你映射信息。由于每个二进制指令可因为多对多关系而映射到“L”个源行,因此可通过迭代每个处理样本来确定二进制指令映射到的源行。然后通过1/L来分配样品持续时间成本,其中L为通过当前二进制指令映射的源行的数量。经过所有样本后,每个源行可能会有与之相关的持续时间。由于每个样本也可具有关于执行哪个GPU命令的信息,因此可针对执行这个源行的每个GPU命令来确定每个行成本。
最后,在框509处,将基于由硬件调度的时间戳而生成的时间(例如,以“GPU周期”或时钟周期为单位)转换成实际GPU时间。在一个实施方案中,时间戳提供所有源行和GPU命令的相对成本。然而,为了获取实际GPU时间,性能计数器可被单独使用,以确定每个GPU命令所花费的GPU时间。在一个实施方案中,该时间基于每个源行成本而按比例分配。在这个步骤之后,每个源行具有针对着色器的每个源行的相关联的GPU时间成本和成本百分比。
在框510处,在用户界面中向用户显示结果。用户界面为着色器的每个源行提供GPU时间成本和成本百分比。
应当理解,以上描述旨在是示例性的而非限制性的。已呈现材料以使得本领域的任何技术人员能够作出并使用受权利要求保护的发明,并在特定实施方案的上下文中提供该材料,其变化对于本领域的技术人员而言将是显而易见的(例如,可彼此结合使用所公开的实施方案中的一些实施方案)。在实践中,被指定为保存运行时采样数据的存储器的量可为固定的。
此外,图4和图5示出说明了根据各种具体实施的操作的流程图。在一个或多个实施方案中,可省略、重复和/或以不同顺序执行这些步骤中的一个或多个步骤。因此,这些附图所示步骤的具体布置不应被理解为限制该技术的范围。因此,应当参考所附权利要求以及赋予此类权利要求的等同形式的完整范围来确定本发明的范围。在所附权利要求中,术语“包括(including)”和“其中(in which)”被用作相应术语“包括(comprising)”和“其中(wherein)”的通俗英语等同形式。
Claims (20)
1.一种程序开发方法,包括:
获得编译着色器程序的执行的跟踪,所述编译着色器程序具有多个重叠的指令序列,每个重叠的指令序列具有一个或多个二进制指令,所述编译着色器程序具有对应的多个源代码指令;
多次执行所述跟踪,以获得用于所述多个重叠的指令序列的跟踪包内容;
识别所述编译着色器程序的在所述执行期间不中断的重叠的指令序列并且解析所述跟踪包内容以确定所识别的指令序列的每个二进制指令的持续时间;
基于所解析的跟踪包内容来确定所识别的指令序列的执行持续时间;
识别与所识别的指令序列的每个二进制指令对应的所述源代码指令中的一个或多个源代码指令;
基于经识别的源代码指令的对应二进制指令的所述持续时间来确定所识别的指令序列的经识别的源代码指令中的每个经识别的源代码指令的持续时间;以及
显示经识别的源代码指令和每个源代码指令的对应的持续时间。
2.根据权利要求1所述的方法,其中确定所识别的指令序列的每个二进制指令的持续时间包括:
识别所识别的指令序列内的所述二进制指令间的相对延迟;以及
基于所确定的相对延迟来将所述执行持续时间分配在所识别的指令序列内的所述二进制指令间。
3.根据权利要求1所述的方法,还包括:
确定同时执行的重叠的指令序列的数目;以及
在所确定的同时执行的指令序列中平等地分配执行成本。
4.根据权利要求1所述的方法,其中所述跟踪包内容包括以下各项中的至少一者:
所述编译着色器程序内的第一指令序列的偏移值;
用于所述多个重叠的指令序列的执行的预定时间;和
用于所述多个重叠的指令序列的所述执行的结束时间。
5.根据权利要求4所述的方法,还包括:
基于与所述多个重叠的指令序列中的至少一个指令序列相关联的所述预定时间来归一化所述多个重叠的指令序列的所述执行持续时间。
6.根据权利要求1所述的方法,还包括:
确定所述多个重叠的指令序列中的每个重叠的指令序列的地址范围,所述地址范围指示在所述跟踪的执行期间相应的二进制指令被存储在其中的存储器的区域。
7.根据权利要求6所述的方法,其中确定所识别的指令序列的每个二进制指令的持续时间基于与所识别的指令序列对应的所述地址范围、预定时间和结束时间。
8.一种非暂态程序存储设备,所述非暂态程序存储设备包括被存储在其上的指令,所述指令使得一个或多个处理器:
获得编译着色器程序的执行的跟踪,所述编译着色器程序具有多个重叠的指令序列的编译着色器程序,每个重叠的指令序列具有一个或多个二进制指令,所述编译着色器程序具有对应的多个源代码指令;
多次执行所述跟踪,以获得用于所述多个重叠的指令序列的跟踪包内容;
识别所述编译着色器程序的在执行所述跟踪期间不中断的重叠的指令序列并且解析所述跟踪包内容以确定所识别的指令序列的每个二进制指令的持续时间;
基于所解析的跟踪包内容来确定所识别的指令序列的执行持续时间;
识别与所识别的指令序列的每个二进制指令对应的所述源代码指令中的一个或多个源代码指令;
基于经识别的源代码指令的对应二进制指令的所述持续时间来确定所识别的指令序列的经识别的源代码指令中的每个经识别的源代码指令的持续时间;以及
显示经识别的源代码指令和每个源代码指令的对应的持续时间。
9.根据权利要求8所述的非暂态程序存储设备,其中用于确定所识别的指令序列的每个二进制指令的持续时间的所述指令包括使得所述一个或多个处理器进行以下操作的指令:
识别所识别的指令序列内的所述二进制指令间的相对延迟;以及
基于所确定的相对延迟来将所述执行持续时间分配在所识别的指令序列内的所述二进制指令间。
10.根据权利要求8所述的非暂态程序存储设备,所述指令还使得所述一个或多个处理器进行以下操作:
确定同时执行的重叠的指令序列的数目;以及
在所确定的同时执行的指令序列中平等地分配执行成本。
11.根据权利要求8所述的非暂态程序存储设备,其中所述跟踪包内容包括以下各项中的至少一者:
所述编译着色器程序内的第一指令序列的偏移值;
用于所述多个重叠的指令序列的执行的预定时间;和
用于所述多个重叠的指令序列的所述执行的结束时间。
12.根据权利要求11所述的非暂态程序存储设备,还包括用于进行以下操作的指令:
基于与所述多个重叠的指令序列中的至少一个指令序列相关联的所述预定时间来归一化所述多个重叠的指令序列的执行持续时间。
13.根据权利要求8所述的非暂态程序存储设备,还包括用于进行以下操作的指令:
确定所述多个重叠的指令序列中的每个重叠的指令序列的地址范围,所述地址范围指示在所述跟踪的执行期间相应的二进制指令被存储在其中的存储器的区域。
14.根据权利要求13所述的非暂态程序存储设备,其中用于确定所识别的指令序列的每个二进制指令的持续时间的所述指令基于与所识别的指令序列对应的所述地址范围、预定时间和结束时间。
15.一种用于程序开发的系统,包括:
中央处理单元CPU,
图形处理单元GPU,和
存储器,所述存储器耦接到所述CPU和所述GPU,其中所述存储器包括用于进行以下操作的指令:
获得编译着色器程序的执行的跟踪,所述编译着色器程序具有多个重叠的指令序列,每个重叠的指令序列具有一个或多个二进制指令,所述编译着色器程序具有对应的多个源代码指令;
多次执行所述跟踪,以获得用于所述多个重叠的指令序列的跟踪包内容;
识别所述编译着色器程序的在执行所述跟踪期间不中断的重叠的指令序列并且解析所述跟踪包内容以确定所识别的指令序列的每个二进制指令的持续时间;
基于所解析的跟踪包内容来确定所识别的指令序列的执行持续时间;
识别与所识别的指令序列的每个二进制指令对应的所述源代码指令中的一个或多个源代码指令;
基于经识别的源代码指令的对应二进制指令的所述持续时间来确定所识别的指令序列的经识别的源代码指令中的每个经识别的源代码指令的持续时间;以及
显示经识别的源代码指令和每个源代码指令的对应的持续时间。
16.根据权利要求15所述的系统,其中用于确定所识别的指令序列的每个二进制指令的持续时间的所述指令包括用于使得一个或多个处理器进行以下操作的指令:
识别所识别的指令序列内的所述二进制指令间的相对延迟;以及
基于所确定的相对延迟来将所述执行持续时间分配在所识别的指令序列内的二进制指令间。
17.根据权利要求15所述的系统,其中所述指令还使得所述一个或多个处理器进行以下操作:
确定同时执行的重叠的指令序列的数目;以及
在同时执行的所确定的指令序列中平等地分配执行成本。
18.根据权利要求15所述的系统,其中所述跟踪包内容包括以下各项中的至少一者:
所述编译着色器程序内的第一指令序列的偏移值;
用于所述多个重叠的指令序列的执行的预定时间;和
用于所述多个重叠的指令序列的所述执行的结束时间。
19.根据权利要求18所述的系统,还包括用于进行以下操作的指令:
基于与所述多个重叠的指令序列中的至少一个指令序列相关联的所述预定时间来归一化所述所述多个重叠的指令序列的执行持续时间。
20.根据权利要求15所述的系统,还包括用于进行以下操作的指令:
确定所述多个重叠的指令序列中的每个重叠的指令序列的地址范围,所述地址范围指示在所述跟踪的执行期间相应的二进制指令被存储在其中的存储器的区域。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201762514513P | 2017-06-02 | 2017-06-02 | |
US62/514,513 | 2017-06-02 | ||
US15/617,625 US10310830B2 (en) | 2017-06-02 | 2017-06-08 | Shader profiler |
US15/617,625 | 2017-06-08 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108986012A CN108986012A (zh) | 2018-12-11 |
CN108986012B true CN108986012B (zh) | 2020-05-26 |
Family
ID=64459748
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810553107.7A Active CN108986012B (zh) | 2017-06-02 | 2018-06-01 | 着色器剖析器 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10310830B2 (zh) |
CN (1) | CN108986012B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10546416B2 (en) * | 2018-03-02 | 2020-01-28 | Microsoft Technology Licensing, Llc | Techniques for modifying graphics processing unit (GPU) operations for tracking in rendering images |
US11138091B2 (en) * | 2018-12-12 | 2021-10-05 | Sap Se | Regression analysis platform |
US11386518B2 (en) * | 2019-09-24 | 2022-07-12 | Advanced Micro Devices, Inc. | Exception handler for sampling draw dispatch identifiers |
Family Cites Families (39)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5835705A (en) | 1997-03-11 | 1998-11-10 | International Business Machines Corporation | Method and system for performance per-thread monitoring in a multithreaded processor |
US7548238B2 (en) | 1997-07-02 | 2009-06-16 | Nvidia Corporation | Computer graphics shader systems and methods |
JP3684831B2 (ja) * | 1998-03-31 | 2005-08-17 | セイコーエプソン株式会社 | マイクロコンピュータ、電子機器及びデバッグシステム |
US7379860B1 (en) * | 2002-03-29 | 2008-05-27 | Cypress Semiconductor Corporation | Method for integrating event-related information and trace information |
US7996839B2 (en) | 2003-07-16 | 2011-08-09 | Hewlett-Packard Development Company, L.P. | Heterogeneous processor core systems for improved throughput |
US7095416B1 (en) * | 2003-09-22 | 2006-08-22 | Microsoft Corporation | Facilitating performance analysis for processing |
US8136096B1 (en) * | 2004-07-23 | 2012-03-13 | Green Hills Software, Inc. | Backward post-execution software debugger |
US7788670B2 (en) | 2004-10-26 | 2010-08-31 | Intel Corporation | Performance-based workload scheduling in multi-core architectures |
US7548244B2 (en) * | 2005-01-12 | 2009-06-16 | Sony Computer Entertainment Inc. | Interactive debugging and monitoring of shader programs executing on a graphics processor |
US8769495B1 (en) | 2005-09-30 | 2014-07-01 | Sony Computer Entertainment Inc. | Systems and methods for debugging in a multiprocessor environment |
CN1928918B (zh) * | 2005-10-14 | 2012-10-10 | 威盛电子股份有限公司 | 图形处理装置及于图形处理装置中执行着色操作的方法 |
US8375368B2 (en) | 2006-06-20 | 2013-02-12 | Google Inc. | Systems and methods for profiling an application running on a parallel-processing computer system |
US8468532B2 (en) | 2006-06-21 | 2013-06-18 | International Business Machines Corporation | Adjusting CPU time allocated to next thread based on gathered data in heterogeneous processor system having plurality of different instruction set architectures |
US8254455B2 (en) | 2007-06-30 | 2012-08-28 | Microsoft Corporation | Computing collocated macroblock information for direct mode macroblocks |
US8001531B1 (en) * | 2007-07-30 | 2011-08-16 | Nvidia Corporation | Translation of a shader assembly language binary for debugging a graphics application running on a remote device |
US8296738B1 (en) * | 2007-08-13 | 2012-10-23 | Nvidia Corporation | Methods and systems for in-place shader debugging and performance tuning |
US7987345B2 (en) | 2007-09-28 | 2011-07-26 | Broadcom Corporation | Performance monitors in a multithreaded processor architecture |
US20090189896A1 (en) | 2008-01-25 | 2009-07-30 | Via Technologies, Inc. | Graphics Processor having Unified Shader Unit |
EP2192780A1 (en) | 2008-11-28 | 2010-06-02 | Thomson Licensing | Method for video decoding supported by Graphics Processing Unit |
GB2466078B (en) * | 2008-12-15 | 2013-11-13 | Advanced Risc Mach Ltd | Apparatus and method for tracing activities of a shader program executed on shader circuitry of a data processing apparatus |
US9582919B2 (en) | 2009-10-09 | 2017-02-28 | Microsoft Technology Licensing, Llc | Automatic run-time identification of textures |
US8566836B2 (en) | 2009-11-13 | 2013-10-22 | Freescale Semiconductor, Inc. | Multi-core system on chip |
US8890880B2 (en) | 2009-12-16 | 2014-11-18 | Intel Corporation | Graphics pipeline scheduling architecture utilizing performance counters |
WO2011078858A1 (en) | 2009-12-23 | 2011-06-30 | Intel Corporation | Image processing techniques |
US20110289485A1 (en) | 2010-05-21 | 2011-11-24 | International Business Machines Corporation | Software Trace Collection and Analysis Utilizing Direct Interthread Communication On A Network On Chip |
US8462166B2 (en) | 2010-10-01 | 2013-06-11 | Apple Inc. | Graphics system which measures CPU and GPU performance |
US8677186B2 (en) * | 2010-12-15 | 2014-03-18 | Microsoft Corporation | Debugging in data parallel computations |
US9196013B2 (en) | 2011-10-31 | 2015-11-24 | Apple Inc. | GPU workload prediction and management |
US9235921B2 (en) | 2011-11-08 | 2016-01-12 | Imagination Technologies Limited | Profiling ray tracing renderers |
US9304570B2 (en) | 2011-12-15 | 2016-04-05 | Intel Corporation | Method, apparatus, and system for energy efficiency and energy conservation including power and performance workload-based balancing between multiple processing elements |
US8572573B2 (en) * | 2012-03-09 | 2013-10-29 | Nvidia Corporation | Methods and apparatus for interactive debugging on a non-preemptible graphics processing unit |
US20140089699A1 (en) * | 2012-09-27 | 2014-03-27 | Advanced Micro Devices | Power management system and method for a processor |
US8941676B2 (en) | 2012-10-26 | 2015-01-27 | Nvidia Corporation | On-chip anti-alias resolve in a cache tiling architecture |
US9104480B2 (en) | 2012-11-15 | 2015-08-11 | International Business Machines Corporation | Monitoring and managing memory thresholds for application request threads |
US10152820B2 (en) | 2013-03-15 | 2018-12-11 | Intel Corporation | Texture address mode discarding filter taps |
US9342857B2 (en) | 2013-03-29 | 2016-05-17 | Nvidia Corporation | Techniques for locally modifying draw calls |
US9390541B2 (en) | 2013-04-09 | 2016-07-12 | Intel Corporation | Programmable tile shader |
WO2014204437A2 (en) | 2013-06-18 | 2014-12-24 | Empire Technology Development Llc | Tracking core-level instruction set capabilities in a chip multiprocessor |
US9483264B2 (en) * | 2014-05-09 | 2016-11-01 | Samsung Electronics Co., Ltd. | Trace-based instruction execution processing |
-
2017
- 2017-06-08 US US15/617,625 patent/US10310830B2/en active Active
-
2018
- 2018-06-01 CN CN201810553107.7A patent/CN108986012B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
US20180349119A1 (en) | 2018-12-06 |
CN108986012A (zh) | 2018-12-11 |
US10310830B2 (en) | 2019-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20150355996A1 (en) | System, method, and computer program product for collecting execution statistics for graphics processing unit workloads | |
JP5123323B2 (ja) | アプリケーションの変更前にコマンドの変更のパフォーマンスを解析するためのグラフィックコマンド管理ツールおよびその方法 | |
EP2438576B1 (en) | Displaying a visual representation of performance metrics for rendered graphics elements | |
US7950003B1 (en) | Heads-up-display software development tool for analyzing and optimizing computer software | |
US10559057B2 (en) | Methods and apparatus to emulate graphics processing unit instructions | |
US9799087B2 (en) | Shader program profiler | |
CN108986012B (zh) | 着色器剖析器 | |
US7027972B1 (en) | System for collecting and analyzing graphics data and method thereof | |
US9030480B2 (en) | Triggering performance event capture via pipelined state bundles | |
GB2491490A (en) | Emitting coherent output from multiple execution threads using the printf command | |
US20220100512A1 (en) | Deterministic replay of a multi-threaded trace on a multi-threaded processor | |
JP2022089162A (ja) | グラフィック処理ユニットロング命令トレースを生成するための方法および装置 | |
US9013494B2 (en) | Heads-up-display software development tool | |
US11474924B2 (en) | Graphics processing unit performance analysis tool | |
KR20130017923A (ko) | 프로그램 분석 장치 및 분석용 프로그램을 기록한 컴퓨터 판독 가능한 저장매체 | |
US10198784B2 (en) | Capturing commands in a multi-engine graphics processing unit | |
US8963932B1 (en) | Method and apparatus for visualizing component workloads in a unified shader GPU architecture | |
CN112445855A (zh) | 用于图形处理器芯片的可视化分析方法和可视化分析装置 | |
US20230109752A1 (en) | Deterministic replay of a multi-threaded trace on a multi-threaded processor | |
WO2020073200A1 (zh) | 调试程序的方法和系统 | |
CN114579131A (zh) | 用于获取硬件性能数据的方法、设备和系统 | |
Hackenberg et al. | High resolution program flow visualization of hardware accelerated hybrid multi-core applications | |
CN111383164A (zh) | 图形处理单元、计算系统及其操作方法 | |
US11386518B2 (en) | Exception handler for sampling draw dispatch identifiers | |
Oeste et al. | Towards parallel performance analysis tools for the openSHMEM standard |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |