一分钟看懂CPU多发射超标量、多线程、多核之概念和区别

一分钟看懂CPU多发射超标量、多线程、多核之概念和区别
一分钟看懂CPU多发射超标量、多线程、多核之概念和区别

【闲来无事、做做科普、反正也算是marketing job;教你一分钟看懂CPU多发射超标量/多线程/多核之概念和区别】最近在多个场合大肆宣扬多核多线程,收到对多线程表示不解的问题n多,苦思多日,终得一形象生动的模型,你肯定懂的。

因为是比喻和科普、过于严谨的技术控请勿吐槽。

处理器性能提高之公开秘笈:超标量、多线程、多核。

用于说明的生活模型:高速公路及收费站。

简单CPU的原型:单车道马路 + 单收费闸口,车辆只能一辆辆排队通过,并行度为1。

为了提高通行能力同时积极创收,相关部门运用世界顶尖CPU设计理念,对高速公路系统进行了如下拓宽改造:

(1)增加车道(图示为3条车道);

(2)增加收费通道(图示为2个通道);

(3)每个收费通道放置多个收费员(图示每条通道有a和b两个收费窗口)。

其中(1)+(3)组合手段就是所谓的超标量结构,该图示为双发射超标量。超标量指有多个车道,双发射是指有a和b两位收费员可以同时发卡,把两辆车送到不同车道上去。

手段(2)就是多线程的模型了,原有车道不变、只增加收费通道,这样多个车流来的时候可以同时发卡放行。

从这个比喻来看多线程显然是个非常直观和有用的办法,但为什么在CPU世界中似乎有点模糊难懂的感觉呢?那是因为CPU的指令流喜欢一个挨一个、一列纵队龟速前进,这样的话单通道多收费员还起点作用、多通道就形同虚设了。收费员1.a和1.b会累死,而2.a和2.b则能够睡觉。因此把车流进行整队就很重要——这就是并行编程,即要设法把一列纵队排列成多列纵队。

至于多核的概念,那就简单粗暴很多了,直接在这条马路边上进行征地拆迁、新修一条一模一样的高速公路便是,牛吧。现在大家手机里面的多核,就是并排几条“单收费通道+多车道”的马路,车流稀少、路况不错,不过相关部门表示因为道路利用率底下、经济效益欠佳、回收投资压力巨大。

无论多核还是多线程,都有一个同样的问题需要解决,就是要把车流整成多列纵队,这样多条马路和多个收费通道的并行度才能发挥作用。

多核与多线程技术的区别到底在哪里

多核与多线程技术的区别到底在哪里? 【导读】:毫无疑问的,“多核”、“多线程”此二词已快成为当今处理器架构设计中的两大显学,如同历史战国时代以“儒”、“墨”两大派的显学,只不过当年两大治世思想学派是争得你死我亡,而多核、多线程则是相互兼容并蓄,今日几乎任何处理器都朝同时具有多核多线程的路线发展迈进。毫无疑问的,“多核”、“多线程”此二词已快成为当今处理器架构设计中的两大显学,如同历史战国时代以“儒”、“墨”两大派的显学,只不过当年两大治世思想学派是争得你死我亡,而多核、多线程则是相互兼容并蓄,今日几乎任何处理器都朝同时具有多核多线程的路线发展迈进。 虽然两词到处可见,但可有人知此二者的实际差异?在执行设计时又是以何者为重?到底是该多核优先还是多线程提前?关于此似乎大家都想进一步了解,本文以下试图对此进行个中差异的解说,并尽可能在不涉及实际复杂细节的情形下,让各位对两者的机制观念与差别性有所理解。 行程早于线程 若依据信息技术的发展历程,在软件程序执行时的再细分、再切割的小型化单位上,先是有行程(Process),之后才有线程(Thread),线程的单位比行程更小,一个行程内可以有多个线程,在一个行程下的各线程,都是共享同一个行程所建立的内存寻址资源及内存管理机制,包括执行权阶、内存空间、堆栈位置等,除此之外各个线程自身仅拥有少许因为执行之需的变量自属性,其余都依据与遵行行程所设立的规定。 相对的,程序与程序之间所用的就是不同的内存设定,包括分页、分段等起始地址的不同,执行权阶的不同,堆栈深度的不同等,一颗处理器若执行了A行程后要改去执行B行程,对此必须进行内存管理组态的搬迁、变更,而这个搬迁若是在处理器内还好,若是在高速缓存甚至是系统主存储器时,此种切换、转移程序对执行效能的损伤就非常大,因为完成搬迁、切换程序的相同时间,处理器早就可以执行数十到上千个指令。 两种路线的加速思维 所以,想避免此种切换的效率损耗,可以从两种角度去思考,第一种思考就是扩大到整体运算系统的层面来解决,在一部计算机内设计、配置更多颗的处理器,然后由同一个操作系统同时掌控及管理多颗处理器,并将要执行的程序的各个程序,一个程序喂(也称:发派)给一颗处理器去执行,如此多颗同时执行,每颗处理器执行一个程序,如此就可以加快整体的执行效率。 当然!这种加速方式必须有一个先决条件,即是操作系统在编译时就必须能管控、发挥及运用多行程技术,倘若以单行程的系统组态来编译,那么操作系统就无法管控服务器内一颗以上的处理器,如此就不用去谈论由操作系统负责让应用程序的程序进行同时的多颗同时性的执行派送。 即便操作系统支持多程序,而应用程序若依旧只支持单程序,那情形一样是白搭,操作

多核处理器

多核处理器 多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。多核技术的开发源于工程师们认识到,仅仅提高单核芯片的速度会产生过多热量且无法带来相应的性能改善,先前的处理器产品就是如此。他们认识到,在先前产品中以那种速率,处理器产生的热量很快会超过太阳表面。即便是没有热量问题,其性价比也令人难以接受,速度稍快的处理器价格要高很多。 最新新闻 中国发布全球首款全系统多核高精度导航定位芯片 全球首款全系统多核高精度导航定位系统级芯片,13日在第六届中国卫星[2.10% 资金研报]学术年会期间对外发布。专家表示,这意味着国产芯片不仅具备国际竞争力,还从“跟踪者”跃升为“引领者”。...详情 内容来自 中文名多核处理器 定义集成两个或多个完整的计算引擎 第一颗通用型微处理器4004 技术优势采用了线程级并行编程 目录 1技术发展 2发展历程 3技术优势 4技术瓶颈 5技术原理 6技术关键 ?核结构研究 ?程序执行模型 ?Cache设计 ?核间通信技术 ?总线设计 ?操作系统设计 ?低功耗设计 ?存储器墙 ?可靠性及安全性设计 7技术意义 8技术种类 9技术应用 10应用 11英特尔 1技术发展 256线程的CPU 256线程的CPU 英特尔工程师们开发了多核芯片,使之满足“横向扩展”(而非“纵向扩充”)方法,从而提高性能。该架构实现了“分治法”战略。通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。多核处理器是单枚芯片(也称为“硅核”),能够直

接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将每个执行内核作为分立的逻辑处理器。通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。多核架构能够使软件更出色地运行,并创建一个促进未来的软件编写更趋完善的架构。尽管认真的软件厂商还在探索全新的软件并发处理模式,但是,随着向多核处理器的移植,现有软件无需被修改就可支持多核平台。操作系统专为充分利用多个处理器而设计,且无需修改就可运行。为了充分利用多核技术,应用开发人员需要在程序设计中融入更多思路,但设计流程与对称多处理(SMP)系统的设计流程相同,并且现有的单线程应用也将继续运行。得益于线程技术的应用在多核处理器上运行时将显示出卓越的性能可扩充性。此类软件包括多媒体应用(内容创建、,以及本地和数据流回放)、工程和其他技术计算应用以及诸如应用服务器和数据库等中间非标轴承https://www.360docs.net/doc/5112334157.html,层与后层服务器应用。多核技术能够使服务器并行处理任务,而在以前,这可能需要使用多个处理器,多核系统更易于扩充,并且能够在更纤巧的外形中融入更强大的处理性能,这种外形所用的功耗更低、计算功耗产生的热量更少。多核技术是处理器发展的必然。推动微处理器性能不断提高的因素主要有两个:半导体工艺技术的飞速进步和体系结构的不断发展。半导体工艺技术的每一次进步都为微处理器体系结构的研究提出了新的问题,开辟了新的领域;体系结构的进展又在半导体工艺技术发展的基础上进一步提高了微处理器的性能。这两个因素是相互影响,相互促进的。一般说来,工艺和电路技术的发展使得处理器性能提高约20倍,体系结构的发展使得处理器性能提高约4倍,编译技术的发展使得处理器性能提高约1.4倍。但是今天,这种规律性的东西却很难维持。多核的出现是技术发展和应用需求的必然产物。 2发展历程 1971年,英特尔推出的全球第一颗通用型微处理器4004,由2300个晶体管构成。当时,公司的联合创始人之一戈登摩尔(Gordon Moore),就提出后来被业界奉为信条的“摩尔定律”——每过18个月,芯片上可以集成的晶体管数目将增加一倍。 在一块芯片上集成的晶体管数目越多,意味着运算速度即主频就更快。今天英特尔的奔腾(Pentium)四至尊版840处理器,晶体管数量已经增加至2.5亿个,相比当年的4004增加了10万倍。其主频也从最初的740kHz(每秒钟可进行74万次运算),增长到现在的3.9GHz(每秒钟运算39亿次)以上。 当然,CPU主频的提高,或许在一定程度上也要归功于1975年进入这个领域的AMD公司的挑战。正是这样的“双雄会”,使得众多计算机用户有机会享受不断上演的“速度与激情”。一些仍不满足的发烧友甚至选择了自己超频,因为在玩很多游戏时,更快的速度可以带来额外的饕餮享受。 但到了2005年,当主频接近4GHz时,英特尔和AMD发现,速度也会遇到自己的极限:那就是单纯的主频提升,已经无法明显提升系统整体性能。 以英特尔发布的采用NetBurst架构的奔腾四CPU为例,它包括Willamette、Northwood和Prescott等三种采用不同核心的产品。利用冗长的运算流水线,即增加每个时钟周期同时执行的运算个数,就达到较高的主频。这三种处理器的最高频率,分别达到了2.0G、3.4G和3.8G。 按照当时的预测,奔腾四在该架构下,最终可以把主频提高到10GHz。但由于流水线过长,使得单位频率效能低下,加上由于缓存的增加和漏电流控制不利造成功耗大幅度增加,3.6GHz奔腾四芯片在性能上反而还不如早些时推出的3.4GHz产品。所以,Prescott产品系列只达到3.8G,就戛然而止。 英特尔上海公司一位工程师在接受记者采访时表示,Netburst微架构的好处在于方便提升频率,可以让产品的主频非常高。但性能提升并不明显,频率提高50%,性能提升可能微不

多线程编程的原则及要点

2.4多线程编程的原则及要点: 随着多核CPU的出世,多核编程方面的问题将摆上了程序员的日程,有许多老的程序员以为早就有多CPU的机器,业界在多CPU机器上的编程已经积累了很多经验,多核CPU上的编程应该差不多,只要借鉴以前的多任务编程、并行编程和并行算法方面的经验就足够了。 但是,多核机器和以前的多CPU机器有很大的不同,以前的多CPU机器都是用在特定领域,比如服务器,或者一些可以进行大型并行计算的领域,这些领域很容易发挥出多CPU的优势,而现在多核机器则是应用到普通用户的各个层面,特别是客户端机器要使用多核CPU,而很多客户端软件要想发挥出多核的并行优势恐怕没有服务器和可以进行大型并行计算的特定领域简单。 多核CPU中,要很好地发挥出多个CPU的性能的话,必须保证分配到各个CPU上的任务有一个很好的负载平衡。否则一些CPU在运行,另外一些CPU处于空闲,无法发挥出多核CPU 的优势来。 要实现一个好的负载平衡通常有两种方案,一种是静态负载平衡,另外一种是动态负载平衡。 1、静态负载平衡 静态负载平衡中,需要人工将程序分割成多个可并行执行的部分,并且要保证分割成的各个部分能够均衡地分布到各个CPU上运行,也就是说工作量要在多个任务间进行均匀的分配,使得达到高的加速系数。 2、动态负载平衡 动态负载平衡是在程序的运行过程中来进行任务的分配达到负载平衡的目的。实际情况中存在许多不能由静态负载平衡解决的问题,比如一个大的循环中,循环的次数是由外部输入的,事先并不知道循环的次数,此时采用静态负载平衡划分策略就很难实现负载平衡。 动态负载平衡中对任务的调度一般是由系统来实现的,程序员通常只能选择动态平衡的调度策略,不能修改调度策略,由于实际任务中存在很多的不确定因素,调度算法无法做得很优,因此动态负载平衡有时可能达不到既定的负载平衡要求。 3、负载平衡的难题在那里? 负载平衡的难题并不在于负载平衡的程度要达到多少,因为即使在各个CPU上分配的任务执行时间存在一些差距,但是随着CPU核数的增多总能让总的执行时间下降,从而使加速系数随CPU核数的增加而增加。 负载平衡的困难之处在于程序中的可并行执行块很多要靠程序员来划分,当然CPU核数较少时,比如双核或4核,这种划分并不是很困难。但随着核数的增加,划分的粒度将变得越来越细,到了16核以上时,估计程序员要为如何划分任务而抓狂。比如一段顺序执行的代码,放到128核的CPU上运行,要手工划分成128 个任务,其划分的难度可想而知。

操作系统对多核处理器的支持方法

随着多核处理器的发展,对软件开发有非常大的影响,而且核心的瓶颈在软件上。软件开发在多核环境下的核心是多线程开发。这个多线程不仅代表了软件实现上多线程,要求在硬件上也采用多线程技术。可以说多核提供了可以大幅提升性能的机制,多核软件就是可以真正利用这一特点的策略。只有与多核硬件相适应的软件,才能真正地发挥多核的性能。多核对软件的要求包括对多核操作系统的要求和对应用软件的要求。 多核操作系统的关注点在于进程的分配和调度。进程的分配将进程分配到合理的物理核上,因为不同的核在共享性和历史运行情况都是不同的。有的物理核能够共享二级cache,而有的却是独立的。如果将有数据共享的进程分配给有共享二级cache的核上,将大大提升性能;反之,就有可能影响性能。进程调度会涉及到比较广泛的问题,比如负载均衡、实时性等。 面向多核体系结构的操作系统调度目前多核软件的一个热点,其中研究的热点主要有下面几方面:程序的并行研究;多进程的时间相关性研究;任务的分配与调度;缓存的错误共享;一致性访问研究;进程间通信;多处理器核内部资源竞争等等。这些探讨相互独立又相互依赖。考虑一个系统的性能时必须将其中的几点同时加以考虑,有时候对一些点的优化会造成另一些点的性能下降,需要用程序进行性能优化评测,所以合适的多核系统软件方案正在形成过程中。 任务的分配是多核时代提出的新概念。在单核时代,没有核的任务分配的问题,一共只有一个核的资源可被使用。而在多核体系下,有多个核可以被使用。如果系统中有几个进程需要分配,是将他们均匀地分配到各个处理器核,还是一起分配到一个处理器核,或是按照一定的算法进行分配。并且这个分配还受底层系统结构的影响,系统是SMP构架还是CMP构架,在CMP构架中会共享二级缓存的核的数量,这是影响分配算法的因子。任务分配结束后,需要考虑任务调度。对于不同的核,每个处理器核可以有自己独立的调度算法来执行不同的任务(实时任务或者交互性任务),也可以使用一致的调度算法。此外,还可以考虑一个进程上一个时间运行在一个核上,下一个时间片是选择继续运行在这个核上,还是进行线程迁移;怎样直接调度实时任务和普通任务;系统的核资源是否要进行负载均衡等等。任务调度是目前研究的热点之一。 在单核处理器中,常见的调度策略有先到先服务(FCFS),最短作业调度(SJF),优先级调度(Priority-scheduling algorithm),轮转法调度(round-robin RR),多级队列调度(multilevel queue-schedule algorithm)等。例如在Linux操作系统中对实时任务采取FCFS和RR两种调度,普通任务调度采取优先级调度。 对于多核处理器系统的调度,目前还没有明确的标准与规范。由于系统有多个处理器核可用,必须进行负载分配,有可能为每个处理器核提供单独的队列。在这种情况下,一个具有空队列的处理器就会空闲,而另一个处理器会很忙。所以如何处理好负载均衡问题是这种调度策略的关键问题所在。为了解决这种情况,可以考虑共同就绪队列,所有处理器公用一个就绪队列。但是这无疑对进程上下文切换、锁的转换增加了执行时间,降低了性能。另外一种想法就是选择一个处理器来为其他处理器调度,因而创建了主从结构。有的系统将主从结构作进一步扩

多核处理器的优点和缺点

三、多核处理器的优点和缺点 从应用需求上去看,越来越多的用户在使用过程中都会涉及到多任务应用环境,日常应用中用到的非常典型的有两种应用模式。 一种应用模式是一个程序采用了线程级并行编程,那么这个程序在运行时可以把并行的线程同时交付给两个核心分别处理,因而程序运行速度得到极大提高。这类程序有的是为多路工作站或服务器设计的专业程序,例如专业图像处理程序、非线视频编缉程序、动画制作程序或科学计算程序等。对于这类程序,两个物理核心和两颗处理器基本上是等价的,所以,这些程序往往可以不作任何改动就直接运行在双核电脑上。 还有一些更常见的日常应用程序,例如、等,同样也是采用线程级并行编程,可以在运行时同时调用多个线程协同工作,所以在双核处理器上的运行速度也会得到较大提升。例如,打开浏览器上网。看似简单的一个操作,实际上浏览器进程会调用代码解析、播放、多媒体播放、、脚本解析等一系列线程,这些线程可以并行地被双核处理器处理,因而运行速度大大加快(实际上浏览器的运行还涉及到许多进程级的交互通信,这里不再详述)。由此可见,对于已经采用并行编程的软件,不管是专业软件,还是日常应用软件,在多核处理器上的运行速度都会大大提高。 日常应用中的另一种模式是同时运行多个程序。许多程序没有采用并行编程,例如一些文件压缩软件、部分游戏软件等等。对于这些单线程的程序,单独运行在多核处理器上与单独运行在同样参数的单核处理器上没有明显的差别。但是,由于日常使用的最最基本的程序——操作系统——是支持并行处理的,所以,当在多核处理器上同时运行多个单线程程序的时候,操作系统会把多个程序的指令分别发送给多个核心,从而使得同时完成多个程序的速度大大加快。 另外,虽然单一的单线程程序无法体现出多核处理器的优势,但是多核处理器依然为程序设计者提供了一个很好的平台,使得他们可以通过对原有的单线程序进行并行设计优化,以实现更好的程序运行效果。 上面介绍了多核心处理器在软件上面的应用,但游戏其实也是软件的一种,作为一种特殊的软件,对发展作出了较大的贡献。一些多线程游戏已经能够发挥出多核处理器的优势,对于单线程游戏,相信游戏厂商也将会改变编程策略,例如,一些游戏厂商正在对原来的一些单线程游戏进行优化,采用并行编程使得游戏运行得更快。有的游戏可以使用一个线程实现人物动画,而使用另一个线程来载入地图信息。或者使用一个线程来实现图像渲染中的矩阵运算,而使用另一个来实现更高的人工智能运算。如今,大量的支持多核心的游戏涌现出来,从而使得多核处理器的优势能得到进一步的发挥。 但布赖恩特直言不讳地指出,要想让多核完全发挥效力,需要硬件业和软件业更多革命性的更新。其中,可编程性是多核处理器面临的最大问题。一旦核心多过八个,就需要执行程序能够并行处理。尽管在并行计算上,人类已经探索了超过年,但编写、调试、优化并行处理程序的能力还非常弱。 易观国际分析师李也认为,“出于技术的挑战,双核甚至多核处理器被强加给了产业,而产业却并没有事先做好准备”。或许正是出于对这种失衡的担心,中国国家智能计算机中心主任孙凝辉告诉《财经》记者,“十年以后,多核这条道路可能就到头了”。在他看来,一味增加并行的处理单元是行不通的。并行计算机的发展历史表明,并行粒度超过以后,程序就很难写,能做到个以上的应用程

多核处理器1

多核处理器 摘要: 多核处理器也称为片上多处理器(chip multi-processor,CMP),或单芯片多处理器。自1996年美国斯坦福大学首次提出片上多处理器(CMP)思想和首个多核结构原型,到2001年mM推出第一个商用多核处理器POWER4,再到2005年Intel和AMD多核处理器的大规模应用,最后到现在多核成为市场主流,多核处理器经历了十几年的发展。在这个过程中,多核处理器的应用范围已覆盖了多媒体计算、嵌入式设备、个人计算机、商用服务器和高性能计算机等众多领域,多核技术及其相关研究也迅速发展,比如多核结构设计方法、片上互连技术、可重构技术、下一代众核技术等。然而,多核处理器的技术并未成熟,多核的潜力尚未完全挖掘,仍然存在许多待研究的问题。 二.什么是多核处理器 2.1什么是多核处理器 多核处理器是指在一枚处理器中集成两个或多个完整的计算引擎(内核)。多核技术的开发源于工程师们认识到,仅仅提高单核芯片的速度会产生过多热量且无法带来相应的性能改善,先前的处理器产品就是如此。他们认识到,在先前产品中以那种速率,处理器产生的热量很快会超过太阳表面。即便是没有热量问题,其性价比也令人难以接受,速度稍快的处理器价格要高很多。英特尔工程师们开发了多核芯片,使之满足横向扩展(而非纵向扩充)方法,从而提高性能。该架构实现了分治法战略。通过划分任务,线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务。多核处理器是单枚芯片(也称为硅核),能够直接插入单一的处理器插槽中,但操作系统会利用所有相关的资源,将每个执行内核作为分立的逻辑处理器。通过在两个执行内核之间划分任务,多核处理器可在特定的时钟周期内执行更多任务。多核架构能够使软件更出色地运行,并创建一个促进未来的软件编写更趋完善的架构。尽管认真的软件厂商还在探索全新的软件并发处理模式,但是,随着向多核处理器的移植,现有软件无需被修改就可支持多核平台。操作系统专为充分利用多个处理器而设计,且无需修改就可运行。为了充分利用多核技术,应用开发人员需要在程序设计中融入更多思路,但设计流程与对称多处理(SMP)系统的设计流程相同,并且现有的单线程应用也将继续运行。得益于线程技术的应用在多核处理器上运行时将显示出卓越的性能可扩充性。此类软件包括多媒体应用(内容创建、编辑,以及本地和数据流回放)、工程和其他技术计算应用以及诸如应用服务器和数据库等中间层与后层服务器应用。多核技术能够使服务器并行处理任务,而在以前,这可能需要使用多个处理器,多核系统更易于扩充,并且能够在更纤巧的外形中融入更强大的处理性能,这种外形所用的功耗更低、计算功耗产生的热量更少。多核技术是处理器发展的必然。推动微处理器性能不断提高的因素主要有两个:半导体工艺技术的飞速进步和体系结构的不断发展。半导体工艺技术的每一次进步都为微处理器体系结构的研究提出了新的问题,开辟了新的领域;体系结构的进展又在半导体工艺技术发展的基础上进一步提高了微处理器的性能。这两个因素是相互影响,相互促进的。一般说来,工艺和电路技术的发展使得处理器性能提高约20倍,体系结构的发展使得处理器性能提高约4倍,编译技术的发展使得处理器性能提高约1.4倍。但是今天,这种规律性的东西却很难维

浅谈多核CPU、多线程与并行计算

0.前言 最近发觉自己博客转帖的太多,于是决定自己写一个原创的。笔者用过MPI 和C#线程池,参加过比赛,有所感受,将近一年来,对多线程编程兴趣一直不减,一直有所关注,决定写篇文章,算是对知识的总结吧。有说的不对的地方,欢迎各位大哥们指正:) 1.CPU发展趋势 核心数目依旧会越来越多,依据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的桌面PC有望在2017年末2018年初达到24核心(或者16核32线程),我们如何来面对这突如其来的核心数目的增加?编程也要与时俱进。笔者斗胆预测,CPU各个核心之间的片内总线将会采用4路组相连:),因为全相连太过复杂,单总线又不够给力。而且应该是非对称多核处理器,可能其中会混杂几个DSP处理器或流处理器。 2.多线程与并行计算的区别 (1)多线程的作用不只是用作并行计算,他还有很多很有益的作用。 还在单核时代,多线程就有很广泛的应用,这时候多线程大多用于降低阻塞(意思是类似于 while(1) { if(flag==1) break;

sleep(1); } 这样的代码)带来的CPU资源闲置,注意这里没有浪费CPU资源,去掉sleep(1)就是纯浪费了。 阻塞在什么时候发生呢?一般是等待IO操作(磁盘,数据库,网络等等)。此时如果单线程,CPU会干转不干实事(与本程序无关的事情都算不干实事,因为执行其他程序对我来说没意义),效率低下(针对这个程序而言),例如一个IO操作要耗时10毫秒,CPU就会被阻塞接近10毫秒,这是何等的浪费啊!要知道CPU是数着纳秒过日子的。 所以这种耗时的IO操作就用一个线程Thread去代为执行,创建这个线程的函数(代码)部分不会被IO操作阻塞,继续干这个程序中其他的事情,而不是干等待(或者去执行其他程序)。 同样在这个单核时代,多线程的这个消除阻塞的作用还可以叫做“并发”,这和并行是有着本质的不同的。并发是“伪并行”,看似并行,而实际上还是一个CPU在执行一切事物,只是切换的太快,我们没法察觉罢了。例如基于UI 的程序(俗话说就是图形界面),如果你点一个按钮触发的事件需要执行10秒钟,那么这个程序就会假死,因为程序在忙着执行,没空搭理用户的其他操作;而如果你把这个按钮触发的函数赋给一个线程,然后启动线程去执行,那么程序就不会假死,继续响应用户的其他操作。但是,随之而来的就是线程的互斥和同步、死锁等问题,详细见有关文献。 现在是多核时代了,这种线程的互斥和同步问题是更加严峻的,单核时代大都算并发,多核时代真的就大为不同,为什么呢?具体细节请参考有关文献。我

一分钟看懂CPU多发射超标量、多线程、多核之概念和区别

【闲来无事、做做科普、反正也算是marketing job;教你一分钟看懂CPU多发射超标量/多线程/多核之概念和区别】最近在多个场合大肆宣扬多核多线程,收到对多线程表示不解的问题n多,苦思多日,终得一形象生动的模型,你肯定懂的。 因为是比喻和科普、过于严谨的技术控请勿吐槽。 处理器性能提高之公开秘笈:超标量、多线程、多核。 用于说明的生活模型:高速公路及收费站。 简单CPU的原型:单车道马路 + 单收费闸口,车辆只能一辆辆排队通过,并行度为1。 为了提高通行能力同时积极创收,相关部门运用世界顶尖CPU设计理念,对高速公路系统进行了如下拓宽改造: (1)增加车道(图示为3条车道); (2)增加收费通道(图示为2个通道);

(3)每个收费通道放置多个收费员(图示每条通道有a和b两个收费窗口)。 其中(1)+(3)组合手段就是所谓的超标量结构,该图示为双发射超标量。超标量指有多个车道,双发射是指有a和b两位收费员可以同时发卡,把两辆车送到不同车道上去。 手段(2)就是多线程的模型了,原有车道不变、只增加收费通道,这样多个车流来的时候可以同时发卡放行。 从这个比喻来看多线程显然是个非常直观和有用的办法,但为什么在CPU世界中似乎有点模糊难懂的感觉呢?那是因为CPU的指令流喜欢一个挨一个、一列纵队龟速前进,这样的话单通道多收费员还起点作用、多通道就形同虚设了。收费员1.a和1.b会累死,而2.a和2.b则能够睡觉。因此把车流进行整队就很重要——这就是并行编程,即要设法把一列纵队排列成多列纵队。 至于多核的概念,那就简单粗暴很多了,直接在这条马路边上进行征地拆迁、新修一条一模一样的高速公路便是,牛吧。现在大家手机里面的多核,就是并排几条“单收费通道+多车道”的马路,车流稀少、路况不错,不过相关部门表示因为道路利用率底下、经济效益欠佳、回收投资压力巨大。 无论多核还是多线程,都有一个同样的问题需要解决,就是要把车流整成多列纵队,这样多条马路和多个收费通道的并行度才能发挥作用。

同步多线程-(SMT)-技术基础

同步多线程(SMT) 技术基础 介绍 微处理器设计的发展和我们对速度的需求,诞生了很多新技术并使它们迅速发展,也使现在的以及下一代的处理器的效率和性能都有了提升。一定的体系结构下,在提高性能、降低开销和指令级并行性(ILP之间)加以平衡,可以降低平均CPI。 同步多线程技术(SMT)是一种体系结构模型,其目的是在现有硬件条件下,通过提高计算能力来提高处理器的性能。因此,同步多线程技术结合了多重启动处理器(超标量和VLIW)和多线程处理器的思想来增加并行度,进而提高性能。 多重启动处理器可以在一个周期内执行多条(2,4甚至8条)指令,而多线程和多处理器(SMP和CMP)结构可以同时或者在很少的延迟内执行来自不同线程的指令。SMT结构中,不仅在一周期内启动多条指令,而且也能在同一周期内启动来自相互独立的线程(或上下文)的指令。在理论上,这种改进运用了指令级并行性(ILP)和线程级并行性(TLP)技术来提高执行功能单元的效率。 同步多线程技术之前的研究 多重启动处理器(Multiple Issue Processors) 运用在超标量和VLIW上的多重启动处理器,其目的是为了降低平均CPI,通过在一个周期内启动多条指令,充分利用处理器的功能单元。要想有效利用多重启动处理器资源的关键就是在运行的程序中,发现足够的指令级并行性,通常这种并行性是由硬件决定的。超长指令字(VLIW)处理器每周期启动固定数目的操作,而这些操作是由编译器决定的。 超标量处理器通常是指“动态调度”(dynamically scheduled)的多重启动处理器,因为他们是通过硬件来发现代码中的并行性。不同的是,VLIW处理器通常是“静态调度”(statically scheduled)的,因为他们依靠编译器来发现并优化指令级并行性。 无论是动态或是静态调度,如何有效利用多重启动处理器,依赖于发现并利用指令级并行性。指令级并行性来自同一个上下文环境、程序或线程。CPU和编译器重新安排和启动指令,以此来最大限度的利用资源而不改变应用程序的完整性。在多重启动处理器中,如果不能发现足够的并行指令来填满发射槽(issue slot),那么资源就被浪费了。 超标量处理器现在大致有DEC/Compaq 21164, PowerPC, MIPS R10000, Sun UltraSparc 和 Hewlett Packard PA-8000。而VLIW处理器则包括Intel IA-64 (Itanium) 和Transmeta Crusoe。对多重启动处理器和使用记分牌(scoreboarding)和Tomasulo算法的动态调度已经有了很多研究,我将不再花费时间分析他们。 多线程处理器(Multithreaded Processors) 多线程处理器主要通过降低操作延迟以提高处理器的效率,比如说cache失效和需要长执行周期的指令。一个多线程处理器通过分配给每个线程独立的PC(program counter)和寄存器来保持线程间相互独立的状态。由于每个处理器在切换上下文时几乎没有延迟,所以每个周期可以启动来自不同线程的指令。如果处理器在每个周期切换上下文,这就叫做细颗粒(fine-grained)的多线程或交叉(interleaving)。粗颗粒(Course grain)的多线程处理器则是在某一线程出现长延迟时,才切换线程,以保证指令的持续启动。正是由于存在分离的、独立的上下文和指令资源,多线程体系结构才能利用线程级并行性(TLP),从而提高处理器的效率。多线程处理器通过比传统处理器更精细地共享处理器资源,从而

多处理器多线程软件性能优化

多处理器多线程软件性能优化 ——JAWS框架案例分析 摘要:随着应用软件日趋复杂,对性能的要求不断提高,多处理器技术成为服务器技术的重要技术支点。然而,多处理器需要有操作系统、编译器以及应用软件架构和工具的支持,否则根本达不到性能提升的目的。本文以JAWS框架为例,首先讨论如何通过通讯模式优化和多处理器优化,提升基于JAWS框架的通讯服务器在多处理器平台下的性能;然后介绍一个基于JAWS框架开发的多播服务器的性能测试环境,通过对性能测试结果进行分析,研究软件架构对多处理器平台下软件性能的影响。 关键字:多处理器多线程性能优化 JAWS 1 引言 回首处理器的发展历程,并行技术从指令级的超标量发展到线程级的超线程或者并发多线程,再到今天处理器级的多内核,总的趋势都没有改变。随着科学计算、政府的大型数据库管理系统、数字医疗领域、通讯、金融、大型企业的ERP、CRM等应用软件日趋复杂,对性能的要求不断提高。如目前的通讯服务器应用,在功能不断增强的同时,还要求更高的吞吐率和更多的用户容量。无论是需求推动技术,还是技术激发了新的需求,多处理器技术已经成为服务器技术的重要技术支点。然而,多处理器需要有操作系统、编译器以及应用软件架构和工具的支持,否则根本达不到性能提升的目的;如果使用多处理器运行单线程软件,性能方面不会得到提升。 本文以JAWS框架为例,讨论在软件架构层面上的上多处理器优化技术,并建立性能测试环境,通过对性能测试结果进行分析,研究软件架构对多处理器平台下软件性能的影响。 JAWS是一种高性能和自适配的、实现了HTTP协议的Web服务器。它还是一个平台无关的应用构架,其他类型的通信服务器可以通过它来构建。 JAWS被构造为框架的框架(framework of frameworks)。整个JAWS构架含有以下组件和构架:并发框架(Concurrency Frameworks)、事件框架(Event Frameworks)、I/O事件(I/O Events)、定时事件(Timing Events)和协议框架(Protocol Frameworks)。各个框架都被构造为一组使用ACE中的组件实现的协作对象。 本文组织如下:第2节描述JAWS框架的通讯模式优化;第3节描述在通讯模式优化基础上进行的多处理器优化;第4节描述测试环境及测试结果分析;第5节是结束语。 2 通讯模式优化 典型的客户/服务器系统采用简单的同步通讯模式:服务器等待客户端发送一个完整的请求消息,处理该请求,然后向客户端发送响应消息。当客户端发送完请求消息,但未接收到服务器的响应消息之前,客户端不会发送下一条请求消息。这种通讯模式容易理解和实现,然而存在效率低的缺点。当服务器因为某种资源的缺乏而导致消息处理过程被阻塞时,客户端却不能发送其它服务器可以并发处理的请求。这种典型的客户/服务器系统包括HTTP、

cpu性能提高方法

cpu性能提高方法 cpu性能提高方法一有以下几种办法可以提高cpu性能:1,在任务管理器里关闭没用的程序。 2,通过超频来使得cpu频率达到更高,使得性能更强。 3,清理系统垃圾,提高系统速度,使得cpu性能更完全发挥。 cpu性能提高方法二 1.cpu正常工作时的性能在出厂后就决定了,除非你让他超负荷工作,也就是楼上所说的超频,不过我不建议你这样做,超频有风险,而且你是笔记本电脑,不容易散热。 2.cpu正常工作时不需要设置,即插即用。超频工作可以通过跳线和修改bios达到目的,需要一定专业知识。 3.另外,你是否确定电脑硬件性能不够了呢,有可能是长期使用,造成了系统垃圾,并且很有可能已经中了一些病毒或者恶意插件,建议你系统重新安装一下,装好杀毒软件和防火墙。 上次看你问象棋软件的问题,我是象棋爱好者,有空切磋一下呀! cpu性能提高方法三cpu生产商为了提高cpu的性能,通常做法是提高cpu的时钟频率和增加缓存容量。不过目前cpu的频率越来越快,如果再通过提升cpu频率和增加缓存的方法来提高性能,往往会受到制造工艺上的限制以及成本过高的制约。 尽管提高cpu的时钟频率和增加缓存容量后的确可以改善性

能,但这样的cpu性能提高在技术上存在较大的难度。实际上在应用中基于很多原因,cpu的执行单元都没有被充分使用。如果cpu不能正常读取数据(总线/内存的瓶颈),其执行单元利用率会明显下降。另外就是目前大多数执行线程缺乏ilp(instruction-level parallelism,多种指令同时执行)支持。这些都造成了目前cpu的性能没有得到全部的发挥。因此,intel 则采用另一个思路去提高cpu的性能,让cpu可以同时执行多重线程,就能够让cpu发挥更大效率,即所谓“超线程(hyper-threading,简称“ht”)”技术。超线程技术就是利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少了cpu的闲置时间,提高的cpu的运行效率。 采用超线程及时可在同一时间里,应用程序可以使用芯片的不同部分。虽然单线程芯片每秒钟能够处理成千上万条指令,但是在任一时刻只能够对一条指令进行操作。而超线程技术可以使芯片同时进行多线程处理,使芯片性能得到提升。 超线程技术是在一颗cpu同时执行多个程序而共同分享一颗cpu内的资源,理论上要像两颗cpu一样在同一时间执行两个线程,p4处理器需要多加入一个logical cpu pointer(逻辑处理单元)。因此新一代的p4 ht的die的面积比以往的p4增大了5%。而其余部分如alu(整数运算单元)、fpu(浮点运算单元)、l2 cache(二级缓存)则保持不变,这些部分是被分享的。 虽然采用超线程技术能同时执行两个线程,但它并不象两个真正的cpu那样,每个cpu都具有独立的资源。当两个线程都同

多核多线程

多核多线程复习资料 1. 什么是CMP 单芯片多处理器(Chip Multiprocessors,简称CMP),将大规模并行处理器中的SMP (对称多处理器)集成到同一芯片内,各个理器并行执行不同的进程。 2 .并行计算的菲林分类 单指令流单数据流(Si ngle In struction stream Si ngle Data stream, SISD) 单指令流多数据流(Single Instruction stream Multiple Data stream, SIMD ) 多指令流单数据流( Multiple Instruction stream Single Data stream, MISD ) 多指令流多数据流( Multiple In struction stream Multiple Data stream, MIMD ) 3?进程和线程的区别 进程是正在被执行的程序,是系统进行资源分配和调度的一个独立单位,是一个动态的概念。线程是程序的有序控制流,是被执行的指令序列。 线程属于进程,线程运行在进程空间内。 4?线程的特点 线程因创建而产生,因调度而处于运行状态,因等待资源或事件而处于阻塞状态。 5?分解模式 1?任务分解---园丁修理草坪2?数据分解---矩阵相乘&园丁修理草坪 3?数据流分解---园丁修理草坪 将一个复杂的过程划分成多个任务,这些任务按照某种顺序执行,这种分解方式成为数据流 分解。 ---要求:理解,分析,举例 总结:任务分解下分工工作,相互配合;数据分解模式下分工明确,互不干扰;数据流分解模式下前一个工作是后一个工作开始的前提。 6 ?理解处理任务之间的数据依赖关系的战略有什么? 变量本地化:最简单的解决方案就是创建,初始化,并使用局部变量 改造变量(把共享变量改造成不共享的变量) 规约:创建线程1和线程2的局部变量suml和sum2,然后suml初始化,并计算循环的奇数迭代,sum2初始化和计算循环的偶数迭代。每个线程都独立计算其迭代。在循环结束时,主线程可以组合规约变量的总和( sum1+ sum2 )。 7 ?常用的同步机制

多核多线程-期末考试-选择题

选择题 1.计算机的硬件发展顺序是(A) A:电子管,晶体管,集成电路,大规模集成电路 2.下面关于Intel8086芯片与8088芯片的描述,不正确的(D)D:8088每周期能传送或接收8位。 3.针对内存的速度瓶颈,英特尔为80386设计了(B)来解决这个速度瓶颈 B:高速缓存(cache) 4.对一个具体问题做性能优化时,可以同时在这多个层次上考虑可能优化手段,一般说来(AB)A:在越高层次上进行优化,可能或效益越高。B:在越低层次上优化时相对越容易实现。 5.vtune性能分析器中的取样功能有哪几种方式(AC) A:基于时间取样C:基于事件取样 6.Inter调优助手能够给我们自动推荐改进认识,主要有哪些方向(BCD) B:处理器瓶颈以及改进C:取样向导增强D:超线程 7.使用-03编译选项所得的程序,执行效率比较-02所得程序(D) D:不一定 8.对于函数调用的边际效应,以下表述不正确(B) B:存在边际效应函数调用,其调用次数不同会对整个程序的行为产生不同的影响。 9.对于一个优化编译器,不正确的是(D) D:优化的编译器能够改进算法的计算复杂度。 10.以下不正确(D) D:由一个进程中的线程切换到另一进程中的线程时,也不会引起进程切换 11.以下表述正确(AC) A:在引入线程操作系统进程之间可以并发执行 C:进程是拥有系统资源一个对立单位,它可以拥有自己的资源。 12.以下不正确的是(A) A:用户级线程在用户层通过线程库实现,对它的创建,撤销和切换都要利用系统的调用。 13.对于操作系统中线程,不正确(D) D:在处理IO阻塞线程的时候,要依次地等到每个请求完成才继续处理下一个请求。 14.I/O阻塞线程(不会)引发时间片切换开销,计算非阻塞线程(会)引起时间片切换的开销。 15.以下错误(D) D:对于有优先级的线程,也可以使用线程池。 16.调用exit会使(整个)进程终止,调用pthread-exit会使(调用)进程终止。 17.如果多个线程同时执行函数的多个活动请求而不会相互干扰,那么这个函数是(线程安全),如果会干扰,这个函数是(非线程安全) 18.用户级线程开销很(低),内核线程开销很(高) 19.不正确(A) A:应用程序可以再内存中找到内核对象的数据结构并直接改变他们的内容。 20.正确的是(AB) A:每个进程被初始化时,系统为它分配一个句柄表,用于保存该进程使用的内核对象信息。B:相同的句柄值在不同的进程中可能标识不同的内核对象。 21.不正确(C) C:进程中不一定有线程。

CPU进程与线程的关系和区别

CPU进程与线程的关系和区别 篇一:进程和线程的区别 进程和线程的区别线程是指进程内的一个执行单元,也是进程内的可调度实体. 与进程的区别: (1)地址空间:进程内的一个执行单元;进程至少有一个线程;它们共享进程的地址空间;而进程有自己独立的地址空间; (2)资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源 (3)线程是处理器调度的基本单位,但进程不是. 4)二者均可并发执行. 进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性。进程和线程的区别在于: 简而言之,一个程序至少有一个进程,一个进程至少有一个线程. 线程的划分尺度小于进程,使得多线程程序的并发性高。 另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。

从逻辑角度来看,多线程的意义在于一个应用程序中,有多个执行部分可以同时执行。但操作系统并没有将多个线程看做多个独立的应用,来实现进程的调度和管理以及资源分配。这就是进程和线程的重要区别。 进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,进程是系统进行资源分配和调度的一个独立单位. 线程是进程的一个实体,是cpu调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源. 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. 和"stdio.h"区别 #include"stdio.h" 当要调用某个函数时 先在用户自已编写的文件中查找,如果找不到再到库文件里去找,而#include是直接到库文件里去找 所以如果是调用自己写的函数的话就用#include"stdio.h",这种形式 而调用标准库函数的话就用#include这种形式,可以提高速度 篇二:进程线程区别与联系 定义: 一程序只是一组指令的有序集合

浅议多核处理器技术

浅议多核处理器技术 00748712 荣振 摘要:多核处理器以其高性能、低功耗优势正逐步取代传统的单处理器成为市场的主流。随着应用需求的扩大和技术的不断进步,多核必将展示出其强大的性能优势。但目前多核处理器技术还面临着诸多挑战,本文主要介绍了多核处理器发展的关键技术并对多核处理器技术的发展趋势进行简要分析。 关键词:多核;同构异构;片上通信;I/O结构;低功耗 1多核处理器介绍 多核处理器也称为片上多处理器(chip multi-processor,CMP),或单芯片多处理器。自1996 年美国斯坦福大学首次提出片上多处理器(CMP)思想和首个多核结构原型,到2001 年IBM推出第一个商用多核处理器POWER4,再到2005 年Intel和AMD多核处理器的大规模应用,最后到现在多核成为市场主流,多核处理器经历了十几年的发展。在这个过程中,多核处理器的应用范围已覆盖了多媒体计算、嵌入式设备、个人计算机、商用服务器和高性能计算机等众多领域,多核技术及其相关研究也迅速发展。 多核处理器将多个完全功能的核心集成在同一个芯片内,整个芯片作为一个统一的结构对外提供服务,输出性能。多核处理器首先通过集成多个单线程处理核心或者集成多个同时多线程处理核心,使得整个处理器可同时执行的线程数或任务数是单处理器的数倍,这极大地提升了处理器的并行性能。其次,多个核集成在片内,极大地缩短了核间的互连线,核间通信延迟变低,提高了通信效率,数据传输带宽也得到提高。再者,多核结构有效共享资源,片上资源的利用率得到了提高,功耗也随着器件的减少得到了降低。最后,多核结构简单,易于优化设计,扩展性强。这些优势最终推动了多核的发展并逐渐取代单处理器成为主流。 2 多核发展的关键技术 多核处理器结构不仅有性能潜力大、集成度高、并行度高、结构简单和设计验证方便等诸多优势,而且它还能继承传统单处理器研究中的某些成果,例如同时多线程、宽发射指令、降压低功耗技术等。但多核处理器毕竟是一种新的结构,在多核结构设计和应用开发中出现了以前未曾遇到的新问题,这些问题给多核处理器的未来提出了挑战。

相关文档
最新文档