CN116483643A - 一种gpu调试方法、装置、设备及存储介质 - Google Patents
一种gpu调试方法、装置、设备及存储介质 Download PDFInfo
- Publication number
- CN116483643A CN116483643A CN202310744069.4A CN202310744069A CN116483643A CN 116483643 A CN116483643 A CN 116483643A CN 202310744069 A CN202310744069 A CN 202310744069A CN 116483643 A CN116483643 A CN 116483643A
- Authority
- CN
- China
- Prior art keywords
- debugged
- processing unit
- processing
- gpu
- debugging
- 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
- 238000000034 method Methods 0.000 title claims abstract description 64
- 238000012545 processing Methods 0.000 claims abstract description 549
- 230000001419 dependent effect Effects 0.000 claims abstract description 102
- 238000011084 recovery Methods 0.000 claims abstract description 36
- 230000001360 synchronised effect Effects 0.000 claims description 50
- 230000006870 function Effects 0.000 claims description 18
- 238000004590 computer program Methods 0.000 claims description 10
- 238000004458 analytical method Methods 0.000 claims description 4
- 238000009877 rendering Methods 0.000 description 30
- 238000010586 diagram Methods 0.000 description 14
- 230000008569 process Effects 0.000 description 12
- 238000004891 communication Methods 0.000 description 8
- 238000005516 engineering process Methods 0.000 description 5
- 101100348848 Mus musculus Notch4 gene Proteins 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000012360 testing method Methods 0.000 description 2
- 238000011144 upstream manufacturing Methods 0.000 description 2
- 102100035964 Gastrokine-2 Human genes 0.000 description 1
- 101001075215 Homo sapiens Gastrokine-2 Proteins 0.000 description 1
- 238000013473 artificial intelligence Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000004364 calculation method Methods 0.000 description 1
- 239000002131 composite material Substances 0.000 description 1
- 238000007667 floating Methods 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 239000011159 matrix material Substances 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
- 230000001960 triggered effect Effects 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2205—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested
- G06F11/2236—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors
- G06F11/2242—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing using arrangements specific to the hardware being tested to test CPU or processors in multi-processor systems, e.g. one processor becoming the test master
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/22—Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
- G06F11/2273—Test methods
-
- 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
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Hardware Design (AREA)
- Quality & Reliability (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种GPU调试方法、装置、设备及存储介质,所述方法包括:接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;所述待调试处理单元执行所述调试命令,并输出执行结果;根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。可以对GPU内部任意数量的处理单元同时独立调试。
Description
技术领域
本发明属于多核处理器技术领域,尤其涉及一种GPU调试方法、装置、设备及存储介质。
背景技术
GPU具有几千个核心,是非常复杂的系统,因此,对GPU的调试、性能监控带来严峻的挑战。
目前常用的芯片调试技术有GDB+OPENOCD(Open on Chip Debug) + JTAG,但是这种调试技术一般来说只能调试几个核,不适合调试GPU这类有几千个核的系统。并且在调试过程中,几乎是串行的,很难捕获到所期望的所有核的现场(并行)和GPU内部几千个核同步调试,即使有方案使GPU内部几千个核同步调试,但是需要用很多的逻辑资源,技术也相当复杂,因此,现有GPU调试技术很难做到任意GPU内部任意数量的被调试核同时独立调试,一旦流片,硬件的调试逻辑不能再做变更,调试手段的可扩展性很差。
发明内容
本发明实施例提出了一种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调试装置的结构示意图;
图7为本发明实施例提供的一种GPU调试设备的结构示意图;
图8为本发明实施例提供的一种计算机可读存储介质的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
为了便于理解,下面先对本发明涉及的相关术语进行介绍。
(1)GPU(Graphic Processing Unit),是一种在个人电脑、工作站、游戏机和一些移动设备(如平板电脑、智能手机等)上做图像和图形相关运算工作的图形处理器,与CPU不同,GPU是专门为处理图形任务而产生的芯片,专门用于快速完成一些特定类型的数学运算,特别是对于浮点、矢量和矩阵的计算,能将 3D 模型的信息转换为 2D 表示,同时添加不同的纹理和阴影效果,所以 GPU 在硬件里也是比较特殊的存在。
(2)同步Synchronization,也称作制约关系,它是指为完成某种任务而建立的两个或多个进程,这些进程因为要在某些位置上协调它们的工作次序而等待、传递信息所产生的制约关系。进程间的直接制约关系就是源于它们之间的相互合作关系。
(3)状态机由状态寄存器和组合逻辑电路构成,能够根据控制信号按照预先设定的状态进行状态转移,是协调相关信号动作、完成特定操作的控制中心。有限状态机简写为FSM(Finite State Machine)(有限个状态),主要分为2大类:
第一类,若输出只和状态有关而与输入无关,则称为Moore状态机;
第二类,输出不仅和状态有关而且和输入有关系,则称为Mealy状态机。
(4)寄存器是中央处理器内的组成部分。寄存器是有限存贮容量的高速存贮部件,它们可用来暂存指令、数据和位址。在中央处理器的控制部件中,包含的寄存器有指令寄存器(IR)和程序计数器(PC)。在中央处理器的算术及逻辑部件中,包含的寄存器有累加器(ACC)。
(5)套接字(Socket),是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议根进行交互的接口 。
(6)GDB是GNU开源组织发布的一个强大的Linux下的程序调试工具。
(7)Hosts是一个没有扩展名的系统文件,其基本作用就是将一些常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统再会将网址提交DNS域名解析服务器进行IP地址的解析,如果发现是被屏蔽的IP或域名,就会禁止打开此网页。
请参阅图1,图1是本发明实施例提供的一种网络架构的结构示意图。如图1所示,网络架构可以包括服务器200和终端设备集群,终端设备集群可以包括一个或者多个终端设备,在本实施例中对终端设备的数量不进行限制。如图1所示,多个终端设备具体可以包括终端设备1、终端设备2、终端设备3、…、终端设备n;如图1所示,终端设备1、终端设备2、终端设备3、…、终端设备n均通过网络300与服务器200进行连接,以便于每个终端设备可以通过网络300与服务器200之间进行数据交互。
如图1所示的服务器200可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器。终端设备可以是:智能手机、平板电脑、笔记本电脑、桌上型电脑、智能电视等智能终端。
可选的,终端设备集群中的每个设备中包含GPU,服务器200可以生成调试命令,将调试命令发送给包含GPU的终端设备,终端设备中的GPU根据调试命令进行调试。
如图2所示,为本发明实施例提供的一种GPU调试方法的架构示意图,服务器200上设有Host Domain,Host Domain由传统的GDB 客户端(GDB Client)、若干个GDB服务器前端(GDB Server Front-End)、GPU驱动(GPU Driver)组成。
其中,为了复用现有的成熟GDB调试框架,GDB Client不做修改,传统情况下GDBClient通过串口或者基于TCP/IP套接字与GDB Server Front-End直接通讯,进而完成应用程序的调试,本发明的GDB Server Front-End与传统的GDB Server Front-End功能一致。
GDB Server Front-End主要作用是作为GDB Server代理,对GDB Client来说遵从所有GDB Server的协议。GDB Server Front-End通过GPU Driver将所有GDB Client过来的调试命令,发送给包含GPU的终端设备。其中,可以同时对多个包含GPU的终端设备进行测试,通过设置多套GDB Server Front-End,每个前端可以通过套接字的不同端口(Port)区分。 GDB Client通过连接不同的前端以及相应的端口实现对不同的GPU调试。
GPU Driver包括与GDB Server Front-End连接的接口,与图形栈系统连接的接口和与包含GPU的终端设备连接的接口。
与GDB Server Front-End连接的接口,负责接收与回应与GDB Server Front-End的调试命令,可以是系统调用接口(系统内核的ioctl接口),也可以是用户态sys fs接口;对于前者不同的包含GPU的终端设备有不同的设备节点,对于后者不同的包含GPU的终端设备有不同的sys fs的子目录,总之每套包含GPU的终端设备有单独的通信入口。GPU驱动通过该接口,将来自GDB的调试命令发送给包含GPU的终端设备对应的处理模块。
与图形栈系统连接的接口,该接口主要是系统调用接口,主要接收来自窗口系统、图形栈的用来渲染的渲染命令、渲染数据、渲染程序等信息。
与包含GPU的终端设备连接的接口,目前主流独立显卡使用基于PCIe高速总线形式的接口,集成显卡主要使用与Host共享的共享内存的接口。对于通讯接口类型与形态,可以是任何高速通讯总线接口,在本实施例中不做具体限定。
运行图2中的调试框架实现GPU调试的过程为:首先GDB Client发送调试命令给相应的GDB Server Front-End,GDB Server Front-End转发调试命令给GPU Driver,GPUDriver将调试命令转发给包含GPU的终端设备,接着包含GPU的终端设备运行运行本发明中的调试方法,即接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;所述待调试处理单元执行所述调试命令,并将执行结果输出至GPU Driver,GPU Driver转发执行结果至GDB Server Front-End,GDBServer Front-End在将执行结果转发至GDB Client,GDB Client根据执行结果生成恢复指令,并将恢复指令通过GDB Server Front-End和GPU Driver发送至对应的包含GPU的终端设备,包含GPU的终端设备根据恢复指令使所述待调试处理单元和依赖处理单元集中所有处理单元同时退出中断,继续执行中断前的处理逻辑,并将退出中断结果通过GPU Driver和GDB Server Front-End发送至GDB Client。
如3所示,为本发明实施例提供的一种GPU调试方法的流程示意图,所述方法包括:
步骤S101,接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;
如图4所示,为本发明实施例提供的一种GPU设备中实现调试的框架示意图,包括GDB服务器返回(GDB Server Back-End) 和CDB(Cluster Based Debuger,基于集群架构的调试器)命令派发器,CDB命令派发器包括:GDB Server Back-End解析器、GDB Server命令执行器和GDB Server响应器,其中GDB Server命令执行器又包括CDB渲染单元选择器、CDB同步控制器、CDB中断控制器和CDB动态加载器。
其中,GDB Server Back-End为GDB服务器后端,主要接收GPU Driver发送过来的,来自GDB Server Front-End的GDB调试命令,并转发给CDB命令派发器。接收CDB命令派发器的返回结果,并转发给GPU Driver。
具体的,在本实施例中GDB Server Back-End接收GDB Client发送的调试命令,并将其转发至CDB命令派发器后,CDB渲染单元选择器解析调试命令,获取待调试的处理单元RenderCore和与该处理单元RenderCore有输入或输出关系的所有处理单元RenderCore,CDB渲染单元选择器支持多个被调试的RenderCore同时调试,待调试的RenderCore以及与被依赖的RenderCore的集合通讯作为一个整体,具有独立的通道。
其中,CDB渲染单元选择器解析调试命令,获取待调试的处理单元RenderCore和与该处理单元RenderCore有输入或输出关系的所有处理单元RenderCore的算法可以是Cluster Level/RenderCoreIndex。
其中,GPU中,无论是可执行指令的RenderCore,还是不能执行指令的渲染加速器(比如TMU:Texture Mapping Unit)只要访内存(无论是GPU的VRAM内存,还是HOST的DDR内存),都要经过GPU内部的MMU。不同RenderCore可以使用不同的MMU页表,因此可以生活在自己的独立的地址空间。所以,CDB渲染单元选择器根据RenderCore不同的MMU页表进行区分。
需要GDB调试某个RenderCore程序时,无论是shader 程序还是GPU本身固件固有程序,必须由被调试的RenderCore执行。因此,CDB渲染单元选择器的作用就是选择由host选定RenderCore目标,后续其他调试组件根据这个选中的目标来执行相应的控制。
具体的RenderCore选择,可以修改GDB Client,增加自定义指令,比如targetselect GPU Device /ClusterY/RenderCoreIndex,由相应的GDB Server Front-End将调试命令发送给GPU Device,并进一步转发给CDB渲染单元选择器,完成被调试单元的解析以及选择。
在实践应用中,RenderCore选择,可以通过GPU Driver实现,比如通过GPU Driver的ioctl自定义的Debug接口,或者GPU Driver对应的GPU设备的SYS FS指定目录的参数指定。
本实施例中,RenderCore指的是任何可以执行指令的处理单元,核内部有中断处理逻辑,理论上可以被CDB调试逻辑控制的单元,具有一定的指令集架构。本发明实施例中不限制RenderCore的指令集架构,但要求指令级架构支持调试命令。
需要说明的是,在本实施例中,Host Domain与包含GPU 的终端设备可以通过Host-GPU高速总线相连或者通讯,高速总线可以是PCIe总线、AXI总线、
以太网等总线。
步骤S102,同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;
具体的,在本实施例中,CDB渲染单元选择器解析出被调试的RenderCore和依赖RenderCore之后,CDB同步控制器使被调试的RenderCore处于被调试状态,并使依赖RenderCore集进入同步状态,也就是进入一种parking 循环中。
GPU内部有很多RenderCore,他们之间有依赖关系,如果某个RenderCore处于被调试状态,与其有依赖关系或者说输入输出关系的RenderCore如果继续运行,可能造成系统崩溃或者系统复位,使调试无法继续进行。
CDB同步控制器,通过CDB中断控制器,给被同步的RenderCore发送CDB同步中断,CDB中断控制器收到该中断后进入同步逻辑中断处理程序。
CDB同步控制器根据GDB Server命令执行器的控制命令改变同步状态,从而达到依赖RenderCore集被同步。
需要说明的是,被同步的依赖RenderCore可能有多个,有多少个参与被同步,由host的GDB Client下发命令决定,当然也可以选择由具体的GPU架构实现。
同步状态控制区的状态机可以是GPU内部的寄存器、也可以是GPU内部的共享内存、也可以是GPU内部的高速缓存,具体形式本实施例不做限制。
CDB同步控制器使依赖RenderCore集进入同步状态后,CDB中断控制器使依赖RenderCore集中所有的RenderCore正在处理的逻辑保持中断。
需要说明的是,在本实施例中CDB中断控制器不同的体系架构不一样,能够实现中断功能以及或多或少的中断路由功能均可,本实施例中的CDB中断控制器在传统的中断控制器中增加两类中断的生成以及路由,其中,一类是GDB Server处理逻辑中断,在GDBServer命令执行器的控制下,CDB中断控制器根据CDB渲染单元选择器的结果,向被调试RenderCore发送进入GDB Server处理逻辑服务中的中断;另一类是CDB同步处理逻辑中断:在GDB Server命令执行器的控制下,CDB中断控制器根据CDB渲染单元选择器的结果,向依赖RenderCore的集合发送进入GDB 同步处理逻辑服务中的中断。
需要说明的是,在本实施例中,中断可以是硬中断也可以是软中断,逻辑上是两个中断,具体实现可以合成一个中断,本实施例中不做限制。
GDB Server处理逻辑主要功能是GDB Server中断的处理例程(中断服务程序),在该中断例程中执行GDB Server相关语义的逻辑,比如断点设置、单步执行、查看或者修改变量、查看或者修改寄存器等等。可以由渲染单元选择器通过GDB中断控制器触发RenderCore进入这个逻辑,然后通过渲染单元选择器和GDB中断控制器之间的消息通道交互信息。
GDB同步处理逻辑主要功能是GDB同步中断的处理例程,在该中断例程中,通过RenderCore之间的消息管道完成被同步的RenderCore的同步功能。
由于GPU内部渲染单元众多,方便管理以及满足不同性能的要求,一般将GPU内部系统划分多个层级,比如Level0 Cluster、Level1 Cluster、…、LevelN Cluster、RenderCore,其中Levelx Cluster可以有渲染或者计算能力,也可以是硬化单元(不含指令执行的core)。
Levelx Cluster对总线的请求向上游以及下游转发,也可以对中断请求转发路由,也可以有Cluster层面的Cache等共用单元。本实施例中仅关注参与GDB调试管理的部分,比如中断路由、总线请求路由等等,具体硬件架构形态以及实现方式不做限制。RenderCore可以在任意Level的Cluster层级中,也可以在做末端。一种特殊的RenderCore是ShaderCore,泛指具有执行 host侧派发过来的动态shader程序的能力核心。
步骤S103,所述待调试处理单元执行所述调试命令,并输出执行结果;
具体的,在本实施例中,获取待调试的RenderCore之后,CDB动态加载器将调试命令加载至待调试的RenderCore上,待调试的RenderCore执行调试命令然后将执行结果发送至GDB Server响应器。
需要说明的是,在本实施例中,调试命令中如果目前还没有设置断点,则CDB动态加载器在ShaderCore的地址空间合适位置上插入调试命令(不同的指令集不一样,比如riscv的调试命令为ebreak,x86指令为int3,本实施例不做限制),使得在执行调试命令前停下来,效果就像普通的被调试程序在进入main函数停下来一样。
需要说明的是,在本发明实施例中,调试命令可以是shader core指令,shadercore指令由host上的窗口系统、图形栈动态编译生成。该动态生成指令与GPU内部RenderCore或者shader core指令集架构一致。Shader指令可以在RenderCore上执行,把参与动态执行Shader程序的RenderCore叫做ShaderCore。
步骤S104,根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。
具体的,在本实施例中,待调试RenderCore执行完调试命令之后,将执行结果发送至GDB Server响应器,GDB Server响应器将执行结果发送至GPU Driver,GPU Driver将执行结果发送至GDB Server Front-End,GDB Server Front-End并将其发送至GDB Client,GDB Client生成恢复指令,然后将恢指令通过GDB Server Front-End和GPU Driver发送至包含GPU的终端设备,包含GPU的终端设备周期性的检测位于同步状态控制区中待调试RenderCore和依靠RenderCore的相关状态机,如果全部的相关状态机的退出条件满足,则所有的RenderCore退出中断处理程序,继续正常的业务运转,如果有一个不满足,则进入循环状态,继续检测所有状态机状态的parking循环。
本实施例提供的GPU调试方法,通过解析调试命令,获取GPU的待调试处理单元和与该处理单元有输入和输出关系的该待调试处理单元的依赖处理单元集,将待调试处理单元和依赖处理单元集中整整运行的处理逻辑进行中断后,所待调试处理单元执行所述调试命令,并输出执行结果,根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。可以对GPU内部任意数量的处理单元同时独立调试,支持GPU这类系统几千个核或者更多的核的调试,且调试扩展性好,较少依赖于硬件调试逻辑。
在一些实施例中,在步骤S101之前,所述方法还包括:
获取GPU中每个处理单元在处理逻辑上具有输入或输出关系的处理单元;
建立每个处理单元与该处理单元在处理逻辑上具有输入或输出关系的所有处理单元之间的绑定关系。
具体的,在本实施例中,将GPU中处理单元之间具有输入和输出关系的情况进行整理,然后建立各处理单元之间的绑定关系,方便后期应用。
在一些实施例中,所述获取该待调试处理单元的依赖处理单元集,包括:
获取所述待调试处理单元的所有绑定关系;
根据所述绑定关系和所述待调试处理单元,获得该待调试处理单元的依赖处理单元集。
具体的,在本实施例中,根据解析调试命令获取待调试的处理单元,根据得到的处理单元得到该待调试处理单元的所有绑定关系,进而得到该待调试处理单元的依赖单元集。
在一些实施例中,在步骤S101之前,所述方法还包括:
根据待调试信息生成调试命令,所述待调试信息包括待调试处理单元的名称、在GPU内部的地址和目标调试功能。
具体的,在本实施例中,如图5所示,为本发明实施提供的一种GPU架构的示意图,由于GPU内部渲染单元众多,方便管理以及满足不同性能的要求,一般将GPU内部系统划分多个层级,比如第一级集群(Level0 Cluster)、第二级集群(Level1 Cluster)、…、第N级集群(LevelN Cluster)、处理单元(RenderCore),其中Levelx Cluster可以有渲染或者计算能力,也可以是硬化单元(不含指令执行的core)。Levelx Cluster对总线的请求向上游以及下游转发,也可以对中断请求转发路由,也可以有Cluster层面的Cache等共用单元。RenderCore是具有指令执行能力的Core,可以用GDB调试的核心,该核心的一个关键特性就是其指令集架构要支持调试命令。指令集架构可以是x86、arm、riscv、mips、powerpc等架构,在本实施例中,GPU内部有几种不同指令集架构的核心或者混合核心。
优选的,本实施例中RenderCore泛指被GDB管理的核心。RenderCore可以在任意Level的Cluster层级中,也可以在末端。其中,一种特殊的RenderCore是ShaderCore,泛指具有执行 host侧派发过来的动态shader程序的能力核心。
因此,在生成调试命令时,将待调试处理单元的名称和待调试处理单元在GPU内部的地址包含在内,在对具体的处理单元进行调试时,根据待调试处理单元地址所在的链路信息将目标调试功能加载至待调试处理单元上。
在一些实施例中,在步骤S102之后,步骤S103之前,所述方法还包括:
将所述目标调试功能加载至待调试处理单元的代码段相应位置。
具体的,在本实施例中,处理单元的地址空间有两大部分组成,一部分是FirmwareCode,属于预先编译的系统固件一部分,一部分是Shader Code,这部分是动态加载的程序,该程序来源于host动态编译生成并推送下来的。CDB动态加载器可以将Firmware Code区域的某个地址内的指令替换成调试命令(替换之前保留原来指令,以便恢复断点)。也可以替换Shader Code区域的某个地址的指令为调试命令,通常情况Firmware Code是所有shadercore共享的代码,Firmware Code上设置断点后,可能会导致所有shader core停下来,因此,将断点设置在Shader Code的内存区域,在Shader Code的最开始或者与Firmware Code约定好的某个启动位置替换调试命令。
可以使用通过MMU页表反向映射,并操作相关内存的技术,来替换调试命令,当然可以采用其他技术,本实施例对如何在指定内存替换调试命令不做限制。
在一些实施例中,所述同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑,包括:
控制所述依赖处理单元集中所有的处理单元进入同步状态;
将所述待调试处理单元和进入同步状态的所有处理单元中正在运行的处理逻辑同时中断。
具体的,在本实施例中,根据依赖处理单元集中处理单元之间的通讯关系,将依赖处理单元集中所有处理单元进入同步状态,进入同步状态之后中断依赖处理单元集中所有处理单元正在执行的运行逻辑。
在一些实施例中,所述将所述待调试处理单元和进入同步状态的所有处理单元中正在运行的处理逻辑同时中断,包括:
获取依赖处理单元集中所有处理单元在GPU内部的地址;
根据所述处理单元集中所有处理单元在GPU内部的地址和待调试单元在GPU内部的地址,发送中断指令至所述处理单元集中所有的处理单元和待调试单元;
所述处理单元集中所有的处理单元和待调试处理单元执行中断指令,进入,将正在运行的处理逻辑同时中断。
具体的,在本实施中,根据获取的待调试的处理单元和依赖处理单元集获取其在GPU内部的地址和生成中断指令,将中断指令发送至获取到待调试的处理单元和依赖单元集,待调试的处理单元和依赖单元集中的所有处理单元接收到中断指令之后,中断输入和输出。
在一些实施例中,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑,包括:
检测所述待调试处理单元和依赖处理单元集中所有处理单元的接收恢复指令后的状态;
判定所述待调试处理单元和依赖处理单元集中所有处理单元的状态是否满足退出中断的条件;
若所述待调试处理单元和依赖处理单元集中所有处理单元均满足退出条件,则所述待调试处理单元和依赖处理单元集中所有处理单元同时退出中断,继续执行中断前的处理逻辑。
具体的,在本实施例中,检测位于同步状态控制区中待调试RenderCore和依靠RenderCore的相关状态机,如果全部的相关状态机的退出条件满足,则所有的RenderCore退出中断处理程序,继续正常的业务运转,如果有一个不满足,则进入循环状态,继续检测所有状态机状态的parking循环。
在一些实施例中,在步骤S102之后和步骤S103之前,所述方法包括:
保存所述待调试处理单元正在运行的处理逻辑的当前处理进程。
在一些实施例中,在步骤S101之前,所述方法还包括:
解析所述调试命令,获取待调试的GPU。
具体的,在本实施例中,通过解析调试命令,获取待调试的GPU,可以实现对多个GPU进行同时测试。
以下以GPU上运行GPU调试方法的几种处理流程的举例:
①GPU启动流程
传统的芯片级的硬件调试逻辑,比如采用gdb client + openocd(gdb server)+JTAG仿真器 + GPU内部调试逻辑支持gdb客户端直接将GPU的固件下载到GPU的flash或者GPU的GDDR中。
在GPU启动的合适阶段初始化调试逻辑,具体流程如下:
步骤1:GPU加电取第一条指令,然后执行GPU引导程序,引导程序加载GPUpreloader启动代码;
步骤2:GPU preboot loader代码初始化GPU PCIe或者其他与Host交互形式的初始化代码,其中,GPU局部与Host的通讯物理链路,但逻辑链路还未通;
步骤3:GPU初始化GPU内存控制器逻辑,完成后,GPU调试逻辑使用GPU内存;
步骤4:GPU加载正常固件代码并执行;
步骤5:GPU固件代码初始化GPU内部的调试逻辑。
步骤6:GPU执行后续的固件代码,进入就绪状态,GPU具备与Host的完整的通讯能力,包含GDB/CDB的调试能力。
②GDB ATTACH流程
步骤1:host侧的GDB Client发送ATTACH命令给相应的GDB Server Front-End;
步骤2:GDB Server Front-End转发ATTACH命令给GPU Driver;
步骤3:GPU Driver将ATTACH命令转发给包含GPU的终端设备;
步骤4:包含GPU的终端设备的GDB Server Back-End将ATTACH命令发给GDBServer Back-End解析器;
步骤5: GDB Server Back-End解析器解析ATTACH命令,并发送GDB Server命令执行器执行;
步骤6:CDB渲染单元选择器根据根据ATTACH命令内容,选择出被调试的RenderCore(为了支持任意多个被调试RenderCore同时调试,之后与被调试RenderCore相关的组件使用不同的独立通道通讯);
步骤7:CDB中断控制器给被调试的RenderCore发送GDB Server处理逻辑中断;
步骤8:被调试RenderCore收到GDB Server处理逻辑中断并且进入GDB Server处理逻辑中断例程中,该中断例程保存进入中断前的所有该RenderCore相关寄存器(后续GDBServer逻辑本身的执行会使用这些寄存器,所以需要使用该阶段保存好的寄存器),进入GDB Server逻辑,并等待GDB命令派发器的后续指令。
步骤9:CDB渲染单元选择器发送同步命令(携带被同步的RenderCore的集合)给CDB同步控制器;
步骤10:CDB同步控制器发送同步命令给CDB中断控制器(携带被同步的RenderCore集合),CDB中断控制器给被同步的RenderCore集合的所有RenderCore发送同步逻辑中断;
步骤11:被同步RenderCore收到同步逻辑中断并进入同步逻辑中断处理例程中,等待CDB同步控制器后续指令(进入parking或者叫同步逻辑处理循环中);
步骤12:GDB动态加载器将执行结果发送给GDB Server响应器,GDB Server响应器将处理结果返回给GDB Server Back-End;
步骤13:GDB Server Back-End将结果通过GPU Driver返回给GDB Server Front-End,GDB Server Front-End将结果返回给GDB Client。
③GDB 断点设置流程
步骤1:GDB Client将断点设置信息(主要是断点的虚拟地址)通过GDB ServerFront-End以及GPU Driver发送给GDB Server Back-End;
步骤2:GDB Server Back-End将断点设置命令发给CDB命令派发器,CDB渲染单元选择器得到被调试的RenderCore和依赖RenderCore集;
步骤3:CDB中断控制器将断点设置命令发送给被调试的RenderCore和依赖RenderCore集的GDB Server处理逻辑中断例程(此前GDB ATTACH命令已经使得被调试RenderCore进入该中断例程,并等待CDB命令派发器的后续命令)。
被调试RenderCore的GDB Server处理逻辑将断点地址的内容(原来的指令)替换为调试命令(并保存原来指令),被调试RenderCore已经处于自己的MMU地址空间中,能够访问自己的代码段所有地址内容,因此可以直接替换调试命令。
步骤4:CDB动态加载器可选择地直接设置被调试的RenderCore的断点,比如通过被调试RenderCore的MMU页表反向查询被设置断点的物理地址,然后映射CDB动态加载器的虚拟地址,通过该虚拟地址将断点的地址内容(原来的指令)调换为调试命令(并保存原来指令),并将结果发送至GDB Server响应器。
步骤5:GDB Server响应器将处理结果返回给GDB Server Back-End, GDB ServerBack-End将结果通过GPU Driver以及GDB Server Front-End最终发送给GDB Client。
④GDB Continue流程:
步骤1:GDB Client发送Continue(继续执行)指令给CDB命令派发器;
步骤2: CDB渲染单元选择器获取被调试的RenderCore以及被同步的RenderCore集合;
步骤3:CDB动态加载器给被调试的RenderCore发送Continue命令;
步骤4:被调试的RenderCore(此前执行ATTACH命令或者执行到调试命令已经进入GDB Server处理逻辑例程中等待CDB命令派发器后续指令)收到Continue指令后,恢复被保存的该RenderCore的相关寄存器值,退出中断,继续执行进入中断前的指令,正常的程序得到运行;
步骤5:CDB渲染单元选择器发送退出同步命令给CDB同步控制器(携带被同步的RenderCore的集合信息),CDB同步控制器发送退出同步命令给被同步的各个RenderCore;被同步的RenderCore收到退出同步命令后退出同步中断处理逻辑,返回到该RenderCore进入同步中断之前的指令,正常的程序得到运行;
步骤6:GDB Server响应器将处理结果返回给GDB Client;
⑤GDB 断点Hit流程:
步骤1:被调试的RenderCore 正常运行(按照正常的逻辑执行指令),因为之前已经走过GDB Continue流程;
步骤2:被调试RenderCore执行到之前被插入的断点指令(比如X86的int3指令,RISCV的ebreak或者c.ebreak指令,不同的指令集架构不一样,要求GPU的支持调试的RenderCore的指令集架构支持调试命令)
步骤3:被调试的RenderCore执行了调试命令后进入该RenderCore的GDB Server处理逻辑中断例程,并保存进入中断前的相关寄存器信息,之后给CDB命令派发器发送执行到断点消息;
步骤4:CDB命令派发器收到被调试RenderCore执行到断点消息;
步骤5:CDB命令派发器通过CDB渲染单元选择器获取与被调试RenderCore相关的被同步的RenderCore集合;
步骤6:CDB命令派发器发送同步命令(携带被同步的RenderCore的集合)给CDB同步控制器;
步骤7:CDB同步控制器发送同步命令给CDB中断控制器(携带被同步的RenderCore集合);
步骤8:CDB中断控制器给被同步的RenderCore集合的所有RenderCore发送同步逻辑中断;
步骤9:被同步RenderCore收到同步逻辑中断并进入同步逻辑中断处理例程中,等待CDB同步控制器后续指令(进入parking或者叫同步逻辑处理循环中);
步骤10:CDB命令派发器给GDB Client发送被调试RenderCore执行到断点信息。
⑥GDB 查看或者修改被调试RenderCore寄存器流程:
步骤1:GDB Client发送查看或者修改指定寄存器或者所有寄存器给CDB命令派发器;
步骤2:CDB命令派发器通过CDB渲染单元选择器获取被调试的RenderCore信息;
步骤3:CDB命令派发器发送查看或者修改指定寄存器或者所有寄存器命令给被调试的RenderCore;
步骤4:被调试的RenderCore此前已经因为ATTACH或者遇到调试命令已经进入GDBServer处理逻辑的中断例程,收到查看或者修改指定寄存器或者所有寄存器命令;
步骤5:被调试的RenderCore进入GDB Server处理逻辑的中断例程之前已经保存过进入中断前的所有寄存器信息,如果收到的指令是查看指定寄存器或者所有寄存器信息,被调试的RenderCore将这些被保存的寄存器信息返回给CDB命令派发器;
如果收到的指令是修改指定的寄存器信息或者所有寄存器信息,被调试的RenderCore的GDB Server处理逻辑例程会将新的寄存器的值替换掉已经保存的寄存器信息,待中断返回时再恢复到该RenderCore的硬件寄存器中。
步骤6:CDB命令派发器将返回结果最终转发给GDB Client。
⑦GDB 查看或者修改被调试RenderCore内存流程
步骤1:GDB Client发送查看或者修改指定内存指令给CDB命令派发器;
步骤2:CDB命令派发器通过CDB渲染单元选择器获取被调试的RenderCore信息;
步骤3:CDB命令派发器发送查看或者修改指定内存指令给被调试的RenderCore;
步骤4:被调试的RenderCore此前已经因为ATTACH或者遇到调试命令已经进入GDBServer处理逻辑的中断例程,收到查看或者修改指定内存指令;
步骤5: 被调试的RenderCore如果收到的指令是查询指定内存信息,被调试的RenderCore的GDB Server处理逻辑例程会将指定内存地址的信息(可以是一个地址的内容,可以是连续地址区域内的一片内容)返回给CBD(CLUSTER BASED DEBUGER)命令派发器。
被调试的RenderCore如果收到的指令是修改指定内存信息,被调试的RenderCore的GDB Server处理逻辑例程会将指定的内存地址的内容替换为被修改的信息内容。并将处理成功的消息返回给CDB命令派发器。
其中,被调试的RenderCore已经在自己的MMU地址空间内运行,他可以直接查询或者修改指定地址的内存信息。
步骤6:CDB命令派发器将返回结构最终转发给GDB Client。
可选的步骤3:CDB命令派发器可以通过被调试的RenderCore的MMU页表,查询到访问内存的物理地址,然后反向映射到自己的虚拟地址空间,直接查询或者修改RenderCore地址空间的内存数据,然后执行步骤6。
⑧GDB 调试ShaderCore(特殊RenderCore)动态程序流程:
步骤1:GDB Client通过GDB扩展的自定义monitor指令给CDB命令派发器发送ShaderCore动态加载指令:比如 monitor shadercore load,本发明不限制具体形式。
步骤2:CDB命令派发器从CDB渲染单元选择器获取被调试的RenderCore信息(之前的shadercore或者rendercore已经通过ATTACH流程停了下来);
步骤3:CDB命令派发器发送动态加载命令给CDB动态加载器(携带被调试的ShaderCore的信息);
步骤4:如果有从host侧的窗口系统/图形栈系统到GPU Driver过来的渲染程序推送过来,那么CDB动态加载器负责推送过来的动态的Shader程序加载到被调试的ShaderCore的代码段相应位置,配置好ShaderCode的引导程序,并在ShaderCore的合适位置插入调试命令,具体调试位置不限,推荐动态shader程序的起始位置,这样当动态的shader程序一开始执行就进入了该ShaderCore的GDB Server处理逻辑中断例程,即立即停了下来,具体参考CDB动态加载器部分的描述。
其他的断点设置、寄存器查看与修改等等流程与普通的RenderCore的流程无差别。
步骤5:CDB命令派发器将返回结果返回给GDB Client。
如图6所示,为本发明实施提供的一种GPU调试装置的结构示意图,所述装置包括:
解析模块601,用于接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;
中断控制模块602,用于同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;
命令执行模块603,用于所述待调试处理单元执行所述调试命令,并输出执行结果;
恢复模块604,用于根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。
在一些实施例中,所述装置还包括:
绑定模块,用于获取GPU中每个处理单元在处理逻辑上具有输入或输出关系的处理单元;
建立每个处理单元与该处理单元在处理逻辑上具有输入或输出关系的所有处理单元之间的绑定关系。
在一些实施例中,解析模块还用于:
获取所述待调试处理单元的所有绑定关系;
根据所述绑定关系和所述待调试处理单元,获得该待调试处理单元的依赖处理单元集。
在一些实施例中,所述装置还包括:
生成模块,用于根据待调试信息生成调试命令,所述待调试信息包括待调试处理单元的名称、在GPU内部的地址和目标调试功能。
在一些实施例中,所述装置还包括:
加载模块,用于将所述目标调试功能加载至待调试处理单元的代码段相应位置。
在一些实施例中,中断控制模块还用于:
控制所述依赖处理单元集中所有的处理单元进入同步状态;
将所述待调试处理单元和进入同步状态的所有处理单元中正在运行的处理逻辑同时中断。
在一些实施例中,中断控制模块还用于:
获取依赖处理单元集中所有处理单元在GPU内部的地址;
根据所述处理单元集中所有处理单元在GPU内部的地址和待调试单元在GPU内部的地址,发送中断指令至所述处理单元集中所有的处理单元和待调试单元;
所述处理单元集中所有的处理单元和待调试处理单元执行中断指令,将正在运行的处理逻辑同时中断。
在一些实施例中,中断控制模块还用于:
检测所述待调试处理单元和依赖处理单元集中所有处理单元的接收恢复指令后的状态;
判定所述待调试处理单元和依赖处理单元集中所有处理单元的状态是否满足退出中断的条件;
若所述待调试处理单元和依赖处理单元集中所有处理单元均满足退出条件,则所述待调试处理单元和依赖处理单元集中所有处理单元同时退出中断,继续执行中断前的处理逻辑。
在一些实施例中,所述装置还包括:
保存模块,用于保存所述待调试处理单元正在运行的处理逻辑的当前处理进程。
在一些实施例中,所述装置还包括:
获取模块,用于解析所述调试命令,获取待调试的GPU。
关于GPU调试装置中各模块实现上述技术方案的其他细节,可参见上述提供的GPU调试方法中的描述,此处不再赘述。
在一些实施例中,如图7所示,为本发明实施例提供的一种GPU调试设备的结构示意图,该设备包括包括存储器701和处理器702,所述存储器701存储有计算机程序,所述计算机程序被所述处理器702执行时,使得所述处理器702执行如下步骤:
接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;
同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;
所述待调试处理单元执行所述调试命令,并输出执行结果;
根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。
关于GPU调试设备中处理器702实现上述技术方案的其他细节,可参见上述提供的GPU调试方法中的描述,此处不再赘述。
其中,处理器702还可以称为CPU(Central Processing Unit,中央处理单元),处理器702可能是一种集成电路芯片,具有信号的处理能力;处理器702还可以是通用处理器、DSP(Digital Signal Process,数字信号处理器)、ASIC(Application SpecificIntegrated Circuit,专用集成电路)、FPGA(Field Programmable Gata Array,现场可编程门阵列)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件,其中通用处理器可以是微处理器或者该处理器702也可以是任何常规的处理器等。
在一些实施例中,如图8所示,为本发明实施例提供的一种计算机可读存储介质的结构示意图,该存储介质上存储有可读的计算机程序801;其中,该计算机程序801可以以软件产品的形式存储在上述存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务机器,或者网络设备等)或处理器(processor)执行以下步骤:
接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;
同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;
所述待调试处理单元执行所述调试命令,并输出执行结果;
根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。
而前述的存储介质包括:U盘、移动硬盘、磁碟或者光盘、ROM(Read-Only Memory,只读存储器)、RAM(Random Access Memory,随机存取存储器)等各种可以存储程序代码的介质,或者是计算机、服务机器、手机、平板等终端设备。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink) DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
Claims (13)
1.一种GPU调试方法,其特征在于,所述方法包括:
接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;
同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;
所述待调试处理单元执行所述调试命令,并输出执行结果;
根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。
2.根据权利要求1所述的一种GPU调试方法,其特征在于,所述接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集之前,所述方法还包括:
获取GPU中每个处理单元在处理逻辑上具有输入或输出关系的处理单元;
建立每个处理单元与该处理单元在处理逻辑上具有输入或输出关系的所有处理单元之间的绑定关系。
3.根据权利要求2所述的一种GPU调试方法,其特征在于,所述获取该待调试处理单元的依赖处理单元集,包括:
获取所述待调试处理单元的所有绑定关系;
根据所述绑定关系和所述待调试处理单元,获得该待调试处理单元的依赖处理单元集。
4.根据权利要求1所述的一种GPU调试方法,其特征在于,所述接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集之前,所述方法还包括:
根据待调试信息生成调试命令,所述待调试信息包括待调试处理单元的名称、在GPU内部的地址和目标调试功能。
5.根据权利要求4所述的一种GPU调试方法,其特征在于,所述同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑之后,所述待调试处理单元执行所述调试命令,并输出执行结果之前,所述方法还包括:
将所述目标调试功能加载至待调试处理单元的代码段相应位置。
6.根据权利要求1所述的一种GPU调试方法,其特征在于,所述同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑,包括:
控制所述依赖处理单元集中所有的处理单元进入同步状态;
将所述待调试处理单元和进入同步状态的所有处理单元中正在运行的处理逻辑同时中断。
7.根据权利要求5所述的一种GPU调试方法,其特征在于,所述将所述待调试处理单元和进入同步状态的所有处理单元中正在运行的处理逻辑同时中断,包括:
获取依赖处理单元集中所有处理单元在GPU内部的地址;
根据所述处理单元集中所有处理单元在GPU内部的地址和待调试单元在GPU内部的地址,发送中断指令至所述处理单元集中所有的处理单元和待调试单元;
所述处理单元集中所有的处理单元和待调试处理单元执行中断指令,将正在运行的处理逻辑同时中断。
8.根据权利要求1所述的一种GPU调试方法,其特征在于,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑,包括:
检测所述待调试处理单元和依赖处理单元集中所有处理单元的接收恢复指令后的状态;
判定所述待调试处理单元和依赖处理单元集中所有处理单元的状态是否满足退出中断的条件;
若所述待调试处理单元和依赖处理单元集中所有处理单元均满足退出条件,则所述待调试处理单元和依赖处理单元集中所有处理单元同时退出中断,继续执行中断前的处理逻辑。
9.根据权利要求1所述的一种GPU调试方法,其特征在于,所述同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑之后,所述待调试处理单元执行所述调试命令,并输出执行结果之前,所述方法还包括:
保存所述待调试处理单元正在运行的处理逻辑的当前处理进程。
10.根据权利要求1所述的一种GPU调试方法,其特征在于,所述接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集之前,所述方法还包括:
解析所述调试命令,获取待调试的GPU。
11.一种GPU调试装置,其特征在于,所述装置包括:
解析模块,用于接收调试命令,解析所述调试命令,获取GPU的待调试处理单元和该待调试处理单元的依赖处理单元集,其中,所述依赖处理单元集是与所述待调试处理单元在处理逻辑上具有输入或输出关系的处理单元的集合;
中断控制模块,用于同时中断所述待调试处理单元和依赖处理单元集中所有处理单元正在运行的处理逻辑;
命令执行模块,用于所述待调试处理单元执行所述调试命令,并输出执行结果;
恢复模块,用于根据所述执行结果,获取恢复指令,所述待调试处理单元和依赖处理单元集中所有处理单元根据所述恢复指令同时退出中断,继续执行中断前的处理逻辑。
12.一种GPU调试设备,包括存储器和处理器,所述存储器存储有计算机程序,所述计算机程序被所述处理器执行时,使得所述处理器执行如权利要求1至10中任一项所述方法的步骤。
13.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至10中任一项所述方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310744069.4A CN116483643A (zh) | 2023-06-25 | 2023-06-25 | 一种gpu调试方法、装置、设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202310744069.4A CN116483643A (zh) | 2023-06-25 | 2023-06-25 | 一种gpu调试方法、装置、设备及存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN116483643A true CN116483643A (zh) | 2023-07-25 |
Family
ID=87223561
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202310744069.4A Pending CN116483643A (zh) | 2023-06-25 | 2023-06-25 | 一种gpu调试方法、装置、设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN116483643A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069402A (zh) * | 2024-04-16 | 2024-05-24 | 沐曦集成电路(上海)有限公司 | 一种任务包执行错误的处理方法 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030014736A1 (en) * | 2001-07-16 | 2003-01-16 | Nguyen Tai H. | Debugger breakpoint management in a multicore DSP device having shared program memory |
US20070168651A1 (en) * | 2006-01-17 | 2007-07-19 | John Johnny K | Method and apparatus for debugging a multicore system |
CN102955737A (zh) * | 2012-11-06 | 2013-03-06 | 无锡江南计算技术研究所 | 异构处理器体系的程序调试方法和系统 |
CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
CN111124792A (zh) * | 2019-12-20 | 2020-05-08 | 北京东土科技股份有限公司 | 一种多核调试方法、装置及存储介质 |
CN111475362A (zh) * | 2020-04-20 | 2020-07-31 | 西安太乙电子有限公司 | 一种多核同构dsp处理器测试系统及方法 |
-
2023
- 2023-06-25 CN CN202310744069.4A patent/CN116483643A/zh active Pending
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030014736A1 (en) * | 2001-07-16 | 2003-01-16 | Nguyen Tai H. | Debugger breakpoint management in a multicore DSP device having shared program memory |
US20070168651A1 (en) * | 2006-01-17 | 2007-07-19 | John Johnny K | Method and apparatus for debugging a multicore system |
CN102955737A (zh) * | 2012-11-06 | 2013-03-06 | 无锡江南计算技术研究所 | 异构处理器体系的程序调试方法和系统 |
CN103729288A (zh) * | 2013-11-01 | 2014-04-16 | 华中科技大学 | 一种嵌入式多核环境下应用程序的调试方法 |
CN111124792A (zh) * | 2019-12-20 | 2020-05-08 | 北京东土科技股份有限公司 | 一种多核调试方法、装置及存储介质 |
CN111475362A (zh) * | 2020-04-20 | 2020-07-31 | 西安太乙电子有限公司 | 一种多核同构dsp处理器测试系统及方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN118069402A (zh) * | 2024-04-16 | 2024-05-24 | 沐曦集成电路(上海)有限公司 | 一种任务包执行错误的处理方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20200301898A1 (en) | Systems and methods for accelerating data operations by utilizing dataflow subgraph templates | |
US9069549B2 (en) | Machine processor | |
CN114580344B (zh) | 测试激励生成方法、验证方法、验证系统及相关设备 | |
US20210232394A1 (en) | Data flow processing method and related device | |
CN114880346B (zh) | 一种数据处理方法及相关组件、加速处理器 | |
EP3030969A1 (en) | Automated application test system | |
CN102087609B (zh) | 多处理器平台下的动态二进制翻译方法 | |
US10417023B2 (en) | GPU simulation method | |
CN116483643A (zh) | 一种gpu调试方法、装置、设备及存储介质 | |
US20230351145A1 (en) | Pipelining and parallelizing graph execution method for neural network model computation and apparatus thereof | |
US20150007170A1 (en) | Systems and Methods for Providing Hypercall Interface for Virtual Machines | |
WO2023124543A1 (zh) | 用于大数据的数据处理方法和数据处理装置 | |
US9471363B2 (en) | Preemptive guest merging for virtualization hypervisors | |
US8938634B2 (en) | User generated data center power savings | |
CN105094870A (zh) | 64位Linux操作系统兼容32位应用软件的方法 | |
US11467836B2 (en) | Executing cross-core copy instructions in an accelerator to temporarily store an operand that cannot be accommodated by on-chip memory of a primary core into a secondary core | |
WO2021101663A1 (en) | Pre-instruction scheduling rematerialization for register pressure reduction | |
US8775147B1 (en) | Algorithm and architecture for multi-argument associative operations that minimizes the number of components using a latency of the components | |
US12008353B2 (en) | Parsing tool for optimizing code for deployment on a serverless platform | |
WO2023038716A1 (en) | Source code editing combining edit and continue with hot reload | |
US11347490B1 (en) | Compilation framework for hardware configuration generation | |
CN112214443B (zh) | 设置于图形处理器中的二次卸载装置和方法 | |
CN114579141A (zh) | require框架转化为VUE框架的方法及装置 | |
CN113885875A (zh) | 一种分布式编译方法、系统、主服务器及存储介质 | |
US9836401B2 (en) | Multi-core simulation system and method based on shared translation block cache |
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 |