之前,CPU的性能还主要取决于CPU的主频,经过超摩尔定律的发展后,没过多长时间CPU的主频速度就已接近“极限”,使得单单靠提高CPU的主频来提升性能变得非常困难。

目前,Intel、AMD等CPU生产商都转而采用了多核技术来提升CPU性能。系统设计趋势是将多个计算核放到单个芯片。无论多个计算核是在多个CPU芯片上还是在单个CPU芯片上,我们称之为多核(multicore)或多处理器(multiprocessor)系统。

双核处理器 = 一个处理器上包含两个内核

多核处理器 = 一个处理器上包含两个或多个内核

多线程编程提供机制,以便更有效地使用这些多个计算核和改进的并发性。考虑一个应用,它有 4 个线程。对于单核系统,并发仅仅意味着线程随着时间推移交错执行(如下图),因为处理核只能同一时间执行单个线程。

单核系统上的并发执行

对于多核系统,并发表示线程能够并行运行,因为系统可以为每个核分配一个单独线程(如下图)

多核系统上的并行执行

并行性(parallelism)和并发性(concurrency)

并行系统可以同时执行多个任务。相比之下,并发系统支持多个任务,允许所有任务都能取得进展。因此,没有并行,并发也是可能的。

SMP(Symmetrical Multi-Processing 对称多处理) 和多核架构出现之前,大多数计算机系统只有单个处理器。CPU 调度器通过快速切换系统内的进程,以便允许每个进程取得进展,从而提供并行假象。这些进程并发运行,而非并行运行。

随着系统线程数量从几十个到几千上万个,CPU 设计人员通过增加硬件来改善线程性能的提高系统性能。现代 Intel CPU 的每个核经常支持两个线程,这种支持意味着,可以将多个线程加载到处理核以便快速切换。毫无疑问,多核计算机将继续增加多核数量和硬件线程支持。

编程挑战

多核系统趋势继续迫使系统设计人员和应用程序开发人员更好地使用多个计算核。操作系统设计人员必须编写调度算法利用多个处理核以便允许并行执行,如上图(多核系统上的并行执行)。对于应用程序开发人员来说,挑战是修改现有程序和设计新的程序以便利用多线程。

一般而言,多核系统编程有五个方面的挑战:

  1. 识别任务:这涉及分析应用程序,查找区域以便分为独立的、并发的任务。在理想情况下,任务是互相独立的,因此可以在多核上并行运行。
  2. 平衡:在识别可以并行运行任务时,程序员还应确保任务执行同等价值的工作。在有些情况下,有的任务与其他任务相比,可能对整个任务的贡献并不多;采用单独核来执行这个任务就不值得了。
  3. 数据分割:正如应用程序要分为单独任务,由任务访问和操作的数据也应划分以便运行在单独的核上。
  4. 数据依赖:任务访问的数据必须分析多个任务之间的依赖关系。当一个任务依赖于另一个任务的数据时,程序员必须确保任务执行是同步的,以适应数据依赖性。
  5. 测试与调试:当一个程序并行运行于多核时,许多不同的执行路径是可能的。测试与调试这样的并发程序比测试和调试单线程的应用程序自然更加困难。

由于这些挑战,许多软件开发人员认为,多核系统的出现将需要一个全新方法来设计未来软件系统。同样,许多计算机科学教育者也认为:软件开发课程应当强调平行编程。

并行类型

  • 数据并行(data parallelism)
  • 数据并行注重将数据分布于多个计算核上,并在每个核上执行相同操作。例如,考虑一下对大小为 N 的数组的内容进行求和。对于单核系统,一个线程只能简单相加元素 [0][N-1]。不过,对于双核系统,线程 A 运行在核 0 上,相加元素 [0][N/2-1];而线程 B,运行在核 1 上,相加元素 [N/2][N-1]。这两个线程可并行运行在各自的计算核上。
  • 任务并行(task parallelism)
  • 任务并行涉及将任务(线程)而不是数据分配到多个计算核。每个线程都执行一个独特的操作。不同线程可以操作相同的数据,或者也可以操作不同的数据。再考虑刚才的例子。与那个情况相反,一个并行任务的例子可能涉及两个线程,每个线程对元素数组执行一个唯一的统计操作。再次,线程在单独计算核上并行操作,但是每个执行一个独特操作。
  • 从根本上说,数据并行涉及分布数据到多个核,而任务并行分布多个任务到多个核。然而,在实践中,应用程序很少严格遵循数据或任务并行。在大多数情况下,应用程序混合使用这两个策略。

并行的两个重要定律

  • Amdahl定律(阿尔达尔定律)

Amdahl定律定义了串行系统并行化后的加速比的计算公式和理论上限,就是将一个串行系统改造成并行系统后,或者增加多个CPU之后,系统执行速度提升有多少。

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

总结:增加CPU处理器的数量并不一定能起到有效的作用,合理增加并行处理器数量,才能以最小的投入,得到最大的加速比。

  • Gustafson定律(古斯塔夫森)

Gustafson定律主要说明处理器个数,串行比例和加速比之间的关系。

Gustafson定律假设优化后的的执行时间为:a+b。其中a为串行执行时间、b为并行执行时间,那么优化前的执行时间为:a+nb。其中n为CPU的个数,有n个CPU,那么并行所耗时间就需要递增n倍。

只要有足够的并行化,那么加速比和CPU个数成正比

Amdahl定律和Gustafson定律说明加速比的角度是不同的,Amdahl定律说明光增加CPU的个数是没有意义的,还必须增加串行化比例才行。而Gustafson定律说明如果串行化比例一定的情况下,增加CPU,那么系统的性能就会提升。总的来说,如果系统通过多核CPU、并行化处理来提升性能的话,需要做两件事情:控制好串行化和CPU个数。

多核cpu应用场景_操作系统基础11-关于多核编程相关推荐

  1. 多核cpu应用场景_【喷】让我们来看看《战地3》多核CPU执行效率的优化有多烂...

    本帖最后由 webguest 于 2011-11-9 23:28 编辑 经过测试对比 战地3中 不光是CPU有瓶颈   6900系列A卡驱动交火有问题  特别是高中低效果帧数比单卡还差 最高效果帧数还 ...

  2. 多核cpu应用场景_多核?高频?不同需求哪种CPU最适合自己呢?

    原标题:多核?高频?不同需求哪种CPU最适合自己呢? [PConline 杂谈]如今的办公场景中,混杂着各种各样的应用:文档处理,网页浏览,多媒体编辑.人们装机来办公,茶余饭后时间可能还想玩几局游戏放 ...

  3. 多核cpu应用场景_你就和说我CPU多核有什么用?

    刚刚去看来AMD的官网,我看到了它图片来自:AMD官网 这是锐龙3950X!!! 这个应该是3000系列中最强的CPU了吧,我也发现到它有32个核心和64线程. 突然先看看自己的小笔记本用的是什么?图 ...

  4. 超线程cpu的寄存器_操作系统之CPU知识扫盲

    前言 CPU的英文全称是(Central Processing Unit),中文意思翻译中央处理器,是计算机的主要设备之一,功能主要是解释计算机指令以及处理计算机软件中的数据.计算机的可编程性主要是指 ...

  5. 生产者和消费者代码———操作系统_操作系统基础15-生产者消费者问题

    在上一篇操作系统基础14提到通过信号量解决生产者消费者问题.本篇来详细说说操作系统中的经典问题-生成者消费者问题 生产者消费者问题 (Producer-consumer problem) 该问题是一个 ...

  6. 模拟进程创建、终止、阻塞、唤醒原语_操作系统基础8-进程及进程控制

    进程(Process) 的定义 从不同的角度,进程可以有不同的定义,传统典型的定义: 进程是程序的一次执行过程. 或者:一个正在执行的程序的实例 进程是一个程序及其数据在处理机上顺序执行所发生的活动 ...

  7. java编程好学么_零基础小白学Java编程好学吗

    Java是一门不会衰落的开发语言,伴随着IT行业的兴起,目前学习java培训的人员也是变得更多了,但要想学好java的话通过自学是没有那样非常容易的事情.尤其是对于初学者的学生而言,那么零基础小白学J ...

  8. 多核cpu应用场景_2019电脑CPU怎么选_多核cpu和单核的区别|哪个好-太平洋电脑网...

    [PConline 杂谈]如今的办公场景中,混杂着各种各样的应用:文档处理,网页浏览,多媒体编辑.人们装机来办公,茶余饭后时间可能还想玩几局游戏放松放松,最起码的要求就是"流畅不卡" ...

  9. 多核cpu应用场景_CPU占用100%!PC卡顿原来可以这么解决:多场景多任务也流畅

    现代生活里,不论是工作还是生活,多开软件和处理事务可以说都是家常便饭的事情. 一边玩着醉心已久的游戏,一边解压着新的电影和游戏:为了查询资料,一不小心打开了数十个网页: 复杂繁重的工作铸就了动辄上百兆 ...

最新文章

  1. 在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合
  2. Intellij IDEA中使用Protobuf的正确姿势
  3. 如何拯救收录直线下滑的网站?
  4. 【PM模块】技术对象管理
  5. 操作系统与存储:解析Linux内核全新异步IO引擎io_uring设计与实现
  6. Pipelines - .NET中的新IO API指引(二)
  7. VMware的屏幕太小
  8. osip2 代码分析
  9. CentOS 7 安装OpenOffice并实现WordToPDF(Java调用)
  10. 【优化运行】基于matlab多目标粒子群算法求解冷热电联供综合能源系统运行优化问题【含Matlab源码 1747期】
  11. android 图片去色,android替图片去色,返回灰度图片
  12. arduino与肌电信号(传感器)的碰撞② 2021 7 20
  13. linux 虚拟示波器,模拟示波器怎么看频率,模拟示波器频率计算
  14. ie浏览器打不开oracle,小编教你解决ie浏览器打不开的方法
  15. leetcode 刷题录
  16. 几何校正(坐标变换+灰度重采样)
  17. 钱晓捷第五版习题4 题4.8 bufx bufy bufz 为三个有符号十六进制数编写一个比较相等关系的程序如果这三个数都不相等则显示0,其中两个相等显示1 ,三个都相等则显示2
  18. weka,FP,priori
  19. c语言错误c2059 void,c2059(c语言错误代码c2059)
  20. EasyExcel 读取excel表 解决Empty row EasyExcel末尾出现非常多空白行跳过 EasyExcel跳过末尾空白行

热门文章

  1. PHP的display_errors与error_reporting
  2. java冗余_Java使用lombok消除冗余代码的方法步骤
  3. tp5 ajax 返回数据正常状态码却为500
  4. 计算机网络 闯关,2009计算机网络考研试题过关必练.docx
  5. PHP实现归治算法,PHP排序算法系列之归并排序详解
  6. 蓝桥杯单片机十一届省赛_“第十届蓝桥杯青少组C++省赛”前三题解题思路及参考答案!...
  7. linux ssh rpm包,RHEL6(CentOS6)中使用源码包编译生成RPM的基本方法:升级OpenSSH篇
  8. goland go test 多个文件_这个代码怎么会编译不通过?Goland 新手常见问题解决:GOPATH 和 Go Modules 编译不成功...
  9. go byte转uint_面试官问我go反射,我怀疑他让我写ORM框架
  10. 中的挂起是什么意思_客厅适合挂什么字画 要想有品位就挂这样的