PAPI性能测试工具的安装、使用及实例
PAPI是田纳西大学创新计算实验室开发的一组可以在多个处理器平台上对硬件性能计数器进行访问的标准接口,它的目标是方便用户在程序运行时监测和采集由硬件性能计数器记录的处理器事件信息。用户可以使用其提供的high/low api对程序某一段的使用时钟周期数,执行指令数,L1/L2 cache miss/access数,TLB miss数等等都统计出来,使用户能够直观的了解到程序的局部性如何。
不同的处理器会根据自身的体系结构特征定义出不同的处理器事件集合,在 PAPI 中这些事件被称为原生事件(Native Event)。同时,不同的处理器也会具有不同数量的硬件性能计数器,而在任意时刻一个计数器只能对一个指定的原生事件进行监测。考虑到事件监测和性能分析的需求,不同处理器的原生事件集合往往在功能上会有交集(例如那些和存储层次访问、Cache 一致性协议、周期和指令计数、功能单元和流水线状态等方面相关的事件),但是其对应的原生事件名称却未必相同。为了便于事件甄别,PAPI 将这些在不同处理器中存在功能共性的原生事件抽象成了 PAPI 接口专用的预制事件(Preset Event)并统一命名,所以具有一定的可移植性。
1、支持的性能计数器事件:
PAPI 支持一百多个事件。其标准事件分为 4 类:存储层次访问事件;周期与指令计数;功能部件与流水线状态事件; Cache 一致性事件,与 SMP 系统的 cache 一致性协议相关。
PAPI 包含一个工具程序papi_avail,,可以检测用户平台具有哪些事件,如:
此外还有papi_mem_info和papi_cost等命令,用来查看TLB,Cache信息和 查看papi开销等。
2、PAPI提供了两个向底层硬件的接口:
高层接口:比较简单,用于完成基本的计数测量(提供启动、停止和读取特定事件的能力)
PAPI 高层接口提供了一些访问硬件性能计数器所需的基本功能,例如配置计数器、启动计数、停止计数、读取计数器的数值等。高层接口只能利用 PAPI 预制事件,而不能够通过配置计数器去监测超出预制事件覆盖范围以外的处理器原生事件。不过,PAPI 高层接口能够直接返回在程序测评中最经常使用的一些性能指标,例如每个周期执行完成的指令数、每秒执行完成的浮点指令 / 浮点操作数、程序的运行时间等;另外,高层接口还能获取一些系统信息,例如处理器能够支持的硬件性能计数器的个数等。
底层接口:管理用户定义的事件组(称为 EventSet)中的事件,完全可编程,线程安全,为工具开发人员和高级用户提供方便。
高层接口获得的数据很多是未经过加工的原始数据,从中不能直接看出应用程序的存储层次与流水线利用情况的好坏。不同于高层接口只能使用 PAPI 预制事件,PAPI 底层接口能够直接使用原生事件对程序运行时的处理器硬件行为进行监测。用户可以将一个或多个原生事件组成一个事件组(Event Set),然后通过设置硬件性能计数器对事件组中所有的原生事件同时进行监测,进而根据监测结果分析程序的性能问题,例如通过同时采集每秒执行完成的浮点 指令数和 L1 Cache 失次数就有助于分析是否是因为 L1 Cache 的命中率不高导致了程序浮点性能的下降。需要注意的是,事件组中的原生事件个数不能够超过处理器所能支持的硬件性能计数器个数。
list . 常用的 PAPI 底层接口(C语言)PAPI_library_init
初始化 PAPI 接口库
PAPI_create_eventset
创建事件组
PAPI_add_event / PAPI_add_events
向事件组中添加原生事件或者 PAPI 预制事件
PAPI_remove_event PAPI_remove_events
从事件组中删除事件
PAPI_start
启动计数器对事件组的计数
PAPI_read
读取计数器数值
PAPI_stop
停止计数器计数并读取当前的计数器数值
PAPI_cleanup_eventset
清除事件组中的事件
PAPI_destroy_eventset
销毁事件组
PAPI_shutdown
终止使用 PAPI 并释放所有相关资源
//具体使用见后面实例2
PAPI是一组可以在多个处理器平台上对硬件性能计数器进行访问的本地接口,所以对于不同的处理器,安装方法也不同,部分AMD的CPU和INTEL的奔腾系列,至强系列都需要打补丁。补丁使用perfctr-2.6.x,对内核打补丁,重新编译的步骤比较繁琐,安装步骤在PAPI压缩包的Install.txt文件里有说明。
下面是对于一般的处理器(INTEL的i系列等)的安装步骤。
二、PAPI安装方法
在Ubuntu14.10上安装:
1、到PAPI官网下载PAPI 5.4.1压缩包。
2、将压缩包拷贝至/usr/local/下并解压。
3、测试PAPI
进入src目录并依次执行以下指令。
% ./configure % make % make test
如果出现PASSED则是通过测试,可以安装。
% make fulltest (相当于./run_tests.sh,简单测试,可忽略) % ./run_tests.sh -v(详细测试)
如果提示没有权限就使用chmod命令更改权限即可。
这个过程比较缓慢,下面是部分过程截图。
4、安装PAPI
a) To install PAPI libraries and header files from the build tree:
% make install
b) To install PAPI manual pages from the build tree:
% make install-man
c) To install PAPI test programs from the build tree:
% make install-tests
d) To install all of the above in one step from the build tree:
% make install-all
e) To create a binary kit, papi-<arch>.tgz:
% make dist
papi默认是安装在 /usr/local 下的,
papi可执行命令安装在bin下
papi的头文件放在include下
papi的库文件放在lib下,包括静态库libpapi.a,动态库libpapi.so.5.4.1.0
还有share、man目录下也安装了一些东西
温馨提示: 本文由Jm博客推荐,转载请保留链接: https://www.jmwww.net/file/69778.html