之前提到的利用微秒级精度定时器的方法测试程序的运行的效率的方法,它主要比较适于测试程序的顺序运行(如音频、视频解码效率,函数调用等),对于经常发生中断的程序和另外开辟线程连续性测试效率不是很好。因而对于这类测试,我们可以采用另一种方法测试,这种方法采用Monte Carlo Profiler工具测试。

Monte Carlo Profiler 工具是一种统计软件诊断工具,其中操作系统频繁中断,并记录下这些中断地址。从该信息中,可导出每个例程的调用次数。这种类型的分析不会测量或记录执行时间,数据也相对比较庞大(所以用我们之前写的测试时间的方法还是有用武之地的,呵呵…)。

对Monte Carlo Profiler工具的使用前的工作准备。

(一)、平台的创建

1、实验平台的构建:

本人使用的构建平台是:Platform Builder 5.0

具体步骤如下:

1)  选择FILE | New Platform

2)  输入名字,NEXT,在New Platform Wizart第三步中选择BSP,我选择仿真器模式(Emulator X86)

3)  NEXT,在预先选择设计模板项时可以根据你需要的选择(作为本次实验我选择Internet Aplliance)

4)  NEXT,如果设计模板选择了Internet Aplliance,则在这边只需要Internet Browser。也可以根据你的喜好自己选择,这个要求不是很严格。

5)  之后就一直NEXE下去。直至Finish,

6)  选择Platform | Settings对平台进行进一步设置

(1)、Build 类型选择Debug或Release都行,在这边我选择Debug模式(以后方便我们平台的测试)(注:   图片不能上传)

(2)、在locale选项页下,可以选择语言种类,系统默认的是英语,我们可以设置成汉语(注:有图片不能上传)

(3)、主要的设置Build Option这边,常见设置项解释如下:

-------------------------------------------------------------------------------------------------------

   Enable CE Target Control Support: 支持对实际平台的控制。可以执行 CESH 命令。
        Enable Event Tracking During Boot:在引导过程中支持事件跟踪。
        Enable Full Kernel Mode: 支持全内核模式。全内核模式参见配置文件。
        Enable Kernel Debugger: 允许调试内核。
        Enable KITL: KITL(内核独立传输层)用于在开发平台和实际平台之间相互通信。
        Enable Profiling: 能够评测内核的性能。

-------------------------------------------------------------------------------------------

我们这边要使用到Enable Profiling、Enable CE Target Control Support、Enable KITL这三个,其他可选可不选,值得注意的是:

----------------------------------------------------------------------------------------------------------

a.选上Enable CE Target Control Support后,菜单Target->Run programs/Target Control都可以用,没法调试应用程序及核心(断点失效,应用程序仅可被调用);

b.选上了Enable Kernel Debugger后,必须同时在Connectivity Options->选上 Debugger中的 KdStub! 可以调试应用程序及核心(断点处停下)。

-------------------------------------------------------------------------------------

7)  选择结束了,就可以正式开始构建平台了

在Build OS菜单下选择Sysgen,大约过10分钟左右(看机器而定我的是PD 3.0 内存1g)就能构建完成。

2、实验平台的设置:

构建完成对实验平台的设置:

(1)、选择 Target | ConnectivityOptions。在Target Device Connectivity Options 对话框,

在 Download 和 Transport 框中,选择 Emulator。

(2)、单击 Download 框旁边的 Settings。Emulator Download Settings 对话框打开,可以设置显示大小,色彩,串口,内存。正常按默认设置。

单击OK,现在,就可以开始下载操作系统了。

3、下载操作系统

选择 Target | Attach Device。 将操作系统映像下载到该仿真程序。操作系统下载完成后,您会看到许多显示在 Platform Builder 中DEBUG窗体中的调试消息。

(二)、使用Monte Carlo Profiler 工具测试我们的程序

要使用Monte Carlo Profiler 工具测试应用程序的效率,我们要把我们的应用程序集成到平台中去。

1、把应用程序集成到平台

应用程序的添加是在平台Sysgen之前就要建立完成,建立应用程序的方法跟我们平常建立的方法是一样的,只是这次是在Platform Builder中建立应用程序,Platform Builder也有自己一套建立应用程序的工具(其实跟EVC是一样的)。现在以我这个实验的应用程序做示例。(我是用冒泡排序做为测试应用程序)

(1)、选择 File | New Project or File。

(2)、选择 WCE Application,如下图所示。

(3)、在 Project name 框中,键入 BubbleSortTest。

(4)、一直NEXT,之后我们选择 A simple Windows CE application。单击Finish

(5)、然后对这个project进行代码添加,我们把测试冒泡排序的程序添加到这个工程里面

上面的工程是单纯的冒泡排序算法代码,之后我们在建个同样的工程,只是这次在winmain函数的入口加入API ProfileStart(200,PROFILE_BUFFER);自己启动profile在出口ProfileStop();自己关闭profile并打印数据。这样可以达到程序自己启动和结束Profile的功能,以示区别我们把这个工程命名为BubbleSortTestAPI。

建立以上两个应用程序后,我们就可以重新构建平台了。完成之后,我们就可以进行测试了。

方法一:利用Windows CE Target Control 窗口使用 Monte Carlo Profiler 工具

由于我们在Build Option勾选了  Enable CE Target Control Support和Enable KITL(一定要选上否则用不了,一些工具的使用都要用到这个),让我们可以使用Windows CE Target Control来用命令来启动Monte Carlo Profiler。

我们可以使用以下命令:

● Prof on    //打开MONTE profile

● S  运行自己的程序  (正常都是在window目录下的,你也可以自己加路径)

● Prof off  //关闭并打印消息到output窗口

注 在关闭 Monte Carlo Profiler 工具之前,应当等待应用程序结束(如果是有交互性的程序,要等结束该程序才能prof off,由于我们的BubbleSortTest是无交互的,所以一执行完就可以prof off)

运行prof off之后就会在PB中的DEBUG窗口打印以下消息:

=================== MONTE CARLO HIT REPORT ===================

Total samples recorded =   100053

Total samples dropped  =        0

Ticks elapsed          =    20010

IDLE TIME:

* Total non-idle samples (recorded+dropped)        =      664

* Total idle samples (recorded+dropped)            =    99389

* Percentage of samples in idle                    =     99.3

INTERRUPTS:

* Total interrupts during sample period            =   100243

* Non-profiler interrupts                          =      190

* Non-profiler interrupts per tick                 =      0.0

MODULES:  (Does not include dropped samples!)

Module        Hits        Percent

------------  ----------  -------

IDLE               99389     99.3

nk.exe               450      0.4

gwes.exe              32      0.0

coredll.dll           26      0.0

tcpstk.dll            20      0.0

cxport.dll            19      0.0

ndis.dll               8      0.0

fsdmgr.dll             7      0.0

relfsd.dll             6      0.0

explorer.exe           5      0.0

dc21x4.dll             5      0.0

BubbleSortTest.exe     3      0.0

pm.dll                 1      0.0

shell.exe              1      0.0

commctrl.dll           1      0.0

ddi.dll                1      0.0

UNKNOWN               79      0.0

SYMBOLS:  (Does not include dropped samples!)

Hits       Percent    Address   Module       Routine

---------- ------- -------- ------------:---------------------

99389      99.3 -------- ------------  :IDLE

40         0.0        80270bb6  nk.exe      :_OEMCacheRangeFlush

38         0.0       80272eed    nk.exe      :_DMAKitlSendPacket

35         0.0       80272ff6    nk.exe      :_DMAKitlReceivePacket

34         0.0       8024910e    nk.exe      :_KCall

31         0.0       8024e5fd    nk.exe      :_WaitOneMore

23         0.0       802495a9    nk.exe      :_CommonIntDispatch

23         0.0       8024e491    nk.exe      :_WaitConfig

22         0.0       8024e93b    nk.exe      :_SC_WaitForMultiple

13         0.0       80265fc4     nk.exe      :_SC_KillThreadIfNeeded

11         0.0        8024c90c    nk.exe      :_KCNextThread

3          0.0       000110a8 BubbleSortTest.exe  :_WinMain

…………

注:红色部分为我们要测试的程序的数据,我们可以从该信息中看出在BubbleSortTestAPI运行过程中, 所需时间的 99.3% 花费在 IDLE STATE 中,可以看出我们的程序运行效率是很高的。

方法二:利用API函数直接加到我们的应用程序当中,直接运行

这种方法可以无KITL支持,就可以在DEBUG中显示相关信息。

这两个API 如下:

●  ProfileStart(间断时间,存储方式(就用buffer方式))

●   ProfileStop()

运行方法:

1、直接在target wince control输入

●    S 自己的应用程序

2、直接在目标机器上直接运行运用程序

这样,也可以在PB中的DEBUG窗体中输出相应的MONTE CARLO HIT REPORT数据,效果跟第一种方法是一样的。至此利用MONTE CARLO HIT REPORT工具测试的方法也介绍完毕。

本文转自Walzer博客园博客,原文链接:http://www.cnblogs.com/walzer/archive/2008/02/20/1074480.html,如需转载请自行联系原作者

PROFILER 技术总结(二): 利用Monte Carlo Profiler 工具相关推荐

  1. 通俗易懂的Monte Carlo积分方法(二)

    通俗易懂的Monte Carlo积分方法(二) Monte Carlo积分的计算(期望法) Monte Carlo算法的期望法计算的数学基础: 辛钦大数定律: 如果Xi是独立的随机变量,且EXi是相应 ...

  2. 阿白数模笔记之蒙特卡罗方法(Monte Carlo Method)

    前言 还记得浦丰投针实验吗? 浦丰所进行的是一个概率实验(Probability experiment),这样的方法称为蒙特卡罗方法(Monte Carlo Method).而蒙特卡罗(Monte C ...

  3. 强化学习系列(五):蒙特卡罗方法(Monte Carlo)

    一.前言 在强化学习系列(四):动态规划中,我们介绍了采用DP (动态规划)方法求解environment model 已知的MDP(马尔科夫决策过程),那么当environment model信息不 ...

  4. 使用 Engage 或 Workspace 创建 Monte Carlo 模拟的 4 个简单步骤

    20 世纪 40 年代,研究原子弹的科学家应用 Monte Carlo 模拟计算了一个裂变铀原子引起另一个裂变反应的概率,这是该模拟的首次应用,自此以来已经取得了很大进展.今天我们将介绍如何使用 Mi ...

  5. 蒙特卡洛积分(Monte Carlo Integration)应用:利用蒙特卡洛积分生成 McBeth表

    蒙特卡洛积分(Monte Carlo Integration)应用 蒙特卡洛积分 通常函数f(x)的积分: 可以解释为计算函数曲线下方的面积: 而我们的蒙特卡洛积分则是通过近似的方式来获取一个函数的积 ...

  6. 蒙特卡洛python求解派_利用蒙特卡洛(Monte Carlo)方法计算π值[ 转载]

    圆周率π是一个无理数,没有任何一个精确公式能够计算π值,π的计算只能采用近似算法. 国际公认的π值计算采用蒙特卡洛方法. 一.蒙特卡洛方法 蒙特卡洛(Monte Carlo)方法,又称随机抽样或统计试 ...

  7. python个人博客搭建说明书_技术分享|利用Python Django一步步搭建个人博客(二)...

    原标题:技术分享|利用Python Django一步步搭建个人博客(二) Hello,欢迎来到我们的"利用Python Django一步步搭建个人博客"系列的第二部分.在第一部分中 ...

  8. 利用蒙特卡洛(Monte Carlo)方法计算π值

    圆周率π是一个无理数,没有任何一个精确公式能够计算π值,π的计算只能采用近似算法. 国际公认的π值计算采用蒙特卡洛方法. 蒙特卡洛方法 蒙特卡洛(Monte Carlo)方法,又称随机抽样或统计试验方 ...

  9. martingale、markov chain、Monte Carlo、MCMC

    文章结构如下: 1: MCMC 1.1 MCMC是什么 1.2 为什么需要MCMC 2: 蒙特卡罗 2.1 引入 2.2 均匀分布,Box-Muller 变换 2.3 拒绝接受采样(Acceptanc ...

最新文章

  1. mysql常用语句列表
  2. linux下的打包与压缩
  3. Intel Realsense D435 python(Python Wrapper)example02: NumPy and OpenCV 用窗口展示并排堆叠的RGB流和深度流
  4. 三点估算pmp_我本人是做项目经理的,我把考PMP也当成一个项目来规划
  5. 将系统升级为鸿蒙11.1系统,即将脱胎换骨!EMUI11.1升级名单遭曝光,或要和跟安卓说再见...
  6. 点击按钮对两个div的隐藏与显示进行切换
  7. 操作系统MOOC课后习题答案
  8. pta c语言编程答案,PTA 程序设计 单选题-期末复习
  9. 震旦ad369s_震旦ad369s驱动
  10. Linux错误:warning: here-document at line 5 delimited by end-of-file (wanted `EOF`
  11. 转:阿里智能音箱天猫精灵发布,联发科成了背后大赢家
  12. mysql分页查询出租房屋信息_分页查询信息(使用jdbc连接mysql数据库实现分页查询任务)...
  13. 通过禁用受保护的视图来启用所有Office 2010文档的编辑
  14. ANTLR学习(三)antlr的功能
  15. 微信小程序实现每日签到、连续签到
  16. 怒了!!!专科怎么了?搞学历歧视?专科这样做,照样牛掰!
  17. 江工网:报到证过期对公务员有影响吗
  18. Unity3D 摄像机滑动跟随
  19. MT8665芯片处理器,MT8665模块方案开发
  20. Yocto Issues | The TMPDIR: /home12/calm.xia/poky/qemuarm/tmp can't be located on nfs.

热门文章

  1. 武汉学java_学习武汉Java开发想要找到工作,需要学到什么程度呢?
  2. 职业中专计算机高考英语卷子,职业高中高考计算机专业试卷3.doc
  3. 64位浮点数_C语言常见面试题解析(1)——浮点数的比较
  4. java多按钮筛选条件_Excel办公技巧:如何对表格数据进行自定义筛选?
  5. sql server 2005管理员手册_执行一条sql语句都经历了什么?
  6. java wait api_java API 文档
  7. c语言十进制小数转其他进制,只写出了十进制小数转换成二进制的,求二进制小数转十进制的...
  8. 浙大计算机考研录取名单2021,2021浙大考研拟录取名单公布,初试倒数第一竟然成功逆袭!...
  9. linux时间与日期函数,Linux时间日期函数
  10. ansys怎么使用anand模型_详细剖析ANSYS有限元分析这个软件