首页 / GPU的调控系统及方法

GPU的调控系统及方法有效专利 发明

技术领域

[0001] 本申请涉及多核处理器技术领域,尤其涉及一种GPU的调控系统及方法。

相关背景技术

[0002] GPU和CPU主要不同点在于,GPU含有几千个处理核,而CPU主流应用仅有几十个处理核,高性能服务器场景可能达到几百个处理核,与GPU相比,在处理核数量上,CPU不具备可比性。
[0003] 对于具有几千个处理核的GPU来说,这是非常复杂的系统,这种复杂性对GPU的调试、性能监控带来严峻的挑战。
[0004] 目前的常用的芯片调试技术有GDB+OPENOCD(Open on Chip Debug) + JTAG,这种调试技术有几个缺点:一般来说只能调试几个处理核,不适合调试GPU这类有几千个处理核的系统。几乎是串行的,很难捕获到所期望的所有处理核的并行现场,只适合功能性调试,也就是说通过GDB断点调试,但对于商用系统,一旦启用GDB,整个系统就断住了,系统随之而来就有可能崩溃了,这种入侵式调试技术不适合商用系统;不支持整个系统的性能监测;不支持整个系统运行过程的记录,出现问题后不能经过现场回溯历史;不支持大规模GPU阵列的调控。

具体实施方式

[0013] 下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0014] 图1为本申请一实施例中GPU的调控系统的结构框图;参考图1,本实施例提供了一种GPU的调控系统,该调控系统包括:GPU调控中心100,用于响应用户操作,生成用户调控指令,向CPU域调控系统200下发用户调控指令,其中,用户调控指令携带待调控GPU的GPU信息、目标执行主体信息和目标调控功能信息,CPU域调控系统200所在的CPU与待调控GPU安装于同一个电子设备上;
CPU域调控系统200,用于根据接收到的用户调控指令分配通道资源,生成调控调试通道创建指令,向待调控GPU中的GPU域调控系统300下发调控调试通道创建指令,其中,通道资源包括内存资源和虚拟地址资源,调控调试通道创建指令携带待调控GPU的GPU信息、目标执行主体信息以及目标调控功能相关信息;
GPU域调控系统300,用于根据接收到的调控调试通道创建指令,为目标执行主体创建用于实现目标调控功能的调控调试通道;
GPU域调控系统300,还用于利用目标执行主体通过调控调试通道与CPU域调控系统200进行功能会话,以完成相应的目标调控功能逻辑,将通过功能会话得到的目标调控结果通过CPU域调控系统200返回至GPU调控中心100。
[0015] 具体地,GPU的调控系统包括依次连接的GPU调控中心100、CPU域调控系统200和GPU域调控系统300。CPU域调控系统200和GPU域调控系统300实现了GPU调控的底层控制。GPU调控中心100可以用于人机交互,下发用户指令,实现有目标的GPU调控。
[0016] CPU域调控系统200和GPU域调控系统300通过通信链路例如PCIe链路或PCI链路通信,CPU域调控系统200与GPU调控中心100可以通过网络通信。
[0017] 目标执行主体为GPU的处理器核,例如包括GPU渲染引擎、DMA Core、流处理器等等具有指令执行功能的执行单元,即ProcessingElement,简称PE。目标执行主体信息包括目标执行主体的唯一标识。
[0018] 目标调控功能信息包括待实现的目标调控功能的唯一标识,为实现目标调控功能调控系统中心、CPU域调控系统200和GPU域调控系统300需要按照各自的语义执行相应的逻辑功能。
[0019] 目标调控功能为基本输入输出功能、性能监测功能、日志管理功能、故障管理功能、GPU负载管理功能、GPU固件升级管理功能等包括但不局限于此。
[0020] 调控系统中心同一时间可以对多个不同的GPU进行调控,每个GPU对应有HOSTCPU,且二者安装于同一个电子设备上,GPU中安装有GPU域调控系统300,HOST CPU中安装有CPU域调控系统200,GPU域调控系统300可以与CPU域调控系统200通过PCIe链路通信。
[0021] CPU域调控系统200用于为实现目标调控功能所需的调控调试通道申请并分配通道资源,通道资源包括内存资源以及虚拟地址资源。虚拟地址资源用于为申请的内存资源的物理地址进行虚拟地址映射,使得GPU域调控系统300和CPU域调控系统200对相同的内存资源,可以使用互不干扰的虚拟地址进行访问,进而增强了调测系统的健壮性和灵活性。
[0022] 调控调试通道创建指令携带待调控GPU的GPU信息、目标执行主体信息以及目标调控功能相关信息。GPU信息包括待调控GPU的唯一标识,根据GPU信息可以确定调控调试通道创建指令派发给待调控GPU,根据目标执行主体信息中的目标执行主体的唯一标识可以为每个目标执行主体创建对应目标调控功能的调控调试通道。
[0023] GPU调控中心100可以下发多条用户调控指令,每条用户调控指令针对同一个目标执行主体的不同目标调控功能。
[0024] GPU调控中心100还可以下发多条用调控指令,每条用户调控指令针对不同待调控GPU中的目标执行主体的同一种目标调控功能。
[0025] 针对目标执行主体、目标调控功能的调控调试通道创建完成后,GPU域调控系统300通过目标执行主体执行指令流,在执行指令流的过程中通过调控调试通道与CPU域调控系统200进行功能会话,即在功能会话过程中,会使用分配的通道资源以及调控调试通道的通道数据以完成目标调控功能,将得到的目标调控功能结果通过CPU域调控系统200返回至GPU调控中心100。
[0026] GPU域调控系统300利用目标执行主体通过调控调试通道与CPU域调控系统200进行功能会话,功能会话过程中,GPU域调控系统300和CPU域调控系统200各自完成自身的目标调控功能逻辑,例如CPU域调控系统200向GPU域调控系统300下发目标调控功能相关参数,GPU域调控系统300将通过功能会话得到的目标调控结果通过CPU域调控系统200返回至GPU调控中心100。
[0027] 本实施例根据用户需求创建针对任意GPU的任意处理核的待任意调控功能的调控调试通道,实现了通过HOST CPU对任意GPU的任意一个或多个执行主体即处理核的任意一个或多个功能进行监测调控,实现了对GPU任意数量的处理核的并行调控,可以捕获到所期望的所有处理核的并行现场,且调控功能可选,另外,在调控调试通道的作用下,执行主体即处理核不会打断现有执行流的执行,实现了非入侵调控,支持多个GPU的同时调控。
[0028] 在一个实施例中,CPU域调控系统200包括:调控系统接口210,分别与GPU调控中心100和用户态驱动连接,用于根据GPU调控中心100下发的用户调控指令创建目标调控功能对应的功能逻辑实例,生成GPU侧相关功能信息,向用户态驱动下发第一调控命令,其中,第一调控命令携带待调控GPU的GPU信息、目标执行主体信息、GPU侧相关功能信息和功能逻辑实例的实例号;
用户态驱动220,用于对申请到的共享内存进行虚拟地址映射,将第一调控命令打包封装成第二调控命令,并将第二调控命令提交至CPU驱动;
CPU驱动230,用于执行第二调控命令,分配共享内存,根据GPU侧相关功能信息分配调控链路资源、生成调控链路信息,生成调控调试通道创建指令,通过通信链路将调控调试通道创建指令派发至待调控GPU的GPU域调控系统300,其中,调控调试通道创建指令携带待调控GPU的GPU信息、目标执行主体信息、功能逻辑实例的实例号、GPU侧相关功能信息、调控链路信息和共享内存在GPU侧的虚拟地址信息。
[0029] 具体地,图2为本申请一实施例中CPU域调控系统200的结构框图;参考图2,调控系统接口210作为桥梁用于实现GPU调控中心100与GPU域调控系统300的交互。要实现目标调控功能,调控系统接口210中需要创建用于实现目标调控功能的功能逻辑实例,并为功能逻辑实例分配实例号。功能逻辑实例是对调控系统接口210中的目标用户态功能模块进行实例化得到的。目标用户态功能模块用于实现目标调控功能。
[0030] 调控系统接口210根据用户调控命令中携带的待调控GPU的GPU信息、目标执行主体信息和目标调控功能信息,确定出GPU侧用于实现目标调控功能所需的目标GPU功能模块以及目标执行模块,为目标GPU功能模块和目标执行模块分配唯一标识,并据此生成GPU侧相关功能信息。
[0031] GPU侧相关功能信息包括GPU侧的目标GPU功能模块信息和目标执行模块信息。目标GPU功能模块信息包括目标GPU功能模块的唯一标识,用于指示GPU侧用于实现目标调控功能所需要的目标GPU功能模块;目标执行模块信息包括目标执行模块的唯一标识,用于指示对目标GPU功能模块进行实例化得到的目标执行模块。
[0032] 调控系统接口210根据待调控GPU的GPU信息、目标执行主体信息、GPU侧相关功能信息和功能逻辑实例的实例号生成第一调控命令,并将第一调控命令派发给用户态驱动220。
[0033] 用户态驱动220接收到第一调控命令后向CPU驱动230申请用于实现目标调控功能的内存资源,获取到CPU驱动230分配的共享内存后,对共享内存进行虚拟地址资源分配。用户态驱动将第一调控命令打包封装成第二调控命令,并将第二调控命令提交至CPU驱动。
[0034] 其中,用户态驱动220即userdriver,与操作系统内核级别的GPU图形驱动是孪生兄弟,是底层内核驱动的用户态接口展现。用户态驱动220向上提供两套服务接口,一套是用户态图形栈接口,这部分属于相对标准的功能支持,本申请不做限制,另外一套是调控系统接口210的接口,主要为调控系统接口210提供服务。
[0035] CPU驱动230执行第二调控命令,分配共享内存,根据第二调控命令中的GPU侧相关功能信息为执行模块分配调控链路资源,生成调控链路信息。调控链路信息包括调控链路的唯一标识,用于指示调控链路。根据目标执行主体信息、功能逻辑实例的实例号、GPU侧相关功能信息、调控链路信息和共享内存在GPU侧的虚拟地址信息生成调控调试通道创建指令,通过通信链路将调控调试通道创建指令派发至待调控GPU的GPU域调控系统300。
[0036] 其中,CPU驱动230即OS kernel,是GPU在Host CPU侧的操作系统显卡驱动部分,与用户态驱动220相对应,属于内核驱动部分。
[0037] 图3为本申请另一实施例中GPU的调控系统的结构框图;参考图3,该GPU的调控系统中GPU调控中心100可以通过不同的调控系统接口210(调控系统接口1、调控系统接口2...调控系统接口n)与不同的CPU域调控系统200通信,进而通过不同的GPU域调控系统300对不同的GPU进行调控。
[0038] 每个待调控GPU所对应的CPU域调控系统200通过配置的调控系统接口210与GPU调控中心100交互。因此GPU调控中心100可以对多个不同的GPU进行调控和管理。
[0039] 在一个实施例中,调控系统接口210包括:用户态调控控制模块,用于根据用户调控指令,控制目标用户态功能模块创建与目标执行主体、目标调控功能相关的功能逻辑实例,其中,目标用户态功能模块与目标调控功能相关;
目标用户态功能模块,用于在用户态调控控制模块的控制下创建与目标执行主体、目标调控功能相关的功能逻辑实例。
[0040] 具体地,调控系统接口210向上与GPU调控中心100连接,接收GPU调控中心100的控制,调控系统接口210与GPU调控中心100可以通过网口通信(通过操作系统提供的比如套接字接口进行通信),当然也可以用其他通信方式,本申请对此不做限制。
[0041] 调控系统接口210与GPU调控中心100可以位于同一个电子设备,GPU调控中心100还可以安装于远程服务器上。
[0042] 该调控系统接口210向下与图形栈的用户态驱动连接,依次通过用户态驱动、CPU驱动下发调控调试通道创建指令给GPU域调控系统300,以及实现用户态功能模块的基本调控功能逻辑的处理。
[0043] 进一步的,调控系统接口210包括但不限于以下用户态功能模块:用户态基本输入输出模块:用于在用户态调控控制模块的控制下动态创建用户态基本输入输出实例,并完成相应的功能逻辑,用户态基本输入输出实例为一种功能逻辑实例。该用户态基本输入输出实例可以通过相应的调控调试通道实现GPU任意执行主体打印重定向到用户态基本输入输出模块。也可以实现将用户态基本输入模块重定向到GPU任意执行主体,即GPU的stdin重定向到用户态基本输入输出模块。
[0044] 用户态性能监测模块:用于在用户态调控控制模块的控制下动态创建用户态性能监测实例,并完成相应的功能逻辑功能。用户态性能监测实例为一种功能逻辑实例。
[0045] 相应的调控调试通道创建成功后,用户态性能监测实例可以实现GPU任意模块的任意数量的性能监测counter上报到用户态性能监测模块,用户态性能监测模块可以通过性能监测实例下发控制命令,比如指示监控的哪个执行主体的、哪类的、待监测的性能counter或者事件。下发的命令也可以包含周期上报的,或者一次性上报的性能counter或者事件。由于GPU内部的执行主体可能有几千个级别,因此对GPU内部的counter或者事件做到分级别控制很重要。性能counter可以是自定义的要统计的计数器,比如GPU内部的渲染命令完成的条数,本申请不做要求。事件是GPU内部某种条件满足后触发的事件,至于是哪种事件、触发门限等等都可以由用户态性能监测实例通过相应的调控调试通道下发给GPU侧。
[0046] 调控系统接口210还可以包含其他的用于调控的功能模块,本申请不做限制。
[0047] 目标用户态功能模块为调控系统接口210中的一种用户态功能模块,例如,为基本输入输出模块、性能监测模块等不局限于此。
[0048] 在一个实施例中,用户态驱动220包括:虚拟地址管理服务模块,用于对共享内存的物理地址进行虚拟地址分配和映射,其中,共享内存包括CPU的部分内存和/或GPU的部分内存;
GPU调控命令提交管理模块,用于将调控系统接口210的第一调控命令打包封装为第二调控命令后提交至CPU驱动230。
[0049] 具体地,虚拟地址管理服务模块用于虚拟地址管理。整个GPU的调控系统依赖于Host CPU与GPU的共享内存,即Host CPU和GPU能够同时访问内存,这块共享内存既可以来自于Host CPU的内存,也可以是GPU内部的GDDR显存。当然访问方式可以是Host CPU直接访问,也可以是GPU内部的执行主体直接访问,还可以是Host CPU通过DMA core间接访问,本申请不做限制。DMA core是一种可以访问不可见内存的特殊执行主体。
[0050] 这种HostCPU与GPU共享内存的核心技术依赖于CPU的CPU MMU与GPU的GPU MMU, MMU(Memory Management Unit)实现访存请求的虚拟地址到物理地址翻译,实际上GPU的执行主体或者HOST CPU访问内存的请求是虚拟地址,发起访存请求是将访存的虚拟地址发送给MMU,MMU将访问的虚拟地址翻译成物理地址,然后代理执行主体或者HostCPU发起物理地址访存请求,MMU收到访存数据后,将数据再返回给执行主体或者Host CPU。
[0051] 图4为Host CPU与GPU通过MMU访问共享内存的示意图:如图4所示,HOST CPU的处理核core1、core2...coreN都有对应的CPU MMU。以处理核CoreN为例,其对应CPU MMUn,该CPU MMUn对应有CPU MMUn页表,CPU MMUn页表中存储有表项PDE1、PDE2、PDEX、PEDN等,且每个表项中存储有共享内存的物理地址(例如物理地址1、物理地址2、物理地址x和物理地址N等),Host CPU Core通过CPU的CPU MMUn查找虚拟地址到物理地址的映射表第PDE2表项,表项里存放的是物理地址2,指向的是共享内存1的物理地址,共享内存1可以是Host CPU DDR中的内存。
[0052] 同理,GPU的执行主体PE1、PE2...PEa都有对应的GPU MMU。以处理核PEm为例,其对应GPU MMUm,该GPU MMUm对应有GPU MMUm页表,GPU MMUm页表中存储有表项PDE1、PDE2、PDEM、PEDQ等,且每个表项中存储有共享内存的物理地址(例如物理地址1、物理地址2、物理地址M和物理地址Q等),GPU PEm通过GPU MMUm页表查找虚拟地址到物理地址的映射表第PDEQ表项,表项里存放的是物理地址Q,指向的是共享内存1的物理地址,共享内存1可以是Host CPU DDR中的内存。
[0053] 同样的方式,CPUcoreN通过CPU MMUn查找到PDEx表项存储的物理地址x,指向的是共享内存2。GPU PEm通过GPU MMUm查找到PDE2表项存储的物理地址2,指向的是共享内存2。共享内存2可以属于GPU DDR中的内存。
[0054] 另外一种共享内存的使用示例是,GPU的其中一个执行主体属于DMA core,DMA core可以实现共享内存1和共享内存2的数据搬移,此时Host CPU不需要关心GPU DDR内容,完全由DMA去处理。DMA core代理Host CPU进行访存。
[0055] 虚拟地址管理服务模块,就是管理MMU的虚拟地址。每套虚拟地址对应一份MMU页表,对应的是完全独立的一套虚拟地址空间。
[0056] 虚拟地址管理服务模块可以对于同一块共享内存为CPU和GPU各配置一套独立的虚拟地址空间(即各一套对应的MMU页表),这样两者的虚拟地址空间独立,不会构成相互干扰,进一步增强了调测系统的健壮性。
[0057] 需要说明的对于硬件MMUn可以配置多套MMU的页表,使用时候只要根据需要切换不同的页表就行。本申请不限制硬件MMU的数量。能够保证CPU和GPU配置不同的MMU页表就行,这样CPU域调控系统200和GPU域调控系统300各有一套共享内存的全部虚拟地址空间,比如对于32位的执行主体,可以独自使用4G的虚拟地址空间。
[0058] 本申请的另外一种实现方式是CPU和GPU共享同一套MMU页表,但需要软件将这两套的虚拟地址空间错开。例如,比如CPU侧使用0‑2G 的虚拟地址空间,GPU侧使用2G‑4G的虚拟地址空间。这样CPU侧和GPU侧的虚拟地址空间不重叠且组成一套虚拟地址空间。
[0059] GPU调控命令提交管理模块用于将来自调控系统接口210的调控命令打包封装,进一步提交到操作系统内核的驱动层即CPU驱动230进行处理。
[0060] 下发调控命令也需要创建通道、分配内存资源。用户态驱动220还可以包括GPU内存管理:用于对用户态图形栈和调控系统接口210提供内存管理功能,包括对Host CPU可见的内存进行内存分配、虚拟地址映射等功能,即为来自上层的调控命令分配内存资源、虚拟地址资源,使得图形栈和调控系统接口210这两个模块就像使用CPU本地内存一样访问共享内存。
[0061] 在一个实施例中,CPU驱动230包括:通信链路管理模块,用于对CPU域调控系统200与GPU域调控系统300的通信链路进行管理,以实现CPU域调控系统200与GPU域调控系统300的通信;
HOST CPU调控控制模块,用于对第二调控命令进行解析,根据得到的第一解析结果、用户态驱动220返回的共享内存在GPU侧的虚拟地址信息和调控链路信息生成调控调试通道创建指令,将调控调试通道创建指令通过通信链路发送至GPU调控域系统;
内存管理模块,用于对CPU内存、GPU内存以及DMA内存进行管理,根据HOST CPU调控控制模块的第一解析结果分配共享内存;
CPU调控链路管理模块,用于根据HOST CPU调控控制模块的第一解析结果,分配调控链路资源,生成调控链路信息;
CPU MMU,用于通过查询CPU MMU页表将CPU处理器核的第一虚拟地址访存请求所携带的第一虚拟地址映射为物理地址,根据映射得到的第一物理地址向所对应的目标共享内存发起第一物理地址访存请求,将获取到的数据返回给CPU处理器核。
[0062] 具体地,图5为本申请一实施例中CPU驱动230的结构框图;参考图5,CPU驱动230是GPU在Host CPU侧的操作系统显卡驱动部分,与用户态驱动220相对应,属于内核驱动部分。
[0063] 第二调控命令携带待调控GPU的GPU信息、目标执行主体信息、GPU侧相关功能信息、功能逻辑实例的实例号。HOST CPU调控控制模块233对第二调控命令进行解析,得到的第一解析结果包括待调控GPU的GPU信息、目标执行主体信息、GPU侧相关功能信息、功能逻辑实例的类型和实例号。
[0064] HOST CPU如果有多个处理核core,则每个处理核core都对应有CPUMMU235。
[0065] HOST CPU调控控制模块233根据第一解析结果控制内存管理模块232分配共享内存,并将共享内存信息返回给用户态驱动220,用户态驱动220根据共享内存信息为共享内存分配虚拟地址,再将共享内存的虚拟地址返回给CPU驱动230。内存管理模块232根据共享内存的硬件地址与虚拟地址的映射关系生成MMU页表后存储至对应内存。用户态驱动220可以针对共享内存为CPU域调控系统200和GPU域调控系统300各分配一套虚拟地址,这样CPU域调控系统200和GPU域调控系统300可以分别利用自身配套的虚拟地址访问相同的共享内存。
[0066] HOST CPU调控控制模块233根据第一解析结果控制CPU调控链路管理模块234根据GPU侧相关功能信息创建调控链路,为创建的调控链路分配唯一标识,生成调控链路信息。
[0067] HOST CPU调控控制模块233根据第一解析结果控制通信链路管理模块231为CPU域调控系统200和GPU域调控系统300创建通信链路。
[0068] HOST CPU调控控制模块233根据第一解析结果、获取到的共享内存在GPU侧的虚拟地址信息和调控链路信息打包生成调控调试通道创建指令,并将调控调试通道创建指令通过创建的通信链路发送至GPU调控域系统。
[0069] 通信链路管理模块231可以用于对PCIe、USB、以太网等高速链路管理,实现CPU与GPU通信,常用给的是PCIe通信,本申请不限制Host CPU与GPU的通信方式。
[0070] CPU调控链路管理模块234根据HOSTCPU调控控制模块233的调控命令解析,动态创建到目标执行主体、指定功能类型的调控链路,一条调控链路针对一个目标执行主体、一个执行功能,具有唯一性,可以动态创建添加或者释放。
[0071] CPU驱动230还可以包括:同步管理模块:用于负责GPU与HostCPU的同步,确保GPU处理完Host CPU下发的命令与数据后通知Host CPU, 来自于上层的与本层的调控命令与数据都依赖于同步管理模块。
[0072] 调度管理模块:用于以任务调度的方式调度根据第二调控命令生成的调度任务,以将第二调控命令提交至HOST CPU调控控制模块233。调度管理模块的调控任务调度主要考虑对调控任务的调度。调控任务涉及与GPU相互通信,交互流程比较长,考虑到上层是通过中断以系统调用的方式请求服务,在中断服务程序里时间过长会影响系统性能,因此本实施例将来自于上层的调控命令或者任务直接提交给调度管理模块的调控任务调度部分,然后直接从中断返回,调控任务调度可以是CPU驱动230里面的一个线程,可以是实时线程和非实时线程,考虑和GPU交互的实时性,考虑实时线程。由调控任务调度以线程运行方式以一定调度算法处理调控命令与任务以将第二调控命令派发给CPU调控控制模块。另外,调度管理模块还可以用于渲染命令调度等,本申请对此不作限制。
[0073] CPU驱动230还可以包括渲染命令管理模块等,本申请对此不作限制。
[0074] 在一个实施例中,该GPU域调控系统300包括:GPU调控控制模块,用于解析来自CPU调控系统派发的调控调试通道创建指令,并将得到的第二解析结果派发给调控Binding模块;
调控Binding模块,用于根据第二解析结果将所指示的目标执行主体、调控链路、目标GPU功能模块、目标执行模块binding后,创建对应的调控调试通道,将调控调试通道与对应的功能逻辑实例关联,将关联的目标GPU调控模块、目标执行模块和调控链路添加到目标执行主体的执行路径中;
调控功能管理模块,用于管理GPU中实现功能逻辑的GPU功能模块;
调控执行管理模块,用于对目标调控功能所对应的GPU功能模块进行实例化,得到对应的执行模块;
GPU调控链路管理模块,用于对目标执行模块所关联的调控链路进行管理;
GPU MMU,用于通过查询GPU MMU页表将目标执行主体的第二虚拟地址访存请求所携带的第二虚拟地址映射为物理地址,根据映射得到的第二物理地址向所对应的目标共享内存发起第二物理地址访存请求,将获取到的数据返回给目标执行主体。
[0075] 具体地,图6为本申请一实施例中GPU域调控系统300的结构框图,参考图6,GPU调控控制模块310包括调控命令解析单元和调控命令派发单元。调控命令解析单元,用于解析来自CPU域调控系统200派发的调控调试通道创建指令,得到第二解析结果;调控命令派发单元,用于将解析得到的第二解析结果派发给调控binding模块320。
[0076] 其中,GPU有多个处理核,每个处理核为一个执行主体PE(例如,包括PE1、PE2...PEa)每个执行主体PE对应有GPU MMU360。
[0077] 得到的第二解析结果包括目标执行主体信息、功能逻辑实例的实例号、GPU侧相关功能信息、调控链路信息和共享内存在GPU侧的虚拟地址信息。
[0078] GPU侧相关功能信息包括目标GPU功能模块的唯一标识和目标执行模块的唯一标识,根据目标执行模块的唯一标识创建执行模块实例。调控链路信息包括调控链路的唯一标识,根据调控链路的唯一标识将该调控链路关联至对应的目标执行模块的执行模块实例中。将目标执行模块的执行模块实例关联至对应的功能逻辑实例中。
[0079] 调控binding模块320包括调控功能模块注册管理单元,调控功能模块注册管理单元用于调控功能模块注册管理。具体地,调控功能模块注册管理单元接收到GPU调控控制模块310派发过来的第二解析结果后,控制调控执行管理模块340对第二解析结果中所指示的目标GPU功能模块进行实例化,得到目标GPU功能模块所对应的目标执行模块,然后对第二解析结果中所指示的目标执行主体、目标GPU功能模块、目标执行模块、目标调控链路进行binding,binding完成后即创建出针对目标执行主体、目标功能模块、目标执行模块、目标调控链路的调控调试通道。其中,第二解析结果携带目标执行主体的唯一标识、目标GPU功能模块的唯一标识、目标执行模块的唯一标识、目标调控链路的唯一标识以及对应关系。
[0080] 通过调控功能模块注册管理单元调控binding模块320可以在GPU侧实现针对任意执行主体、任意功能模块以及对应的执行模块和调控链路的binding功能,binding完成之后就创建出针对特定执行主体、特定GPU功能模块、特定调控链路、特定执行模块的调控调试通道。
[0081] 调控调试通道创建完成后,将调控系统接口210中实例化的逻辑功能实例(例如用户态基本输入输出模块所对应的逻辑功能实体或实例)与对应的调控调试通道对应或者关联,并将目标执行模块与相应的目标调控链路添加到目标执行主体的执行路径之中。从而实现针对目标执行主体、目标逻辑功能的调测功能。
[0082] 调控功能管理模块330用于管理GPU域调控系统300中实现逻辑功能的GPU功能模块(例如GPU功能模块1、GPU功能模块...GPU功能模块p),或者说是管理逻辑功能对应的代码(函数或者函数指针等等,本申请不限制逻辑功能的实现方式),需要说明的是,同一个GPU功能模块可以对应到不同执行主体的执行模块。即,同一个GPU功能模块可以实例化为任意执行主体的执行模块。
[0083] 调控执行管理模块340用于管理执行模块(例如执行模块1、执行模块...执行模块k),一个执行模块可以是一个GPU功能模块的实例,一个GPU功能模块可以对应多个执行模块或者执行模块实例。
[0084] 例如,对于不同执行主体,均可以创建来自GPU功能模块1的不同执行模块,可以理解为执行模块为GPU功能模块的实例,即同一个GPU功能模块可以实例化一个或者多个执行主体的执行模块实例。
[0085] GPU调控链路管理模块350,具体用于根据共享内存在GPU侧的虚拟地址信息对目标执行模块所关联的调控链路(例如调控链路1、调控链路...调控链路b)进行实例化,调控链路实体为共享内存的一部分。
[0086] GPU调控链路管理模块350用来承载GPU侧和CPU侧的信息,调控链路与执行模块和逻辑功能实例是有绑定关系的,一个执行模块可以有多条调控链路,一条调控链路对应一个执行模块。例如针对用户态基本输入输出模块的逻辑功能实例,需要双向链路,一个输出链路和一个输入链路,这两个调控链路用于调控系统接口210中用户态基本输入输出模块的逻辑功能实例与GPU域调控系统300中相应的执行模块的对话。
[0087] 调控链路的实体是GPU和CPU的共享内存,该共享内存既可以放在Host CPU的DDR上,也可以放在GPU的GDDR上,通过高速链路PCIe来交换数据。
[0088] 调控链路实体的数据写入与读出,可以是Host CPU和GPU的执行主体通过各自的MMU,以虚拟地址的方式间接实现的。
[0089] 在创建调试调控通道过程中,一个目标执行主体的一个目标调控功能,可能关联一个或多个目标GPU功能模块,每个GPU功能模块可以实例化一个或多个目标执行模块。每个目标执行模块对应一条或多条调控链路。具体地:根据执行模块的唯一标识创建执行模块实例;根据调控链路的唯一标识,将调控链路资源关联到对应的执行模块的实例中;将执行模块对应的执行实例关联到目标GPU功能模块;将对应的GPU功能模块、连同执行模块实例、调控链路实例一起注册对应目标执行主体的执行路径中,从而完成通道创建,再将通道创建完成消息沿着相反路径逐级返回给高层。
[0090] 对于GPU功能模块如果是软件实现,要求是可以重入的,即要访问的资源或放在栈上,或放在执行模块实例中,或放在链路实例中,这是保证任意执行主体、任意调控功能的调控调试通道独立性的主要逻辑。
[0091] 另外,本申请的功能模块能够实现完整的逻辑功能,功能模块可以是硬件逻辑、也可以是各种语言编写的具有相应逻辑功能代码(比如汇编、C语言、C++等语言)。
[0092] 图7为本申请一实施例中执行主体执行流执行操作的示意图,参考图7,调控调试通道动态创建完后,已经将目标GPU功能模块i以及目标执行模块o、调控链路p的一起注册到PEn的执行路径中,还将目标GPU功能模块j以及目标执行模块q、调控链路r的一起注册到PEn的执行路径中。执行主体PEn依次进行指令流执行操作1、指令流执行操作2...指令流执行操作m、指令流执行操作n。其中,当PEn执行指令流执行操作m时指令流会执行目标GPU功能模块i,能够找到注册的目标执行模块o和链路p的实例,进而当可重入目标GPU功能模块i执行相应逻辑功能,操作这些通道独立的数据。原则上调控系统接口210的用户态功能模块的对等实体可以操作链路p的数据(不要求GPU调控中心100直接操作链路p的数据,因为调控系统中心可能不在与GPU相连的Host主机上),只要调控系统接与GPU域调控系统300的功能实体按照约定的操作即可。链路p的数据操作可以是Host CPU或者PE直接操作,也可以由Host CPU通过DMA操作,具体如何操作链路p的数据,本申请不做限制。当PEn的指令流执行到目标GPU功能模块j以及目标执行模块q、调控链路r时同理,不再赘述。
[0093] 非入侵调控技术,是指对整个系统的调试控制、性能监测,不影响现有系统的运行。
[0094] 入侵调控技术比如业界普遍采用的GDB+JTAG芯片调试技术,芯片依赖内置一个调试模式状态,当调试器(比如GDB)设置好断点后,将请求发给GDB+JTAG芯片调试模块,调试模块触发芯片某个执行主体进入调试模式,执行主体在调试模式状态下接收调试器控制。
[0095] 芯片的调试控制模块收到来自调试器的调试命令后,控制某个执行主体从运行状态切换到调试模式状态。
[0096] 在调试模式状态下,整个执行主体现有执行流被打断,从而正常业务被中断。
[0097] 上述的一个例子就是入侵调控技术,也就是说采用入侵调控技术,原有的业务执行流被打断,这对于一个商用运行的系统大部分情况是无法接受的,比如GPU几千个执行主体(例如处理核)同时在运行,执行主体之间还有相互间协作,如果某一个执行主体进入调试模式,其他PE因为与该执行主体有输入输出关系,执行主体的运行极有可能有很强的时序关系,极端情况下可能导致整个系统崩溃。
[0098] 本申请是动态在任意一个GPU上的任意一个执行主体上创建调控调试通道,相应的调控逻辑功能在运行态下执行,并不会在调控模式下被动的等待接收调试器的命令,不会打断现有执行流的运行。因此属于非入侵调控技术。
[0099] 参考图8为本申请一实施例中CPU域调控系统200与GPU域调控系统300的功能会话示意图;参考图8,GPU调控中心100通过调控系统接口210向CPU域调控系统200下发用户调控指令后,CPU域调控系统200与GPU域调控系统300创建出针对待调控GPU的目标执行主体用于实现目标调控功能的调控调试通道。调控调试通道创建后,CPU域调控系统200通过调控调试通道与GPU域调控系统300进行功能会话,实现各自调控功能逻辑的运行,CPU域调控系统200中的调控系统接口210执行本端的调控功能逻辑x1,GPU域调控系统300中的执行主体PEy在执行流路径中执行本端的调控功能逻辑x2。其中,调控功能逻辑x1和调控功能逻辑x2是调控调试通道两端的功能逻辑实体。
[0100] 其中,用户调控指令所指示的目标调控功能与调控中心功能模块的功能对应。
[0101] 调控逻辑功能x2可以是在任意PEy的执行流路径中运行,不会改变PEy的任何运行状态,不会不受控的等待外界输入,只要完成相应的逻辑功能,然后通过调试通道将目标调控结果输送给CPU域调控系统200,然后由CPU域调控系统200发送给GPU调控中心100,目标调控结果可由GPU调控中心100相应组件统一展现。
[0102] 在一个实施例中,GPU调控中心100包括:调控中心调控控制模块,用于响应用户操作向CPU域调控系统200下发用户调控指令;
GPU调控结果观测模块,用于对调控中心功能模块提交的调控结果进行展示;
调控中心功能模块,用于通过CPU域调控系统200获取GPU域调控系统300输出的目标调控结果,对目标调控结果进行处理后发送给GPU调控结果观测模块。
[0103] 具体地,调控中心调控控制模块具有控制调控调试通道建立与释放等功能,与CPU域调控系统200中调控系统接口210的用户态调控控制模块相对应。调控中心调控控制模块主要根据用户的需求动态下发命令给CPU域调控系统200,以实现到任意一个或者多个待调控GPU的任意一个或者多个执行主体针对任意一个或者多个调控功能的调控调试通道的建立与释放。
[0104] GPU调控结果观测模块用于对调控中心功能模块获取到的结果进行展示呈现。
[0105] 在一种可行的实施例中,GPU调测结果监测模块可以是一个单独模块或者几个模块。
[0106] 在一种可行的实施例中,也可以将GPU调控结果观测模块的功能分散到各个调控中心功能模块中,使得调控中心功能模块既有逻辑处理功能也有展示功能。
[0107] GPU调控中心100还可以包括GPU集群管理模块,GPU集群管理模块用于对多GPU进行管理,针对用户需求,对选定的一个GPU或者多个GPU,通过调控系统接口210对多个GPU进行调控。
[0108] GPU调控中心100的调控中心功能模块可以包括调控中心日志管理模块、调控中心性能监测模块、调控中心故障管理模块、调控中心GPU负载管理模块、调控中心固件升级管理模块中的一种或多种。具体如下:调控中心日志管理模块:在调控系统接口210中存在有与GPU调控中心100日志管理模块对应的用户态日志管理模块,在GPU域调控系统300中存在有与调控中心日志管理模块对应的日志管理功能模块,对该日志管理功能模块实例化后得到日志管理执行模块实例,GPU域调控系统300中的日志管理执行模块实例将需要的日志信息通过建立的调控调试通道上报到GPU调控中心100的调控中心日志管理模块。
[0109] 这里的调控调试通道是逻辑通道,实际底层逻辑是基于MMU的共享内存,GPU域调控系统300的日志管理执行模块实例可以直接将要打印的信息输出到共享内存,然后由调控系统接口210的用户态日志管理模块所对应的功能逻辑实例将内存的打印信息通过合适的管道(比如以太网)上报给调控中心日志管理模块。
[0110] 调控中心日志管理模块将来自调控系统接口210的打印信息,经过一定的处理后,将打印信息处理结果发送给GPU调控结果观测模块,GPU调控结果观测模块根据呈现规则,将打印信息处理结果在合适的位置做合理的呈现(可以是表格形式,展现形式不局限于此)。
[0111] 调控中心日志管理模块主要负责任意一个或者多个待调控GPU的任意一个或者多个执行主体的日志数据采集与管理,通过本申请可以为每个待调控GPU的每个目标执行主体创建独立的、用于日志管理的日志调控调试通道,以实现日志管理逻辑功能,具体的日志内容与逻辑功能本申请不做限制。
[0112] 调控中心性能监测模块:在调控系统接口210中存在有与GPU调控中心100性能监测模块对应的用户态性能监测模块,在GPU域调控系统300中存在有与调控中心性能监测模块对应的性能监测功能模块,对该性能监测功能模块实例化后得到性能监测执行模块实例,GPU域调控系统300中的性能监测执行模块实例周期或者非周期的收集所在GPU的目标执行主体的性能监测信息(如各个渲染模块的不同阶段的所用的渲染时间、所在GPU的目标执行主体的繁忙程度等等),并将性能监测数据通过建立的调控调试通道上报到GPU调控中心100的调控中心性能监测模块。
[0113] 这里的调控调试通道是逻辑通道,实际底层逻辑是基于MMU的共享内存,GPU域调控系统300的性能监测执行模块实例可以直接性能监测数据输出到共享内存,然后由调控系统接口210的用户态性能监测模块所对应的功能逻辑实例将性能监测数据通过合适的管道(比如以太网)上报给调控中心性能监测模块。
[0114] 调控中心性能监测模块将来自调控系统接口210的性能监测数据,经过处理后发送给GPU调测结果监测模块,GPU调测结果监测模块可以以合适的形式展现性能监测数据。
[0115] 调控中心性能监测模块主要负责任意一个或者多个待调控GPU的任意一个或者多个执行主体的性能监测数据采集与管理,通过本申请可以为每个待调控GPU的每个目标执行主体创建独立的、用于性能监测的性能监测调控调试通道,以实现性能监测逻辑功能,具体的性能监测内容与逻辑功能本申请不做限制。
[0116] 调控中心故障管理模块:在调控系统接口210中存在有与GPU调控中心100故障管理模块对应的用户态故障管理模块,在GPU域调控系统300中存在有与调控中心故障管理模块对应的故障管理功能模块,对该故障管理功能模块实例化后得到故障管理执行模块实例,GPU域调控系统300中的故障管理执行模块实例周期或者非周期的收集所在GPU的目标执行主体的故障数据,并将故障数据通过建立的调控调试通道上报到GPU调控中心100的调控中心故障管理模块。
[0117] 这里的调控调试通道是逻辑通道,实际底层逻辑是基于MMU的共享内存,GPU域调控系统300的故障管理执行模块实例可以直接故障数据输出到共享内存,然后由调控系统接口210的用户态故障管理模块所对应的功能逻辑实例将故障数据通过合适的管道(比如以太网)上报给调控中心故障管理模块。
[0118] 调控中心故障管理模块将来自调控系统接口210的故障数据,经过处理后发送给GPU调测结果监测模块,GPU调测结果监测模块可以以合适的形式展现故障数据。
[0119] 调控中心故障管理模块主要负责任意一个或者多个待调控GPU的任意一个或者多个执行主体的故障数据采集与管理,通过本申请可以为每个待调控GPU的每个目标执行主体创建独立的、用于故障管理的故障管理调控调试通道,以实现故障管理逻辑功能,具体的故障管理内容与逻辑功能本申请不做限制。
[0120] 调控中心GPU负载管理模块:在调控系统接口210中存在有与GPU调控中心100GPU负载管理模块对应的用户态负载管理模块,在GPU域调控系统300中存在有与调控中心GPU负载管理模块对应的负载管理功能模块,对该负载管理功能模块实例化后得到负载管理执行模块实例,GPU域调控系统300中的负载管理执行模块实例周期或者非周期的收集所在GPU的目标执行主体的负载数据,并将负载数据通过建立的调控调试通道上报到GPU调控中心100的调控中心GPU负载管理模块。
[0121] 这里的调控调试通道是逻辑通道,实际底层逻辑是基于MMU的共享内存,GPU域调控系统300的负载管理执行模块实例可以直接将负载数据输出到共享内存,然后由调控系统接口210的用户态负载管理模块所对应的功能逻辑实例将负载数据通过合适的管道(比如以太网)上报给调控中心GPU负载管理模块。
[0122] 调控中心负载管理模块将来自调控系统接口210的负载数据,经过处理后发送给GPU调测结果监测模块,GPU调测结果监测模块可以以合适的形式展现故障数据。
[0123] 调控中心GPU负载管理模块主要负责任意一个或者多个待调控GPU的任意一个或者多个执行主体的负载数据采集与管理,通过本申请可以为每个待调控GPU的每个目标执行主体创建独立的、用于负载管理的负载管理调控调试通道,以实现负载管理逻辑功能,具体的负载管理内容与逻辑功能本申请不做限制。
[0124] 调控中心GPU负载管理模块还可以根据负载数据动态计算整套GPU系统负载情况,通过一定算法做出一定策略,比如将负载从某些GPU的迁移到另外一些GPU,或者迁移某些指定执行主体的负载。
[0125] 调控中心固件升级管理模块:在调控系统接口210中存在有与调控中心固件升级管理模块对应的用户态固件升级管理模块,在GPU域调控系统300中存在有与调控中心固件升级管理模块对应的固件升级管理功能模块,对该固件升级管理功能模块实例化后得到固件升级管理执行模块实例,GPU域调控系统300中的固件升级管理执行模块实例对所在GPU的目标执行主体的固件进行升级管理,升级管理完成后将固件升级管理结果通过建立的调控调试通道上报到GPU调控中心100的调控中心GPU固件升级管理模块。
[0126] 这里的调控调试通道是逻辑通道,实际底层逻辑是基于MMU的共享内存,GPU域调控系统300的固件升级管理执行模块实例可以直接将固件升级管理结果输出到共享内存,然后由调控系统接口210的用户态固件升级管理模块所对应的功能逻辑实例将固件升级管理结果通过合适的管道(比如以太网)上报给调控中心固件升级管理模块。
[0127] 调控中心固件升级管理模块将来自调控系统接口210的固件升级管理结果,经过处理后发送给GPU调测结果监测模块,GPU调测结果监测模块可以以合适的形式展现固件升级管理结果。
[0128] 调控中心固件升级管理模块主要负责任意一个或者多个待调控GPU的任意一个或者多个执行主体的固件升级管理,通过本申请可以为每个待调控GPU的每个目标执行主体创建独立的、用于固件升级管理的固件升级管理调控调试通道,以实现固件升级管理逻辑功能,具体的固件升级管理内容与逻辑功能本申请不做限制。
[0129] 在一个实施例中,GPU调控中心100,还用于向CPU域调控系统200下发通道释放指令;CPU域调控系统200,还用于根据通道释放指令,与GPU域调控系统300完成通道释放操作。
[0130] 具体地,GPU调控中心100响应用户的功能结束操作生成通道释放指令,并向CPU域调控系统200下发给通道释放指令。CPU域调控系统200释放回收相应的通道资源,注销相应的功能逻辑实例,GPU域调控系统300释放已创建的调控调试通道和注销相应的实例。
[0131] 在一个实施例中,共享内存在CPU域调控系统200侧的虚拟地址与在GPU域调控系统300侧的虚拟地址不同。
[0132] 在一个实施例中,CPU驱动230还包括:调度管理模块,用于以任务调度的方式调度调控命令或任务,并将调度结果提交至HOST CPU调控控制模块;根据第二调控命令生成的调度任务,以将第二调控命令提交至HOST CPU调控控制模块;
同步管理模块,用于GPU与HostCPU的同步。
[0133] 图9为本申请一实施例中的GPU的调控方法的流程示意图,该GPU的调控方法应用于GPU的调控系统,该调控方法包括:S100:响应用户操作,生成用户调控指令,其中,用户调控指令携带待调控GPU的GPU信息、目标执行主体信息和目标调控功能信息;
S200:根据用户调控指令分配通道资源,生成调控调试通道创建指令,其中,通道资源包括内存资源和虚拟地址资源,调控调试通道创建指令携带待调控GPU的GPU信息、目标执行主体信息以及目标调控功能相关信息;
S300:根据调控调试通道创建指令,为目标执行主体创建用于实现目标调控功能的调控调试通道;
S400:利用目标执行主体通过调控调试通道实现目标调控功能逻辑,得到目标调控结果。
[0134] 本申请实现了通过Host CPU实现对GPU的调控,对任意执行主体(执行主体可以是任何执行单元,比如DMA、FPGA、DSP、CPU、MCU、GPU等等的处理核)、任意功能动态创建或者释放调试通道以及动态注册调控功能实例,支持通过MMU为CPU侧和GPU侧分配不同的虚拟地址实现通道隔离技术;通过GPU调控中心100可以对GPU阵列或者多GPU进行调控管理;支持GPU这类系统几千个核动态并行建立和释放调控调试通道,各调控调试通道可同时并行工作,实现GPU几千个处理核的调控;可以支持所有核并行调控,能够抓取整个系统的快照;在调控调试通道的作用下,对GPU整个系统调控的同时不影响现有系统的运行,实现了非入侵式调控;支持整个GPU系统的运行过程记录,出现问题后可以现场回溯历史。另外,本申请的GPU的调控系统可以实现对GPU的调控控制、各种性能监测等各种功能。
[0135] 在一个实施例中,提出了一种计算机设备,包括存储器和处理器,存储器存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:响应用户操作,生成用户调控指令,其中,用户调控指令携带待调控GPU的GPU信息、目标执行主体信息和目标调控功能信息;
根据用户调控指令分配通道资源,生成调控调试通道创建指令,其中,通道资源包括内存资源和虚拟地址资源,调控调试通道创建指令携带待调控GPU的GPU信息、目标执行主体信息以及目标调控功能相关信息;
根据调控调试通道创建指令,为目标执行主体创建用于实现目标调控功能的调控调试通道;
利用目标执行主体通过调控调试通道实现目标调控功能逻辑,得到目标调控结果。
[0136] 在一个实施例中,提出了一种计算机可读存储介质,存储有计算机程序,计算机程序被处理器执行时,使得处理器执行以下步骤:响应用户操作,生成用户调控指令,其中,用户调控指令携带待调控GPU的GPU信息、目标执行主体信息和目标调控功能信息;
根据用户调控指令分配通道资源,生成调控调试通道创建指令,其中,通道资源包括内存资源和虚拟地址资源,调控调试通道创建指令携带待调控GPU的GPU信息、目标执行主体信息以及目标调控功能相关信息;
根据调控调试通道创建指令,为目标执行主体创建用于实现目标调控功能的调控调试通道;
利用目标执行主体通过调控调试通道实现目标调控功能逻辑,得到目标调控结果。
[0137] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成的,计算机程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(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)等。
[0138] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0139] 以上实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本申请专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。

当前第1页 第1页 第2页 第3页