晚上很难入睡,白天我的脑子就是单核与多核处理器,晚上就是「真•八核处理器」,胡思乱想的。。

一.进程、线程、单核与多核处悝器

       进程和线程都是操作系统的概念进程是应用程序的执行实例,每个进程是由私有的虚拟地址空间、代码、数据和其它各种系统资源組成即进程是操作系统进行资源分配的最小单元。进程在运行过程中创建的资源随着进程的终止而被销毁所使用的系统资源在进程终圵时被释放或关闭。

线程是进程内部一个执行单元系统创建好进程后,实际上就启动执行了该进程的主执行线程主执行线程以函数哋址形式,比如说main或WinMain函数将程序的启动点提供给Windows系统。主执行线程终止了进程也就随之终止。

 每一个进程至少有一个主执行线程它無需由用户去主动创建是由系统自动创建的用户根据需要在应用程序中创建其它线程多个线程并发地运行于同一个进程中进程结束的标志是所有前台线程的退出(线程的IsBackground属性) 一个进程中的所有线程都在该进程的虚拟地址空间中,共同使用这些虚拟地址空间、全局變量和系统资源所以线程间的通讯非常方便,多线程技术的应用也较为广泛

多线程可以实现并行处理,避免了某项任务长时间占用CPU时間要说明的一点是,目前大多数的操作系统教材中的单处理器都是指的单核与多核处理器对于单核与多核单处理器(CPU)的,为了运行所有这些线程操作系统为每个独立线程安排一些CPU时间,操作系统以轮换方式向线程提供时间片这就给人一种假象,好象这些线程都在哃时运行由此可见,如果两个非常活跃的线程为了抢夺对CPU的控制权在线程切换时会消耗很多的CPU资源,反而会降低系统的性能

最开始,线程只是用于分配单个处理器的处理时间的一种工具但假如操作系统本身支持多个处理器那么每个线程都可分配给一个不同的处理器真正进入“并行运算”状态。从程序设计语言的角度看多线程操作最有价值的特性之一就是程序员不必关心到底使用了多少个处理器,程序员只需将程序编写成多线程模式即可程序在逻辑意义上被分割为数个线程;假如机器本身安装了多个处理器,那么程序会运行嘚更快毋需作出任何特殊的调校。根据前面的论述大家可能感觉线程处理非常简单。但必须注意一个问题:共享资源!如果有多个线程同时运行而且它们试图访问相同的资源,就会遇到一个问题举个例子来说,两个线程不能将信息同时发送给一台打印机为解决这個问题,对那些可共享的资源来说(比如打印机)它们在使用期间必须进入锁定状态。所以一个线程可将资源锁定在完成了它的任务後,再解开(释放)这个锁使其他线程可以接着使用同样的资源。

        多线程是为了同步完成多项任务不是为了提高运行效率,而是为了提高资源使用效率来提高系统的效率线程是在同一时间需要完成多项任务的时候实现的。

        最简单的比喻多线程就像火车的每一节车厢洏进程则是火车。车厢离开火车是无法跑动的同理火车也不可能只有一节车厢。多线程的出现就是为了提高效率同时它的出现也带来叻一些问题。

        注:单核与多核处理器并不是一个长久以来存在的概念在近年来多核心处理器逐步普及之后,单核与多核心的处理器为了與双核和四核对应而提出顾名思义处理器只有一个逻辑核心。

二、多核处理器和多处理器的区别

多核是指一个CPU有多个核心处理器处理器之间通过CPU内部总线进行通讯。而多CPU是指简单的多个CPU工作在同一个系统上多个CPU之间的通讯是通过主板上的总线进行的。从以上原理可知N个核的CPU,要比N个CPU在一起的工作效率要高(单核与多核性能一致的情况下)

三、 处理器结构对并发程序的影响

        对称多处理器是最主要的哆核处理器架构。在这种架构中所有的CPU共享一条系统总线(BUS)来连接主存而每一个核又有自己的一级缓存,相对于BUS对称分布[2]如下图:

        這种架构在并发程序设计中,大致会引来两个问题一个是内存可见性,一个是Cache一致性流量内存可见性属于并发安全的问题,Cache一致性流量引起的是性能上的问题

内存可见性:内存可见性在单处理器或单线程情况下是不会发生的。在一个单线程环境中一个变量选写入值,然后在没有干涉的情况下读取这个变量得到的值应该是修改过的值。但是在读和写不在同一个线程中的时候情况却是不可以预料的。Core1和Core2可能会同时把主存中某个位置的值Load到自己的一级缓存中而Core1修改了自己一级缓存中的值后,却不更新主存中的值这样对于Core2来讲,永遠看不到Core1对值的修改在Java程序设计中,用锁关键字volatile,CAS原子操作可以保证内存可见

 Cache一致性问题:指的是在SMP结构中,Core1和Core2同时下载了主存中嘚值到自己的一级缓存中Core1修改了值后,会通过总线让Core2中的值失效Core2发现自己存的值失效后,会再通过总线从主存中得到新值总线的通信能力是固定的,通过总线使各CPU的一级缓存值数据同步的流量过大那么总线就会成瓶颈。这种影响属于性能上的影响减小同步竞争就能减少一致性流量。

这里我们不再赘述有关寄存器、ALC等处理器架构和原理知识我们只从直观的数据去分析和了解我们正在使用的多核处理器的真实性能——正所谓“是骡子是马拉出来溜溜”。一切建立在实际运行的数据才是真正有价值的评判依据

在开始数据分析之前,我们必须弄清楚处理器的计算能力到底是什么:是频率决定了性能还是核数决定了性能?

首选我们必须了解处理器的一个简单的性能计算公式:

整体性能 = 单核与多核性能 × 核心数

其次性能受哪些因素影响会有以下这些原则:

原则一:架构越新单核与多核计算性能越强!

对比同频率、同核心数的前后两代处理器的计算能力僦能发现架构越新的处理器整体计算能力也越强,这也意味着处理器架构的改进确实提高了单核与多核性能

原则二:频率越高,单核与哆核计算性能越强!

对比同代同核心数不同频率的处理器就能发现频率越高的处理器计算性能也越好但这并非完全的线性增长。原因是處理器频率上去以后由于受到内存访问速度的限制也会有一定的瓶颈而频率越高的处理器耗费在数据等待上的时钟周期也越多。

原则三:核心数越多整体计算性能越强!

对比同代同频率不同核心数的处理器不难发现核心数越多的处理器整体计算性能也越好。但是如果观察单核与多核性能会发现其实核数越多的处理器单核与多核性能比同频率核数较少的处理器会差一些主要原因是核数越多对共享资源的爭抢概率也越高,这些共享资源包括L3缓存、内存、QPI总线等这也就是多核处理器总是要把L3缓存做得很大的原因,核数越多L3缓存也越大

请偅点区别单核与多核性能和整体性能:

1、单核与多核性能:它影响的是单线程或者单任务的计算能力(即计算的响应延迟),对于单个请求计算的响应延迟要求较高的应用就要用高频处理器去满足,而不是用多核因为应用的一个线程无论任何时候都只能运行在处理器的┅个核心上,增加核心数量对于改善单个计算请求的响应延迟并没有帮助也就是说对跑单线程、单任务的应用无法提升其性能;

2、整体性能:前面提到核数越多整体性能越好,这也意味着多线程和多任务的应用环境下如果要提高单机的计算处理量最好的办法是增加核心數而不是靠提高频率。理由很简单核数较少的处理器晶元面积也小。如果要一味提高性能便要提高频率提高频率其实就是给处理器晶え加电压。晶元能够忍受的电压是有限的电压耐受力越高的晶元成本也越高。因此从稳定性和成本去考虑的话晶元面积更大的多核处悝器才是提高整体计算能力的最好选择。

下面我们挑选几款主流的双路处理器来作性能分析:

主题1:核数相同、频率不同

数据说明:如下表所示从第7行(Geekbench Integer)起是各项性能指标:分别是Geekbench整数成绩、SuperPI运行百万次的时间、以及根据Geekbench整数性能分别除以“处理器数量”、“核心数量”、“核心数量和Ghz的乘积”等来分别针对整体性能单核与多核计算能力,单个处理器、单个核心以及单个核心下每个Ghz的性能进行分析评估

1、SuperPI体现的是单核与多核浮点性能,通过SuperPI成绩可以发现处理器频率越高单核与多核计算性能也越好这一点也可以通过“性能/每个核心”項目体现,频率越高单核与多核的计算性能也越好;

2、Geekbench Integer评估的是处理器的整体性能规律自然也是频率越高整体性能越好;

3、“性能/每Ghz/每個核心”项目评估的是处理器的计算效率,这个项目是将Geekbench的整数成绩按照核数拆分并根据单个Ghz去计算可以发现核数相同的处理器这个数據相互比较接近。

主题2:频率相同、核数不同

1、SuperPI项目更加可以说明单核与多核计算能力受频率的影响虽然2640 v2有8个核心,但对SuperPI的成绩没有丝毫帮助;

2、通过“性能/每个核心”项目可以发现同频率下核数更少的2620 v2在这项成绩略好一些,即频率相同核数较少的处理器在单核与多核性能上总是会核数更多的处理器略好一些这确实也验证了核心之间存在资源争抢的假设;

3、Geekbench Integer成绩也体现出多核的性能优势,同频率下核數较多的处理器整体性能也更好;

4、再来看看用以评估计算效率的“性能/每Ghz/每个核心”项目可以发现核数较多的处理器在计算效率上处於劣势:八核处理器的单核与多核Ghz性能明显要比六核处理器的低不少,这样也进一步验证了核心之间存在资源争抢的假设并且核数越多資源争抢的现象也越显著。

最后一组选取整体性能接近而频率和核数均不同的处理器

1、SuperPI的成绩依旧验证了单核与多核性能只受频率影响的假设;

3、通过“性能/每个核心”项依旧验证了频率决定了单核与多核性能的假设;

根据以上数据我们可以进一步将计算公式细化为:

多核處理器的整体计算能力 = 单核与多核Ghz计算能力 × 频率数 × 核数

1、处理器整体性能和频率、核数有关但并非核数越多性能就一定越好,高频尐核和低频多核整体性能很可能接近;

2、核数决定了计算承载能力核数越多能够承载的计算量也越大;

3、频率决定了单核与多核计算能仂,频率越高单个计算请求的响应延迟也越低;

4、频率相同的情况下核数越多单核与多核计算效率也越低;


我要回帖

更多关于 CPU单核 的文章

 

随机推荐