能否准确计算for循环所用时间?

caserli 2013-12-11 04:01:58
如:for(int i = 0; i < max, ++i) {}

但是多运行几次,并不是每次计算出来的时间都一致,而且与理论上计算的结果也对不上。
...全文
367 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiandingzhe 2013-12-12
  • 打赏
  • 举报
回复
当然不会一样
  • 打赏
  • 举报
回复
理论上怎么计算呀,有意义嘛
taniz 2013-12-11
  • 打赏
  • 举报
回复
linux的话用time命令,输出3个时间:real,user,sys CPU时间=user+sys windows的话用嵌入汇编,关中断再开中断
ooolinux 2013-12-11
  • 打赏
  • 举报
回复
引用 楼主 caserli 的回复:
如:for(int i = 0; i < max, ++i) {} 但是多运行几次,并不是每次计算出来的时间都一致,而且与理论上计算的结果也对不上。
除非是单任务系统,否则有意义吗,你的进程不可能一直占用CPU时间片。
为伊痴狂 2013-12-11
  • 打赏
  • 举报
回复
44 #include <stdio.h> 45 #include <stdlib.h> 46 #include <time.h> 47 //#include <dos.h> 48 49 int main(int argc, char *argv[]) 50 { 51 double count = 0; 52 clock_t start, end; 53 start = clock(); 54 printf("aaaaaaaaaaa %ld\n", (long int)start); 55 // sleep(1); 56 long int i = 10000000;; 57 while(i>0) 58 i--; 59 end = clock(); 60 printf("bbbbbbbbbb:%ld\n", (long int)end); 61 printf("CLOCKS_PRE_SEC %ld \n", CLOCKS_PER_SEC); 62 count = (double)(end - start) * 1000/((double)CLOCKS_PER_SEC); 63 printf("The time was: %f min sec\n", count );//(double)(end - start)/(double)CLOCKS_PER_SEC);// / CLK_TCK); 64 return 0; 65 } ./a.out aaaaaaaaaaa 0 bbbbbbbbbb:20000 CLOCKS_PRE_SEC 1000000 The time was: 20.000000 min sec time ./a.out aaaaaaaaaaa 0 bbbbbbbbbb:20000 CLOCKS_PRE_SEC 1000000 The time was: 20.000000 min sec real 0m0.054s user 0m0.028s sys 0m0.000s
NBTestNC 2013-12-11
  • 打赏
  • 举报
回复
好像需要加上#include <windows.h>
NBTestNC 2013-12-11
  • 打赏
  • 举报
回复

#ifndef _GETTIME_H_
#define _GETTIME_H_

// Using WINDOWS API get the High-precision time.

#include <math.h>

#define GT_S	0	// second
#define GT_MS	1	// millisecond
#define GT_US	2	// microsecond
#define GT_NS	3	// nanosecond

class GetTime
{
public:
	void start( void )
	{
		QueryPerformanceFrequency(&m_frequency);
		QueryPerformanceCounter(&m_start);
	}
	void end( void )
	{
		QueryPerformanceCounter(&m_end);
	}

	double get(int type)
	{
		return ((double)(m_end.QuadPart - m_start.QuadPart)/(m_frequency.QuadPart))*pow(1000.0,type);
	}

private:
	LARGE_INTEGER m_start;
	LARGE_INTEGER m_end;
	LARGE_INTEGER m_frequency;
};

#endif
高精度计算方法,使用方法:

GetTime gt;
gt.start();
// for
gt.end();
gt.get(GT_MS); // GT_S,GT_MS......
max_min_ 2013-12-11
  • 打赏
  • 举报
回复
这个额外一点点的环境影响很大的!
赵4老师 2013-12-11
  • 打赏
  • 举报
回复
使用电脑计时有时误差会很大,因为待测程序段的运行会影响电脑时钟。 将待测程序段循环足够多次,手动掐秒表计时可能更准确。
Binzo 2013-12-11
  • 打赏
  • 举报
回复
除了示波器,用定时器timer也可以准确算。
shiguojie19892 2013-12-11
  • 打赏
  • 举报
回复
引用 2 楼 turingo 的回复:
直接用示波器测量。 [quote=引用 楼主 caserli 的回复:] 如:for(int i = 0; i < max, ++i) {} 但是多运行几次,并不是每次计算出来的时间都一致,而且与理论上计算的结果也对不上。
[/quote] Goog!
图灵狗 2013-12-11
  • 打赏
  • 举报
回复
直接用示波器测量。
引用 楼主 caserli 的回复:
如:for(int i = 0; i < max, ++i) {} 但是多运行几次,并不是每次计算出来的时间都一致,而且与理论上计算的结果也对不上。
derekrose 2013-12-11
  • 打赏
  • 举报
回复
算出来有什么意义

64,371

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧