一种数据获取方法及装置与流程

文档序号:11323142阅读:225来源:国知局
一种数据获取方法及装置与流程

本发明属于数据管理领域,尤其涉及一种数据获取方法及装置。



背景技术:

目前已有一些工具可以进行cuda(computeunifieddevicearchitecture,并行计算架构)程序性能分析,但都存在一些不足,比如papi、tau,都需要修改待测程序源代码,并多次启动待测程序,这一方面增加了性能测试工作的难度和繁琐程度;另外,tau只能收集单纯的硬件计数器值,不能收集或计算综合性能指标,而独立的硬件计数器值难以直接反应程序的性能特征,这使得其性能分析结果难以引导开发者进行性能优化。

因此,迫切需要一种高效、准确的数据获取方案来解决上述技术问题。



技术实现要素:

本发明提供一种数据获取方法及装置,以解决上述问题。

本发明实施例提供一种数据获取方法。上述方法包括以下步骤:获取核函数参数即kernel函数参数并备份全局变量;通过调用对应的库函数,执行核函数代码,读取事件组信息;根据所述事件组信息,获得性能数据值。

本发明实施例提供一种数据获取装置,包括备份模块、读取模块、处理模块;其中,所述备份模块通过所述读取模块与所述处理模块相连;

所述备份模块,用于获取核函数参数即kernel函数参数并备份全局变量;

所述读取模块,用于通过调用对应的库函数,执行从所述备份模块中获取的核函数代码,读取事件组信息;

所述处理模块,用于根据从所述读取模块中获取的所述事件组信息,获得性能数据值。

本发明实施例提供以下技术方案:获取核函数参数即kernel函数参数并备份全局变量;通过调用对应的库函数,执行所述核函数代码,读取事件组信息;根据所述事件组信息,获得性能数据值。

上述技术方案通过执行核函数代码,读取全部事件组信息,获取性能数据值,实现了高效、准确的性能数据获取途径,避免需要修改待测程序源码及多次启动待测程序的繁琐方式,大大提升了用户体验。

本发明实施例提供以下技术方案:执行核函数代码,并读取事件组信息,判断是否还有事件组待读取,若有,则恢复备份的全局变量和kernel函数参数为初始值

上述技术方案通过循环读取,将事件组信息全部读取,实现了整个程序只需要运行一次,即可得到需要的所有性能指标,实现了高效、准确的性能数据获取途径。

附图说明

此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:

图1所示为本发明实施例1的数据获取方法处理流程图;

图2所示为本发明实施例2的对库函数插桩的具体实施步骤流程示意图;

图3所示为本发明实施例3的对库函数进行插桩后kernel函数的执行流程示意图;

图4所示为本发明实施例4的数据获取装置结构图。

具体实施方式

下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。

图1所示为本发明实施例1的数据获取方法处理流程图,包括以下步骤:

步骤101:获取核函数参数即kernel函数参数并备份全局变量;

进一步地,建立一个全局链表,用于备份全局变量及kernel函数参数。

为了实现变量的备份与同步更新,本发明实施例采用了一个全局链表来实现,全局链表中的每一个节点对应于一个全局内存变量,节点保存了被备份变量的内存地址及备份值,通过对cudamalloc库函数进行插桩,每当调用该函数时,在链表中增加一个节点,记录该内存地址,通过对cudamemcpy库函数进行插桩,每当调用该函数改变内存变量的值时,根据该变量地址搜索链接找到该节点,更新节点备份的值,从而实现备份值的同步更新。

步骤102:通过调用对应的库函数,执行核函数代码,读取事件组信息;

进一步地,通过执行所述核函数代码,并读取事件组信息,判断是否还有事件组待读取,若有,则恢复备份的全局变量和kernel函数参数为初始值。

进一步地,所述库函数包括cudaconfigurecall库函数、cudasetupargument库函数、cudamalloc库函数、cudamemcpy库函数、cudalauch库函数。

进一步地,重写cudaconfigurecall库函数、cudasetupargument库函数;其中,通过所述全局链表,记录kernel函数参数。

进一步地,重写cudamalloc库函数并向所述全局链表增加节点,记录所述cudamalloc库函数分配的全局变量内存地址。

进一步地,重写cudamemcpy库函数,遍历所述全局链表,获得备份的全局变量所在节点,同步更新变量值。

进一步地,重写cudalauch库函数,在执行所述核函数代码前,遍历所述全局链表,将所述全局链表中各个节点的备份值更新为对应全局变量的初始值。

优选地,将重写的库函数封装为动态文件库。

通过执行kernel函数代码(通过调用cudalauch函数),并读取需要的事件组,判断是否还有事件组需要获取,如果有,则恢复步骤101备份的全局变量和kernel函数参数。

为得到需要的性能数据即metric值,而必须首先得到较多的事件值,而由于硬件计数器数量限制,每次kernel函数运行时可以收集到的事件值数量有限,因此需要多次执行kernel函数,分多次收集事件值。

为此,本发明通过对库函数插桩而改变了kernel函数的发射过程,使得原先一次执行的kernel函数被多次发射,从而在每次执行时求得一部分硬件计数器值,最终求出所有需要的硬件计数器值,进而求得所需要的所有metric值。

其中,kernel函数执行过程中可能修改部分全局内存变量的值,此时原先只执行一次的kernel函数被修改为多次执行后会导致部分全局内存变量被累计修改多次,从而导致错误,为避免出现这样的错误,需要提前备份可能被修改的变量值,并在每次调用cudalauch库函数前将上次执行时被改变的变量恢复为正确的初始值,从而使kernel函数的多次执行是在同样的初始条件下进行。为此本发明实施例备份了程序中的所有全局变量,通过对cudamalloc库函数,cudamemcpy等库函数进行插桩,进而实现了备份值跟随原变量值的同步更新。

步骤103:根据所述事件组信息,获得性能数据值即metric值。

图2所示为本发明实施例2的对库函数插桩的具体实施步骤流程示意图;

步骤201:备份kernel函数参数和全局变量内存初始值;

步骤202:执行kernel函数并读取一部分事件组;

步骤203:判断是否还有事件组没有读取,若是,则恢复备份的全局内存变量和kernel函数参数为初始值;若否,则执行步骤204;

步骤204:根据获取到的事件组,计算性能数据值即metric值。

图3所示为本发明实施例3的对库函数进行插桩后kernel函数的执行流程示意图;

a:建立一个全局链表,用于备份全局变量及kernel函数参数;

b:重写cudaconfigurecall,cudasetupargument库函数,在其中通过步骤a建立的全局链表,增加节点,记录kernel函数参数,随后继续调用原来的cudaconfigurecall,cudasetupargument库函数;

c:重写cudamalloc库函数,向步骤a中建立的全局链表增加节点,记录cudamalloc分配的全局变量内存地址,随后继续调用原来的cudamalloc库函数

d:重写cudamemcpy库函数,遍历步骤a中建立的全局链表,找到步骤c备份的全局变量所在节点,同步更新该变量值,随后继续调用原来的cudamemcpy函数;

e:重写cudalauch库函数,在调用kernel函数前,遍历链表,将链表中各个节点的备份值更新为对应全局变量的初始值,随后继续调用原来的cudalauch库函数;

f:执行完e后,根据需要的metric读取需要的事件组,如果所有事件组全部获取到,调用cuda库函数进而计算出metric值,如果没有获取到,继续执行e步骤

最后将以上步骤重写的库函数封装为动态库文件,并通过设置ld_preload环境变量使得gpu程序在调用库函数时链接并执行本发明实施例重新实现的版本,进而采集到所需要的metric值,实现gpu程序的透明化操作。

图4所示为本发明实施例4的性能数据获取装置结构图,包括备份模块、读取模块、处理模块;其中,所述备份模块通过所述读取模块与所述处理模块相连;

所述备份模块,用于获取核函数参数即kernel函数参数并备份全局变量;

所述读取模块,用于通过调用对应的库函数,执行所述核函数代码,读取事件组信息;

所述处理模块,用于根据所述事件组信息,获得性能数据值。

进一步地,所述备份模块,还用于建立一个全局链表,用于备份全局变量及kernel函数参数。

本发明实施例提供以下技术方案:获取核函数参数即kernel函数参数并备份全局变量;通过调用对应的库函数,执行所述核函数代码,读取事件组信息;根据所述事件组信息,获得性能数据值。

上述技术方案通过执行核函数代码,读取全部事件组信息,获取性能数据值,实现了高效、准确的性能数据获取途径,避免需要修改待测程序源码及多次启动待测程序的繁琐方式,大大提升了用户体验。

本发明实施例提供以下技术方案:执行核函数代码,并读取事件组信息,判断是否还有事件组待读取,若有,则恢复备份的全局变量和kernel函数参数为初始值

上述技术方案通过循环读取,将事件组信息全部读取,实现了整个程序只需要运行一次,即可得到需要的所有性能指标,实现了高效、准确的性能数据获取途径。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1