【计算机架构】程序指令计数 | 功耗计算 | 电力功耗 | 安德尔定律(Amdahl‘s Law)

   


0x00 程序的指令计数

 程序的指令计数(Instruction Count)由程序本身、ISA(指令集架构)和编译器决定。这表示一个程序中包含的指令数量受到程序编写方式、计算机体系结构和编译器的影响。

每条指令的平均周期数(Average cycles per instruction,CPI)是由CPU硬件决定的。不同的指令可能需要不同的时钟周期数来执行,因此平均CPI受指令混合(instruction mix)的影响。

指令混合是指程序中不同类型的指令的比例。某些指令可能需要更多的时钟周期来执行,而其他指令可能需要较少的周期。平均CPI是这些不同指令的CPI的加权平均,其中权重由它们在指令混合中的相对频率决定。我们可以用以下公式来计算:

CC=IC\times CPI

T=IC\times CPI\times CT=\frac{IC\times CPI}{CR}

举个例子:

计算机 A: 周期时间 = 250ps,CPI = 2.0 • 计算机 B: 周期时间 = 500ps,CPI = 1.2 • 相同的ISA • 哪台计算机更快,快多少?

更多细节:如果不同指令类别需要不同的周期数,那么:

CC=\sum_{i=1}^{n}(CPI_i\times IC_i)

加权平均 CPI 为:

CPI=\frac{CC}{InC}=\sum_{i=1}^{n}(CPI_i\times \frac{InC_i}{InC})

其中,InC_i/InC 属于相对频率 (Relative frequency) 。

因此,对于性能计算,我们可以把公式总结如下:

单处理器性能:

0x01 功耗计算

对于 CMOS 芯片,传统的主要能耗在于开关晶体管,称为动态功耗。

对于移动设备,能量更好的度量标准:

对于固定任务,减慢时钟频率(切换频率)可以减小功耗,但不能减小能耗。

电容负载取决于连接到输出的晶体管数量和技术,技术决定了电线和晶体管的电容。

降低电压有助于减小功耗和能耗,因此从 5V 降至 1V。

为了节省能量和动态功耗,大多数CPU现在会关闭不活动模块的时钟(例如浮点运算单元)。

举个例子:假设电压减小15%导致频率减小15%,对动态功耗的影响如何?

我们根据公式:

现在,我们有一个 15% 的电压减小,这意味着新的电压将是原电压的0.85倍,而频率也减小了15%,即新频率是原频率的 0.85 倍。将这些值代入公式中:

现在,我们可以计算新动态功耗与原动态功耗之间的比例:

容量项和 1/2 会在分子和分母中互相抵消,所以:

新的动态功耗 / 原动态功耗 = (0.85^2 × 0.85) / 1

新的动态功耗 / 原动态功耗 = 0.614125

所以,通过减小电压15%并导致频率减小 15%,动态功耗减小到原来的约 61.41%。

0x02 电力功耗(Power consumtion)

因为即使晶体管关闭时,漏电流仍然会流动,所以静态功耗也变得重要。

在晶体管尺寸更小的处理器中,漏电流增加。即使关闭了晶体管,增加晶体管的数量也会增加功耗。在2006年,漏电目标为总功耗的25%;高性能设计为40%。非常低功耗系统甚至会降低非活动模块的门电压以控制漏电带来的损失。

在做出设计折衷决策时,通常应该优先考虑常见情况而非不太常见的情况。例如,如果在计算机系统中指令提取和解码单元的使用频率高于乘法器,那么应该首先对前者进行优化。又如,如果一个数据库服务器每个处理器都有50个磁盘,那么存储可靠性可能比系统可靠性更重要,因此应首先对其进行优化。

通常,常见情况比不太常见情况更为简单,而且可以更快地完成。这意味着可以通过优化常见情况来提高性能,即使这可能会对不太常见的情况产生一些影响。举例来说,当将两个数字相加时,溢出的情况非常罕见,因此通过优化不发生溢出的常见情况来提高性能可能更为有效。这种方式可能会减慢处理溢出的速度,但整体性能会因为优化常见情况而得到改进。在评估常见情况以及通过加速常见情况来提高性能时,我们需要考虑到 安德尔定律

0x03 安德尔定律(Amdahl's Law)

Amdahl's Law(安德尔定律)是一项关于计算机性能优化的重要原则,由计算机科学家 Gene Amdahl 于 1967 年提出。该定律强调了在优化计算系统时需要关注性能的瓶颈,特别是涉及并行计算的情况。

安德尔定律的核心思想是,当你尝试提高一个系统中某个部分的性能时,性能提升会受到系统中其他部分的限制,尤其是在多处理器或多核系统中。这意味着无论你花多少时间和资源来提高一个部分的性能,整个系统的性能提升会受到那个部分的限制。

\color{}ExTime_{new}=ExTime_{old}\times [(1-Fraction_{enhanced})+\frac{Fraction_{enhanced}}{Speedup_{enhanced}}]

\color{}Speedup_{overall}=\frac{ExTime_{old}}{ExTime_{new}}=\frac{1}{(1-Fraction_{enhanced})+\frac{Fraction_{enhanced}}{Speedup){enhanced}}}

最佳期望:

\color{}Speedup_{maximum}=\frac{1}{(1-Fraction_{enhanced})}

举个例子:新的 CPU 速度快了 10 倍,服务器受 I/O 限制,因此 60% 的时间用于等待I/O操作。

显然,人类天性倾向于被速度提高 10 倍所吸引,而忽视了只是提高了 1.6 倍的现实。


📌 [ 笔者 ]   王亦优
📃 [ 更新 ]   2022.
❌ [ 勘误 ]   /* 暂无 */
📜 [ 声明 ]   由于作者水平有限,本文有错误和不准确之处在所难免,本人也很想知道这些错误,恳望读者批评指正!

📜 参考资料 

C++reference[EB/OL]. []. http://www.cplusplus.com/reference/.

Microsoft. MSDN(Microsoft Developer Network)[EB/OL]. []. .

百度百科[EB/OL]. []. https://baike.baidu.com/.

比特科技. C++[EB/OL]. 2021[2021.8.31]. 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/132824.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在云上jupylab(codelab)常用的shell命令

1、切换当前文件目录位置: %cd /project/train/ 2、删除目标文件夹和文件夹下面的内容,注意这个r是不能少的: !rm -r /project/train/src_repo/dataset 3、创建数据集相关文件夹 !mkdir /project/train/src_repo/dataset 4、复制指定…

想学计算机编程从什么学起?零基础如何自学计算机编程?中文编程开发语言工具箱之渐变标签组构件

想学计算机编程从什么学起?零基础如何自学计算机编程? 给大家分享一款中文编程工具,零基础轻松学编程,不需英语基础,编程工具可下载。 这款工具不但可以连接部分硬件,而且可以开发大型的软件,…

linux硬盘挂载(linux 修改某个磁盘挂载到新目录\lvm扩容)

文章目录 一、什么是硬盘挂载二、linux 修改某个磁盘挂载到新目录三、Esxi下扩容硬盘1. 判断一个已有的文件系统是否使用了LVM(逻辑卷管理)2. 原本文件系统没有使用lvm,还可以lvm扩容吗?3. 原有文件系统使用lvm场景下扩容(lvm扩容)了解LVMEsxi LVM扩容步…

NOIP2000提高组第二轮T4:方格取数

题目链接 [NOIP2000 提高组] 方格取数 题目描述 设有 N N N \times N NN 的方格图 ( N ≤ 9 ) (N \le 9) (N≤9),我们将其中的某些方格中填入正整数,而其他的方格中则放入数字 0 0 0。如下图所示(见样例): 某人从图的左上…

ES 报错问题汇总

报错1: curl -XGET http://192.168.56.115:9200/_license解决方式 在 es/config/elasticsearch.yml文件,把开启密码验证把此处也修改成false xpack.security.enabled: false 报错2: 解决方式: 查看服务器es的license信息,发现 …

用「埋点」记录自己,不妄过一生

最近有朋友问我「埋点怎么做」,给朋友讲了一些互联网广告的案例,从源头的数据采集讲到末尾的应用分析和流量分配等(此处省略N多字) 解释完以后,我想到一个问题:有了埋点可以做分析,那我们对自己…

机器学习概论

一、机器学习概述 1、机器学习与人工智能、深度学习的关系 人工智能:机器展现的人类智能机器学习:计算机利用已有的数据(经验),得出了某种模型,并利用此模型预测未来的一种方法。深度学习:实现机器学习的一种技术 2…

yum

什么是yum? Linux中我们也要进行工具/指令/程序,安装,检查卸载等,需要yum的软件 安装软件的方式: 1.源代码安装--交叉编译工作 2.rpm包直接安装 3.yum / apt-get yum:yum是我们linux预装的一个指令,搜索&#x…

【数据结构】顺序表和链表

顺序表和链表 1.线性表 线性表(linear list)是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列、字符串… 线性表在逻辑上是线性结构,也就说是连…

uniapp 省市区三级联动选择器

还有半个小时下班,总想着发点光亮照耀他人。IT技术这东西,尤其是UI方面的东西,于用户体验至关重要,想想最近使用uni-data-picker的丑陋页面,自己重构了这个功能,新加实现,效果图如下&#xff0c…

SRC实战 | CORS跨资源共享漏洞

CORS跨资源共享 跨源资源共享 (CORS) 是一种浏览器机制,允许网页使用来自其他页面或域的资产和数据。 大多数站点需要使用资源和图像来运行它们的脚本。这些嵌入式资产存在安全风险,因为这些资产可能包含病毒或允许服务器访问黑客。 CORS响应头 CORS通…

类(class)

类是 C中一个非常重要的元素,可以说是 C的灵魂所在了,我们都知道 C说一种面向对象的编程语言,那么面向对象是一种什么概念呢?在 C程序设计中,所有一切东西都可以称之为对象,任何对象都应该具有属性和行为。…

C++基础——类与对象

1 概述 C是面向对象的语言,面向对象语言三大特性:封装、继承、多态。 C将万事万物抽象为对象,对象上有其属性和行为。 2 封装 2.1 封装的意义 封装是面向对象的三大特性之一,封装将属性和行为作为一个整体,对属性和…

灵活调整宣传策略,媒体发稿和新闻发布的优势所在

企业在当今信息爆炸的时代,要想在市场竞争中脱颖而出,提高公信力是至关重要的。而媒体发稿和新闻发布是提升企业公信力的重要手段之一。下面将从门户网站的权威展示、搜索引擎排名的提升、内容的持续稳定有效性、内容的可改性以及协助增加网站流量等方面…

浅谈自动化测试框架开发

📢专注于分享软件测试干货内容,欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢交流讨论:欢迎加入我们一起学习!📢资源分享:耗时200小时精选的「软件测试」资…

Linux中for循环

for do done 复习知识点:cut命令,id命令,finger命令,for循环 程序如上,-d 接分隔符,-f后的数字表示分隔后的列 从结果可以看出,系统上没有finger这个命令,后面会学到yum安装命令&a…

Python---字符串的修改方法---replace()替换

修改字符串,指的就是通过函数(方法)的形式修改字符串中的数据。 编号函数作用1replace()返回替换后的字符串2split()返回切割后的列表序列3capitalize()首字母大写4title()所有单词首字母大写5upper()与lower()返回全部大写或小写的字符串6l…

[动态规划] (九) 路径问题:LeetCode 64.最小路径和

[动态规划] (九) 路径问题:LeetCode 64.最小路径和 文章目录 [动态规划] (九) 路径问题:LeetCode 64.最小路径和题目解析解题思路状态表示状态转移方程初始化和填表顺序返回值 代码实现总结 64. 最小路径和 题目解析 (1) 从左上角到右下角 (2) 只能向右…

ardupilot开发 --- gdb 篇

环境 win11 vscode 1.81.0 wsl2 ardupilot 利用gdb工具在vsCode中实现 Ardupilot SITL的断点调试 优点:可在vsCode中实现断点调试。 参考文献:https://ardupilot.org/dev/docs/debugging-with-gdb-using-vscode.html 安装gdb工具 打开wsl&#xff0…

剑指JUC原理-13.线程池

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…