Amdahl's law and Gustafson's law

2023-11-12

在高并发程序设计中有两个非常重要的定律:

  • Amdahl(阿姆达尔定律)
  • Gustafson定律(古斯塔夫森定律)

这两个定律从不同的角度诠释了加速比与系统串行化程度、cpu核心数之间的关系,它们是我们在做高并发程序设计时的理论依据。

  • 加速比

“加速比”是个什么鬼?先来看张图:
这里写图片描述
串行程序为什么需要并行化,显然是为了提升系统的处理能力,即性能。并行化的过程,也可以称作系统优化的过程。上图中,在优化前,系统是完全串行的,步骤1至步骤5依次执行,共花费了500ms的时间;我们将步骤2与步骤5进行优化,使其分别用两个线程执行,每个线程各花费50ms,这样步骤2与5的执行时间就由优化前的100ms变为了优化后的50ms,那么整个程序在优化后的执行时间就缩短至400毫秒了,相当于系统的性能提升了20%。这个性能的提升可以用“加速比”来反应:

加速比=优化前系统耗时/优化后系统耗时

在上面的例子中,加速比=500/400=1.25,它是衡量系统优化程度的一个指标。

那么什么是阿姆达尔定律呢?

Amdahl(阿姆达尔定律)

  1. 阿姆达尔定律的定义
    阿姆达尔定律定义了串行系统并行化后加速比的计算公式与理论上限
  2. 加速比的计算公式
    先来看优化后耗时与优化前耗时之间的关系,其公式为:
    Tn=T1(F+1n(1F)) T n = T 1 ( F + 1 n ( 1 − F ) )

    其中定义n为处理器个数,T1为单核处理器时系统耗时即优化前系统耗时,Tn为n核心处理器系统时系统耗时即优化后系统耗时,F为串行比例,那么1-F就是并行比例了。

由前面的介绍可知:

= 加 速 比 = 优 化 前 系 统 耗 时 优 化 后 系 统 耗 时

用T1与Tn来表示,“加速比”的计算公司可变为:
=T1Tn 加 速 比 = T 1 T n

将前面Tn的计算公式代入:
=T1T1(F+1n(1F))=1(F+1n(1F)) 加 速 比 = T 1 T 1 ( F + 1 n ( 1 − F ) ) = 1 ( F + 1 n ( 1 − F ) )

这就是加速比的计算公式,从公式可以看出增加处理器的数量(提升n的值)并不一定能有效地提高加速比,如果系统的并行化程序不高,即F的值接近100%,就算n无穷大,加速比也是趋近于1的,并不会对系统的性能优化起到什么作用,而成本却无限增加了。

所以,我们可以从“加速比”的公式中看出,单纯地增加cup处理器的数量并不一定可以有效地提高系统的性能,只有在提高系统内并行化模块比重的前提下,同时合理增加处理器的数量,才能以最小的投入得到最大的加速比,这就是阿姆达尔定律要告诉我们的核心思想,它很直观地反应了加速比与处理器个数、系统串行比例之间的关系。

使用加速比的公式,我们同样可以计算出前方例子中的加速比是1.25,如下:

=1(F+1n(1F))=1(35+12(135))=135+15=54=1.25 加 速 比 = 1 ( F + 1 n ( 1 − F ) ) = 1 ( 3 5 + 1 2 ( 1 − 3 5 ) ) = 1 3 5 + 1 5 = 5 4 = 1.25

Gustafson定律(古斯塔夫森定律)

Gustafson定律也是说明处理器个数、串行比例和加速比之前的关系,只不过它的侧重角度有所不同。

我们定义a为系统串行执行时间,b为系统并行执行时间,n为处理器个数,F为串行比例,那么系统执行时间(串行时间+并行时间)可以表示为 a+b a + b ,系统总执行时间(串行时间)可以表示为 a+nb a + n b ,所以有如下公式推演:

=a+b 执 行 时 间 = a + b
=a+nb 总 执 行 时 间 = a + n b
=a+nba+b=aa+b+nba+b 加 速 比 = a + n b a + b = a a + b + n b a + b

其中,串行比例 F=aa+b F = a a + b ,将其代入上面的公司,可得到:
=F+n(a+ba)a+b=F+n(1aa+b)=F+n(1F)=F+nnF=nF(n1) 加 速 比 = F + n ( a + b − a ) a + b = F + n ( 1 − a a + b ) = F + n ( 1 − F ) = F + n − n F = n − F ( n − 1 )

最终的公式为:加速比= nF(n1) n − F ( n − 1 )
从公式中可以看出,F(串行化程度)足够小,也即并行化足够高,那么加速比和cpu个数成正比。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Amdahl's law and Gustafson's law 的相关文章

  • 大数据(hadoop分布式搭建--尚硅谷)手把手教学

    二 Hadoop 运行环境搭建 1 创建虚拟机 创建名称为hadoop100 在这里插入图片描述 https img blog csdnimg cn e89556e0b9b54d9fa3f25dea18873db2 png 2 配置三处网络
  • chart模板文件简单语法使用

    参考网址 https docs helm sh chart template guide the chart template developer s guide helm 模板 helm模板语法嵌套在 和 之间 有三个常见的 Values
  • 通过反编译定制android ROM

    以下操作是基于接近原生Android 4 4的系统下进行 是白牌设备 1 copy system 整个目录的 apk copy 到本地 2 对里面的 apk 重新进行签名 3 放回设备里面 重新启动 如果运行正常 那么现在就拥有设备的系统签
  • 上海链节科技的介绍

    上海链节科技有限公司 诞生于产业加速重塑 数字化金融格局加速转型的浪潮中 立足于区块链 数字经济为实体经济赋能 为社会进步和经济发展提供高效率 低成本的数字化转型解决方案 通过与实体企业 人民大众的生产 生活消费产生直接 正向的链接 从真正
  • JavaFX 程序退出时结束子线程

    1 前言 在JavaFX的程序开发中 在调用子线程之后子线程还未结束时 我们点击应用程序右上角的关闭按钮的时候 我们会发现程序还没有真正的结束运行 这是因为我们的子线程没有在JavaFX的管理之下 2 如何关闭 在主方法中找到Stage类
  • 机器学习数据集_机器学习数据集的选择

    机器学习数据集 Before you is an article guide to open data sets for machine learning In it I for a start will collect a selecti
  • 会话列表

    java实现 题目描述 小云正在参与开发一个即时聊天工具 他负责其中的会话列表部分 会话列表为显示为一个从上到下的多行控件 其中每一行表示一个会话 每一个会话都可以以一个唯一正整数id表示 当用户在一个会话中发送或接收信息时 如果该会话已经
  • Wifi模块—源码分析Wifi热点扫描2(Android P)

    一 前言 这次接着讲Wifi工程流程中的Wifi热点扫描过程部分的获取扫描结果的过程 也是Wifi扫描过程的延续 可以先看前面Wifi扫描的分析过程 Wifi模块 源码分析Wifi热点扫描 Android P 二 图示调用流程 这次的调用流
  • 【华为OD机试真题2023B卷 JS】勾股数元组

    华为OD2023 B卷 机试题库全覆盖 刷题指南点这里 勾股数元组 知识点编程基础 时间限制 1s 空间限制 256MB 限定语言 不限 题目描述 如果3个正整数 a b c 满足a2 b2 c2的关系 则称 a b c 为勾股数 著名的勾
  • 【华为OD】最多几个直角三角形_全组合求解

    目录 一 题目描述 二 输入描述 三 输出描述 3 1 描述 四 题目解析 五 Java玩法 六 JavaScript玩法 一 题目描述 有 N 条线段 长度分别为 a 1 a n 现要求你计算这 N 条线段最多可以组合成几个直角三角形 每
  • Java中内部类详解(类的五成员之五:内部类)

    目录 友情提醒 概述 Java类的五成员之五 内部类 一 内部类 1 成员内部类 2 方法内部类 3 匿名内部类 4 静态内部类 二 匿名内部类与Lambda表达式 友情提醒 先看文章目录 大致了解知识点结构 直接点击文章目录可以跳转到文章
  • Git 如何优雅地回退代码

    前言 从接触编程就开始使用 Git 进行代码管理 先是自己玩 Github 又在工作中使用 Gitlab 虽然使用时间挺长 可是也只进行一些常用操作 如推拉代码 提交 合并等 更复杂的操作没有使用过 看过的教程也逐渐淡忘了 有些对不起 Li
  • 测试开发工程师的简历和面试准备

    文章目录 职业规划 核心事项 不必等待准备 完美 才投简历 准备简历 确定一批目标公司和目标职位 详细事项 可以慢慢完备 时间有限 注意结合所需 简历 简历命名 邮件标题同理 携带个人信息 优先使用pdf格式的简历 最好打印大小是A4 简历
  • WINAPI WinMain

    include
  • 为什么每个程序执行都有内核地址空间和程序地址空间?

    为什么每个用户态的程序映射到虚拟地址空间 都需要有内核地址空间和程序地址空间呢 因为程序地址空间最终都会调用系统调用 也就是内核的东东 所以每个程序要想执行 就必须有内核地址空间 也必须有程序地址空间 所用的application程序要想使
  • 11 种加密 & 哈希算法的原理及其 Java 实现

    11 种加密 哈希算法的原理及其 Java 实现 一 目的 二 运行环境 三 基本原理及步骤 I 各种加密算法的原理 DES 数据加密标准 Data Encryption Standard 算法介绍 算法流程 优点 缺点 破解方式 适用场景
  • Linux期末考试题库(超全)

    文章目录 Linux期末考试题库 选择题 填空题 简答题 操作题 Linux期末考试题库 选择题 在创建Linux分区时 一定要创建 D 两个分区 A FAT NTFS B FAT SWAP C NTFS SWAP D SWAP 根分区 在
  • react样式处理

    react样式处理有两种处理方式 行内样式处理 使用className来定义类名 使用行内样式处理 语法 lt 元素 style css属性1 值1 css属性2 值2 gt 用法 引入react核心包 import React from
  • 完全免费快速搭建个人www服务器

    想拥有自己的web服务器吗 想把服务器放到自己家里吗 通过ADSL拨号也能建立个人的服务器吗 本文告诉你答案 要建立自己的web服务器 需要两个最重要的工作 1 让别人知道你的主机 目前访问Internet上主机的方式主要有两种 一是通过I

随机推荐

  • [JAVAee]SpringBoot配置文件

    配置文件的介绍 配置文件当中记录了许多重要的配置信息 例如 数据库的连接信息 用户的账户与密码 项目的启动端口 第三方系统的调用密匙 用于记录问题产生的日志 在spring框架中一些特定的框架会自动调用配置文件中的配置信息来运用 配置文件中
  • KCF论文技术路线

    https blog csdn net crazyice521 article details 53525366 http www cnblogs com YiXiaoZhou p 5925019 html 一 算法介绍 KCF全称为Ker
  • 搭建高可用mongodb集群(三)—— 深入副本集内部机制

    在上一篇文章 搭建高可用mongodb集群 二 副本集 介绍了副本集的配置 这篇文章深入研究一下副本集的内部机制 还是带着副本集的问题来看吧 副本集故障转移 主节点是如何选举的 能否手动干涉下架某一台主节点 官方说副本集数量最好是奇数 为什
  • 微信小程序中获取用户信息getUserInfo替换方案

    场景说明 我们在开发过程中 如果使用getUserInfo获取用户头像和昵称等用户信息时 会出现如下报错 in promise MiniProgramError errMsg getUserInfo fail scope unauthori
  • 冒泡排序--数组的简单排序,从大到小,从小到大

    冒泡排序 是计算机程序中较为常见和简单的排序算法 它需要重复地走访需要进行排序的元素列 按照一定顺序依次比较两个相邻的元素 如果顺序错误就把他们交换过来 示意原图如下 我们需要的结果示意图如下 那我们应该怎么进行程序的编写才能满足这样的结果
  • Stable Diffusion WebUI安装ControlNet插件

    ControlNet是一种通过添加额外条件来控制扩散模型的神经网络结构 sd webui controlnet下载地址 GitHub Mikubill sd webui controlnet WebUI extension for Cont
  • 一些基本引言的知识点

    文章目录 一些基本引言的知识点 系统调优你所不知道的TIME WAIT和CLOSE WAIT 一些基本引言的知识点 哥在 PHP7 中 把 HashTable 结构体从 72 字节压缩到了 56 字节 表 看起来不 的优化 实际上是成倍的性
  • 万能密码为什么能成功

    1 在用户名处输入 admin or 1 1 输入任意密码 2 表单成功绕过 登陆成功 万能密码成功的原因 万能密码的用户名和密码 admin or 1 1 或者1 or 1 1 or 1 1 这个的原理就是利用了数据库在查询过程中的代码漏
  • 【C语言】整型数据在内存中的存储(详解)

    数据存储 文章目录 数据类型 布尔类型 无符号数据的打印 不同数据占用的字节 整型在内存中的存储 整型家族 原反补 三兄弟 二进制要怎么写出来呢 什么是符号位 大小端问题 判断当前编译器是大端还是小端 为什么整型在内存中存放的是补码呢 结语
  • 【软件测试】自动化测试战零基础教程——Python自动化从入门到实战(六)

    整理不易 希望对各位学习软件测试能带来帮助 软件测试知识持续更新 第五章 自动化测试用例设计 第一节 手工测试用例与自动化测试用例 手工测试用例与自动化测试用例对比 用例选型注意事项 第二节 测试类型 测试静态内容 测试链接 功能测试 测试
  • Relatives 【POJ - 2407】【欧拉筛、预处理】

    Given n a positive integer how many positive integers less than n are relatively prime to n Two integers a and b are rel
  • vs中报错error C4996: 'wcstombs': This function or variable may be unsafe

    遇到这样的情况就是缺少宏 所以需要我们将需要的宏进行加上就可以了 在以下的位置 项目 gt 属性 gt 配置属性 gt C C gt 预处理器 gt 预处理器定义 增加 CRT SECURE NO DEPRECATE 完成
  • QTreeWidget存放自定义数据

    QTreeWidget 双击可编辑的设置 connect ui treeWidget RedLamp SIGNAL itemClicked QTreeWidgetItem int this SLOT Slot TreeRedLampIncr
  • C++中类的静态变量在哪初始化

    C 中类的静态变量在哪初始化 static修饰的成员变量存在哪 static成员变量 不能在头文件中初始化 3 static成员必须在类外初始化 并且 不能在头文件中初始化 否则 在链接时可能会出现重定义的问题 C 成员初始化 class
  • C++ 强制转换运算符

    强制转换运算符是一种特殊的运算符 它把一种数据类型转换为另一种数据类型 强制转换运算符是一元运算符 它的优先级与其他一元运算符相同 大多数的 C 编译器都支持大部分通用的强制转换运算符 type expression 其中 type 是转换
  • 【Unity Shader】浅析Unity shader中RenderType的作用及_CameraDepthNormalsTexture

    初学Unity ShaderLab的时候 一定有接触过Unity Shader中的Tags标签块 比如 span span LightMode Vertex Queue Transparent IgnoreProjector True Re
  • stm32第二课

    stm编程写状态机 使用MENU 菜单 设置多个变量 c文件是驱动文件 h文件是库文件豆腐线规范 并做读书笔记 AHB总线规范是AMBA总线规范的一部分 AMBA总线规范是ARM公司提出的总线规范 被大多数SoC设计采用 它规定了AHB A
  • 函数的引用返回

    引用是给变量取一个别名 所以引用传递会直接进行变量本身的传递 它的最大好处是可以把别处对变量的改变保留下来 第二好处是它提高了性能 如果函数的返回值是一个引用 那么 如上文所说 它会节约一组构造 赋值和析构过程 但是 函数返回引用往往会带来
  • ZooKeeper的学习与应用

    转载 http blog csdn net rengq126 article details 7393227 最近大概学习了一下ZooKeeper 本身并没有深入 LGG尝试着在虚拟机里面搭了平台 看了看一些教材 从网上到处看别人的博文并引
  • Amdahl's law and Gustafson's law

    在高并发程序设计中有两个非常重要的定律 Amdahl 阿姆达尔定律 Gustafson定律 古斯塔夫森定律 这两个定律从不同的角度诠释了加速比与系统串行化程度 cpu核心数之间的关系 它们是我们在做高并发程序设计时的理论依据 加速比 加速比