多核心处理器知识与最大加速比计算方法-多处理器编译_风去沙来的博客-程序员ITS301_如何计算使用无限个处理器的最大加速是几倍

技术标签: linux线程与进程  

/*********************************************************************
 * Author  : Samson
 * Date    : 03/10/2014
 * Test platform:
 *              Linux ubuntu 3.2.0-58-generic-pae
 *              GNU bash, version 4.2.39
 * *******************************************************************/

SMP(Symmetric Multi-Processing),对称多处理结构的简称,是指在一个计算机上汇集了一组处理器(多CPU),各CPU之间共享内存子系统以及总线结构。在这种技术的支持下,一个服务器系统可以同时运行多个处理器,并共享内存和其他的主机资源。多处理器的结构都是一样的。SMP结构的意思是每一个多核心都是平等的,没有master-slave关系在多核处理器间存在。


Asymmetric multiprocessing,缩写为AMP,ASMP,非对称多处理器,也译为非对称多重处理、非均衡多元处理,一种多元处理的架构。在这种架构下,存在多个处理器;每个中央处理器在某个特定时间内,被指定一个特定的任务去执行。

    多核处理器也称为片上多处理器(chip multi-processor,CMP),或单芯片多处理器。
    多核处理器将多个完全功能的核心集成在同一个芯片内,整个芯片作为一个统一的结构对外提供服务,输出性能。多核处理器首先通过集成多个单线程处理核心或者 集成多个同时多线程处理核心,使得整个处理器可同时执行的线程数或任务数是单处理器的数倍,这极大地提升了处理器的并行性能。其次,多个核集成在片内,极 大地缩短了核间的互连线,核间通信延迟变低,提高了通信效率,数据传输带宽也得到提高。再者,多核结构有效共享资源,片上资源的利用率得到了提高,功耗也 随着器件的减少得到了降低。最后,多核结构简单,易于优化设计,扩展性强。这些优势最终推动了多核的发展并逐渐取代单处理器成为主流。

  由于多核内部有多个核心,那么就存在任务分配、调度、仲裁以及平衡负载等问题,多核之间的任务调度是充分利用多处理器性能的关键。现有的操作系统还无法 有效地支持多核处理器的任务运行。为满足实时处理的要求,均衡各处理器负载,任务调度机制需要研究的内容有设计和优化分布式实时任务调度算法、动态任务迁 移技术等。当前关于多核的任务调度算法主要有全局队列调度、局部队列调度和共生队列调度算法。全局队列调度是操作系统维护一个全局的任务等待队列,当系 统中有一个CPU核心空闲时,操作系统便从全局任务等待队列中选取就绪任务并开始在此核心上执行,它的优点是CPU核心利用率较高。局部队列调度足指操作 系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,局部队列调度的优点 是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部缓存命中率,缺点是CPU利用率太低。共生调度方法的基本思想是将访问共享资源较多的 任务和访问共享资源较少的任务调度到同一时刻执行,从而最大程度上减少资源冲突。目前,多数多核的操作系统采用了基于全局队列的任务调度算法。
    
  多核软件应用开发
  多核处理器在利用多个核心的并行执行能力来提高处理器运算性能的同时,也给软件开发者带来了麻烦。当前的困境是众多应用并没有利用多核的性能潜力, 多核的性能优势没有体现。这主要有两个原因:一方面并行编程复杂,没有一个易于程序员编写并行程序的编程工具和环境;另一方面一些应用的线程级加速潜力有限。
 并行编程困难的问题从并行计算机产生以来就存在,只是随着多核的主流化,问题更加突出了。多核系统下的并行编程,主要是开发多核 的线程级并行性,但是已有的并行编程模式、编程语言不能完全适合多核环境,不能将多核的多线程并行潜力完全发挥出来,例如OpenMP、MPI、并行C 等。因此,针对多核环境下对并行编程应用的要求,许多研究机构和公司一方面对现有的并行编程模型和编程语言进行修改和改进,例如改进支持共享存储结构的 OpenMP、OpenMP+MPI的混合编程模型、PThread多线程编程模型;另外一方面,在资金项目的支持和市场的推动下,各类研究机构也正在积 极研制开发新一代的并行编程模型和并行编程语言,例如事务存储编程模型、Intel公司的Ct编程模型、IBM公司的X10语言、SUN公司的 Fortress语言、Cray公司的Chapel语言等。
  另外一方面,多数应用的并行加速潜力有限是因为当前在实际应用中,可供程 序员迅速开发出来的程序还是单线程的,同时多数应用也是用C或C++编写的,它们一直被设计为单线程,而单线程程序中所能开发和利用的并行性始终是有限 的。所以对于这些应用,要么重新编写并行代码,要么研发面向多核结构的自动并行化工具,使得这些应用能在多核处理器系统中高效应用。


Amdahl定律:
    完成复杂工作可获得的加速比是有限的,受限于这个工作中必须被串行执行的部分。
工作的加速比S定义为由一个处理器来完成一项工作的时间(用挂钟时间来计算)与采用n个处理器并发完成该工作的时间之比。Amdahl定律给出了用n个处理器协同完成一个应用时可获得的最大加速比S,其中P是该应用中可以并行执行的部分。为简单起见,假设由一个处理器完成整个应用需用1个单位的时间。使用n个处理器并发执行应用中的并行部分需用时p/n,应用中串行部分的执行时间为1-P。因此,并行化以后的计算时间为:1- P + P/n ;
    按照Amdahl定律所给出的加速比定义,得到S=1/(1-p+p/n)
    假定有5个房间,每个小房间是1个单位,唯一的大房间是2个单位,5人每人一间进行粉刷。每个房间指定一个人(处理器)粉刷意味着6个单位中的5个可以并行粉刷,即p=5/6,1-p=1/6。由Amdahl定律可得加速比为:
S=1/(1-p+p/n)=1/(1/6+1/6)=3,由此可知,若有一间房间的大小是其他房间的2倍,那么5个人同时粉刷房屋的加速比仅仅是一个人粉刷的3倍。
若10个人分别刷10间房间,其中一间房间是其他房间的2倍,情况将变得更糟。S=1/(1/11+1/11)=5.5,可以看出,仅仅微小的失衡就使10个人粉刷房屋只能获得5倍速多的加速比。


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yygydjkthh/article/details/20936435

智能推荐

小波包分解与重构_Alex龙雅的博客-程序员ITS301_小波包重构

1、小波变换的理解傅里叶变换——短时傅里叶变换——小波变换。参考文献:以下两篇参考资料讲述得十分清楚,有助于理解小波变换。但具体的数学角度阐述,请参考其他资料。(1)知乎专栏:形象易懂讲解算法I——小波变换https://zhuanlan.zhihu.com/p/22450818(2)知乎专栏:傅里叶分析之掐死教程。https://zhuanlan.zhihu.com/p/197633582、小波包分解小波包是为了克服小波分解在高频段的频率分辨率较差,而在低频段的时间分辨

闭环系统的零极点图判定稳定性_《自动控制原理》课后习题答案.doc_蛋挞小可爱的博客-程序员ITS301

第五章 线性系统的频域分析与校正习题与解答5-1 试求题5-75图(a)、(b)网络的频率特性。(a) (b)图5-75 R-C网络解 (a)依图:(b)依图:5-2 某系统结构图如题5-76图所示,试根据频率特性的物理意义,求下列输入信号作用时,系统的稳态输出和稳态误差(1)(2)解 系统闭环传递函数为: ...

Spring Boot干货系列:(一)优雅的入门篇_大隐隐于野的博客-程序员ITS301

前言Spring一直是很火的一个开源框架,在过去的一段时间里,Spring Boot在社区中热度一直很高,所以决定花时间来了解和学习,为自己做技术储备。正文首先声明,Spring Boot不是一门新技术,所以不用紧张。从本质上来说,Spring Boot就是Spring,它做了那些没有它你也会去做的Spring Bean配置。它使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一...

针对lab5的优化_qq_43577590的博客-程序员ITS301

在经过反复修改轨道系统代码,发现关键的一点,一个好的hashcode可以大大提高hashMap的性能。比如我重写了Track的hashcode大大提高了我创建行星系统的速度。可以直接用eclipse自带的重写hashcode和equals的方法在Source->Generate hashcode and equals...

图像超分辨率重建原理学习_阿委困的不能行的博客-程序员ITS301_图像超分辨率重建原理

原文链接:https://blog.csdn.net/gwplovekimi/article/details/83041627目录超分辨率(Super Resolution,SR)传统的图像超分辨率重建技术简介基于插值的图像超分基于重建的图像超分辨率基于学习的图像超分辨率基于深度学习的图像超分辨率重建技术两种常用的评价超分的指标——PSNR和SSIMSRCNN(Super-Res...

程序员面试宝典之数据结构基础-----③单链表的插入_albert_crazyer的博客-程序员ITS301_程序员链表插入

单链表的插入,注意分三种情况,插入到头部前,插入到尾部后,其他。仍然是细节决定成败。。。#include #include #include using namespace std;//notice the define of struct, the node is not a variable,it is the name of the struct.so it ca

随便推点

九、GObject信号机制--信号Accumulator_李尔阳的博客-程序员ITS301_g_gnuc_unused

1 类设计/* file name : signal-demo.h */#ifndef SIGNAL_DEMO_H#define SIGNAL_DEMO_H#include <glib-object.h>#define SIGNAL_TYPE_DEMO (signal_demo_get_type ())#define SIGNAL_DEMO(object) \ G_TYPE_CHECK_INSTANCE_CAST ((object), SIGNAL_TYPE_DE

把这304道React的面试题刷完,前端面试没有在怕的!_1024小神的博客-程序员ITS301

Core React 什么是 React? React 是一个开源前端 JavaScript 库,用于构建用户界面,尤其是单页应用程序。它用于处理网页和移动应用程序的视图层。React 是由 Facebook 的软件工程师 Jordan Walke 创建的。在 2011 年 React 应用首次被部署到 Facebook 的信息流中,之后于 2012 年被应用到 Instag...

iOS之Bugly上传符号表_骑着猪狂飙的博客-程序员ITS301_bugly符号表上传

前提条件:Mac中需要先安装java环境,只支持jdk1.8.0,终端输入:java -version 看看版本号是多少1.在bugly官网下载符号表上传工具2.桌面新建一个文件夹名字可以随便起,将其下载的符号表工具中的jar放入该文件夹下, 我这边文件名是appdsym3.在Xcode->Window->Organizer里面寻找到打包好的文件,右键显示包内容,在dSYMs文件夹里面找到工程的dSYM文件,拷贝复制到文件夹appdsym里面4.终端...

ZooKeeper查看事务日志_Dongguabai的博客-程序员ITS301

zoo.cfg中可以通过dataLogDir来配置zookeeper的事务日志的输出目录。但是这些日志文件是二进制的,无法通过普通的查看名单看。需要通过org.apache.zookeeper.server.LogFormatter。 命令如下:java -cp :/usr/local/zookeeper/zookeeper/lib/slf4j-api-1.6.1.jar:/usr/lo...

kotlin @JvmStatic 和 @JvmField_NCTU_to_prove_safety的博客-程序员ITS301_kotlin.jvm.jvmfield

两个注解都是与java互操作相关。原代码:class AnnotationTest{ companion object { var name:String = "" }}对应的java代码:public final class AnnotationTest { @NotNull private static String name...

linu修改open files无效_不越狱修改运动步数,安卓苹果手机通用_weixin_39725365的博客-程序员ITS301

生命在于运动,在当下社交软件流行的今天,衡量运动的指标是什么?当然就是运动所产生的步数了,微信运动排行需要、支付宝蚂蚁森林需要、QQ运动也需要,可是学习任务繁重、工作忙碌的我们,想在app上产生点运动步数太难了,怎么办?下面教小伙伴们手机不用越狱,安全有效的修改运动步数的方法,安卓苹果手机通用,从此,我也可以愉快的种树、刷运动排行榜了。下面就以苹果系统进行讲解,安卓操作方法基本相同,大家...

推荐文章

热门文章

相关标签