本发明专利技术公开了一种CUDA程序行为剖析的方法,该方法通过修改模拟器的配置文件开启指令跟踪和程序信息调试功能,来记录CUDA程序运行过程中的线程id号、指令操作码等信息。在对原始的程序运行数据进行提取和过滤后,采用欧几里得距离公式来计算同一线程组中的线程之间的基本块向量距离,建立同步矩阵和相似矩阵模型来分析程序的线程特征。这样,我们提供了现有的CUDA剖析工具尚不具备的基本块级别和线程级别特征的剖析方法。
【技术实现步骤摘要】
本专利技术属于高性能计算研究和程序行为剖析领域,具体涉及针对CUDA编程模型开发的高性能应用程序(例如在GPGPU平台上运行的高性能数据库和气象预测程序)的行为剖析以及剖析工具的研究,它适用于CUDA应用程序的行为研究和剖析方法的优化。
技术介绍
GPU以其理论上计算性能显著超越同时代的多核CPU的技术优势,已经在近几年里进入了非图形计算领域,而像CUDA (Computing Unified Device Architecture,计算统一设备体系结构)这样的编程模型的涌现,鼓舞了开发者利用GPU来运行高性能应用的热情。在NVIDIA公司的官方网站上,已经有不同领域的几百个成功的典型应用,它们获得的加速比可以达到几十甚至上百,并且这一情况仍在继续发展。在产业界,也有不少公司希望把他们的应用,比如用于流媒体处理领域的H. 264编解码器,迁移到GPU架构上来,获得更高的并行性能。然而,目前缺乏一种优秀的剖析工具,来帮助开发者来深入理解CUDA应用程序的加速效果。NVIDIA公司开发的cudaprof工具受到硬件计数器数量的限制,提供的信息有限,而且不能扩展。而gpuocelot中的cuda程序剖析工具,主要是对源代码的静态剖析。我们希望开发一种CUDA程序剖析系统,来帮助开发者理解CUDA应用程序的动态行为特征,尤其是基本块特征、线程同步特征以及相似特征等现有的CUDA剖析工具无法剖析的特征。程序剖析一般分为静态剖析和动态剖析两种。静态剖析并不真正执行程序,而是通过对序源码进行分析,得到程序的结构信息(包括模块调用关系图、模块的控制流程图等)、逆向提取的对象模型和类关系及程序的复杂度度量等。动态剖析则要通过运行程序 (实际运行或模拟运行)来得到程序的动态行为信息,包括分析指令的覆盖率、监控内存的状态等等。动态剖析可以采用实际运行程序的方式,使用硬件计数器来统计程序的信息。这种方法受到了硬件计数器数量和功能的限制。也可以通过插装技术来实现,在对源程序预处理后,插装,汇编后,实际运行或者模拟运行。典型的插装方法可以通过修改编译器来实现。
技术实现思路
本专利技术的目的是设计和实现一种剖析CUDA程序行为的方法,它能够对CUDA程序的动态行为特征尤其是基本块特征、同步以及线程相似特征进行剖析,从而获得CUDA程序重要而且独特的行为特征。本专利技术提供的一种剖析CUDA程序行为的方法,其特征在于,该方法包括下述步骤(1)使用GPU模拟器软件,修改它的配置文件开启指令跟踪和程序信息调试功能后,运行CUDA程序;(2)记录CUDA程序运行过程中产生的线程的id信息、指令操作码、指令依赖距离以及基本块的块号、平均大小、前驱、后继结点信息;(3)通过CUDA程序中的基本块的前驱、后继结点的连接信息,计算CUDA程序中的基本块之间跳转的概率;(4)显示CUDA程序的控制流-基本块跳转的逻辑关系,获取基本块的总数;(5)针对每一个线程,搜索步骤(2)记录的线程号和基本块号,找出它经过的所有基本块的块号;(6)针对每一个线程经过的所有基本块,搜索步骤( 记录的信息里的线程id和基本块块号,计算出每个基本块被该线程访问的次数;(7)以每个基本块被某线程访问的次数为数组的元素,建立该线程的基本块向量;(8)针对每一个线程的基本块向量,计算出不同的线程的基本块向量之间的距罔;(9)以不同的线程的基本块向量之间的距离为矩阵的元素,建立线程的相似矩阵;(10)根据与现有CUDA程序的行为特征进行比较的结果,判断该CUDA程序是否属于该行为特征显著型程序;所述行为特征表现为数学统计结果,如果该结果超过预设的临界值,则判断该CUDA程序属于该行为特征显著型程序;(11)如果不需要剖析其它的程序,结束;反之,转入步骤(1)。本专利技术方法对CUDA程序的行为进行剖析,修改模拟器软件配置文件开启指令跟踪和程序信息调试功能,产生原始的程序运行数据。我们对原始的程序运行数据进行提取和过滤后,通过计算同一线程组中的线程之间的基本块向量距离,建立同步矩阵和相似矩阵模型来分析程序的线程特征。这样,我们提供了一种现有的CUDA剖析工具尚不具备的基本块级别和线程级别的特征剖析方法。具体而言,本专利技术方法具有以下特点和优点(1)基本块级别的特征剖析。其它 CUDA程序剖析工具尚未提供基本块的剖析方法,而基本块级别的特征剖析仍然是CUDA程序剖析中非常重要的一个环节,本专利技术提供的方法填补了这一空白。( 把同步向量和相似矩阵应用到线程级别的剖析。本专利技术针对CUDA程序的特点,优选采用欧几里得距离来计算同一线程组内线程之间的相似性,经实践检验,该数学模型的效果较好。附图说明图1为本专利技术方法的一种具体实施方式的流程图,其中,(IA)为整体流程,(IB)为基本块级别剖析流程;图2为实现图1所述方法的体系结构图;图3为本专利技术的线程剖析过程参考图。具体实施例方式本专利技术通过对模拟器的修改和扩充,来收集CUDA应用程序模拟运行时的信息,从而剖析基本块特征以及线程级特征等现有的CUDA剖析工具未提供的功能。CUDA应用程序的基本块特征,与传统的CPU架构上运行的应用程序的基本块特征相比,有其独特之处,需要CUDA剖析工具开发者提供合适的工具来研究。线程同步特征和相似特征,是CUDA程序很重要的线程级特征,而现有的CUDA程序剖析工具对此无能为力。本专利技术设计了向量矩阵的数据结构,通过合适的数学方法,实现了对线程同步和相似特征的剖析。本专利技术针对剖析CUDA程序的关键行为特征方面的需求,以及现有CUDA程序剖析工具所提供的方法的局限性,提出了基于模拟器的修改和扩充来剖析CUDA应用程序基本块级别和线程级别行为特征的方法。下面结合附图和实例对本专利技术进行详细说明。如图1所示,本专利技术方法的步骤为(1)使用GPU模拟器软件,修改与它的配置选项相关的环境变量并保存到脚本文件中,以开启指令跟踪和程序信息调试功能。例如,向Linux的环境变量里添加PTX_SIM_ DEBUG值,在用户主目录下的.bashrc脚本文件的末尾添加export PTX_SIM_DEBUG = 5这一句命令来打开GPU模拟器软件的指令跟踪和信息调试功能的第5个级别。然后,开始运行CUDA程序。(2)记录CUDA程序运行过程中产生的线程的id信息、指令操作码、指令依赖距离以及基本块的块号、平均大小、前驱、后继结点信息。(3)根据⑵中所记录运行过程中的基本块的后继结点出现的次数,汇总得到每个基本块与它的后继结点的连接次数。对于每个基本块,根据它与它的后继结点的连接次数,来计算CUDA程序中的基本块之间跳转的概率。例如,A结点的后继结点是B和C,如果在程序运行完成时A结点与B结点总共连接了 b次,A结点与C结点总共连接了 c次,那么 A结点跳转到B结点的概率为b/(b+c)。(4)使用graphiviz软件以及图像软件来显示程序的控制流——基本块跳转的逻辑关系。根据基本块之间相互跳转的概率,动态地显示出程序的控制流图。(5)针对每一个线程,搜索第(2)步记录的线程号和基本块号,找出它经过的所有基本块的块号。(6)针对每一个线程经过的所有基本块,搜索第(2)步记录的信息里的线程id和基本块块号,计算出每个基本块被该线程访问的次数。(本文档来自技高网...
【技术保护点】
【技术特征摘要】
【专利技术属性】
技术研发人员:金海,喻之斌,程伟,
申请(专利权)人:华中科技大学,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。