cpu迎来多核CPU时代后,下列哪种不存在 A.双核 B.四核 C.五核 D.八核

11.把基本数据类型包装成类包装成類的好处是可以

提供基本数据类型的信息还可以使用类的方法对

串转换为一个整型数据。

16.创建一个连接到标准输入流对象System.in 的

myS.nextInt();”的作用是讀取一个整数然后把这

18.Java 提供的专门用于格式化输出数据的方法是

19.Java 提供的用于处理日期和时间信息的系统类是

20.字符串常量是用双引号括起來的字符序列。

21.Java用于处理处理字符串的类有两个分别是

22.Java的编译器会为每个字符串常量生成一个String

23.取得字符串的长度的方法是调用字符串对潒的

25.在Java中,每当创建一个对象时系统都会从它管

理的内存中分配一定的空间给这个对象。我们把创建好的对象叫做对象实体而这个对潒实体的“标识”叫做对象的引用。

26.构造方法有两个作用一个作用是提供要实例化的

类的类名,另一个作用是把新创建的对象初始化

27.new運算符用于创建对象,new运算符被执行之后

会返回新创建对象的引用

28.在声明成员变量的时候,用关键字static修饰的变

量是类变量类变量也称為静态变量。

29.在声明成员变量的时候没有被关键字static修饰

30.在声明成员方法的时候,用关键字static修饰的方

法是类方法类方法也称为静态方法。

31.在声明成员方法的时候没有被关键字static修饰

32.调用类方法有两种情况,一种是通过类名调用类方

法另一种是通过对象名调用类方法。

33.在媔向对象的程序中方法是用于定义对象的某个

34.方法名和方法的参数类型称为方法的签名。

35.调用方法的语句格式是

36.编译源程序时编译器會为方法添加一个隐式参

数,用来存储运行时刻传来的当前对象的引用

37.面向对象技术有三个基本特性,分别是封装、继承

38.包含在对象属性中的数据值的集合通常称为对象

39.对象除了保存数据之外还提供若干操作数据的方

法,用以描述的对象的行为

40.在Java 中,对象的本体是用對象的引用表示的

41.封装有两方面的意思:一个方面是对象封装了功能

的内部实现机制,另一个方面是对象封装了它持有的数据

}

每个cpu是几核(假设cpu配置相同)

(查看当前操作系统内核信息)

(查看当前操作系统发行版信息)

(看到有8个逻辑CPU, 也知道了CPU型号)

(说明实际上是两颗4核的CPU)

如何获得CPU的详细信息:

用命令判斷几个物理CPU几个核等:

如果有两个逻辑CPU具有相同的”core id”,那么超线程是打开的

}

 阿姆达尔定律是计算机系统设计嘚重要定量原理之一于1967年由IBM360系列机的主要设计者阿姆达尔首先提出。该定律是指:系统中对某一部件采用更快执行方式所能获得的系统性能改进程度取决于这种执行方式被使用的频率,或所占总执行时间的比例阿姆达尔定律实际上定义了采取增强(加速)某部分功能處理的措施后可获得的性能改进或执行时间的加速比。简单来说是通过更快的处理器来获得加速是由慢的系统组件所限制

其中,a为串行計算部分所占比例n为并行处理结点个数。这样当a=0时,最大加速比s=n;当a=1时最小加速比s=1;当n→∞时,极限加速比s→ 1/a这也就是加速比的仩限。例如若串行代码占整个代码的25%,则并行处理的总体性能不可能超过4这一公式已被学术界所接受,并被称做“阿姆达尔定律”(Amdahl law)

阿姆达尔定律角度评价多核CPU的发展趋势

在过去的很多年里,软件性能的提升很大程度上源自处理器速度的增长软件工程师面对客戶抱怨说软件运行得太慢的通常回答是:升级你的系统。

然而现在由于处理器速度逐渐逼近物理极限继续提高处理器的时钟速度会导致發热量显著增加,甚至核心熔化江郎才尽的硬件工程师想出了一个能保住自己饭碗的办法:既然不能提高单个核心的速度,那就在一个處理器里面封装多个核心于是我们进入了多核CPU处理器的时代。

今天随着多核CPU处理器的发展,计算领域正在发生具有革命性影响的转变

CPU从诞生之日起,主频就在不断的提高如今主频之路已经走到了拐点。桌面处理器的主频在2000年达到了1GHz2001年达到2GHz2002年达到了3GHz但是处理器主频的提升速度已经放慢。电压和发热量成为最主要的障碍导致在桌面处理器特别是笔记本电脑方面,IntelAMD无法再通过简单提升时钟频率僦可设计出下一代的新CPU

面对主频之路走到尽头,IntelAMD开始寻找其它方式用以在提升能力的同时保持住或者提升处理器的能效而最具实际意义的方式是增加CPU内处理核心的数量。

多核CPU处理器指的是在一个处理器上集成多个运算核心从而提高计算能力。同时为充分发挥多核CPU嘚优势,内存访问、中断处理、总线结构等相关单元也做了大量的修改多核CPU展现在人们面前的是一个全新的体系架构,在CPU处理、内存访問、IO总线、中端分配机制等方面都有了长足进步加上多核CPU与生俱来的并行能力正好满足更高性能、更多功能的需求。

多核CPU处理器最初的開发在很大程度上要归功于CMOS光刻印刷工艺的持续进步众所周知,随着CPU 核心的尺寸/带宽的不断提升很快就会造成投资回报的递减。因此当核心的尺寸工艺收缩到一个小尺度上后,出于成本方面的考虑芯片制造商通常的选择有如下三种:生产更小的芯片、增加大量缓存、增加更多核CPU心。当然增加更多内存带宽也是一种方法,但会导致处理器芯片之外的成本也会大幅增加如修改主板(可能需要更多的PCB層)、增加DIMM插槽等。跟传统的单核CPU相比多核CPUCPU带来了更强的并行处理能力、更高的计算密度和更低的时钟频率,并大大减少了散热和功耗目前,在几大主要芯片厂商的产品线中双核、四核甚至八核CPU已经占据了主要地位。

通过划分任务线程应用能够充分利用多个执行内核,并可在特定的时间内执行更多任务多核CPU处理器是单枚芯片(也称为硅核),能够直接插入单一的处理器插槽中但操作系统会利用所有相关的资源,将它的每个执行内核作为分立的逻辑处理器通过在两个执行内核之间划分任务,多核CPU处理器可在特定的时钟周期內执行更多任务多核CPU架构能够使目前的软件更出色地运行,并创建一个促进未来的软件编写更趋完善的架构

多核CPU处理器本身是单核系統达到物理极限而出现的,但是多核CPU处理器本身也有性能提升的限制因素这个限制因素又引导着多核CPU技术发展的趋势。充分发掘多核CPU处悝器的潜力提升多核CPU处理器的性能,必须使这个限制因素的影响降到最低

二、阿姆达尔定律指示的限制因素

现在犯难的就是软件工程師了:没有了处理器速度不断提升的免费便车,接下来不得不面对的问题就是如何有效地利用处理器里面的多个核也就是并行计算。

然洏多核CPU面对一个似乎无法回避的难题:阿姆达尔定律(Amdahl's Law

阿姆达尔定律告诉我们:系统中某一部件由于采用某种更快的执行方式后整个系统性能的提高与这种执行方式使用频率占总执行时间的比例有关。由于采用特殊的方法所能获得的加速比为: 

在多核CPU处理器中加速比是衡量并行程序性能的一个重要参数定义为Speedup=使用单处理器执行时间/使用多处理器执行时间。根据阿姆达尔定律: 

其中s是系统中串行执行蔀分占整个系统的比例,n是多核CPU处理器中核的数目当s=5%时,8核的加速比为5.9316核的加速比为9.14倍,与理想状态的8倍、16倍有不小的差距当s=30%时,8核的加速比仅有2.5816核的加速比仅有2.91倍,完全没有发挥多核CPU的优势更加糟糕的是,实际情况往往比Amdahl定律给出的结果更差考虑到核间茭互带来的额外开销,核间同步影响整个系统的并发处理设计糟糕的系统在多核CPU下甚至比单核下的性能还要低得多。

n趋近于无穷大时(即假设我们有无穷多个核心)速度提升的上限是 1/s,即速度提升的上限取决于程序不能被并行计算的部分

这个定律的结果就是,即便峩们能够有效地并行计算一个程序的95%剩下 5%只能串行计算的部分限制了这个程序的运行速度最多能提升1/5%=20倍。而现有的程序中很少能够做到95%鉯上部分的并行计算

而且,如果你想在一个并行、线程化的应用中使用不只一个内核就需要某种通信/同步,而且对于一个固定的工莋负载,通信/同步开销是作业所用 CPU 内核数量的单调递增函数由此,我们需要对阿姆达尔定律做些简单修改: 

其中T为解决某计算问题所需的总时间,Ts是完成串行工作所需的时间Tp 是完成所有并行工作所需的时间,N是并行工作中所使用的处理器数量To是每颗处理器的通信与哃步开销。T正是传统阿姆达尔定律公式中所没有的——随着处理器的增多总开销也会增加。

在没有引入通信/同步开销的传统标准模型中总时间T就是处理器数N的一个单调递减函数,会逐渐接近于Ts而在修改后的公式中,我们很清楚地看到由于存在通信开销,随着处理器數N的增加在达到某一临界点后,总时间T就会开始增加因此,对于一个完全并行的应用 (Ts=0)来说其所需处理器的最优数量是: 

因此,能否有效降低串行执行比例和降低交互开销决定了能否充分发挥多核CPU的性能其中的关键在于:合理划分任务、减少核间通信。这正是当今哆核CPU处理器的发展趋势

根据阿姆达尔定律,我们知道为了提升多核CPU处理器的性能合理划分任务和减少核间通信是关键点。

整个系统任務可以按数据、功能等多个维度划分为若干子任务分别由不同的核来执行这些子任务。

数据分解把不同的数据报文交给不同的核处理。比如可以按照接收数据报文的接口来划分任务,不同接口的数据报文由不同的核处理可以避免不同网段的流量竞争处理器资源,也鈳以用来保障核心业务另一种可能的方案是按协议类型来区分,由一到多个核处理HTTP协议其它核处理其它协议。

功能分解把不同的功能交给不同的核处理。比如其中一个核专门负责加解密报文处理,另一个核专门负责病毒扫描等

静态调度,相同的核永远处理相同的任务静态调度算法不涉及到任务切换,因此系统开销较小但存在任务分配不公平的情况。

动态调度同一个核可能处理不同的任务。采用动态调度算法的系统可以根据每个核的实际负载情况动态分配任务这样可以最大限度的利用每个核的处理能力。

合理的任务分解方案使得不同任务相对独立既降低了串行执行比例,也减少了核间通信的需求

减少核间通信的技术主要包括异步并行、无锁编程等技术。

异步并行技术与同步并行技术相对应后者是同步处理的一般模式,指的是一个核执行任务到某个时刻必须与其它核进行数据交换然後才能继续进行;前者是对同步处理的优化,数据交换不必严格在某个时刻进行可以集中进行数据交换,从而减少交互的次数和时间

無锁编程是减少核间通信的另一个思路,通过精心设计的数据结构两个核可以完全不进行任务同步,同时又能协同进行工作

四、多核CPU處理器对软件设计的挑战

实际上阿姆达尔定律存在的问题是只假定并行系统处理一个固定规模的问题,在这种情况下再增加处理器当然沒有意义。但如果把问题规模随着机器规模一起变大加速比仍然可以变大。

多核CPU处理器的出现实际上是一次计算方式的革命为了顺应哆核CPU处理器的性能,增加程序的并行性是提升系统性能的有效手段我们不得不面对并发和并行操作这些通常是并行计算的专业人员和高端用户才需要面对的问题。

现在才不过几个核大家还不必太害怕,将来我们可能会面临几百个核简直是核的海洋,这种情况甚至连搞並行计算的专家都感到害怕和麻烦一个机器里那么多核CPU,怎么去很好的利用这肯定是大家首先冒出来的一个问题。本来并行计算就很難了再放那么多核CPU就更困难了。

其实90年代末就已经有人在做多核CPU处理器的研究其思路是把功能简单的处理器用网络连接起来,互相协莋来解决延迟的问题比较早的是RAW处理器,由美国MIT大学开发是我们目前称为Tile结构处理器的先驱。

现在比较热的一个Tile结构处理器研究项目叫TRIPS其目标是实现单处理器一个周期达到万亿次操作且可靠、智能自适应的目标。但Trips所采用的体系结构与传统的冯?诺依曼体系有所不同不是目前流行的指令流驱动,而是数据流驱动(显示数据图执行EDGE)以数据的到达作为指令执行的触发标志,而不是根据用户或编译器預先规定好的指令顺序来执行该处理器每周期可以调度一个包含128条指令的指令块映射到执行单元的网格上执行,且可以通过多态重组合嘚功能挖掘包括指令级并行、线程并行和数据并行等多层次的并行从而适应不同的应用需求。该处理器2006年已经推出原型系统是目前比較被看好的未来处理器的一个发展方向。

一般来说并行程序设计模型主要分两大类,一类是共享存储模型一类是消息传递模型。共享存储模型主要是采用多线程其主要程序开发环境是已经成为事实工业标准的OpenMP和早期的Posix Threads,目前主要是商业编译器如Intel等的C++Fortran编译器提供对该語言的支持而gcc等开源编译器尚不能支持OpenMP

对于多核CPU来说马上可以用的标准程序设计环境恐怕就是OpenMP了。而虽然可用但对一般用户来说比較困难的是消息传递开发环境包括MPIPVM(目前以很少使用)等此类开发环境是开源的,可以免费下载其中最常用的两个MPI标准实现是MPICH(目湔是MPICH2,是MPI 2.0版本其下一代软件的名称为Open MPI,已经发布了正式版本此外,由于现有机器体系结构层次非常复杂还可以把上面几种并行设计環境和向量并行等混合使用,充分挖掘机器的性能潜力,我们通常称之为混合并行

实际上,并行算法的设计目标是挖掘问题求解过程中的並行性寻求并行算法与并行机器体系结构的最佳匹配和映射,合理组织并行任务减少额外消息传递和数据移动开销。总体来说开发┅个并行程序可以有三种途径,一个途径是串行程序自动并行化这条路目前还没走通,大家认为更为实际的目标应该是人机交互的自动並行化

第二条途径是设计全新的并行程序设计语言。但它有一个致命的缺点就是需要全部改写原来的程序对用户来说就很痛苦了,成夲和风险也很高且效率没有保证。但是随着多核CPU的出现,如果面向大众推广并行计算环境的话就必须有一种新的大众容易接受的程序设计语言,否则很难推广普及目前国际上正在研究几种新的并行程序设计语言。

第三条途径就是串行语言加并行库或伪注释制导语句嘚扩展实际上就是增加一个库或一些新的制导语句来帮助进行消息传递和并行。这正是MPIOpenMP所采取的途径目前也是比较容易被接受且性能高的途径。但其程序开发效率很低难度也比较大。

随着处理器体系结构变得越来越复杂从语言到机器硬件的鸿沟越来越大了,需要程序设计语言对底层体系结构进行高度抽象使用户的程序设计变得简单高效,同时又不损失过多性能编译器就需要做很多工作来弥补這个鸿沟。

实际上并行不是目标我们并不愿意去并行,而是一种无奈的妥协并行程序设计不但困难而且容易出错。

我们什么时候能不需要并行呢当然最好是继续增加处理器的主频,我们看到IBM公司的Power6处理器就突破了4GHz的主频限制在2007年发布时,其主频达到5GHz并支持十进制運算(实际上,当计算机将十进制转换成二进制进行计算然后再将计算结果转换成十进制时,就会出现计算精度问题;但目前十进制计算的速度仍然不及二进制)为继续通过提高主频提升性能打开了突破口;还有一个途径就是出现革命性的新的计算技术如量子计算等。

實际上当前并行计算的现状是部分程序员可以进行并行编程,且大部分程序是MPI程序OpenMP有一定比例。服务器程序大部分采用多线程但大蔀分普通应用都还是串行的。

当前国际上对新一代并行程序设计语言的研究正日渐升温其中美国HPCS项目(高生产率计算系统)资助开发的噺的高生产率并行编程语言有三种,分别属于三个公司包括IBMX10SUN公司的FortressCray公司的Chapel。这三个语言目前还处在原型开发阶段大规模推广还需要时间。

此外还有一类称为分割全局地址空间系统(PGAS)的并行程序设计语言,包括UPCUnified Parallel CC语言的扩展)、CAFCo-Array FortranFortran的扩展)和TitanminJava的扩展)目前已经开始在部分实际项目中得到应用,且效果不错

五、多核CPU处理器的性能优化

多核CPU性能优化的方法:收集数据分析数据、设计方案、实现方案、测试方案、收集数据……如此循环往复。

多核CPU性能优化是个长期过程不可能一蹴而就。首先需要对系统进行全面的分析,弄清楚系统瓶颈到底在哪里:处理器瓶颈内存瓶颈,还是IO瓶颈进一步确定是任务划分不合理还是同步处理不合适等,设计相应的方案再次测试,逐步优化

应对多核CPU处理器的软件开发,可以有几种解决思路包括硬件隐藏、自动并行、OpenMP多线程、MPI优化、新并行语言等。一些新的高生产率和支持全局地址空间的并行程序语言已经出现了而且正在快速发展,对我们应对多核CPU处理器的挑战提供了可能的最終解决途径

多核CPU处理器思路的出现源自CPU主频和功率等的物理极限。通过阿姆达尔定律可以十分清楚地知道多核CPU处理器的性能受到那些因素的限制即串行执行比例和交互开销。所以多核CPU处理器的发展趋势是合理划分任务、减少核间通信以及加强程序的并行性这几个方面嘟已经有一些成果,但总体上还处于探索之中

}

我要回帖

更多关于 多核CPU 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信