性能检测方法、主机及存储介质转让专利

申请号 : CN202310317572.1

文献号 : CN116048946B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 请求不公布姓名

申请人 : 摩尔线程智能科技(北京)有限责任公司

摘要 :

本公开涉及信息处理技术领域,尤其涉及一种性能检测方法、主机及存储介质,所述性能检测方法包括:获取待检测任务,并确定所述待检测任务对应的任务类别;在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至显卡;读取所述显卡的显存中存储的至少一个性能检测数据;将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果。本公开实施例提供的性能检测方法可通过将待检测任务与显卡的性能检测数据进行匹配的方式,实现性能检测结果在主机与显卡中的同步,有利于提高分析整体程序性能的便利性。

权利要求 :

1.一种性能检测方法,应用于主机,其特征在于,所述主机与显卡相连;所述性能检测方法包括:获取待检测任务,并确定所述待检测任务对应的任务类别;

在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡;其中,所述类别为第一类别的待检测任务中包括至少一个需要由所述显卡执行的子任务,所述显卡在接收到所述待检测任务后执行其中由所述显卡执行的任务,生成性能检测数据并保存至所述显卡的显存中;

读取所述显卡的显存中存储的至少一个性能检测数据;

将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果;其中,所述目标性能检测数据为与所述待检测任务匹配成功的性能检测数据。

2.如权利要求1所述的性能检测方法,其特征在于,所述性能检测方法还包括:在确定所述待检测任务的类别为第二类别的情况下,执行所述待检测任务,将所述待检测任务对应的至少一个性能检测数据作为所述待检测任务对应的性能检测结果;其中,所述类别为第二类别的待检测任务为需要由所述主机执行的任务。

3.如权利要求1所述的性能检测方法,其特征在于,所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:获取所述待检测任务对应的第一标识;

获取所述至少一个性能检测数据中每个性能检测数据对应的第二标识;

针对每个第二标识,在所述第一标识与所述每个第二标识满足预设的对应关系的情况下,将所述每个第二标识对应的性能检测数据,确定为所述目标性能检测数据。

4.如权利要求1所述的性能检测方法,其特征在于,所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:在接收到读取指令的情况下,读取所述显卡的显存中存储的至少一个性能检测数据;

其中,所述读取指令通过如下任意一种方式生成:通过所述主机中应用程序生成读取指令、或响应于所述主机中应用程序生成的暂停检测指令,生成读取指令;其中,所述暂停检测指令用于暂停生成性能检测结果。

5.如权利要求4所述的性能检测方法,其特征在于,所述性能检测方法还包括:为所述读取指令分配目标线程;其中,所述目标线程不为所述主机的主线程;

所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:通过所述目标线程,读取所述显卡的显存中存储的至少一个性能检测数据。

6.如权利要求1所述的性能检测方法,其特征在于,所述主机的主存中包括:异步事件队列、同步事件队列、读写存储器;所述待检测任务包括显卡的异步任务、显卡的同步任务;

所述异步事件队列中存储有至少一个异步任务对应的性能检测数据、和/或所述主机执行待检测任务对应的至少一个性能检测数据,所述同步事件队列中存储有至少一个同步任务对应的性能检测数据、和/或匹配成功的异步任务对应的性能检测数据;

所述性能检测方法还包括:获取所述异步事件队列中抓取并存储的至少一个第一性能检测数据,并将所述至少一个第一性能检测数据与所述显卡的显存中存储的至少一个第二性能检测数据进行匹配,将匹配成功的第一性能检测数据与第二性能检测数据保存至所述同步事件队列;其中,匹配成功的第一性能检测数据、第二性能检测数据二者参数不同、二者对应的异步任务相同;

依序将所述同步事件队列中存储的性能检测数据保存至所述读写存储器中;

所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:

读取所述读写存储器,得到至少一个性能检测数据。

7.如权利要求6所述的性能检测方法,其特征在于,所述读写存储器包括:第一存储器、第二存储器;

所述依序将所述同步事件队列中存储的性能检测数据保存至所述读写存储器中,包括:确定所述第一存储器、所述第二存储器中标签为写入的写入存储器,依序将所述同步事件队列中存储的性能检测数据保存至所述写入存储器中;

所述读取所述读写存储器,得到至少一个性能检测数据,包括:

确定所述第一存储器、所述第二存储器中标签为读取的读取存储器,获取所述读取存储器中存储的至少一个性能检测数据;

所述性能检测方法还包括:

在执行所述读取所述读写存储器之前或之后,更新所述第一存储器和所述第二存储器的标签。

8.如权利要求1所述的性能检测方法,其特征在于,所述类别为第一类别的待检测任务还包括需要由所述主机执行的任务,所述性能检测方法还包括:在确定所述待检测任务的类别为第一类别的情况下,执行所述待检测任务,得到所述待检测任务对应的至少一个主机性能检测数据;

所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:

将所述待检测任务分别与至少一个主机性能检测数据、读取到的所述显卡的显存中存储的至少一个性能检测数据进行匹配。

9.如权利要求1至8中任意一项所述的性能检测方法,其特征在于,所述性能检测方法还包括:获取所述主机的第一时间戳计数器中存储的第一时间戳总数、所述主机的第一时间戳采样次数、所述显卡的第二时间戳计数器中存储的第二时间戳总数、所述显卡的第二时间戳采样次数;

根据所述第一时间戳总数、所述第一时间戳采样次数、所述第二时间戳总数、所述第二时间戳采样次数,确定所述主机对应的第一时间戳平均值、所述显卡对应的第二时间戳平均值;

根据所述第一时间戳平均值以及所述第二时间戳平均值,建立所述主机与所述显卡的时间戳对应关系;其中,所述时间戳对应关系用以生成所述性能检测结果中的主机检测开始时间、主机检测结束时间、显卡检测开始时间、显卡检测结束时间。

10.一种主机,其特征在于,所述主机与显卡相连,所述主机包括处理核心、驱动模块,所述驱动模块被配置为:获取待检测任务,并确定所述待检测任务对应的任务类别;在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡;其中,所述类别为第一类别的待检测任务中包括至少一个需要由所述显卡执行的子任务,所述显卡在接收到所述待检测任务后执行其中由所述显卡执行的任务,生成性能检测数据并保存至所述显卡的显存中;读取所述显卡的显存中存储的至少一个性能检测数据;将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果;其中,所述目标性能检测数据为与所述待检测任务匹配成功的性能检测数据;所述处理核心被配置为:获取所述性能检测结果。

11.一种计算机可读存储介质,其上存储有计算机程序指令,其特征在于,所述计算机程序指令被处理器执行时实现权利要求1至9中任意一项所述的性能检测方法。

说明书 :

性能检测方法、主机及存储介质

技术领域

[0001] 本公开涉及信息处理技术领域,尤其涉及一种性能检测方法、主机及存储介质。

背景技术

[0002] 显卡是计算机基础的组成部分之一,其将计算机系统需要的显示信息进行转换驱动显示器,并向显示器提供逐行或隔行扫描信号,控制显示器的正确显示,是连接显示器和计算机主板(或称主机)的重要组件,在一些场景中,显卡也可用作通用计算,例如使用显卡训练或推理算法模型,而开发人员或用户根据实际需求可能需要对显卡的性能进行测试,故如何更好地获取显卡的性能检测结果,是开发人员亟需解决的技术问题。

发明内容

[0003] 本公开提出了一种性能检测技术方案。
[0004] 根据本公开的一方面,提供了性能检测方法,应用于主机,所述主机与显卡相连;所述性能检测方法包括:获取待检测任务,并确定所述待检测任务对应的任务类别;在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡;其中,所述类别为第一类别的待检测任务包括需要由所述显卡执行的任务;读取所述显卡的显存中存储的至少一个性能检测数据;将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果;
其中,所述目标性能检测数据为与所述待检测任务匹配成功的性能检测数据。
[0005] 在一种可能的实施方式中,所述性能检测方法还包括:在确定所述待检测任务的类别为第二类别的情况下,执行所述待检测任务,将所述待检测任务对应的至少一个性能检测数据作为所述待检测任务对应的性能检测结果;其中,所述类别为第二类别的待检测任务为需要由所述主机执行的任务。
[0006] 在一种可能的实施方式中,所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:获取所述待检测任务对应的第一标识;获取所述至少一个性能检测数据中每个性能检测数据对应的第二标识;针对每个第二标识,在所述第一标识与所述每个第二标识满足预设的对应关系的情况下,将所述每个第二标识对应的性能检测数据,确定为所述目标性能检测数据。
[0007] 在一种可能的实施方式中,所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:在接收到读取指令的情况下,读取所述显卡的显存中存储的至少一个性能检测数据;其中,所述读取指令通过如下任意一种方式生成:通过所述主机中应用程序生成读取指令、或响应于所述主机中应用程序生成的暂停检测指令,生成读取指令;其中,所述暂停检测指令用于暂停生成性能检测结果。
[0008] 在一种可能的实施方式中,所述性能检测方法还包括:为所述读取指令分配目标线程;其中,所述目标线程不为所述主机的主线程;所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:通过所述目标线程,读取所述显卡的显存中存储的至少一个性能检测数据。
[0009] 在一种可能的实施方式中,所述主机的主存中包括:异步事件队列、同步事件队列、读写存储器;所述待检测任务包括显卡的异步任务、显卡的同步任务;所述异步事件队列中存储有至少一个异步任务对应的性能检测数据、和/或所述主机执行待检测任务对应的至少一个性能检测数据,所述同步事件队列中存储有至少一个同步任务对应的性能检测数据、和/或匹配成功的异步任务对应的性能检测数据;所述性能检测方法,还包括:获取所述异步事件队列中抓取并存储的至少一个第一性能检测数据,并将所述至少一个第一性能检测数据与所述显卡的显存中存储的至少一个第二性能检测数据进行匹配,将匹配成功的第一性能检测数据与第二性能检测数据保存至所述同步事件队列;其中,匹配成功的第一性能检测数据、第二性能检测数据二者参数不同、二者对应的异步任务相同;依序将所述同步事件队列中存储的性能检测数据保存至所述读写存储器中;所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:读取所述读写存储器,得到至少一个性能检测数据。
[0010] 在一种可能的实施方式中,所述读写存储器包括:第一存储器、第二存储器;所述依序将所述同步事件队列中存储的性能检测数据保存至读写存储器中,包括:确定所述第一存储器、所述第二存储器中标签为写入的写入存储器,依序将所述同步事件队列中存储的性能检测数据保存至所述写入存储器中;所述读取所述读写存储器,得到至少一个性能检测数据,包括:确定所述第一存储器、所述第二存储器中标签为读取的读取存储器,获取所述读取存储器中存储的至少一个性能检测数据;更新所述第一存储器和所述第二存储器的标签。
[0011] 在一种可能的实施方式中,所述类别为第一类别的待检测任务还包括需要由所述主机执行的任务,所述性能检测方法还包括:在确定所述待检测任务的类别为第一类别的情况下,执行所述待检测任务,得到所述待检测任务对应的至少一个主机性能检测数据;所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:将所述待检测任务分别与至少一个主机性能检测数据、读取到的所述显卡的显存中存储的至少一个性能检测数据进行匹配。
[0012] 在一种可能的实施方式中,所述性能检测方法还包括:获取所述主机的第一时间戳计数器中存储的第一时间戳总数、所述主机的第一时间戳采样次数、所述显卡的第二时间戳计数器中存储的第二时间戳总数、所述显卡的第二时间戳采样次数;根据所述第一时间戳总数、所述第一时间戳采样次数、所述第二时间戳总数、所述第二时间戳采样次数,确定所述主机对应的第一时间戳平均值、所述显卡对应的第二时间戳平均值;根据所述第一时间戳平均值以及所述第二时间戳平均值,建立所述主机与所述显卡的时间戳对应关系;其中,所述时间戳对应关系用以生成所述性能检测结果中的主机检测开始时间、主机检测结束时间、显卡检测开始时间、显卡检测结束时间。
[0013] 根据本公开的一方面,提供了一种主机,所述主机与显卡相连,所述主机包括处理核心、驱动模块,所述驱动模块被配置为:获取待检测任务,并确定所述待检测任务对应的任务类别;在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡;其中,所述类别为第一类别的待检测任务为需要由所述显卡执行的任务;读取所述显卡的显存中存储的至少一个性能检测数据;将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果;其中,所述目标性能检测数据为与所述待检测任务匹配成功的性能检测数据;所述处理核心被配置为:获取所述性能检测结果。
[0014] 根据本公开的一方面,提供了一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行上述方法。
[0015] 根据本公开的一方面,提供了一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。
[0016] 在本公开实施例中,可获取待检测任务,并确定所述待检测任务对应的任务类别,而后在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡,再读取所述显卡的显存中存储的至少一个性能检测数据,而后将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果。本公开实施例提供的性能检测方法可通过将待检测任务与显卡的性能检测数据进行匹配的方式,实现性能检测结果在主机与显卡中的同步,有利于提高分析整体程序性能的便利性。
[0017] 应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,而非限制本公开。根据下面参考附图对示例性实施例的详细说明,本公开的其它特征及方面将变得清楚。

附图说明

[0018] 此处的附图被并入说明书中并构成本说明书的一部分,这些附图示出了符合本公开的实施例,并与说明书一起用于说明本公开的技术方案。
[0019] 图1示出了根据本公开实施例提供的一种性能检测方法的流程图。
[0020] 图2示出了根据本公开实施例提供的一种性能检测结果的性能检测方法的参考示意图。
[0021] 图3示出了根据本公开实施例提供的一种性能检测结果的性能检测方法的参考示意图
[0022] 图4示出了根据本公开实施例提供的一种主机的框图。
[0023] 图5示出了根据本公开实施例提供的一种电子设备的框图。

具体实施方式

[0024] 以下将参考附图详细说明本公开的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
[0025] 在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
[0026] 本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中术语“至少一种”表示多种中的任意一种或多种中的至少两种的任意组合,例如,包括A、B、C中的至少一种,可以表示包括从A、B和C构成的集合中选择的任意一个或多个元素。
[0027] 另外,为了更好地说明本公开,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本公开同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本公开的主旨。
[0028] 参阅图1所示,图1示出了根据本公开实施例提供的一种性能检测方法的流程图,结合图1,所述性能检测方法应用于主机,所述性能检测方法包括:步骤S100,获取待检测任务,并确定所述待检测任务对应的任务类别。示例性地,上述待检测任务可由主机的应用程序触发,上述应用程序可由用户或开发人员进行自由编辑,可进行性能检测结果的获取、触发显卡或主机进行相应的任务流程即可,本公开实施例在此不做限定。示例性地,上述任务类别用以区分待检测任务的执行主体,在一些计算任务中,可能包括:同步任务、异步任务等,上述每种情况均可对应唯一的任务类别,以使主机在得到待检测任务的情况下可分配对应的计算主体。例如:上述同步任务可包括相关技术中的内存拷贝(或称Memcpy)任务、运行(或称Runtime)任务、驱动(或称Driver APIs,其中API全称为Aplication Programming Interface,应用程序接口)访问任务,可由主机执行,或包括显卡中的一些同步事件,可由显卡执行。异步任务可包括内核(或称Kernel)任务,可由显卡执行,或包括主机中的一些同步事件,可由主机执行。上述任务类别可用以区分一次待检测任务中的子任务是由显卡或主机执行即可。
[0029] 步骤S200,在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡。其中,所述类别为第一类别的待检测任务包括需要由所述显卡执行的任务。示例性地,显卡在接收到待检测任务后可执行其中由显卡执行的待检测任务,以生成性能检测数据。在一个示例中,显卡在接受到所述主机发送的待检测任务的情况下,执行所述待检测任务,保存所述待检测任务对应的性能检测数据至所述显卡的显存中。
[0030] 步骤S300,读取所述显卡的显存中存储的至少一个性能检测数据。示例性地,步骤S300可由多种方式被触发,例如:周期性触发、或接收到主机中应用程序生成的读取指令的情况下触发、显卡的显存中存储的性能检测数据的数量达到预设阈值的情况下,发送一个可读请求至主机,以触发步骤S300等,本公开实施例在此不做限制。在一个示例中,上述显存可为显卡上的存储介质,本公开在此不限定其具体形态,可存储数据即可。示例性地,上述性能检测数据可包括相关技术中任意一种显卡相关的、可读取的性能检测数据,本公开实施例在此不做限制。在一个示例中,上述性能检测数据可包括:显卡侧待检测任务的执行开始时间、显卡侧待检测任务的执行结束时间、显卡的利用率等。在一个示例中,显卡中还可包括性能计数器,性能计数器可保存显卡中硬件的较为底层的执行情况,如一些寄存器的数值变化,例如:显卡的硬件执行了多少次运算循环、运算了多少数据等。示例性地,在显存被读取后,显卡的显存可释放已被读取的性能检测数据。在一个示例中,显卡的显存也可周期性释放已被读取的性能检测数据,本公开实施例在此不做限制。本公开实施例可将显卡的硬件的各个维度的性能检测数据导出,提供给用户定位程序性能,允许用户据此观察待检测任务在主机和显卡内部的执行状态,方便用户分析整体程序性能。
[0031] 在一种可能的实施方式中,步骤S300可包括:在接收到读取指令的情况下,读取所述显卡的显存中存储的至少一个性能检测数据。所述读取指令通过如下任意一种方式生成:通过所述主机中应用程序生成读取指令、或响应于所述主机中应用程序生成的暂停检测指令,生成读取指令。其中,所述暂停检测指令用于暂停生成性能检测结果。结合实际应用场景,用户可通过应用程序中的API,主动调用显卡的显存读取接口,也可在进程退出执行性能检测时执行读取指令。在一个示例中,显卡的显存在采集的性能检测数据达到一定阈值的情况下,也可主动触发主机的读取操作。
[0032] 在一种可能的实施方式中,所述性能检测方法还包括:为所述读取指令分配目标线程。其中,所述目标线程不为所述主机的主线程。步骤S300可包括:通过所述目标线程,读取所述显卡的显存中存储的至少一个性能检测数据。本公开实施例考虑到在读取显存的过程中可能存在的耗时较长的问题,故本公开实施例可通过一个单独的目标线程执行读取操作,以避免影响主机的主线程的性能。
[0033] 继续参阅图1,步骤S400,将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果。其中,所述目标性能检测数据为与所述待检测任务匹配成功的性能检测数据。在一种可能的实施方式中,步骤S400可包括:获取所述待检测任务对应的第一标识。而后获取所述至少一个性能检测数据中每个性能检测数据对应的第二标识。示例性地,第一标识、第二标识可起到标记作用即可,同一个第一标识仅指示同一种待检测任务即可。最终针对每个第二标识,在所述第一标识与所述每个第二标识中的目标标识满足预设的对应关系的情况下,将所述目标标识对应的性能检测数据,确定为所述目标性能检测数据。示例性地,上述预设的对应关系可为相等,即第一标识与第二标识相等的情况下,可认定二者匹配成功,应当理解的是,结合实际情况,开发人员也可建立非相等的对应关系,相同的第二标识可对应同一个第一标识即可,本公开实施例在此不做限制。应该当理解的是,本领域技术人员也可根据实际的需要,在目标检测数据的基础上,新增其他种类的相关数据(例如显卡的型号、驱动版本、工作状态等)以作为上述性能检测结果,本公开实施例在此不做限制。
[0034] 在一种可能的实施方式中,所述性能检测方法还包括:在确定所述待检测任务的类别为第二类别的情况下,执行所述待检测任务,将所述待检测任务对应的至少一个性能检测数据作为所述待检测任务对应的性能检测结果。其中,所述类别为第二类别的待检测任务为需要由所述主机执行的任务。本公开实施例允许待检测任务是针对主机性能进行检测的任务,通过设定任务的类别的方式,可提高性能检测流程的灵活性。
[0035] 在一种可能的实施方式中,所述类别为第一类别的待检测任务还包括需要由所述主机执行的任务,所述性能检测方法还包括:在确定所述待检测任务的类别为第一类别的情况下,执行所述待检测任务,得到所述待检测任务对应的至少一个主机性能检测数据;所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:将所述待检测任务分别与至少一个主机性能检测数据、读取到的所述显卡的显存中存储的至少一个性能检测数据进行匹配。示例性地,主机性能检测数据可保存至主机中的主存中,上述主存可为主机中的任意一种存储介质,本公开实施例在此不做限制。示例性地,每个显卡驱动APIs(或称待检测任务)在调用时均可生成一个全局唯一关联身份标识,保存于当前的上下文中,在主机的执行过程中,每次采集性能检测数据均可记录当前的身份标识,若需要下发待检测任务给显卡,会同时传输当前的身份标识,以实现同一个待检测任务在主机、显卡上的跨设备追踪。示例性地,上述匹配可表现为上述全局唯一关联身份标识的匹配,同一次待检测任务对应的该标识相同。结合实际场景,在一些待检测任务中,同时需要主机、显卡对其进行处理,本公开实施例可通过将主机、显卡的性能检测数进行匹配的方式,实现待检测任务在显卡、主机中的执行状态追踪,有利于分析主机、显卡二者的整体性能。例如:上述主机性能检测数据可表现为主机侧待检测任务(或称执行在主机中的待检测任务的子任务)的执行开始时间、主机侧待检测任务的执行结束时间、主机处理器的利用率等。上述显卡的显存中存储的至少一个性能检测数据可表现为显卡侧待检测任务(或称执行在显卡中的待检测任务的子任务)的执行开始时间、显卡侧待检测任务的执行结束时间、显卡利用率等。在一种可能的实施方式中,所述主机的主存中包括:异步事件队列、同步事件队列、读写存储器。示例性地,上述异步事件队列、同步事件队列可位于相同或不同的存储器中,对应有不同的物理存储地址即可,本公开实施例在此不做限制。所述待检测任务包括显卡的异步任务、显卡的同步任务。所述异步事件队列中存储有至少一个异步任务对应的性能检测数据、和/或所述主机执行待检测任务对应的至少一个性能检测数据(或称上文所述的主机性能检测数据),所述同步事件队列中存储有至少一个同步任务对应的性能检测数据、和/或匹配成功的异步任务对应的性能检测数据。示例性地,上述异步事件队列、同步事件队列均可对应有相应的线程,以自动抓取自身对应的性能检测数据。所述性能检测方法还包括:获取所述异步事件队列中抓取并存储的至少一个第一性能检测数据,并将所述至少一个第一性能检测数据与所述显卡的显存中存储的至少一个第二性能检测数据进行匹配,将匹配成功的第一性能检测数据与第二性能检测数据保存至所述同步事件队列。其中,匹配成功的第一性能检测数据、第二性能检测数据二者参数不同、二者对应的异步任务相同。示例性地,可通过上文所述的全局唯一关联身份标识予以匹配,例如将上述标识相同的第一、第二性能检测数据作为匹配成功的第一、第二性能检测数据。而后依序将所述同步事件队列中存储的性能检测数据保存至所述读写存储器中。所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:读取所述读写存储器,得到至少一个性能检测数据。
[0036] 在一种可能的实施方式中,所述读写存储器包括:第一存储器、第二存储器。所述依序将所述同步事件队列中存储的性能检测数据保存至读写存储器中,包括:确定所述第一存储器、所述第二存储器中标签为写入的写入存储器,依序将所述同步事件队列中存储的性能检测数据保存至所述写入存储器中。所述读取所述读写存储器,得到至少一个性能检测数据,包括:确定所述第一存储器、所述第二存储器中标签为读取的读取存储器,获取所述读取存储器中存储的至少一个性能检测数据。所述性能检测方法还包括:在执行所述读取所述读写存储器之前或之后,更新所述第一存储器和所述第二存储器的标签。在一个示例中,可在执行所述读取所述读写存储器之前、发送所述待检测任务至所述显卡之后,更新所述第一存储器和所述第二存储器的标签,以使获取到的性能检测数据的实时性更强。本公开实施例可通过设定标签的方式,使得第一存储器、第二存储器可同时对性能检测数据进行存储、读取,进而实现了性能检测数据的并行处理,可提高性能检测数据的传输效率,有利于降低最终得到的性能检测结果的耗时。
[0037] 在一种可能的实施方式中,所述性能检测方法还包括:获取所述主机的第一时间戳计数器中存储的第一时间戳总数、所述主机的第一时间戳采样次数、所述显卡的第二时间戳计数器中存储的第二时间戳总数、所述显卡的第二时间戳采样次数。而后根据所述第一时间戳总数、所述第一时间戳采样次数、所述第二时间戳总数、所述第二时间戳采样次数,确定所述主机对应的第一时间戳平均值、所述显卡对应的第二时间戳平均值。最终根据所述第一时间戳平均值以及所述第二时间戳平均值,建立所述主机与所述显卡的时间戳对应关系。其中,所述时间戳对应关系用以生成所述性能检测结果中的主机检测开始时间、主机检测结束时间、显卡检测开始时间、显卡检测结束时间。在相关技术中,主机与显卡都有各自的时间戳计数器,由于显卡的任务是异步执行的,故在下发待检测任务至显卡时,只能采集到显卡内部各个时间的时间戳计数,有鉴于此,本公开实施例可确定出显卡的执行计数、结合显卡的频率,可计算出执行的精确耗时,此外本公开实施例可在初始化显卡驱动时,在特定时间段内平均采样主机、显卡的时间戳计数器,再分别计算各自的平均时间戳计数,而后将二者进行时间戳的对齐,可视为主机、显卡位于同一个物理世界时间点,而后显卡的所有执行计数可参考对齐后的时间戳对应关系进行锚定。本公开实施例通过将主机与显卡的时间线对齐的方式,可以方便用户在性能检测结果中观察到整个系统的并行执行情况。
[0038] 参阅图2、图3,图2、图3示出了根据本公开实施例提供的一种性能检测结果的性能检测方法的参考示意图。结合图2,在处理非内核类待检测任务的情况下,主机可执行内存拷贝、运行/驱动APIs、其他种类的待检测任务。在处理内核类待检测任务(也即上文中类别为第一类别的待检测任务)的情况下,显卡驱动APIs(其中,APIs代表多个API)通过性能分析内部APIs记录必要的性能检测参数(此处值为空,仅代表数值类型,后续匹配成功可将性能检测数据填入对应的性能检测参数,以实现性能检测结果的生成),实现内核发起,通过固件将待检测任务发送到显卡上运行,显卡通过显卡内核执行对应的待检测任务,执行完成后通知固件执行结束,固件记录性能检测数据至一个环形队列中(可存储于显卡的显存中,图中将主机的主存、显存作为一个虚拟的、共享目的地缓冲存储),性能分析内部APIs主动触发读取显存中的数据,从用户模式进入内核模式,由内核模式的第二运输层将数据从显存中读出,并存储至主机中。性能分析内部APIs将读取到的数据与性能检测参数进行匹配,组装成完整的内核访问事件,进而实现完整的性能检测数据抓取。结合图3,同步事件队列记录了所有抓取到的、完整的显卡驱动APIs性能检测数据(或称事件),异步事件队列记录了所有抓取到的记录了部分依赖异步性能抓取能力的显卡驱动APIs性能检测数据。大部分显卡驱动APIs可通过同步方式抓取到完整的事件数据,并推送到同步事件队列中。运输线程通过周期性或被事件唤醒(可参考上文中的S300的触发方式)等触发方式,提取显存中的性能检测数据,其次从异步事件队列中查询到匹配上的异步事件(例如:通过上文所述的全局唯一关联身份标识进行匹配),合并事件后生成推送队列,推送至同步事件队列中。活动线程负责从同步事件队列中采集数据,得到冒泡队列,并通过写入活动序列化存储至写入缓冲中(可参考上文中依序将所述同步事件队列中存储的性能检测数据保存至所述读写存储器中)。示例性地,上述写入缓冲与读取缓冲(二者可参考上文所述的第一存储器、第二存储器)可交替执行,以实现读写分离,提高整体性能,用户可通过性能分析内部APIs获取读取缓冲中的性能检测数据。
[0039] 可以理解,本公开提及的上述各个方法实施例,在不违背原理逻辑的情况下,均可以彼此相互结合形成结合后的实施例,限于篇幅,本公开不再赘述。本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
[0040] 此外,本公开还提供了电子设备、计算机可读存储介质、程序,上述均可用来实现本公开提供的任一种性能检测方法,相应技术方案和描述和参见方法部分的相应记载,不再赘述。
[0041] 参阅图4,图4示出了根据本公开实施例提供的一种主机的框图。所述主机与显卡相连,所述主机100包括处理核心110、驱动模块120,所述驱动模块120被配置为:获取待检测任务,并确定所述待检测任务对应的任务类别;在确定所述待检测任务的类别为第一类别的情况下,发送所述待检测任务至所述显卡;其中,所述类别为第一类别的待检测任务为需要由所述显卡执行的任务;读取所述显卡的显存中存储的至少一个性能检测数据;将所述待检测任务分别与至少一个性能检测数据进行匹配,并基于所述待检测任务以及目标性能检测数据得到所述待检测任务对应的性能检测结果;其中,所述目标性能检测数据为与所述待检测任务匹配成功的性能检测数据;所述处理核心110被配置为:获取所述性能检测结果。
[0042] 在一种可能的实施方式中,所述驱动模块还用以在确定所述待检测任务的类别为第二类别的情况下,执行所述待检测任务,将所述待检测任务对应的至少一个性能检测数据作为所述待检测任务对应的性能检测结果;其中,所述类别为第二类别的待检测任务为需要由所述主机执行的任务。
[0043] 在一种可能的实施方式中,所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:获取所述待检测任务对应的第一标识;获取所述至少一个性能检测数据中每个性能检测数据对应的第二标识;针对每个第二标识,在所述第一标识与所述每个第二标识满足预设的对应关系的情况下,将所述每个第二标识对应的性能检测数据,确定为所述目标性能检测数据。
[0044] 在一种可能的实施方式中,所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:在接收到读取指令的情况下,读取所述显卡的显存中存储的至少一个性能检测数据;其中,所述读取指令通过如下任意一种方式生成:通过所述主机中应用程序生成读取指令、或响应于所述主机中应用程序生成的暂停检测指令,生成读取指令;其中,所述暂停检测指令用于暂停生成性能检测结果。
[0045] 在一种可能的实施方式中,所述驱动模块还用以为所述读取指令分配目标线程;其中,所述目标线程不为所述主机的主线程;所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:通过所述目标线程,读取所述显卡的显存中存储的至少一个性能检测数据。
[0046] 在一种可能的实施方式中,所述主机的主存中包括:异步事件队列、同步事件队列、读写存储器;所述待检测任务包括显卡的异步任务、显卡的同步任务;所述异步事件队列中存储有至少一个异步任务对应的性能检测数据、和/或所述主机执行待检测任务对应的至少一个性能检测数据,所述同步事件队列中存储有至少一个同步任务对应的性能检测数据、和/或匹配成功的异步任务对应的性能检测数据;所述驱动模块还用以获取所述异步事件队列中抓取并存储的至少一个第一性能检测数据,并将所述至少一个第一性能检测数据与所述显卡的显存中存储的至少一个第二性能检测数据进行匹配,将匹配成功的第一性能检测数据与第二性能检测数据保存至所述同步事件队列;其中,匹配成功的第一性能检测数据、第二性能检测数据二者参数不同、二者对应的异步任务相同;依序将所述同步事件队列中存储的性能检测数据保存至所述读写存储器中;所述读取所述显卡的显存中存储的至少一个性能检测数据,包括:读取所述读写存储器,得到至少一个性能检测数据。
[0047] 在一种可能的实施方式中,所述读写存储器包括:第一存储器、第二存储器;所述依序将所述同步事件队列中存储的性能检测数据保存至读写存储器中,包括:确定所述第一存储器、所述第二存储器中标签为写入的写入存储器,依序将所述同步事件队列中存储的性能检测数据保存至所述写入存储器中;所述读取所述读写存储器,得到至少一个性能检测数据,包括:确定所述第一存储器、所述第二存储器中标签为读取的读取存储器,获取所述读取存储器中存储的至少一个性能检测数据;更新所述第一存储器和所述第二存储器的标签。
[0048] 在一种可能的实施方式中,所述类别为第一类别的待检测任务还包括需要由所述主机执行的任务,所述驱动模块还用以在确定所述待检测任务的类别为第一类别的情况下,执行所述待检测任务,得到所述待检测任务对应的至少一个主机性能检测数据;所述将所述待检测任务分别与至少一个性能检测数据进行匹配,包括:将所述待检测任务分别与至少一个主机性能检测数据、读取到的所述显卡的显存中存储的至少一个性能检测数据进行匹配。
[0049] 在一种可能的实施方式中,所述驱动模块还用以获取所述主机的第一时间戳计数器中存储的第一时间戳总数、所述主机的第一时间戳采样次数、所述显卡的第二时间戳计数器中存储的第二时间戳总数、所述显卡的第二时间戳采样次数;根据所述第一时间戳总数、所述第一时间戳采样次数、所述第二时间戳总数、所述第二时间戳采样次数,确定所述主机对应的第一时间戳平均值、所述显卡对应的第二时间戳平均值;根据所述第一时间戳平均值以及所述第二时间戳平均值,建立所述主机与所述显卡的时间戳对应关系;其中,所述时间戳对应关系用以生成所述性能检测结果中的主机检测开始时间、主机检测结束时间、显卡检测开始时间、显卡检测结束时间。
[0050] 该方法与计算机系统的内部结构存在特定技术关联,且能够解决如何提升硬件运算效率或执行效果的技术问题(包括减少数据存储量、减少数据传输量、提高硬件处理速度等),从而获得符合自然规律的计算机系统内部性能改进的技术效果。
[0051] 在一些实施例中,本公开实施例提供的装置具有的功能或包含的模块可以用于执行上文方法实施例描述的方法,其具体实现可以参照上文方法实施例的描述,为了简洁,这里不再赘述。
[0052] 本公开实施例还提出一种计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现上述方法。计算机可读存储介质可以是易失性或非易失性计算机可读存储介质。
[0053] 本公开实施例还提出一种电子设备,包括:处理器;用于存储处理器可执行指令的存储器;其中,所述处理器被配置为调用所述存储器存储的指令,以执行上述方法。
[0054] 本公开实施例还提供了一种计算机程序产品,包括计算机可读代码,或者承载有计算机可读代码的非易失性计算机可读存储介质,当所述计算机可读代码在电子设备的处理器中运行时,所述电子设备中的处理器执行上述方法。
[0055] 电子设备可以被提供为终端设备、服务器或其它形态的设备。
[0056] 参阅图5所示,图5示出了根据本公开实施例提供的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器或终端设备。参照图5,电子设备1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法。
[0057] 电子设备1900还可以包括一个电源组件1926被配置为执行电子设备1900的电源管理,一个有线或无线网络接口1950被配置为将电子设备1900连接到网络,和一个输入输出接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如微软服务器TM TM操作系统(Windows Server ),苹果公司推出的基于图形用户界面操作系统(Mac OS X ),TM
多用户多进程的计算机操作系统(Unix ), 自由和开放原代码的类Unix操作系统TM TM
(Linux ),开放原代码的类Unix操作系统(FreeBSD )或类似。
[0058] 在示例性实施例中,还提供了一种非易失性计算机可读存储介质,例如包括计算机程序指令的存储器1932,上述计算机程序指令可由电子设备1900的处理组件1922执行以完成上述方法。
[0059] 本公开可以是系统、方法和/或计算机程序产品。计算机程序产品可以包括计算机可读存储介质,其上载有用于使处理器实现本公开的各个方面的计算机可读程序指令。
[0060] 计算机可读存储介质可以是可以保持和存储由指令执行设备使用的指令的有形设备。计算机可读存储介质例如可以是(但不限于)电存储设备、磁存储设备、光存储设备、电磁存储设备、半导体存储设备或者上述的任意合适的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:便携式计算机盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、静态随机存取存储器(SRAM)、便携式压缩盘只读存储器(CD‑ROM)、数字多功能盘(DVD)、记忆棒、软盘、机械编码设备、例如其上存储有指令的打孔卡或凹槽内凸起结构、以及上述的任意合适的组合。这里所使用的计算机可读存储介质不被解释为瞬时信号本身,诸如无线电波或者其他自由传播的电磁波、通过波导或其他传输媒介传播的电磁波(例如,通过光纤电缆的光脉冲)、或者通过电线传输的电信号。
[0061] 这里所描述的计算机可读程序指令可以从计算机可读存储介质下载到各个计算/处理设备,或者通过网络、例如因特网、局域网、广域网和/或无线网下载到外部计算机或外部存储设备。网络可以包括铜传输电缆、光纤传输、无线传输、路由器、防火墙、交换机、网关计算机和/或边缘服务器。每个计算/处理设备中的网络适配卡或者网络接口从网络接收计算机可读程序指令,并转发该计算机可读程序指令,以供存储在各个计算/处理设备中的计算机可读存储介质中。
[0062] 用于执行本公开操作的计算机程序指令可以是汇编指令、指令集架构(ISA)指令、机器指令、机器相关指令、微代码、固件指令、状态设置数据、或者以一种或多种编程语言的任意组合编写的源代码或目标代码,所述编程语言包括面向对象的编程语言—诸如Smalltalk、C++等,以及常规的过程式编程语言—诸如“C”语言或类似的编程语言。计算机可读程序指令可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络—包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。在一些实施例中,通过利用计算机可读程序指令的状态信息来个性化定制电子电路,例如可编程逻辑电路、现场可编程门阵列(FPGA)或可编程逻辑阵列(PLA),该电子电路可以执行计算机可读程序指令,从而实现本公开的各个方面。
[0063] 这里参照根据本公开实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述了本公开的各个方面。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机可读程序指令实现。
[0064] 这些计算机可读程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,使得这些指令在通过计算机或其它可编程数据处理装置的处理器执行时,产生了实现流程图和/或框图中的一个或多个方框中规定的功能/动作的装置。也可以把这些计算机可读程序指令存储在计算机可读存储介质中,这些指令使得计算机、可编程数据处理装置和/或其他设备以特定方式工作,从而,存储有指令的计算机可读介质则包括一个制造品,其包括实现流程图和/或框图中的一个或多个方框中规定的功能/动作的各个方面的指令。
[0065] 也可以把计算机可读程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机、其它可编程数据处理装置、或其它设备上执行的指令实现流程图和/或框图中的一个或多个方框中规定的功能/动作。
[0066] 附图中的流程图和框图显示了根据本公开的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或指令的一部分,所述模块、程序段或指令的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
[0067] 该计算机程序产品可以具体通过硬件、软件或其结合的方式实现。在一个可选实施例中,所述计算机程序产品具体体现为计算机存储介质,在另一个可选实施例中,计算机程序产品具体体现为软件产品,例如软件开发包(Software Development Kit,SDK)等等。
[0068] 上文对各个实施例的描述倾向于强调各个实施例之间的不同之处,其相同或相似之处可以互相参考,为了简洁,本文不再赘述。
[0069] 本领域技术人员可以理解,在具体实施方式的上述方法中,各步骤的撰写顺序并不意味着严格的执行顺序而对实施过程构成任何限定,各步骤的具体执行顺序应当以其功能和可能的内在逻辑确定。
[0070] 若本申请技术方案涉及个人信息,应用本申请技术方案的产品在处理个人信息前,已明确告知个人信息处理规则,并取得个人自主同意。若本申请技术方案涉及敏感个人信息,应用本申请技术方案的产品在处理敏感个人信息前,已取得个人单独同意,并且同时满足“明示同意”的要求。例如,在摄像头等个人信息采集装置处,设置明确显著的标识告知已进入个人信息采集范围,将会对个人信息进行采集,若个人自愿进入采集范围即视为同意对其个人信息进行采集;或者在个人信息处理的装置上,利用明显的标识/信息告知个人信息处理规则的情况下,通过弹窗信息或请个人自行上传其个人信息等方式获得个人授权;其中,个人信息处理规则可包括个人信息处理者、个人信息处理目的、处理方式以及处理的个人信息种类等信息。
[0071] 以上已经描述了本公开的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。