CN102567206B - 一种剖析cuda程序行为的方法 - Google Patents
一种剖析cuda程序行为的方法 Download PDFInfo
- Publication number
- CN102567206B CN102567206B CN201210006272.3A CN201210006272A CN102567206B CN 102567206 B CN102567206 B CN 102567206B CN 201210006272 A CN201210006272 A CN 201210006272A CN 102567206 B CN102567206 B CN 102567206B
- Authority
- CN
- China
- Prior art keywords
- program
- thread
- cuda
- fundamental block
- cuda program
- 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.)
- Expired - Fee Related
Links
Abstract
本发明公开了一种CUDA程序行为剖析的方法,该方法通过修改模拟器的配置文件开启指令跟踪和程序信息调试功能,来记录CUDA程序运行过程中的线程id号、指令操作码等信息。在对原始的程序运行数据进行提取和过滤后,采用欧几里得距离公式来计算同一线程组中的线程之间的基本块向量距离,建立同步矩阵和相似矩阵模型来分析程序的线程特征。这样,我们提供了现有的CUDA剖析工具尚不具备的基本块级别和线程级别特征的剖析方法。
Description
技术领域
本发明属于高性能计算研究和程序行为剖析领域,具体涉及针对CUDA编程模型开发的高性能应用程序(例如在GPGPU平台上运行的高性能数据库和气象预测程序)的行为剖析以及剖析工具的研究,它适用于CUDA应用程序的行为研究和剖析方法的优化。
背景技术
GPU以其理论上计算性能显著超越同时代的多核CPU的技术优势,已经在近几年里进入了非图形计算领域,而像CUDA(Computing UnifiedDevice 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)针对每一个线程经过的所有基本块,搜索步骤(2)记录的信息里的线程id和基本块块号,计算出每个基本块被该线程访问的次数;
(7)以每个基本块被某线程访问的次数为数组的元素,建立该线程的基本块向量;
(8)针对每一个线程的基本块向量,计算出不同的线程的基本块向量之间的距离;
(9)以不同的线程的基本块向量之间的距离为矩阵的元素,建立线程的相似矩阵;
(10)根据与现有CUDA程序的行为特征进行比较的结果,判断该CUDA程序是否属于该行为特征显著型程序;所述行为特征表现为数学统计结果,如果该结果超过预设的临界值,则判断该CUDA程序属于该行为特征显著型程序;
(11)如果不需要剖析其它的程序,结束;反之,转入步骤(1)。
本发明方法对CUDA程序的行为进行剖析,修改模拟器软件配置文件开启指令跟踪和程序信息调试功能,产生原始的程序运行数据。我们对原始的程序运行数据进行提取和过滤后,通过计算同一线程组中的线程之间的基本块向量距离,建立同步矩阵和相似矩阵模型来分析程序的线程特征。这样,我们提供了一种现有的CUDA剖析工具尚不具备的基本块级别和线程级别的特征剖析方法。
具体而言,本发明方法具有以下特点和优点:(1)基本块级别的特征剖析。其它CUDA程序剖析工具尚未提供基本块的剖析方法,而基本块级别的特征剖析仍然是CUDA程序剖析中非常重要的一个环节,本发明提供的方法填补了这一空白。(2)把同步向量和相似矩阵应用到线程级别的剖析。本发明针对CUDA程序的特点,优选采用欧几里得距离来计算同一线程组内线程之间的相似性,经实践检验,该数学模型的效果较好。
附图说明
图1为本发明方法的一种具体实施方式的流程图,其中,(1A)为整体流程,(1B)为基本块级别剖析流程;
图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)根据(2)中所记录运行过程中的基本块的后继结点出现的次数,汇总得到每个基本块与它的后继结点的连接次数。对于每个基本块,根据它与它的后继结点的连接次数,来计算CUDA程序中的基本块之间跳转的概率。例如,A结点的后继结点是B和C,如果在程序运行完成时A结点与B结点总共连接了b次,A结点与C结点总共连接了c次,那么A结点跳转到B结点的概率为b/(b+c)。
(4)使用graphiviz软件以及图像软件来显示程序的控制流——基本块跳转的逻辑关系。根据基本块之间相互跳转的概率,动态地显示出程序的控制流图。
(5)针对每一个线程,搜索第(2)步记录的线程号和基本块号,找出它经过的所有基本块的块号。
(6)针对每一个线程经过的所有基本块,搜索第(2)步记录的信息里的线程id和基本块块号,计算出每个基本块被该线程访问的次数。
(7)以每个基本块被某线程访问的次数为数组的元素,建立该线程的基本块向量(BBV Basic Block Vector)。
(8)针对每一个线程的基本块向量,计算出不同的线程的基本块向量之间的距离。
(9)以不同的线程的基本块向量之间的距离为矩阵的元素,建立线程的相似矩阵。
例如,对于一个线程组里的256个线程,我们建立256行256列的矩阵,其中第i行第j列的元素是这个线程组里的第i个线程的基本块向量与第j个线程的基本块向量之间的距离。距离的计算采用欧几里得距离公式或者曼哈顿距离公式,以第(8)步所提出采用的欧几里得距离公式为优。
(10)根据与现有CUDA程序重要行为特征进行比较的结果,判断该CUDA程序是否属于该行为特征显著型程序。本发明所剖析的CUDA程序的该行为特征表现出来的数学统计结果(采用数学统计方法所得出的结果)超过了预设的临界值,我们就判断这个CUDA程序属于该行为特征显著型程序。
方法之一是判断CUDA程序是否为分支发散(Branch divergence)显著型程序:把相似矩阵里的元素值归一化,使用归一化后的值作为亮度值,使用Matlab工具以黑白图形显示相似矩阵,并使用像素扫描器检查剖析的CUDA程序运行过程中的线程的起伏变化率,当像素扫描器检查到的CUDA程序的线程起伏变化率大于预先设定的临界值时,系统做出以下判断:所检查的CUDA程序是分支发散(Branch divergence)显著型程序。分支发散(Branch divergence)是CUDA程序剖析领域公知的技术名词。所述临界值可以取已知的Branch divergence显著型程序的起伏变化率的平均值。
方法之二是判断CUDA程序是否为同步显著性程序:根据第(2)步记录的BAR指令操作码在程序执行完所经过的基本块中出现的次数,除以程序执行完所经过的基本块的总数,得到线程的同步率,来对CUDA程序是否是同步显著型进行判断。当所运行的CUDA程序的同步率大于预先设定的另一临界值时,系统做出以下判断:所运行的CUDA程序是同步显著型程序。同步是CUDA程序剖析领域公知的技术名词。所述另一临界值可以取已知的同步显著型程序的同步率的平均值。
(12)如果不需要剖析其它的程序,结束;反之创建新的处理实例,跳到第(1)步,重复上面的剖析过程。
实例:
本发明的运行过程参考图3,下面用一个实例来详细说明:
(1)修改gpgpusim的功能模拟器的配置文件,打开指令跟踪和程序信息调试功能。
(2)调用gpgpusim模拟的CUDA库函数来运行CUDA二进制程序。
(3)通过将指令跟踪和程序信息调试功能所收集的原始数据保存到文件里,基本块跳转的逻辑保存为.dot文件。
(4)通过Python或Perl脚本来提取和过滤程序的原始运行数据,使用外接的graphviz软件将.dot文件绘制成图形。
(5)对于提取的的BBV数据,采用Euclidean距离公式来计算同一线程组内不同的线程之间的BBV向量距离,建立同步矩阵和相似矩阵模型来分析程序的同步一致度和线程相似度。
(6)如果不需要剖析其它的程序,结束;反之创建新的处理实例,跳到第(2)步,重复上面的剖析过程,比较不同类型的CUDA程序之间的程序行为特征的差别,分析并研究计算密集型与数据密集型CUDA程序之间性能差异的因素。
以上所述,仅为本发明最佳的具体实现方式,本发明的实现方法并不局限于此,任何在本发明领域内不脱离本发明精神下的改变,都应涵盖在本发明范围内。
Claims (1)
1.一种剖析CUDA程序行为的方法,其特征在于,所述CUDA程序行为包括CUDA程序的基本块级别的特征和线程级别的特征,该方法包括下述步骤:
(1)使用GPU模拟器软件,修改它的配置文件开启指令跟踪和程序信息调试功能后,运行CUDA程序;
(2)记录CUDA程序运行过程中产生的线程的id信息、指令操作码、指令依赖距离以及基本块的块号、平均大小、前驱、后继结点信息;
(3)通过CUDA程序中的基本块的前驱、后继结点的连接信息,计算CUDA程序中的基本块之间跳转的概率;
(4)显示CUDA程序的控制流—基本块跳转的逻辑关系,获取基本块的总数;
(5)针对每一个线程,搜索步骤(2)记录的线程号和基本块号,找出它经过的所有基本块的块号;
(6)针对每一个线程经过的所有基本块,搜索步骤(2)记录的信息里的线程id和基本块块号,计算出每个基本块被该线程访问的次数;
(7)以每个基本块被某线程访问的次数为数组的元素,建立该线程的基本块向量;
(8)针对每一个线程的基本块向量,计算出不同的线程的基本块向量之间的距离,其中,采用欧几里得距离来计算同一线程组内线程之间的相似程度;
(9)以不同的线程的基本块向量之间的距离为矩阵的元素,建立线程的相似矩阵;
(10)根据与现有CUDA程序的行为特征进行比较的结果,判断该CUDA程序是否属于该行为特征显著型程序;所述行为特征表现为数学统计结果,如果该结果超过预设的临界值,则判断该CUDA程序属于该行为特征显著型程序;具体方式为:
将相似矩阵里的元素值归一化,使用归一化后的值作为亮度值,使用Matlab工具以黑白图形显示相似矩阵,并使用像素扫描器检查剖析的CUDA程序运行过程中的线程的起伏变化率,当像素扫描器检查到的CUDA程序的线程起伏变化率大于预先设定的临界值时,则认为该CUDA程序是分支发散显著型程序;
将步骤(2)记录的指令操作码在程序执行完所经过的基本块中出现的次数,除以程序执行完所经过的基本块的总数,得到线程的同步率,当所运行的CUDA程序的同步率大于预先设定的另一临界值时,则认为所运行的CUDA程序是同步显著型程序;
(11)如果不需要剖析其它的程序,结束;反之,转入步骤(1)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210006272.3A CN102567206B (zh) | 2012-01-06 | 2012-01-06 | 一种剖析cuda程序行为的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210006272.3A CN102567206B (zh) | 2012-01-06 | 2012-01-06 | 一种剖析cuda程序行为的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102567206A CN102567206A (zh) | 2012-07-11 |
CN102567206B true CN102567206B (zh) | 2014-10-29 |
Family
ID=46412673
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210006272.3A Expired - Fee Related CN102567206B (zh) | 2012-01-06 | 2012-01-06 | 一种剖析cuda程序行为的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102567206B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104102513B (zh) * | 2014-07-18 | 2017-06-16 | 西北工业大学 | 一种基于Kepler架构的CUDA运行时参数透明优化方法 |
CN105654120B (zh) * | 2015-12-25 | 2019-06-21 | 东南大学苏州研究院 | 一种基于SOM和K-means两阶段聚类的软件负载特征提取方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1604049A (zh) * | 2003-09-30 | 2005-04-06 | 国际商业机器公司 | 用于自主剖析应用程序的方法和设备 |
CN1795438A (zh) * | 2003-05-27 | 2006-06-28 | 英特尔公司 | 用于跨距剖析软件应用的方法和设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR101581001B1 (ko) * | 2009-03-30 | 2015-12-30 | 삼성전자주식회사 | 프로그램의 동적 분석 방법 및 그 장치 |
-
2012
- 2012-01-06 CN CN201210006272.3A patent/CN102567206B/zh not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1795438A (zh) * | 2003-05-27 | 2006-06-28 | 英特尔公司 | 用于跨距剖析软件应用的方法和设备 |
CN1604049A (zh) * | 2003-09-30 | 2005-04-06 | 国际商业机器公司 | 用于自主剖析应用程序的方法和设备 |
Non-Patent Citations (2)
Title |
---|
Automatically Characterizing Large Scale Program Behavior;Timothy Sherwood et al;《ACM》;20021231;第1-13页 * |
Timothy Sherwood et al.Automatically Characterizing Large Scale Program Behavior.《ACM》.2002, |
Also Published As
Publication number | Publication date |
---|---|
CN102567206A (zh) | 2012-07-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103365776B (zh) | 基于确定性重放的并行系统弱一致性的验证方法和系统 | |
Andersch et al. | A Benchmark Suite for Evaluating Parallel Programming Models: Introduction and Preliminary Results | |
CN105511867A (zh) | 一种优化模式自动生成方法及优化装置 | |
CN104331335A (zh) | 门户网站的死链检查方法和装置 | |
CN102567206B (zh) | 一种剖析cuda程序行为的方法 | |
CN103455364B (zh) | 一种多核环境并行程序Cache性能在线获取系统及方法 | |
US11768754B2 (en) | Parallel program scalability bottleneck detection method and computing device | |
Booth et al. | Phase detection with hidden markov models for dvfs on many-core processors | |
CN102760085A (zh) | 通信轨迹扩展方法及装置、通信轨迹驱动模拟方法及系统 | |
CN103729180A (zh) | 一种快速开发cuda并行程序的方法 | |
CN105573885A (zh) | 一种监测并统计底层硬件行为的方法及装置 | |
CN103530132A (zh) | 一种cpu串行程序移植到mic平台的方法 | |
Wheeler et al. | Visualizing massively multithreaded applications with threadscope | |
Rashid et al. | Visitor-based application analysis methodology for early design space exploration | |
Lei et al. | Reachability testing of semaphore-based programs | |
CN114238107A (zh) | 一种跟踪调试方法、系统及计算机可读存储介质 | |
Nilakantan et al. | Platform-independent analysis of function-level communication in workloads | |
CN110928705A (zh) | 面向高性能计算应用的通信特征模型方法及系统 | |
US9652208B2 (en) | Compiler and method for global-scope basic-block reordering | |
Pinto et al. | Providing in-depth performance analysis for heterogeneous task-based applications with starvz | |
Schwambach et al. | Estimating the potential speedup of computer vision applications on embedded multiprocessors | |
CN110989995A (zh) | 基于开源深度学习框架的人工智能应用的处理方法及系统 | |
Cheung et al. | Framework for fast and accurate performance simulation of multiprocessor systems | |
Hammond et al. | Predictive simulation of HPC applications | |
Becker et al. | SycView: Visualize and Profile SystemC Simulations |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20141029 Termination date: 20210106 |
|
CF01 | Termination of patent right due to non-payment of annual fee |