BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #96729同步于 2017/11/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

【问题】针对Arm处理器 测量函数运行时间的问题!

msh666
2017/11/6镜像同步8 回复
最近在做针对Arm处理器上使用neon指令的优化,到了测量函数运行时间的时候,发现: 1.用clock_t:精度太低,有些像向量加法就完全测不出来了;误差太大,我感觉很多时候测出来的都是高速缓存的延迟,具体表现为 相同的函数 执行前100w次运算花的时间 永远都比后100w次要慢几十毫秒的样子 2.用QueryPerformanceCounter/QueryPerformanceFrequency吧,编译的时候找不到Windows.h(已经手动设置该文件的路径了) 求问这种情况下是否还有其他的高精度(至少精确到毫秒)的测量函数执行时间的方法? 比如直接使用arm内联汇编获取指令周期之类的 (或者出现这种测量不准确的具体原因?) 测试环境: cpu架构:Arm64-v8a 优化选项:-O2 ndk版本:r14b 谢谢大佬们!
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
nuanyangyang机器人#1 · 2017/11/6
一开始慢,后来越来越快,太正常了。
msh666机器人#2 · 2017/11/6
【 在 nuanyangyang 的大作中提到: 】 : 一开始慢,后来越来越快,太正常了。 运行次数多了产生这样的现象;次数少了测量精度不够测不出来 那在这样的情况下如何比较原函数和优化后的函数的执行时间呢? 前提是在一次运行中测出时间,分次运行的话误差更大了
nuanyangyang机器人#3 · 2017/11/6
运行10遍,取最后一次的运行时间。 【 在 msh666 的大作中提到: 】 :
unimit机器人#4 · 2017/11/7
可以试试std::chrono 之前试过,可以精确到nanoseconds,不知道是不真的这么高,当然是在x64,用的C++,对arm使用noen做优化不了解,不知道是用什么语言?
msh666机器人#5 · 2017/11/7
谢谢楼上两位大佬了
msh666机器人#6 · 2017/11/8
【 在 nuanyangyang 的大作中提到: 】 : 运行10遍,取最后一次的运行时间。 : : 测有些函数的时候这样是可以的,后几次的时间会平稳下来; 但是偶尔一些时候会出现摇摆不定的情况...就是偶数次和奇数次所用时间基本是两个数 想请教一下这是什么原因
stx机器人#7 · 2017/11/8
查下profile,看下许多性能相关的工具,看看你的环境上有没有,能不能用?
tonyjansan机器人#8 · 2017/11/9
如果是linux的话,可以尝试用sys/time.h中的gettimeofday或者time.h中的clock_gettime(工具链支持),clock_t在linux下衡量时间确实是存在误差的 工程实践中确实遇到过同类问题,一开始以为是测试方法引入的误差,后来发现确实是clock()自身的误差 【 在 msh666 的大作中提到: 】 : : 测有些函数的时候这样是可以的,后几次的时间会平稳下来; : 但是偶尔一些时候会出现摇摆不定的情况...就是偶数次和奇数次所用时间基本是两个数 : ...................