CN116205783B - 一种基于gpu着色器代码的调试方法、装置及存储介质 - Google Patents
一种基于gpu着色器代码的调试方法、装置及存储介质 Download PDFInfo
- Publication number
- CN116205783B CN116205783B CN202310448201.7A CN202310448201A CN116205783B CN 116205783 B CN116205783 B CN 116205783B CN 202310448201 A CN202310448201 A CN 202310448201A CN 116205783 B CN116205783 B CN 116205783B
- Authority
- CN
- China
- Prior art keywords
- assembler
- gpu
- shader
- breakpoint
- execution mode
- 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 title claims abstract description 47
- 238000004458 analytical method Methods 0.000 claims abstract description 21
- 230000015654 memory Effects 0.000 claims description 36
- 238000009877 rendering Methods 0.000 claims description 33
- 230000008569 process Effects 0.000 claims description 22
- 238000004891 communication Methods 0.000 claims description 7
- 238000004590 computer program Methods 0.000 claims description 5
- 238000012545 processing Methods 0.000 description 16
- 238000010586 diagram Methods 0.000 description 6
- 239000012634 fragment Substances 0.000 description 3
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000007405 data analysis Methods 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- HPTJABJPZMULFH-UHFFFAOYSA-N 12-[(Cyclohexylcarbamoyl)amino]dodecanoic acid Chemical compound OC(=O)CCCCCCCCCCCNC(=O)NC1CCCCC1 HPTJABJPZMULFH-UHFFFAOYSA-N 0.000 description 1
- 101710092886 Integrator complex subunit 3 Proteins 0.000 description 1
- 102100025254 Neurogenic locus notch homolog protein 4 Human genes 0.000 description 1
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005856 abnormality Effects 0.000 description 1
- 230000006978 adaptation Effects 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 238000003491 array Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000011960 computer-aided design Methods 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 239000004973 liquid crystal related substance Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000002093 peripheral effect Effects 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 230000004044 response Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000013024 troubleshooting Methods 0.000 description 1
- 230000000007 visual effect Effects 0.000 description 1
Classifications
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种基于GPU着色器代码的调试方法、装置及存储介质,该方法可以包括:将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;GPU按照所述汇编/二进制指令执行汇编程序并识别汇编程序的位置和GPU执行模式,若与预先设置条件一致,暂停所述汇编程序的运行并将处理的数据结果执行回传;解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析。
Description
技术领域
本发明实施例涉及图像处理技术领域,尤其涉及一种基于GPU着色器代码的调试方法、装置及存储介质。
背景技术
采用可编程渲染管线架构的图形处理器(Graphic Processing Unit,GPU),在着色阶段是以用户编写的着色器代码来渲染任务的,也就是说,不同的着色器代码负责不同阶段的顶点或像素渲染任务。着色器代码记录着顶点、像素的相关属性,我们称之为图元的输入输出。每个着色器代码决定了负责渲染任务的图元输入输出的结果,而每个着色器代码片段由于需求的不同,差别很大。对于很多渲染场景而言,用户自己编写的着色器代码不一定每次都能正确绘制出预期的结果并且在图形绘制过程中会出现某一帧的绘制出现问题,因此就需要去查看着色器代码是否编写的有问题或故障,由于基于自研的GPU都有其固定的着色器解编码和运行方式,增加了用户排查问题或故障的时间,降低了问题的定位效率。
发明内容
有鉴于此,本发明实施例期望提供一种基于GPU着色器代码的调试方法、装置及存储介质,能够在保证用户操作简单、使用流畅的前提下,同时提升GPU着色器代码开发和故障排查的效率。
本发明实施例的技术方案是这样实现的:
第一方面,本发明实施例提供一种基于GPU着色器代码的调试方法,包括:
将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;
按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析。
第二方面,本发明实施例提供一种基于GPU着色器代码的调试装置,所述装置包括:生成部分、设置部分、识别部分以及显示部分;其中,
所述生成部分,经配置为将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;
所述设置部分,经配置为按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
所述识别部分,经配置为GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
所述显示部分,经配置为解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析。
第三方面,本发明实施例提供了一种计算设备,所述计算设备包括:通信接口,存储器和处理器;各个组件通过总线系统耦合在一起;其中,
所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行第一方面所述基于GPU着色器代码的调试方法的步骤。
第四方面,本发明实施例提供一种计算机存储介质,所述计算机存储介质存储有基于GPU着色器代码的调试程序,所述基于GPU着色器代码的调试程序被至少一个处理器执行时实现第一方面所述基于GPU着色器代码的调试方法的步骤。
本发明实施例提供了一种基于GPU着色器代码的调试方法、装置及存储介质,通过对GPU着色器源码采用断点调试和窗口显示变量信息的方式,将所述着色器源码的执行结果进行解析和显示,可以实时查看所述着色器源码的运行结果,并且当图像绘制出现故障时,大大降低了分析所述着色器源码的时间,同时提升了GPU着色器源码故障定位和解决的效率。
附图说明
图1为本发明实施例技术方案的计算机系统组成示意图;
图2为本发明实施例提供的GPU中所包含的一个处理器的组成示意图;
图3为本发明实施例提供的一种基于GPU着色器代码的调试方法流程图;
图4为本发明实施例提供的一种基于GPU着色器代码的调试模块组成图;
图5为本发明实施例提供的一种基于GPU着色器代码的详细调试流程图;
图6为本发明实施例提供的一种基于GPU着色器代码的调试装置示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
参见图1,其示出了能够实现本发明实施例技术方案的计算机系统组成100,需注意,图1所示出的系统是可能的系统的仅一个示例,并且可根据需要在各种系统中的任一系统中实现本发明的实施方案。该计算机系统组成100具体可以为任意类型的计算装置,包括且不限于台式计算机、服务器、工作站、膝上计算机、基于计算机的仿真器、无线装置、移动或蜂窝电话(包含所谓的智能电话)、个人数字助理(PDA)、视频游戏控制台(包含视频显示器、移动视频游戏装置、移动视频会议单元)、膝上型计算机、桌上型计算机、电视机顶盒、平板计算装置、电子书阅读器、固定或移动媒体播放器等。如图1所示,计算机系统组成100可以包括中央处理器(Central Processing Unit,CPU)10、图形处理器(Graphic ProcessingUnit,GPU)20、存储器30,还包括显示处理器40、显示器41以及通信接口50。显示处理器40可为与GPU 20相同的集成电路(Integrated Circuit,IC)的部分,也可在包含GPU 20的一或多个IC的外部,或可形成于在包含GPU 20的IC外部的IC中。
具体来说,CPU 10可包括控制计算机系统组成100运算的通用或专用处理器,其经配置以处理供执行的计算机程序的指令。用户可经由通信接口50与耦合到计算机系统组成100的另一输入装置(未图示)例如:轨迹球、键盘、鼠标、麦克风、触摸垫、触摸屏以及其他类型的装置,例如交换机接口,将输入提供给计算机系统组成100中的CPU10,以使得CPU 10执行一或多个软件应用程序的指令。在CPU 10上执行的应用程序可包括图形用户接口(Graphic User Interface,GUI)应用程序、操作系统、便携式制图应用程序、用于工程或艺术应用的计算机辅助设计程序、视频游戏应用程序、文字处理器应用程序、电子邮件应用程序、电子表格应用程序、媒体播放器应用程序或使用2D、3D图形渲染应用程序等,本发明实施例以执行图形渲染应用程序为例,所述图形渲染应用程序也可以简称为应用程序或程序。此外,CPU 10上执行的图形渲染应用程序可包含一或多个图形渲染指令(也可以理解为待渲染的画面帧中包含一或多个所述图形),所述图形渲染指令可符合图形应用程序编程接口(Application Programming Interface,API),例如,开放式图形库API(OpenGL API)、开放式图形库嵌入系统(OpenGL ES)API、Direct3D API、X3DAPI、RenderMan API、WebGLAPI、开放式计算语言(OpenCLTM)、RenderScript或任何其它异构计算API,或任何其它公用或专有标准图形或计算API,本发明下面的描述中将以OpenGL API为例进行说明。
GPU 20可经配置以执行图形运算,从而将一或多个图形图元渲染到显示器41进行展示。可以理解为,CPU10通过控制GPU驱动程序11,将渲染指令翻译为GPU 20可读的渲染命令,然后GPU 20根据收到的一或多个图形渲染命令,包括但不限于图形命令和图形数据,所述图形数据可包含绘制命令、状态信息、图元信息、纹理信息等,以使得GPU 20执行所述图形渲染命令中的一些或者全部,从而将一或多个图形图元进行渲染并在显示器41上展示出来。GPU20内部结构包括但不限于图形存储器21、处理器集群22。在本发明实施例中,图形存储器21可为GPU 20的一部分。因此,GPU 20可在不使用总线的情况下从图形存储器21读取数据且将数据写入到图形存储器21。换句话说,GPU20可使用本地存储装置而不是芯片外存储器在本地处理数据,此类图形存储器21可被称作芯片上存储器。这允许GPU 20通过消除GPU 20经由总线读取和写入数据的需要来以更高效的方式操作,其中经由总线操作可经历繁重的总线业务。在一些示例中,GPU 20可不包含单独的存储器,而是经由总线利用外置的存储器30;处理器集群22,用于执行图形处理管线,以便对图形渲染命令进行解码,并对图形处理管线进行配置以执行图形渲染命令中所指定的操作。在一些情况下,GPU 20可内置有高度并行结构,其提供比CPU 10高效的对复杂图形相关运算的处理。举例来说,GPU 20可包含经配置来以并行方式对多个顶点或像素进行运算的多个处理元件。在一些情况下,GPU20的高度并行性质允许GPU 20比使用CPU 10更快速地将图形图像(例如,GUI和二维(2D)和/或三维(3D)图形场景)绘制到显示器41上。在一些情况下,可将GPU 20集成到目标设备的母板中。在其它情况下,GPU 20可存在于图形卡上,所述图形卡安装在目标设备的母板中的端口中,或可以其它方式并入在经配置以与目标设备互操作的外围装置内。GPU 20可包含一或多个处理器,例如一或多个微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、数字信号处理器(DSP)或其它等效的集成或离散逻辑电路。GPU 20还可包含一或多个处理器核心,使得GPU 20可被称作多核处理器。
存储器30,经配置用于存储能够在CPU 10上运行的应用程序指令、GPU 20执行需要的图形数据以及其运行结果数据。例如,GPU 20可将完全形成的图像存储在存储器30中。存储器30可包含一或多个易失性或非易失性存储器或存储装置,例如,随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、快闪存储器、磁性数据媒体或光学存储媒体。前述图形存储器21的类型参见所述存储器30的类型,此处不再赘述。显示处理器40可从存储器30检索图像且输出使显示器41的像素照亮以显示所述图像的值。显示器41可为计算机系统100的显示器,其显示由GPU20产生的图形图像内容。显示器41可为液晶显示器(LCD)、有机发光二极管显示器(OLED)、阴极射线管(CRT)显示器、等离子显示器或另一类型的显示装置。
目前对于图像的处理,主要是利用GPU高速的并行架构实现,单指令多线程(Single Instruction Multi Thread,SIMT)是GPU并行运算的主要方式,即为多个多线程同时执行相同的运算指令,也可以是每个线程的数据有所不同,但执行的操作一致。具体来说,参见图2,其示出了能够实现本发明实施例技术方案的GPU中所包含的一个处理器200的组成示意图,在一些示例中,结合图1,该处理器200能够作为GPU实现高度并行计算的处理器集群阵列中的通用处理集群22的一个,以实现并行地执行大量的线程,其中每个线程是程序的实例(instance)。在另一些示例中,该处理器200可以被实现为GPU中的流多处理器(Stream Multiprocessor,SM)。在该处理器200中,可以包括被组织成线程束warp的多个线程处理器或被称之为核心,每个核心均可对应一个线程,其中,所述核心也可以被称之为统一计算设备架构核心(Compute Unified Device Architecture core,CUDA core)。该处理器200可以包含J个warp 204-1到204-J,每个warp具有K个核心206-1到206-K。在一些示例中,warp 204-1到204-J可以进一步地被组织成一个或多个线程块(block)202。在一些示例中,每个warp可具有32个核心;在其他示例中,每个warp可具有4个核心、8个核心、16个核心或者多如数万个核心。如图2所示,本发明实施例以设定每个warp具有16个核心(即K=16)为例进行技术方案阐述,可以理解地,上述设定仅用于技术方案说明,并非对技术方案的保护范围进行限制,本领域技术人员可以很容易地将基于上述设定所阐述的技术方案适用于其他情况,在此不作赘述。在某些可替代的示例中,该处理器200可将核心仅组织成warp,省略线程块block的组织级别。进一步来说,处理器200还可以包括管线控制单元208、共享存储器210以及与warp 204-1到204-J相关联的本地存储器212-1到212-J的阵列。管线控制单元208通过数据总线214将任务分布到各个warp 204-1到204-J。管线控制单元208创建、管理、调度、执行并提供机制以将warp 204-1到204-J同步。继续参见图2所示的处理器200,warp内的核心相互并行地执行。warp 204-1到204-J通过存储器总线216与共享存储器210进行通信。warp 204-1到204-J通过本地总线218-1到218-J分别与本地存储器212-1到212-J进行通信。如图2中所示,warp 204-J以通过本地总线218-J进行通信来利用本地存储器212-J。处理器200的某些实施例将共享存储器210的共享部分分配到每个线程块202,并允许由线程块202内的所有warp访问共享存储器210的共享部分。某些实施例包括仅使用本地存储器的warp,许多其他实施例包括平衡本地存储器和共享存储器210的使用的warp。
基于现有技术中OpenGL的应用程序调用方式,CPU 10通过调用应用程序向GPU驱动程序11发出指令,GPU驱动程序11可调配指定供GPU 20执行的一或多个运算以便渲染图元的一或多个命令,以用于将一或多个图形图元渲染到可显示的图形图像中。当GPU 20接收到来自CPU 10的图形渲染命令时,GPU 20可使用如图2所示的处理器200执行图形处理管线,以便对命令进行解码,并对图形处理管线进行配置以执行图形渲染命令中所指定的操作。具体来说,GPU 20在实现或运行应用程序的过程中,需要借助于图形渲染管线以实现对图形的渲染操作,所述图形渲染管线属于一种通过级联形成的逻辑结构,各级也可称为各渲染阶段,包括固定管线和可编程管线。
由于可编程管线中增加了顶点着色器、片段着色器、细分控制器、细分评估器、几何着色器和计算着色器,使得图形应用程序渲染性能更好,并且可以渲染出固定管线渲染不出来的效果。而所述各种着色器的程序可以理解为是在GPU上执行的自定义程序,是一个描述顶点或像素特性的简单程序,着色器代替了固定的渲染管线的一部分,使渲染管线中不同层次具有可编程性,例如视图转换、投影转换等。当前用于编写可编程着色器的语言以OpenGL着色语言(OpenGL Shading Language,GLSL)为例,其可用于OpenGL和Vulkan编程开发。
基于上述内容的阐述,程序员编写的着色器程序的源代码,也可称之为着色器源码或着色器代码,在图形绘制过程中会出现某一帧的绘制结果与预期结果不一致,由于基于自研的GPU都有其固定的着色器解编码和运行方式,增加了用户排查问题和故障的时间,降低了故障定位的效率。此外,现在主流的GPU及其调试工具均为国外的技术,对于自研的GPU无相应的故障调试接口,无法进行调试工具的适配并且现有的着色器代码调试工具操作复杂,使用难度大,对于用户的专业技能有相应的要求。基于此,参见图3,本发明实施例提供了一种基于GPU着色器代码的调试方法,该方法包括:
S301:将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;
S302:按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
S303:GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
S304:解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析。
根据上述方案的描述,本发明实施例通过对GPU着色器源码采用断点调试和窗口显示变量信息的方式,将所述着色器源码的执行结果进行解析和显示,可以实时查看所述着色器源码的运行结果,并且当图像绘制出现故障时,大大降低了分析所述着色器源码的时间,同时提升了GPU着色器源码故障定位和解决的效率。
需要说明的是,所述断点调试的断点是指一个信号,它通知调试器在某个特定点或位置上暂时将程序执行挂起。当执行在某个断点处程序挂起时,也可以理解为程序处于中断模式,进入中断模式并不会终止或结束程序的执行,程序的执行可以在任何时候继续。
常用的断点包括:INT3断点、硬件断点、内存断点、消息断点、条件断点等。CPU有一个单独的执行序列,会一条指令一条指令的顺序执行,要处理类似IO或者硬件时钟的异步事件时,CPU就要用到断点;所述硬件断点通常是一个专门的电信号,连接到一个特殊的“响应电路”上。这个电路会感知中断的到来,然后会使CPU停止当前的应用程序执行并保存当前的状态,然后跳转到一个预定义的断点位置去执行,所述断点位置处会有一个中断处理例程。当中断处理例程完成工作后,CPU就从之前停止的位置恢复执行。
断点调试可以看作一种超时,所有元素(例如,函数、变量和对象)都保留在内存中,但它们的移动和活动被挂起了。在中断模式下,可以检查它们的位置和状态,以查看是否存在冲突或缺陷。也可以在中断模式下对应用程序进行调整,例如,可以更改变量的值、可以移动执行点,这会改变执行恢复后将要执行的下一条语句。在 C++、C# 和 VisualBasic 中,甚至可以在中断模式下对着色器源码本身进行更改,例如使用一种称为“编辑并继续”的强大功能。因此,所述断点调试提供了一种强大的工具,可以在需要的时间和位置挂起应用程序的执行。与逐句或逐条指令地检查代码不同的是,可以让所述应用程序一直执行,直到遇到断点,然后开始调试,尤其适用于大的程序,可以加快着色器源码调试的过程。
针对图3所示的技术方案,在一些可能的实现方式中,所述将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序,具体来说,在一些示例中,所述着色器源码也可称之为着色器代码是指用来实现图像渲染的、用于替代固定渲染管线的可编辑程序,是为图形渲染管线的某个特定部分而运行的着色器程序,同时也是一种把输入转化为输出的程序。所述着色器代码也跟传统的C++等语言类似,需要将面向人类的高级语言,例如GLSL,通过编译器转成面向机器的二进制指令,二进制指令可转译成汇编指令,上述由高级语言编译成汇编指令的过程通常是在离线阶段执行,以减轻运行时的消耗。所述着色器代码的执行是在GPU的流多处理器SM中完成的,所述SM中的每一个包含多个为线程执行数学运算的核心Core,例如,一个线程可以为顶点着色器或片段着色器调用,详细执行过程是CPU端将着色器的汇编指令经由GPU驱动程序推送到GPU,GPU在执行着色器代码时会用上下文将所述汇编指令分成若干信道推送到各个核心Core的存储空间;在着色器代码执行阶段,所述汇编代码会被GPU推送到执行上下文,然后所述核心Core会逐条获取、解码所述汇编指令,并按照所述汇编指令执行相应的操作。
针对图3所示的技术方案,在一些可能的实现方式中,所述按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式,包括:
根据所述汇编程序与着色器源码的行号对照表,设置断点在所述汇编程序中的行号位置;
根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式。
对于上述实现方式,在一些示例中,所述根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式,包括:
针对多核多线程的GPU,设置GPU执行模式;其中,所述GPU执行模式包括调试模式和非调试模式;
若所述GPU执行模式为调试模式,则设置GPU的核数和线程数。
对于上述示例,具体来说,由于目前GPU多是多核多线程的架构,这样在所述图像绘制出现故障时会增加调试的难度,因此在设置断点的位置的同时,也会设置GPU的执行模式,具体实施方式为GPU逻辑中可以识别调试/非调试字段,当GPU判断运行在调试模式时,GPU内部设置成单渲染核单线程执行所述汇编程序,否则正常执行所述汇编程序。
针对图3所示的技术方案,在一些可能的实现方式中,所述GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式,包括:
在所述汇编程序执行过程中,对比当前运行的汇编程序的位置与设置的断点在所述汇编程序中位置;
若对比结果一致,则暂停所述汇编程序的运行,将处理的数据结果存入数据表中并执行所述数据结果的回传;
否则,则继续正常执行所述汇编程序,直至设置的断点位置。
对于上述实现方式,具体来说,所述预先设置条件是指在汇编程序执行前已预先设置的根据汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式,在汇编程序执行过程中,GPU通过逻辑对比和判断当前运行的汇编程序的位置与设置的断点在所述汇编程序中位置以及GPU执行模式是否一致,然后根据对比结果,确定下一步的执行操作。
针对图3所示的技术方案,在一些可能的实现方式中,所述解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析,包括:
解析并翻译所述数据结果,以获取到数据信息;
将所述数据信息进行显示以进行渲染结果异常分析和相应着色器代码的分析。
基于上述图3所示技术方案的阐述,详细来说,本发明实施例的具体实施方式,参见图4,其示出了本发明实施例提供的一种基于GPU着色器代码的调试模块组成图,所述基于GPU着色器代码的调试模块包括:着色器模块41、编译模块42、断点模块43、GPU模块44、解析模块45以及显示模块46。其中,
所述着色器模块41进行着色器代码的编写,主要编码方式为字符串格式;
所述编译模块42将着色器模块编写好的着色器代码编译成汇编/二进制指令供GPU模块44进行调度,并生成汇编程序和着色器源码的行号对照表和最终编译的指令顺序;
所述断点模块43是用户根据和GPU的断点通信方式,设置断点在汇编程序中的行号或称之为断点的位置及GPU执行模式,对应的设置数据通过与GPU连接的固定数据总线下发到GPU处理系统中进行程序运行;
所述GPU模块44主要进行程序的运行及执行结果的返回,如果进行了断点设置,GPU模块44执行程序过程中会识别当前运行的着色器代码的位置,如果是断点设置的行数或位置则GPU暂停程序运行,将数据结果存入数据表,并回传给解析模块45;
所述解析模块45,将GPU模块44回传的数据结果(即中间数据)进行解析并翻译成用户可以识别的数据信息;
所述显示模块46,用户可以通过显示模块46查看最终翻译完成的数据信息进行数据结果查看和着色器代码的分析。
针对图3所示技术方案,参见图5,其示出了本发明实施例提供的一种基于GPU着色器代码的详细调试流程500,具体调试步骤如下:
S501:开始调试流程,编写着色器代码;
通过着色器模块进行用户着色器代码的编写,主要编码方式为字符串格式。
S502:编译着色器代码;
将着色器模块编写好的着色器代码,通过编译器转成面向机器的二进制指令,二进制指令可转译成汇编指令供GPU进行调度,并且生成汇编程序和着色器源码的行号对照表以及最终编译的指令顺序。
S503:着色器代码编译是否成功,若是,则跳转到步骤S504;若否,则跳转到步骤S511;
若所述着色器代码编译成功,则跳转到步骤S504以执行下一步的操作;若否,则跳转到步骤S511,检查所述着色器代码并修改后,重新执行编译。
S504:载入指令到GPU并设置断点或执行模式;
将编译模块生成的汇编/二进制指令载入到GPU,以用于GPU按照所述汇编/二进制指令执行相应的操作,同时通过断点模块设置断点在所述汇编程序中的行号即断点的位置以及GPU执行模式,通过和GPU连接的固定数据总线将所述设置的数据下发到GPU。
S505:GPU内部核数或执行模式设置并运行代码;
目前GPU主要是采用并行方式执行所述汇编程序,对于多核多线程的GPU架构可知,在调试时会增加GPU处理的难度,因此在断点模块下发断点的同时会设置GPU执行模式,所述GPU执行模式包括调试模式和非调试模式,在GPU执行程序的过程中,GPU逻辑可以识别调试/非调试字段,并且进行GPU核数和线程数设置,当GPU判断所述执行模式为调试模式时,GPU内部设置成单渲染核单线程执行所述着色器代码,否则正常执行着色器代码。
S506:执行结果返回;
GPU在执行过程中会识别当前运行的着色器代码的位置,如果识别出与断点设置的位置一致,则GPU暂停程序运行,将执行的数据结果存入数据表,并返回给数据解析模块。
S507:数据显示;
数据解析模块将GPU回传的数据结果进行解析并翻译成用户可以识别的数据信息,通过显示模块查看最终翻译完成的数据进行结果查看和着色器代码分析,以用于定位渲染故障及分析相应的着色器代码。
S508:结果分析完成后,结束调试流程;
S509:若数据显示未捕获到异常,则继续设置断点;
如果结果分析完成后,数据显示未捕获到渲染故障的异常点,则继续设置断点,则跳转到步骤S504,重复执行上述操作。
S510:根据结果分析,则修改代码重新执行调试流程,跳转到步骤S501重新执行上述操作。
根据所述结果分析,重新修改所述着色器代码后进行编译和执行,重复上述调试流程,实时查看运行的结果并进行分析。
基于前述技术方案相同的发明构思,参见图6,其示出了一种基于GPU着色器代码的调试装置600,所述装置600包括:生成部分601、设置部分602、识别部分603以及显示部分604;其中,
所述生成部分601,经配置为将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;
所述设置部分602,经配置为按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
所述识别部分603,经配置为GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
所述显示部分604,经配置为解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析;
在一些示例中,所述设置部分602,经配置为:
根据所述汇编程序与着色器源码的行号对照表,设置断点在所述汇编程序中的行号位置;
根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式;
其中,所述根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式,包括:
针对多核多线程的GPU,设置GPU执行模式;其中,所述GPU执行模式包括调试模式和非调试模式;
若所述GPU执行模式为调试模式,则设置GPU的核数和线程数。
在一些示例中,所述识别部分603,经配置为:
在所述汇编程序执行过程中,对比当前运行的汇编程序的位置与设置的断点在所述汇编程序中位置;
若对比结果一致,则暂停所述汇编程序的运行,将处理的数据结果存入数据表中并执行所述数据结果的回传;
否则,则继续正常执行所述汇编程序,直至设置的断点位置。
在一些示例中,所述显示部分604,经配置为:
解析并翻译所述数据结果,以获取到数据信息;
将所述数据信息进行显示以进行渲染结果异常分析和相应着色器代码的分析。
可以理解地,上述一种基于GPU着色器代码的调试装置600的示例性技术方案,与前述一种基于GPU着色器代码的调试方法的技术方案属于同一构思,因此,上述一种基于GPU着色器代码的调试装置600的技术方案未详细描述的细节内容,均可以参见前述一种基于GPU着色器代码的调试方法的技术方案的描述。本发明实施例对此不做赘述。
可以理解地,图3所示的技术方案及其示例既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现,本发明实施例是以软件功能模块的方式实现。如果以软件功能部分的形式实现并非作为独立的产品进行销售或使用时,可以存储在一个计算机可读取存储介质中,基于这样的理解,本实施例的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或processor(处理器)执行本实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。因此,本实施例提供了一种计算机存储介质,所述计算机存储介质存储有基于GPU着色器代码的调试程序,所述基于GPU着色器代码的调试程序被至少一个处理器执行时实现上述技术方案中所述一种基于GPU着色器代码的调试方法的步骤。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (8)
1.一种基于GPU着色器代码的调试方法,其特征在于,所述方法包括:
将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;
按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析;
其中,所述按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式,包括:
根据所述汇编程序与着色器源码的行号对照表,设置断点在所述汇编程序中的行号位置;
根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式。
2.根据权利要求1所述方法,其特征在于,所述根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式,包括:
针对多核多线程的GPU,设置GPU执行模式;其中,所述GPU执行模式包括调试模式和非调试模式;
若所述GPU执行模式为调试模式,则设置GPU的核数和线程数。
3.根据权利要求1所述方法,其特征在于,所述GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式,包括:
在所述汇编程序执行过程中,对比当前运行的汇编程序的位置与设置的断点在所述汇编程序中位置;
若对比结果一致,则暂停所述汇编程序的运行,将处理的数据结果存入数据表中并执行所述数据结果的回传;
否则,则继续正常执行所述汇编程序,直至设置的断点位置。
4.根据权利要求1所述方法,其特征在于,所述解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析,包括:
解析并翻译所述数据结果,以获取到数据信息;
将所述数据信息进行显示以进行渲染结果异常分析和相应着色器代码的分析。
5.一种基于GPU着色器代码的调试装置,其特征在于,所述调试装置包括:生成部分、设置部分、识别部分以及显示部分;其中,
所述生成部分,经配置为将编写的着色器源码进行编译以生成汇编/二进制指令、汇编程序与着色器源码的行号对照表以及编译的指令顺序;
所述设置部分,经配置为按照所述编译的指令顺序,将所述汇编/二进制指令载入GPU并根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
所述识别部分,经配置为GPU按照所述汇编/二进制指令执行所述汇编程序,并识别当前运行的汇编程序的位置和GPU执行模式,若与预先设置条件一致,则暂停所述汇编程序的运行并将处理的数据结果执行回传;其中,所述预先设置条件为根据所述汇编程序与着色器源码的行号对照表设置断点在所述汇编程序中的位置以及GPU执行模式;
所述显示部分,经配置为解析所述数据结果并翻译成用户可以识别的数据信息,将所述数据信息进行显示,以用于数据结果查看和着色器源码的分析;
其中,所述设置部分,经配置为:
根据所述汇编程序与着色器源码的行号对照表,设置断点在所述汇编程序中的行号位置;
根据GPU识别的调试/非调试字段值,设置GPU的核数和执行模式。
6.根据权利要求5所述装置,其特征在于,所述识别部分,经配置为:
在所述汇编程序执行过程中,对比当前运行的汇编程序的位置与设置的断点在所述汇编程序中位置;
若对比结果一致,则暂停所述汇编程序的运行,将处理的数据结果存入数据表中并执行所述数据结果的回传;
否则,则继续正常执行所述汇编程序,直至设置的断点位置。
7.一种计算设备,其特征在于,所述计算设备包括:通信接口,处理器,存储器;各个组件通过总线系统耦合在一起;其中,
所述通信接口,用于在与其他外部网元之间进行收发信息过程中,信号的接收和发送;
所述存储器,用于存储能够在所述处理器上运行的计算机程序;
所述处理器,用于在运行所述计算机程序时,执行权利要求1至4任一项所述基于GPU着色器代码的调试方法的步骤。
8.一种计算机存储介质,其特征在于,所述计算机存储介质存储有基于GPU着色器代码的调试程序,所述基于GPU着色器代码的调试程序被至少一个处理器执行时实现权利要求1至4任一项所述基于GPU着色器代码的调试方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310448201.7A CN116205783B (zh) | 2023-04-24 | 2023-04-24 | 一种基于gpu着色器代码的调试方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310448201.7A CN116205783B (zh) | 2023-04-24 | 2023-04-24 | 一种基于gpu着色器代码的调试方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN116205783A CN116205783A (zh) | 2023-06-02 |
CN116205783B true CN116205783B (zh) | 2023-08-18 |
Family
ID=86511456
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310448201.7A Active CN116205783B (zh) | 2023-04-24 | 2023-04-24 | 一种基于gpu着色器代码的调试方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116205783B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118247128A (zh) * | 2024-04-12 | 2024-06-25 | 摩尔线程智能科技(北京)有限责任公司 | 着色器运行数据采集方法、装置、系统、介质及处理器 |
CN118154759B (zh) * | 2024-05-06 | 2024-07-26 | 武汉凌久微电子有限公司 | 一种可编程管线gpu中固定管线功能实现方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102637136A (zh) * | 2010-12-17 | 2012-08-15 | 微软公司 | 融合来自不同编译器阶段的调试信息 |
CN103365773A (zh) * | 2012-03-30 | 2013-10-23 | 索尼在线娱乐有限责任公司 | 自动测试的系统和方法 |
CN110287100A (zh) * | 2019-05-21 | 2019-09-27 | 北京达佳互联信息技术有限公司 | 着色器代码的调试方法、装置、电子设备及存储介质 |
CN114327776A (zh) * | 2021-12-30 | 2022-04-12 | 支付宝(杭州)信息技术有限公司 | 用于智能合约的调试方法、调试设备和调试系统 |
CN115408227A (zh) * | 2022-11-01 | 2022-11-29 | 西安芯瞳半导体技术有限公司 | 一种基于自研显卡的gpu状态调试方法、装置及存储介质 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7548244B2 (en) * | 2005-01-12 | 2009-06-16 | Sony Computer Entertainment Inc. | Interactive debugging and monitoring of shader programs executing on a graphics processor |
-
2023
- 2023-04-24 CN CN202310448201.7A patent/CN116205783B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102637136A (zh) * | 2010-12-17 | 2012-08-15 | 微软公司 | 融合来自不同编译器阶段的调试信息 |
CN103365773A (zh) * | 2012-03-30 | 2013-10-23 | 索尼在线娱乐有限责任公司 | 自动测试的系统和方法 |
CN110287100A (zh) * | 2019-05-21 | 2019-09-27 | 北京达佳互联信息技术有限公司 | 着色器代码的调试方法、装置、电子设备及存储介质 |
CN114327776A (zh) * | 2021-12-30 | 2022-04-12 | 支付宝(杭州)信息技术有限公司 | 用于智能合约的调试方法、调试设备和调试系统 |
CN115408227A (zh) * | 2022-11-01 | 2022-11-29 | 西安芯瞳半导体技术有限公司 | 一种基于自研显卡的gpu状态调试方法、装置及存储介质 |
Non-Patent Citations (1)
Title |
---|
《Vestige: A Visualization Framework for Engineering Geometry-related Software》;Teseo S et al;《IEEE》;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN116205783A (zh) | 2023-06-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN116205783B (zh) | 一种基于gpu着色器代码的调试方法、装置及存储介质 | |
US20230033306A1 (en) | Image rendering method and apparatus, computer device, and storage medium | |
KR102680271B1 (ko) | 인터리빙을 수행하는 방법 및 장치. | |
CN108701366B (zh) | 用于图形处理中的阴影光线的树遍历的开始节点确定的方法、设备及可读存储媒体 | |
US9626313B2 (en) | Trace buffer based replay for context switching | |
US9092267B2 (en) | Memory sharing in graphics processing unit | |
US8782611B1 (en) | Visual inspection and debugging of threads in parallel computing systems | |
US9412193B2 (en) | Run-time optimized shader program | |
US8310484B2 (en) | Efficient processing of operator graphs representing three-dimensional character animation | |
US20150348225A1 (en) | System And Method For Unified Application Programming Interface And Model | |
CN115408227B (zh) | 一种基于自研显卡的gpu状态调试方法、装置及存储介质 | |
US10403025B2 (en) | Automated graphics and compute tile interleave | |
CN115357516B (zh) | 一种渲染问题的调试方法、装置、设备及存储介质 | |
CN116185743B (zh) | OpenGL接口的双显卡对比调试方法、装置及介质 | |
CN115145778A (zh) | 一种显卡渲染结果分析方法、装置及存储介质 | |
US20180025463A1 (en) | Vertex shaders for binning based graphics processing | |
US9720691B2 (en) | Speculative scalarization in vector processing | |
CN113342703B (zh) | 一种渲染效果实时调试方法、装置、开发设备及存储介质 | |
CN114972607B (zh) | 加速图像显示的数据传输方法、装置及介质 | |
CN111930428B (zh) | 一种条件分支指令的融合方法、装置及计算机存储介质 | |
US11783528B2 (en) | Method and apparatus for supporting an image rendering using ray tracing | |
US20210294579A1 (en) | Graphics pipeline optimizations | |
Joshi et al. | Graphics programming for the web | |
CN117472336B (zh) | 基于程序api的代码生成装置及其方法、设备及介质 | |
de Carvalho et al. | Exploring heterogeneous mobile architectures with a high-level programming model |
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 |