编程获得CPU的主频
CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed)。CPU的主频表示在CPU内数字脉冲信号震荡的速度。主频和实际的运算速度存在一定的关系,但目前还没有一个确定的公式能够定量两者的数值关系,因为CPU的运算速度还要看CPU的流水线的各方面的性能指标(缓存、指令集,CPU的位数等等)。由于主频并不直接代表运算速度,所以在一定情况下,很可能会出现主频较高的CPU实际运算速度较低的现象。
在windows操作系统中,可以使用右键点击“我的电脑”,查看属性来获取CPU的主频信息,然而该信息是存在于注册表之中的。也就是说可以通过修改注册表来伪造CPU主频信息。那能不能用其它方法获得该信息呢?
检测CPU的速度,一般是测试在单位时间内运算的指令条数,但用这种方法有太大的局限性,由于受到很多因素的影响,准确度比较低,因为你不知道在你的程序外别的程序占用了多少的时间片。其实在586及之后处理器中,已经有了一条专用的指令来测试主频,那就是 RDTSC指令,意思是读取时间标记计数器(Read Time-Stamp Counter),Time-stamp counter 是处理器内部的一个64位的MSR (model specific register),处理器每时钟周期递增时间标签计数器 MSR 一次,在处理器复位时将它重设为 0。RDTSC 指令把 TSC的值低32位装入EAX中,高32位装入EDX中。如果CPU的主频是200MHz,那么在一秒钟内,TSC的值增加 200,000,000 次。所以在计算的时候,把两次的TSC差值除以两次的时间差值就是CPU的主频。
从上面的资料得到了一个思路:首先使用RDTSC指令获取1个TSC的值,将其存储起来,再延时1秒,使用RDTSC指令获取1个新的TSC值,并用其减去第一次获得的TSC值,即可得到该CPU的主频。用C和汇编混合的代码如下:
#include <windows.h>
#include <stdio.h>int main(int argc,char* argv[])
{static int time[2];int quotient = 0; //商int remainder = 0; //余数__asm{rdtsc // read time-stamp countmov ebx,offset time //将time的偏移地址存入ebxmov [ebx+0],edx //把TSC的值的高32位存入[ebx+0]中mov [ebx+4],eax //把TSC的值的低32位存入[ebx+4]中}Sleep(1000);__asm{rdtsc // read time-stamp countmov ecx,offset time //将time的偏移地址存入ecxsub eax,[ecx+4] //把延时1秒后的TSC值的低32位减去1秒前的TSC值的低32位sbb edx,[ecx+0] //把延时1秒后的TSC值的高32位减去1秒前的TSC值的高32位mov ecx,1000000000 //转换成GHzdiv ecxmov quotient,eax //将结果中的商赋值于quotiendmov remainder,edx //将结果中的余数赋值于remainder}remainder = remainder / 10000000; //余数仅保留两位printf("该机主频为:%d.%d",quotient,remainder);return 0;
}
注意:寄存器 CR4 中的时间标签禁用 (TSD) 标志限制 RDTSC 的使用。清除 TSD 标志时, RDTSC 指令可以在任何特权级别执行;设置此标志时,指令只能在特权级别 0 执行。在特权级别 0 执行时,时间标签计数器还可以使用 RDMSR 指令读取。
但是在多核时代,RDTSC 指令的准确度大大削弱了,原因有如下几点:
1. 不能保证同一块主板上每个核的 CPU 时钟周期数(Time Stamp Counter)是同步的;
2. CPU 的时钟频率可能变化,例如笔记本电脑的节能功能;
3. 乱序执行导致 RDTSC 测得的周期数不准。 虽然 RDTSC 废掉了,高精度计时还是有办法的,在 Windows 上用 QueryPerformanceCounter 和 QueryPerformanceFrequency,Linux 上用 POSIX 的 clock_gettime 函数,以 CLOCK_MONOTONIC 参数调用。
在接下来的几篇文章章中,我会继续介绍相关内容。
参考文章:
1、多核时代不宜再用 x86 的 RDTSC 指令测试指令周期和时间
http://blog.csdn.net/solstice/article/details/5196544
2、RDTSC命令详解
http://blog.csdn.net/tbwood/article/details/5536597
编程获得CPU的主频相关推荐
- Linux通过编程获取CPU核数
sysconf( )有unistd.h提供,要使用该函数需要#include<unistd.h>, 其参数可以是 _SC_NPROCESSORS_CONF,也可以是 _SC_NPROCES ...
- cpu的主频主要影响微型计算机的,在微型计算机中,通常用主频来描述CPU的(1);对计算机磁盘工作影响最小的因 - 问答库...
问题: [单选] 在微型计算机中,通常用主频来描述CPU的(1):对计算机磁盘工作影响最小的因素是(2).空白(2)处应选择() A . 温度 B . 湿度 C . 噪声 D . 磁场 某车间需要用一 ...
- 详解CPU的主频、核心、线程、缓存、架构
CPU的重要参数:主频.核心.线程.缓存.架构. 1.主频: 在CPU的参数里的 3.0GHz.3.7GHz等就是CPU的主频,严谨的说他是CPU内核的时钟频率,可直接理解为运算速度. CPU的主频相 ...
- 如何获取CPU的主频和使用率?
最近看到论坛中有人需要在Java端读取系统的CPU主频和使用率,在网上搜索了一下,发现了一些有用的东西,就在这总结一下. 一.获得CPU的主频 1.从注册表中读取 在注册表中键HKLM/HARDWAR ...
- CPU的主频/核心数
转载:https://baijiahao.baidu.com/s?id=1615669643158261053&wfr=spider&for=pc CPU的主频 我们知道CPU主要是用 ...
- cpu的主频、外频和倍频
先以AMD的cpu为例, 看一张图: 主频, 外频, 倍频的关系, 显而易见. 那他们都是什么意思呢? 外频是电脑主板上的一个石英振荡器的震荡频率, 产生电脉冲信号, 这就是电脑的系统时钟频率. 而C ...
- 计算机cpu的主频参数,电脑CPU的参数怎么看?原来这么简单!
众所周知,CPU和我们人类的大脑一样,是指挥其他硬件工作的中枢.而性能越好的CPU,往往就能带来更加流畅.高效的使用体验. 当我们在选择CPU的时候,主要看架构.主频.核心.线程等参数.极客兄就用超简 ...
- mysql要求cpu主频还是核数_CPU主频和核数哪个更重要?电脑CPU到底主频高好还是多核好?...
装机选购CPU无疑是重中之重,相当于人类的大脑,它决定了电脑运算的速度.对于DIY老鸟来说,一般会从架构.核心.主频等方面衡量一颗CPU好坏,这也是CPU性能的核心三要素.在相代相同架构的处理器,自然 ...
- CPU「主频」是什么,有哪些限制条件,对于 CPU 性能的影响有哪些?
今天我来讲一下「主频」是什么,有哪些限制条件,对于 CPU 性能有哪些影响. 首先:CPU 的主频是什么? CPU的主频,即CPU内核工作的时钟频率(CPU Clock Speed).通常所说的某某C ...
最新文章
- qfdw.xyz sq.php,GitHub - STORMSQ/sqphp: 練習用框架,使用PHP搭建
- 你以为A10 Networks只做应用交付?
- C 常用新特性(下)
- [随笔重写] Python3 的深拷贝与浅拷贝
- 关闭linux系统中读写页缓存,Linux文件系统FAQ
- C++工程师面试题大全
- jboss7.1.安装配置
- idea--Project Structure
- mysql数据库比较,各数据库不同之处
- 【论文笔记】PTE:预测性文本嵌入
- mysql bat备份_Windows下简单的Mysql备份BAT脚本分享
- 从键盘输入若干个学生成绩,计算出平均成绩。
- NOI国家集训队论文分类整理
- 聊聊在小米实习的日子
- PyQt之QSS美化
- 学python为何不好找工作呢?
- 做前端开发拿 30W 年薪很难吗?
- Asymmetric numeral systems (ANS)非对称数字系统最全资料整理
- TypeScript中any、unknown、void、never类型讲解
- java合成两张图片并在图片上写字
热门文章
- 孕期饮食新理念——初光孕妇餐 让孕期营养更科学
- oracle如何添加小数点,Oracle处理保留小数点
- 【系统篇 / 文件】01. 文件服务安装与配置 ❀ Windows Server 2008 R2
- PADS的layout单个元器件删除时提示“复用元素无法修改,首先打散复用模块”
- 保姆级高通AEC9调试指南(看完可解决80%AE相关问题)
- 初见Python与对未来的展望
- 星球乐园 | 害怕水逆是因为你已经很久没有读完一本书
- Thymeleaf 教程:使用Thymeleaf[转自官方]
- 日更100天(33)每天进步一点点
- 官宣:传智播客品牌全新升级为「传智教育」