深入理解计算机系统一--Amdahl定律 想正确算出你的系统提升了多少性能吗?

本文主要是介绍深入理解计算机系统一--Amdahl定律 想正确算出你的系统提升了多少性能吗?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Amdahl定律

Gene Amdal,计算领域的早期先锋之一,对提升系统某一部分性能所带来的效果做出了简单却有见地的观察。

这个观察被称为Amdahl定律。该定律的主要思想是,当我们对系统的某个部分加速时,其对系统整体性能的影响取决于该部分的重要性和加速程度。

若系统执行某应用程序需要时间为Told。假设系统某部分执行所需时间与该时间的比例为a,而该部分性能提升比例为k。即该部分初始所需执行时间为aTold,现在所需时间为(aTold)/k。因此,总的执行时间应为:

Tnew = (1 - a)Told + (aTold)/k = Told [(1 - a) + a/k]

由此,可以计算加速比 S = Told / Tnew

S = 1 / [(1 - a) + a/k]

例子

考虑这样一种情况,系统的某个部分初始耗时比例为60%(a = 0.6),其加速比例因子为3,也就是性能提升了300%。则我们可以获得的整体系统加速比为:

1 / [(1 - 0.6) + 0.6 / 3] = 1 / (0.4 + 0.2) = 1 / 0.6 = 1.66666666 约等于 1.67倍

可以看到虽然我们优化的部分提升了3倍性能,但是整体性能只提升了1.67倍。

虽然我们对系统的一个主要部分做了重大改进,但是获得的加速比却明显小于这部分的加速比。这就是Amdahl定律的主要观点–要想显著加速整个系统,必须提升系统中相当大的部分的速度

练习题1.1

假设你要把土豆从爱达荷州送到明尼苏达州,全程2500公里。在限速范围内,你估计平均速度为100公里/小时,整个行程需要25个小时。

A:新闻说蒙大拿州取消了限速,这使得行程有1500公里速度可以达到150公里/小时,那么加速比是多少?

答:根据题目可知:

a = 1500 / 2500 = 0.6 k = 1.5 求S公式 S = 1 / [(1 - a) + a/k] 代入:S = 1 / (0.4 + 0.4)
S = 1 / 0.8
S = 1.25

加速比是 1.25倍

B:你可以购买道具,想让加速比达到1.67倍,那么你必须以多快的速度通过蒙大拿州?

答:根据题目可知:

S = 1.67 a = 0.6 求k1.67 = 1 / (0.4 + 0.6 / k)
1.67 * (0.4 + 0.6 / k) = 1
0.668 + 1.002 / k = 1
1.002 / k = 0.332
k = 1.002 / 0.332
k = 3.02

也就是蒙大拿州的速度必须达到 100 * 3.02 = 302公里/小时才行。

练习题1.2

公司说下个版本的软件性能将提升2倍。这个任务分配给你,你已经确认只有80%的系统可以进行改进,那么,这部分需要改进多少才可以达到要求?

根据题目可以知道:

a = 0.8, S = 2,求k公式 S = 1 / [(1 - a) + a/k] 代入:
2 = 1/ [(1 - 0.8) + 0.8/k]
2 = 1 / (0.2 + 0.8 / k)
2 (0.2 + 0.8 / k) = 1
0.4 + 1.6 / k = 1
1.6 / k = 0.6
1.6 = 0.6k
16 / 6 = k
k = 2.67

所以我们需要改进这部分至少2.67倍才能达到要求。

这篇关于深入理解计算机系统一--Amdahl定律 想正确算出你的系统提升了多少性能吗?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/857016

相关文章

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

Linux系统之authconfig命令的使用解读

《Linux系统之authconfig命令的使用解读》authconfig是一个用于配置Linux系统身份验证和账户管理设置的命令行工具,主要用于RedHat系列的Linux发行版,它提供了一系列选项... 目录linux authconfig命令的使用基本语法常用选项示例总结Linux authconfi

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Spring Boot 中正确地在异步线程中使用 HttpServletRequest的方法

《SpringBoot中正确地在异步线程中使用HttpServletRequest的方法》文章讨论了在SpringBoot中如何在异步线程中正确使用HttpServletRequest的问题,... 目录前言一、问题的来源:为什么异步线程中无法访问 HttpServletRequest?1. 请求上下文与线

CSS3 最强二维布局系统之Grid 网格布局

《CSS3最强二维布局系统之Grid网格布局》CS3的Grid网格布局是目前最强的二维布局系统,可以同时对列和行进行处理,将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局,本文介... 深入学习 css3 目前最强大的布局系统 Grid 网格布局Grid 网格布局的基本认识Grid 网

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

在不同系统间迁移Python程序的方法与教程

《在不同系统间迁移Python程序的方法与教程》本文介绍了几种将Windows上编写的Python程序迁移到Linux服务器上的方法,包括使用虚拟环境和依赖冻结、容器化技术(如Docker)、使用An... 目录使用虚拟环境和依赖冻结1. 创建虚拟环境2. 冻结依赖使用容器化技术(如 docker)1. 创

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具