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

ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率

本章将学习如何利用ARM PMU的Cycle Counter,来计算出CPU的时钟周期,从而计算出CPU的时钟频率。在介绍计算方法前,有必要先介绍下什么是时钟周期、机器周期以及指令周期。

如何计算出CPU的时钟频率

  • 一,时钟周期,机器周期以及指令周期
    • 1.1 时钟周期(clock cycle)以及时钟频率(clock frequency)
    • 1.2 机器周期(Machine Cycle)/ CPU周期(CPU Cycle)
    • 1.3 指令周期(Instruction Cycle)
    • 1.4 指令周期、机器周期以及时钟周期之间的关系
  • 二,PMU 的Cycle Counter
    • 2.1 PMCCNTR_EL0, Performance Monitors Cycle Count Register
  • 三,如何计算出CPU的时钟频率
  • 四,参考文档

一,时钟周期,机器周期以及指令周期

1.1 时钟周期(clock cycle)以及时钟频率(clock frequency)

同学们是否还记得数电里学过的同步时序逻辑电路:电路里的所有触发器都是同一个时钟脉冲源,触发器的状态会与该时钟脉冲信号同步,即一个时钟脉冲到来,所有触发器的状态就改变一次。CPU与之类似,需要给CPU灌入一个连续的时钟脉冲信号,每一次脉冲到来,CPU内的晶体管就改变一次状态,而源源不断的时钟脉冲正是CPU能够执行计算任务的关键。

在这里插入图片描述
如上图所示,脉冲信号做出周期变化的最短时间称之为震荡周期,也称为 CPU 时钟周期。它是计算机中最基本的、最小的时间单位。周期的倒数就是频率,所以我们很容易得出时钟频率和时钟周期的关系:
时钟频率 = 1 时钟周期 时钟频率=\frac{1}{时钟周期} 时钟频率=时钟周期1
一秒(1 s)内,发出的震荡脉冲个数为时钟频率
。我们经常讲某个CPU的主频是多少GHz、多少MHz,并认为CPU的频率越高,其运算性能越强。从时钟频率的原理分析可知:时钟频率越高,一秒内发出的脉冲个数越多,CPU内的晶体管状态变化次数越多,即CPU的运算速度越快。
事实上,每个CPU,或者每个芯片都有自己的正常工作频率范围(在最小工作频率和最大工作频率之间)。时钟频率越高,晶体管状态变化越频繁,当晶体管未及时更新状态,而下一个脉冲信号就已经到来时,CPU有可能进入未知的状态,不能正常工作。

1.2 机器周期(Machine Cycle)/ CPU周期(CPU Cycle)

机器周期也称为CPU周期。
在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段,每一阶段完成一项工作。
例如,取指令、存储器读、存储器写等,这每一项工作称为一个基本操作(注意:每一个基本操作都是由若干CPU最基本的动作组成)。完成一个基本操作所需要的时间称为机器周期。通常用内存中读取一个指令字的最短时间来规定CPU周期。(原文)
机器周期是为了实现指令流水线而引入的概念,实际上对应的是指令流水线的各个阶段,称之为流水阶段(或功能段,流水级等)。
从下图可知,一个机器周期包含了若干个时钟周期:
在这里插入图片描述

1.3 指令周期(Instruction Cycle)

CPU从存储器中取出并执行一条指令所需的全部时间称之为指令周期。一个指令周期通常用需要几个CPU周期来表示:
在这里插入图片描述
指令不同,所需的机器周期数也不同。对于一些简单的的单字节指令,在取指令周期中,指令取出到指令寄存器后,立即译码执行,不再需要其它的机器周期。对于一些比较复杂的指令,例如转移指令、乘法指令,则需要两个或者两个以上的机器周期。
在这里插入图片描述

1.4 指令周期、机器周期以及时钟周期之间的关系

简单概括就是:一个指令周期,包含多个 CPU 周期,而一个 CPU 周期包含多个时钟周期。

二,PMU 的Cycle Counter

PMU模块里有一个64-bit 位宽的计数器cycle counter,这个cycle counter的计数频率为CPU的时钟频率。可以通过读取寄存器 PMCCNTR_EL0 或者 PMCCNTR来获取当前cycle counter里的clock cycle。

在这里插入图片描述

2.1 PMCCNTR_EL0, Performance Monitors Cycle Count Register

寄存器PMCCNTR_EL0保存着CPU的cycle counter的值,记录着CPU时钟周期数( clock cycles)。AArch64系统寄存器PMCCNTR_EL0[63:0]映射到AArch32的PMCCNTR[63:0]。
需要注意的是:

  1. 尽管arm体系结构要求PMCCNTR_EL0 或PMCCNTR的直接读取按程序顺序进行,但并不要求在两次这样的读取之间计数增加。即使cycle counter在每个时钟周期中都在增加,软件也可能需要检查两次读取计数器之间的差是否为非零。
  2. WFI 和WFE指令或造成CPU 时钟停止,进入standby模式。此时所有计数器的时钟频率也会发生变化。这意味着当时钟被WFI和WFE指令停止时,PMCCNTR_EL0是否会继续计数是受约束的,不可预测的。

使用如下指令即可读取CPU时钟周期数( clock cycles)到指定寄存器:

;AArch64:
MRS <Xt>, PMCCNTR_EL0
;AArch32:
MRC{<c>}{<q>} <coproc>, {#}<opc1>, <Rt>, <CRn>, <CRm>{, {#}<opc2>}

三,如何计算出CPU的时钟频率

我们有了上文的基础知识作为铺垫,就可以来计算CPU的时钟频率了。基本原理如下:

  1. 在固定时间T内记录下CPU经过的时钟周期数C。
  2. CPU的时钟频率F可得:
    时钟频率 F = 时钟周期数 C 固定时间 T 时钟频率F=\frac{时钟周期数C}{固定时间T} 时钟频率F=固定时间T时钟周期数C

所以我们的程序伪代码可以这样写:

cycle1 = Read_PMCCNTR();
wait(10);//wait 10s
cycle2 = Read_PMCCNTR();
freq = (cycle2-cycle1)/10;

至于延时函数wait(),可以使用ARM CPU内部的generic timer或者 system counter来实现延时。

四,参考文档

https://wenwen.sogou.com/question/q660822487.htm
https://blog.csdn.net/weixin_37641832/article/details/88920468
https://zhuanlan.zhihu.com/p/461519409

相关文章:

ARM如何利用PMU的Cycle Counter(时钟周期)来计算出CPU的时钟频率

本章将学习如何利用ARM PMU的Cycle Counter&#xff0c;来计算出CPU的时钟周期&#xff0c;从而计算出CPU的时钟频率。在介绍计算方法前&#xff0c;有必要先介绍下什么是时钟周期、机器周期以及指令周期。 如何计算出CPU的时钟频率 一&#xff0c;时钟周期&#xff0c;机器周…...

56资源网系统源码搭建知识付费-含源码

内置了上万条数据资源 大致功能&#xff1a; 支持免费与付费&#xff08;增加了插件付费插件&#xff09;支持侧边栏支持添加各类型广告&#xff08;你所能用到的基本都有&#xff09;.支持网盘下载模块支持所有页面自定义支持文章页三方跳转支持添加页面支持自定义采集&#…...

【运营版】仿东郊到家上门服务app小程序开发同城美容家政预约推拿足浴SPA技师派单源码

套餐一:源码=小程序端+公众号端+APP端=280元 套餐二:全包服务 包服务器+域名+APP+认证小程序+H5+PC=1000元 后端:系统后端使用PHP语言开发 前端:前端使用uniapp进行前后端分离开发 用户端功能模块:技师选择 预约服务 优惠券 订单 技师服务...

uniapp项目实践总结(十五)使用websocket实现简易聊天室

导语:在一些社交软件中,经常可以看到各种聊天室的界面,接下来就总结一下聊天室的原理个实现方法,最后做一个简易的聊天室,包括登录/登出、加入/离开房间、发送接收聊天消息等功能。 目录 准备工作原理分析组件实现实战演练服务端搭建案例展示准备工作 在pages/index文件夹…...

论文阅读之Learning and Generalization of Motor Skills by Learning from Demonstration

论文阅读其实就是用自己的话讲一遍&#xff0c;然后理解其中的方法 0、论文基本信息 为什么阅读此篇论文&#xff1a;因为它是DMP经典论文&#xff0c;被引多次&#xff0c;学史可以明智&#xff0c;了解最初机理。 论文题目&#xff1a;Learning and Generalization of Moto…...

SpringCloud中的Eureka的集群配置

微服务框架中最为重要的就是注册中心&#xff0c;如果只是单注册中心&#xff0c;一旦出现问题&#xff0c;容易导致整个微服务环境不可用&#xff0c;所以建议注册中心集群。 目前SpringCloud框架中使用Eureka作为注册中心&#xff0c;本文简单介绍一下Eureka的集群配置&…...

10 Ubuntu下配置STMCubeMX与CLion IDE联合环境搭建(不包含下载CLion的教程)

序言 果然作为一名测控系的学生&#xff0c;纯搞视觉多少还是有点与专业脱节&#xff0c;决定入坑嵌入式。选择STM32进行入门&#xff0c;并且使用CubeMX加CLion作为我的第一个真正意义上的嵌入式开发环境&#xff08;大一的时候玩过一段时间&#xff0c;但是没什么技术&#…...

负载均衡原理及应用

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…...

视频讲解|1033含sop的配电网重构(含风光可多时段拓展)

目录 1 主要内容 程序特点 讲解重点 2 视频链接 1 主要内容 该视频为含sop的配电网重构matlab代码讲解&#xff0c;对应资源下载链接为含sop的配电网重构&#xff08;含风光|可多时段拓展&#xff09;&#xff0c;程序主要内容是&#xff1a;针对含sop的配电网重构模型&…...

uni-app监听页面滚动

在uni-app中可以通过监听页面滚动事件来实现滚动效果或响应滚动事件 在需要监听滚动的页面或组件中&#xff0c;添加一个scroll元素&#xff0c;用于容纳内容并实现滚动效果。 <template><view class"container"><scroll-view scroll-y scroll"…...

[字符串和内存函数]strcmp字符串函数的详解和模拟

strcmp函数 strcmp函数是一个用于比较两个字符串的C标准库函数。它的原型为&#xff1a; int strcmp(const char* str1, const char* str2);strcmp函数会比较str1和str2两个字符串的字符序列&#xff0c;并返回一个整数值来表示它们之间的大小关系。返回值的含义如下&#xff…...

zookeeper 常见问题处理

调整jvm参数 [rootvm-02 conf]# cat /opt/app/zookeeper-3.4.14/bin/zkEnv.sh |grep java.env -A3 -B3ZOOCFG"$ZOOCFGDIR/$ZOOCFG"if [ -f "$ZOOCFGDIR/java.env" ] then. "$ZOOCFGDIR/java.env" fiif [ "x${ZOO_LOG_DIR}" "x&…...

repo 命令

repo命令是Google开发的用于管理Android版本库的一个工具。 repo命令并不是用于取代git&#xff0c;而是用Python对git进行了一定的封装&#xff0c;简化了对多个Git版本库的管理。 repo init -u -b -m <manifest 文件名称> repo sync 相当于 git clone 获取 git remote…...

一、 计算机网络概论

一、计算机网络概论 1、计算机网络概述 1.1、概念 计算机网络是一个将分散的、具有独立功能的计算机系统&#xff0c;通过通信设备与线路连接起来&#xff0c;由功能完善的软件实现资源共享和信息传递的系统 是一些互连的、自治的计算机系统的集合 以能够相互共享资源的方…...

从零学习开发一个RISC-V操作系统(一)丨计算机组成原理相关知识与RISC-V指令集简介

本篇文章的内容 一、计算机组成原理的相关知识1.1 计算机的硬件组成1.2 程序的存储与执行1.3 程序语言的设计和进化1.4 存储设备的层次结构1.5 操作系统 二、RISC-V的指令集ISA简介2.1 什么是ISA2.2 复杂指令集&#xff08;CISC&#xff09;和精简指令集&#xff08;RISC&#…...

C++ - 异常介绍和使用

前言 我们在日常编写代码的时候&#xff0c;难免会出现编写错误带来程序的奔溃&#xff0c;或者是用户在使用我们编写的程序时候&#xff0c;使用错误所带来程序的奔溃。 在C 当中 可以对你觉得可能发生 错误 的地方在运行之前进行判断&#xff0c;发生错误可以给出提示。 C…...

iText实战--在现有PDF上工作

6.1 使用PdfReader读取PDF 检索文档和页面信息 D:/data/iText/inAction/chapter03/image_direct.pdf Number of pages: 1 Size of page 1: [0.0,0.0,283.0,416.0] Rotation of page 1: 0 Page size with rotation of page 1: Rectangle: 283.0x416.0 (rot: 0 degrees) Is reb…...

SQL优化--count优化

select count(*) from tb_user ;在之前的测试中&#xff0c;我们发现&#xff0c;如果数据量很大&#xff0c;在执行count操作时&#xff0c;是非常耗时的。 MyISAM 引擎把一个表的总行数存在了磁盘上&#xff0c;因此执行 count(*) 的时候会直接返回这个 数&#xff0c;效率很…...

IDEA下使用Spring MVC

<?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…...

2022基金从业人员资格管理及后续职业培训 部分答案(自答)

2022基金从业人员资格管理及后续职业培训 区块链在金融交易后处理中的应用私募基金行业典型违法案例分析《证券法》修订情况报告《刑法修正案&#xff08;十一&#xff09;》金融犯罪条款中国结算港股通结算业务介绍商品投资与商品配置价值气候技术&#xff1a;实现双碳目标的技…...

从电网到实验室——10kW大功率电源的Psim仿真实战

基于Psim的Boost型 PFC移相全桥AC-DC电源设计仿真 1、前级电网输入220AC&#xff0c;50Hz&#xff0c;中间级母线电压为600V&#xff0c;后级600V输入&#xff0c;547V输出&#xff0c;电压可调&#xff0c;功率10kW 2、前级基于Boost电路PFC&#xff0c;平均电流控制&#xff…...

孟德尔随机化实战(五)—— 告别报错!Error in if (out == “[]“) 深度解析与TwoSampleMR参数调优全攻略

1. 报错现象深度解析&#xff1a;为什么会出现"参数长度为零"&#xff1f; 最近在孟德尔随机化分析交流群里&#xff0c;这个报错出现的频率简直高得离谱&#xff1a;"Error in if (out "[]") { : argument is of length zero"或者它的中文版&q…...

VMware Unlocker:在非苹果硬件上运行macOS虚拟机的完整解决方案

VMware Unlocker&#xff1a;在非苹果硬件上运行macOS虚拟机的完整解决方案 【免费下载链接】unlocker 项目地址: https://gitcode.com/gh_mirrors/unloc/unlocker VMware Unlocker是一个开源工具&#xff0c;专门解决在非苹果硬件上使用VMware虚拟机运行macOS系统时的…...

Java开发必备:高德、百度、WGS84坐标互转实战(附完整代码)

Java开发实战&#xff1a;高德、百度与WGS84坐标系互转解决方案 当你需要在不同地图服务之间切换时&#xff0c;坐标系的差异往往会成为开发中的痛点。想象一下这样的场景&#xff1a;你的应用同时接入了高德地图和百度地图&#xff0c;用户上传的GPS数据却无法在两个平台上准确…...

gcoord与proj4js对比分析:选择最适合你的地理坐标库

gcoord与proj4js对比分析&#xff1a;选择最适合你的地理坐标库 【免费下载链接】gcoord 地理坐标系转换工具 项目地址: https://gitcode.com/gh_mirrors/gc/gcoord 在Web地图开发中&#xff0c;地理坐标系转换是一个常见需求。gcoord和proj4js都是优秀的JavaScript坐标…...

5G核心网UDR深度解析:从签约数据管理到策略数据存储的完整流程

5G核心网UDR深度解析&#xff1a;从签约数据管理到策略数据存储的完整流程 在5G核心网&#xff08;5GC&#xff09;架构中&#xff0c;统一数据仓储功能&#xff08;UDR&#xff09;扮演着数据中枢的角色。作为电信级网络的关键组件&#xff0c;UDR不仅需要处理海量用户数据的实…...

墨语灵犀开源模型生态:对接LangChain/RAG构建专属翻译知识库

墨语灵犀开源模型生态&#xff1a;对接LangChain/RAG构建专属翻译知识库 1. 引言&#xff1a;当古典美学遇见现代AI架构 在人工智能技术快速发展的今天&#xff0c;翻译工具已经从简单的词汇转换演变为理解文化语境和语义深度的智能系统。「墨语灵犀」作为基于腾讯混元大模型…...

ReAct Agent:新手程序员必看!收藏这款融合推理与行动的AI智能体框架,轻松入门大模型应用开发

ReAct框架通过结合推理与行动&#xff0c;解决了传统提示工程的局限性&#xff0c;构建出能主动思考、决策并执行复杂任务的智能体。本文详细介绍了ReAct的核心设计思想&#xff0c;包括推理模块的动态思考链和错误回溯机制&#xff0c;以及行动模块的工具集成和环境状态感知。…...

绝区零智能协同系统:AI驱动的游戏效率倍增解决方案

绝区零智能协同系统&#xff1a;AI驱动的游戏效率倍增解决方案 【免费下载链接】ZenlessZoneZero-OneDragon 绝区零 一条龙 | 全自动 | 自动闪避 | 自动每日 | 自动空洞 | 支持手柄 项目地址: https://gitcode.com/gh_mirrors/ze/ZenlessZoneZero-OneDragon 在当代游戏生…...

东北老牌央国企陪跑机构哪家实力强

在东北地区&#xff0c;众多求职者&#xff0c;特别是应届毕业生&#xff0c;将目光投向了工作稳定、发展前景广阔的央国企。在这一背景下&#xff0c;专业的求职服务机构应运而生&#xff0c;为求职者提供系统化的支持。辽宁优泰教育咨询有限公司便是其中一家专注于该领域的服…...