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