当前位置: 首页 > news >正文

(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;
}

相关文章:

(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,该函数用于测量处理器的时间戳计数器(RD…...

【Vulnhub 靶场】【VulnCMS: 1】【简单】【20210613】

1、环境介绍 靶场介绍:https://www.vulnhub.com/entry/vulncms-1,710/ 靶场下载:https://download.vulnhub.com/vulncms/VulnCMS.ova 靶场难度:简单 发布日期:2021年06月13日 文件大小:1.4 GB 靶场作者:to…...

普冉(PUYA)单片机开发笔记(10): I2C通信-配置从机

概述 I2C 常用在某些型号的传感器和 MCU 的连接,速率要求不高,距离很短,使用简便。 I2C的通信基础知识请参见《基础通信协议之 IIC详细讲解 - 知乎》。 PY32F003 可以复用出一个 I2C 接口(PA3:SCL,PA2&a…...

Idea maven打包时 报错 illegalArgumentException: Malformed \uxxxx encoding 解决方法

1 改变打包命令重新打包 在maven打包命令上加入 -e -X 2 找到报错类和方法 可以看到是 java.util.Properties#loadConvert类方法中有个throw new IllegalArgumentException( "Malformed \\uxxxx encoding."),在此打断点 3 以Debug方式重新运行maven…...

Qt中槽函数在那个线程执行的探索和思考

信号和槽是Qt的核心机制之一,通过该机制大大简化了开发者的开发难度。信号和槽属于观察者模式(本质上是回调函数的应用)。是函数就需要考虑其是在那个线程中执行,本文讨论的就是槽函数在那个线程中执行的问题。 目录 1. connect…...

C++ 类模板

目录 前言 类模板语法 类模板和函数模板的区别 类模板没有自动类型推导的使用方式 类模板在模板参数列表中可以有默认参数 类模板中成员函数创建时机 类模板对象做函数参数 指定传入的类型 参数模板化 整个类模板化 类模板与继承 类模板成员函数类外实现 类模板分…...

边缘计算系统设计与实践

随着科技的飞速发展,物联网和人工智能两大领域的不断突破,我们看到了一种新型的计算模型——边缘计算的崛起。这种计算模型在处理大规模数据、实现实时响应和降低延迟需求方面,展现出了巨大的潜力。本文将深入探讨边缘计算系统的设计原理和实…...

【Spark精讲】Spark存储原理

目录 类比HDFS的存储架构 Spark的存储架构 存储级别 RDD的持久化机制 RDD缓存的过程 Block淘汰和落盘 类比HDFS的存储架构 HDFS集群有两类节点以管理节点-工作节点模式运行,即一个NameNode(管理节点)和多个DataNode(工作节点)。 Namenode管理文件系统的命名空…...

贪心算法:买卖股票的最佳时机II 跳跃游戏 跳跃游戏II

122.买卖股票的最佳时机II 思路: 想要获得利润,至少要以两天为一个交易单元,因为两天才会有股价差。因此可以将最终利润进行分解,如prices[3] - prices[0] (prices[3] - prices[2]) (prices[2] - prices[1]) (prices[1] - pr…...

音频DAC,ADC,CODEC的选型分析,高性能立体声

想要让模拟信号和数字信号顺利“交往”,就需要一座像“鹊桥”一样的中介,将两种不同的语言转变成统一的语言,消除无语言障碍。这座鹊桥就是转换器芯片,也就是ADC芯片。ADC芯片的全称是Analog-to-Digital Converter, 即模拟数字转换…...

python 连接SQL server 请用pymssql连接,千万别用pyodbc

pymssql官方介绍文档 python 使用 pymssql连接 SQL server 代码示例: 安装pymssql包: pip install pymssql代码: import pymssqldef conn_sqlserver_demo():# 连接字符串示例(根据您的配置进行修改)conn Nonetry:co…...

IntelliJ IDEA 自带HTTP Client接口插件上传文件示例

如何使用IntelliJ IDEA自带的HTTP Client接口插件进行文件上传的示例。在这个示例中,我们将关注Controller代码、HTTP请求文件(xxx.http),以及文件的上传和处理。 Controller代码 首先,让我们看一下处理文件上传的Co…...

C++中的接口有什么用

2023年12月13日,周三上午 今天上午在适配器模式,我发现如果想真正理解适配器模式,就必须学会使用C中的接口,就必须明白为什么要在C中使用接口,所以重新学习了一下C中的接口 目录 C中的接口有什么用用代码说明“实现多…...

el-table合并相同数据的单元格

相同的数据合并单元格 <el-table :data"userList" :span-method"objectSpanMethod" border><el-table-column type"selection" width"50" align"center" /><el-table-column label"用户名称" a…...

Verilog Systemverilog define宏定义

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 文章前情预告一、define是个啥&#xff1f;二、为什么要使用define三、怎么使用define四、define的横向拓展五、define思想在生活中的体现!六、结论七、参考资料八、…...

51单片机应用从零开始(十一)·数组函数、指针函数

51单片机应用从零开始&#xff08;九&#xff09;数组-CSDN博客 51单片机应用从零开始&#xff08;十&#xff09;指针-CSDN博客 目录 1. 用数组作函数参数控制流水花样 2. 用指针作函数参数控制 P0 口 8 位 LED 流水点亮 1. 用数组作函数参数控制流水花样 要在51单片机中…...

【PostgreSQL】从零开始:(八)PostgreSQL-数据库PSQL元命令

元命令 postgres# \? General\bind [PARAM]... set query parameters\copyright show PostgreSQL usage and distribution terms\crosstabview [COLUMNS] execute query and display result in crosstab\errverbose show most recent error…...

02 使用Vite创建Vue3项目

概述 A Vue project is structured similarly to a lot of modern node-based apps and contains the following: A package.json fileA node_modules folder in the root of your projectVarious other configuration files are usually contained at the root level, such …...

Shell三剑客:sed(简介)

一、前言 Stream EDitor:流编辑 sed 是一种在线的、非交互式的编辑器&#xff0c;它一次处理一行内容。处理时&#xff0c;把当前处理的行存储在临时缓冲区中&#xff0c;称为“模式空间”(pattern space)&#xff0c;接着用sed命令处理缓冲区中的内容&#xff0c;处理完成后&…...

tp连接数据库

ThinkPHP内置了抽象数据库访问层&#xff0c;把不同的数据库操作封装起来&#xff0c;我们只需要使用公共的Db类进行操作&#xff0c;而无需针对不同的数据库写不同的代码和底层实现&#xff0c;Db类会自动调用相应的数据库驱动来处理。采用PDO方式&#xff0c;目前包含了Mysql…...

C#架构师实战:构建确定性事件驱动系统的工程原则与技术栈

1. 从个人简介到架构哲学&#xff1a;一位资深C#架构师的工程实践全景看到这个标题&#xff0c;你可能会以为这是一个普通的GitHub个人主页介绍。但如果你是一位深耕于分布式系统、事件驱动架构&#xff0c;或者正在为构建高确定性、可观测的生产级系统而头疼的工程师&#xff…...

Halcon局部阈值分割避坑指南:dyn_threshold与var_threshold到底怎么选?

Halcon局部阈值分割避坑指南&#xff1a;dyn_threshold与var_threshold到底怎么选&#xff1f; 在工业视觉检测中&#xff0c;遇到反光金属表面的划痕识别或明暗不均背景下的轮廓定位时&#xff0c;全局阈值分割往往力不从心。Halcon提供的dyn_threshold和var_threshold两个局部…...

如何3分钟掌握Chat2DB:AI智能数据库管理完整指南

如何3分钟掌握Chat2DB&#xff1a;AI智能数据库管理完整指南 【免费下载链接】Chat2DB AI-driven database tool and SQL client, The hottest GUI client, supporting MySQL, Oracle, PostgreSQL, DB2, SQL Server, DB2, SQLite, H2, ClickHouse, and more. 项目地址: https…...

从NASA音频设计看极端约束下的工程权衡:可靠性如何塑造系统特性

1. 项目概述&#xff1a;从一次论坛讨论说起如果你和我一样&#xff0c;是个对技术细节有强迫症的老工程师&#xff0c;或者是个音频发烧友&#xff0c;那你肯定也曾在看NASA的航天直播或纪录片时&#xff0c;皱起眉头嘀咕过&#xff1a;“这声音怎么这么差&#xff1f;” 那种…...

Thermal Clad金属基板设计与成本优化实战指南

1. 电路设计基础与Thermal Clad特性解析在电子工程领域&#xff0c;电路板设计直接决定了最终产品的性能、可靠性和成本。作为一名有十年硬件设计经验的工程师&#xff0c;我深刻体会到优秀的设计需要在电气性能、热管理和机械强度之间取得平衡。Thermal Clad&#xff08;热覆金…...

LeAgent多智能体协作框架:从任务规划到实战部署的完整指南

1. 项目概述&#xff1a;当AI学会“派活”&#xff0c;一个智能体协作框架的诞生最近在折腾AI智能体&#xff08;Agent&#xff09;开发的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;单个智能体能力再强&#xff0c;面对复杂任务也常常力不从心。比如&#xff0c;你…...

企业级AI助手框架:私有化部署、工具调用与RAG实战指南

1. 项目概述&#xff1a;一个面向企业级应用的开源AI助手框架最近在GitHub上闲逛&#xff0c;发现了一个挺有意思的项目&#xff0c;叫entaoai。第一眼看到这个仓库名&#xff0c;我下意识地觉得这可能又是一个基于某个大模型API的简单封装工具。但点进去仔细研究了一下源码和文…...

5个关键步骤:在PC上部署高性能yuzu Switch模拟器

5个关键步骤&#xff1a;在PC上部署高性能yuzu Switch模拟器 【免费下载链接】yuzu 任天堂 Switch 模拟器 项目地址: https://gitcode.com/GitHub_Trending/yu/yuzu yuzu是一款开源的任天堂Switch模拟器&#xff0c;让玩家能够在Windows、Linux和macOS系统上流畅运行Swi…...

基于DDD与事件驱动的声明处理系统架构设计与实战

1. 项目概述&#xff1a;一个为开发者准备的“索赔”模板仓库最近在GitHub上看到一个挺有意思的项目&#xff0c;叫openclaw-claim-template。光看名字&#xff0c;你可能会有点摸不着头脑&#xff1a;“索赔模板”&#xff1f;这跟开源开发有什么关系&#xff1f;难道是用来写…...

宠物胰岛素注射剂量安全指南:从单位与毫升混淆到规范操作

1. 从一次惊险的“救援”说起&#xff1a;宠物用药中的剂量迷思昨天早上&#xff0c;我差点目睹了一场因误解而引发的悲剧。走进厨房准备冲杯咖啡时&#xff0c;我看到一位同事&#xff08;我们暂且称她为“A女士”&#xff09;正准备给她刚被诊断为糖尿病的小狗注射胰岛素。她…...