(C语言)精确计算程序运行时间的方法

 一、先计算每秒多少个计数

typedef __int64 s64;

s64 tps; /* timestamp counter per second */

s64 get_tps(void)
{
     s64 t0 = rdtsc();
     Sleep(100);
     return (rdtsc() - t0) * 10;
}

这段代码定义了一个函数 get_tps,该函数用于测量处理器的时间戳计数器(RDTSC)每秒的计数率。

具体来说:

  1. rdtsc() 是一个函数,通常在 x86 架构的处理器上使用,用于读取处理器的时间戳计数器。这个计数器通常每处理器周期增加一次,因此,通过读取这个计数器的值,我们可以得到处理器的运行速度的一个大致估计。
  2. get_tps 函数首先读取时间戳计数器的当前值(t0)。
  3. 然后,它使程序暂停(或“睡眠”)100毫秒。
  4. 之后,它再次读取时间戳计数器的值,并从第二次读取的值中减去第一次读取的值。
  5. 最后,它用所得的结果乘以10来计算在100毫秒内的时间戳计数器的计数。这个值乘以10是因为我们测量的是100毫秒内的计数,而我们需要的是每秒的计数率。

所以,这个函数返回的是处理器在100毫秒内的时钟周期数。这可以用来大致估计处理器的速度。例如,如果这个函数返回100000000,那么这意味着处理器在100毫秒内运行了大约10亿个时钟周期,或者说它每秒运行了大约10亿个时钟周期。

二、获取当前时间的总计数

typedef __int64 s64;

s64 rdtsc(void)
{
	LARGE_INTEGER a;
	QueryPerformanceCounter(&a);
	return (s64)a.QuadPart;
}

这个函数使用了Windows API中的QueryPerformanceCounter函数来获取当前处理器的时间戳计数器的值,并返回一个64位整数表示的该值。

具体来说:

  1. QueryPerformanceCounter(&a) 调用会获取当前处理器的时间戳计数器的值,并存储在 a 变量中。
  2. 然后,函数将 a.QuadPart(这是一个64位整数的组成部分)转换为 s64 类型的返回值。

这个函数通常用于测量程序运行的时间或计算性能。通过比较两个时间戳计数器的值,可以计算出两个时间点之间的时间差。

三、使用

int main(void)
{
    tps = get_tps();

    t1 = rdtsc();
    //待测试的函数
    t2 = rdtsc();
    
    printf("用时:%.3f\n", (double)(t2 - t1) / tps);

    return 0;
}

相关推荐

  1. C语言精确计算程序运行时间方法

    2023-12-17 07:54:04       40 阅读
  2. C++计算程序运行时间

    2023-12-17 07:54:04       12 阅读
  3. pta 计算火车运行时间 (15分)c语言

    2023-12-17 07:54:04       11 阅读
  4. 用python计算程序运行时间

    2023-12-17 07:54:04       36 阅读
  5. C++】计算代码中程序时间差

    2023-12-17 07:54:04       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 07:54:04       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 07:54:04       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 07:54:04       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 07:54:04       18 阅读

热门阅读

  1. SpringBoot+OCR 实现PDF 内容识别

    2023-12-17 07:54:04       41 阅读
  2. UniGUI之提示信息MessageDlg及获得信息Prompt

    2023-12-17 07:54:04       41 阅读
  3. 7个精选的矢量数据库和搜索引擎项目

    2023-12-17 07:54:04       41 阅读
  4. Qt容器QToolBox工具箱

    2023-12-17 07:54:04       36 阅读
  5. es6 中的箭头函数和普通函数有什么区别?

    2023-12-17 07:54:04       31 阅读
  6. Python 迭代器详解:遍历数据的高效利器

    2023-12-17 07:54:04       31 阅读