来源 | 硬件十万个为什么
提高处理器主频可以提高处理器的性能,但是到一定程度就不能再提高了,我们需要通过双核,或者多核来提高处理器的性能。
提高处理器主频是一种提高计算机性能的传统方法,但它存在一些限制和挑战。虽然提高主频可以在一定程度上增加处理器的运算速度,但这也带来了一些问题:
热量和功耗:随着主频的提高,处理器产生的热量和功耗也会显著增加。高功耗可能导致散热问题,需要更强大的冷却系统,而且会增加计算机系统的能耗。
性能递减:在某一点之后,提高主频可能会遇到性能递减的问题。因为高频率会导致电子信号传输速度的增加,可能引发信号传输延迟、时序问题等,从而限制性能的提升。
制程技术限制:随着制程技术的进步,制造更高主频的处理器变得更加困难。存在物理限制,例如晶体管的尺寸、电流密度等,制约了进一步提高主频的可能性。
相比之下,多核处理器提供了一种更为可行和有效的方式来提高计算机性能,同时克服了主频提升所面临的一些问题。多核架构允许并行处理多个任务,提高整体性能,而且相对于提高主频,多核设计在能效比、热量分散等方面有一些优势。
综合考虑,多核和提高主频都是提高计算机性能的手段,但多核处理器更符合当前计算需求和技术趋势。在实际设计中,通常会综合考虑这两者以达到最佳的性能和能效比。
1.双核≠双倍性能
多核不一定会使你的手机或电脑速度更快,但它将提高你的PC的整体性能,这是一个有所不同的细微的技术特色。多核处理器的性能提升并不是简单CPU核心的倍数,因为受到两(多)个核之间共享资源的拖累。比如双核性能只是单核的1.4~1.8倍,实际情况取决于具体的应用。
一个核拼命干活,拼命转啊转啊,其他核在看,最后温度不断上升然后蓝屏了。
上图是个笑话,不过你可以用任务管理器可以看到并不是每个核的负载是均匀分配的。
这是为什么一个核转啊转啊,最后蓝屏的原因。
2.多核并不一定高能
从理论上来说,多核的性能肯定要比单核高很多。不过软件的发展远远跟不上硬件发展的速度,这样多核CPU在实际应用中就无法发挥其应用的功效,比如现在四核CPU已经非常的普及,但是针对四核优化的应用软件寥寥可数。即使你已经用上八核的CPU,在运行很多软件时仍然不会感到速度有多快的提升。因此我们并不要唯核是从,多核的不一定是最优的。“够用就好”永远是大家装机时选择硬件的唯一原则。另外由于架构、主频的不同,多核也并不一定比少核性能高。
多核不一定高能,的原理跟人多不一定力量大,是一个道理。
3.多核不仅是多个CPU的内核
为了充分发挥CPU功效和减少用户支出,现在越来越多CPU集成GPU功能,比如Intel就在Sandy Bridge把GPU核心整合进了CPU当中,其GPU核心的图形核心性能大幅度地提升。
多核化是无奈之举:以前,半导体工艺的发展可以带来“一举三得”的效果,包括提高晶体管速度、降低功耗和缩小芯片面积。但是,当制造工艺发展到90nm或65nm时,泄漏电流的问题凸显,沿用以往的内部架构来提高频率的方法难以奏效。为了在不提高工作频率的条件下实现性能的提升,只能增加CPU内核的数量。
在有许多客户要求进行并行处理的服务器中,多核架构容易获得比较好的效果。但是,问题发生在根据用户的要求运行应用软件的客户机里。由于可能同时运行的软件数量有限,即使可以将各个软件分割以后并行执行,但软件中必须串行执行的部分仍然会妨碍处理性能的提升。许多相关人士认为,在目前这种架构的PC中,4~8个内核可能是多核处理器能够获得较好性能提升效果的极限。
集成多个不同类型的内核:另一方面,提供新体验的高级用户接口、动态及静态图像分析等新的应用软件的不断出现,对处理器的处理性能提出了更高的要求。如果处理器仅在目前以CPU内核为主的架构上继续发展,这些新应用可能将无法实现。
2007年9月,英特尔公司董事会名誉主席Gordon Moore在英特尔秋季技术峰会上表示:“众所周知,摩尔定律在物理上是有极限的。大约10年或15年以后,摩尔定律将会遇到根本性障碍,而退出历史舞台。”反过来说,Moore认为,半导体工艺的发展很可能还会像以前那样再延续10年左右。在把工艺发展当作技术推动力的同时,为了越过横亘在多核架构前面的壁垒,处理器应该采用什么样的内部架构呢?
业界想到的方案是采用异构处理器架构,即将不同类型的内核集成在一起。在这种架构中,CPU内核所不擅长的浮点运算及信号处理工作,将由集成在同一块芯片上的其它可编程内核执行。相关人士认为,集成多个不同类型内核的异构多核架构将成为今后处理器的主流架构。
从同构到异构通用处理器将实现SoC化:Nvidia公司的总裁兼CEO指出:“目前,图形芯片具有的浮点运算性能已经大大超越了处理器。如果能够灵活运用,随着图形芯片的发展,将会涌现出各种各样新的应用。”在占据PC及服务器主流地位的x86处理器中,围绕GPU(图形处理单元)展开的相关研发工作突然活跃起来。
GPU的集成和通用化取得进展:围绕GPU的研发方向主要有两个。首先,是将GPU内核集成到处理器芯片上。AMD公司在2006年7月收购了加拿大的GPU生产商ATI科技公司,并提出了将ATI公司的GPU内核集成到处理器上的Fusion处理器方案。另外,英特尔公司在2007年4月明确表示,正在开发矢量处理器Larrabee(开发代号),其中集成了许多专用于浮点运算的CPU内核。
另一个研发方向是,利用GPU擅长对浮点运算进行并行处理的特点,将其用作矢量处理器。这就是面向通用计算领域的GPGPU(General Purpose Computing on GPU),NVIDIA公司从2006年下半年已陆续推出相关的硬件产品及软件开发工具(见图1)。
16nm FinFET 3D晶体管的FPGA新品---Zynq UltraScale MPSoC
看看它的内部结构:
1、 四核A53处理器 CPU
2、 一个GPU Mali-400MP
3、 一个Cortex-R5 CPU
4、 电源管理单元,AMS单元
5、 H.265(HEVC)视频编解码器
6、 安全模块
7、 UltraScale FPGA 单元;
这其实就是一款异构处理器,如前所述,它是一款ASIC就级的异构处理器!而且是64位,采用16nm FinFET工艺的处理器!而且是采用FPGA实现硬加速的处理器!
64核处理器
基于高性能RISC-V内核,9-12流水线设计,支持乱序执行,主频高达2GHz,每个Cluster最多4个内核,单SoC芯片拥有64核,64MB共享三级缓存,可以满足数据中心的各种需求。
我们知道平头哥C906的性能大约相当于ARM的Cortex-A7~A35的性能。可以64个处理器内核协同工作,能够胜任一些服务器级别的工作,也是让人很惊讶。
4、多核是怎么协同工作的?
多核处理器之间的协同工作涉及到并行计算、任务分配和数据交互。这种协同工作的方式通常通过操作系统、编程模型和硬件支持来实现。以下是多核处理器之间协同工作的一些基本概念:
并行计算:多核处理器可以同时执行多个任务或处理多个线程,实现并行计算。这意味着每个核心都可以独立执行指令,从而提高整体系统的计算性能。
任务分配:操作系统或应用程序可以将不同的任务分配给多个核心,以实现负载均衡和提高系统的效率。任务分配的方式可以根据任务性质和系统状态动态调整。
线程级并行:多核处理器支持线程级并行,即同时执行多个线程。这可以通过多线程编程模型实现,其中每个线程都由不同的核心执行,共同完成整体任务。
共享内存:在多核系统中,核心之间通常共享一部分内存。这使得不同核心之间可以轻松地共享数据,从而实现更紧密的协同工作。然而,共享内存也需要考虑同步和一致性等问题。
消息传递:多核处理器之间还可以通过消息传递进行通信。不同核心之间通过发送和接收消息来共享信息,这在一些分布式计算场景中比较常见。
硬件支持:多核处理器的硬件通常会提供一些支持协同工作的机制,如高速缓存一致性协议、硬件线程调度等。这些机制有助于优化多核系统的性能和效率。
多核处理器之间的协同工作是通过合理的任务分配、数据交互和并行计算来实现的。软件层面的编程模型和操作系统的支持,以及硬件层面的设计都起着关键的作用。合理的协同工作可以使多核系统更好地利用计算资源,提高系统的整体性能。
5、AMP和SMP
"AMP" 、 "SMP" 都是与多处理器系统(Multiprocessing Systems)相关的术语,它们描述了不同的处理器架构方式:
AMP (Asymmetric Multiprocessing):
定义:AMP 指的是非对称多处理,其中系统中的处理器核心可以具有不同的性能特征。
特点:不同核心可能拥有不同的时钟频率、功能和用途。通常,一些核心专注于高性能计算任务,而其他核心则专注于低功耗任务。
例子:某个系统中,可能有一个高性能的核心用于执行复杂的计算任务,而其他低功耗核心则用于处理简单的后台任务,以节省能量。
SMP (Symmetric Multiprocessing):
定义:SMP 指的是对称多处理,其中系统中的所有处理器核心被认为是相同的,具有相似的性能特征。
特点:所有核心共享相同的内存空间和系统总线,可以同时执行相同的指令序列。这使得任务可以在不同核心之间平均分配,实现负载均衡。
例子:在 SMP 系统中,所有的核心都能够处理相同类型的任务,而任务可以被分配到任何可用的核心上。
在选择 AMP 还是 SMP 的架构时,取决于应用程序的性质和系统设计的目标。AMP 提供了更大的灵活性,允许系统中的核心具有不同的功能,而 SMP 则更注重任务的平均分配和相对均匀的性能。
6、Cache一致性
Cache(缓存)一致性是多处理系统中的一个关键概念,它确保不同处理器或核心的缓存之间的数据保持一致。在具有多个处理器核心的系统中,每个核心都有自己的缓存,当一个核心修改内存中的数据时,其他核心的缓存可能会包含过时的数据。为了确保数据的正确性和一致性,需要实现缓存一致性。
以下是一些关于缓存一致性的重要概念和方法:
写命令和写回:处理器对内存的写操作通常包括写命令和写回两个阶段。写命令将数据写入内存,而写回则是将数据从缓存写回内存。缓存一致性涉及确保在写回阶段,其他核心的缓存中的相应数据被更新或无效。
缓存一致性协议:缓存一致性通常通过硬件支持的缓存一致性协议来实现。一些常见的协议包括MESI(Modified, Exclusive, Shared, Invalid)协议和MOESI(Modified, Owned, Exclusive, Shared, Invalid)协议。这些协议定义了缓存状态和处理器之间的通信规则,以确保数据的一致性。
总线锁定:通过总线锁定机制,可以实现对总线的独占访问,防止多个处理器同时修改内存。这有助于减小缓存不一致性的可能性,但也可能引入性能瓶颈。
全局内存一致性模型:一些系统采用全局内存一致性模型,即所有处理器对内存的访问看起来是按照某个全局的顺序进行的。这要求系统保证所有核心看到的内存访问顺序是一致的。
软件同步和屏障:在并行编程中,软件同步机制和屏障(barrier)可以用于确保在多个核心之间的操作顺序。这有助于维护一致性,但也可能引入性能开销。
缓存一致性是多处理系统设计中的复杂问题,需要综合考虑性能、复杂性和一致性的要求。各种硬件和软件技术都被用来解决这一问题,以确保系统的正确运行和高性能。
7、 双核、双芯、超线程的区别
双(多)核:是指拥有两(或多个)物理核心(又称为内核),各种CPU核心都具有固定的逻辑结构,一级缓存、二级缓存、执行单元、指令级单元和总线接口等逻辑单元,各个核心通过超传输技术让CPU内核直接跟外部I/O相连,集成内存控制器技术,使得每个内核都有自己的高速缓存可用,都有自己的专用车道直通I/O,没有资源争抢的问题。
双(多)芯:仅仅将两(或多个)完整的CPU封装在一起,连接到同一个前端总线上。由于总线的限制,两个核心必然会产生总线争抢,影响性能,而且这样的核心越多,越容易加剧处理器争用前端总线带宽,成为提升系统性能的瓶颈,这是CPU架构引发的先天故障,因此这种双(多)芯实际上是“假多核”。双芯有些像是北京郊区开发的大型社区一样,多个社区利用同一条城市快速路,人们出行(数据处理)肯定要遇到堵车的问题。双核则是为不同小区开发专用车道,每个小区出行并不交叉(数据可以并行处理),并不会发生堵车现象。
HT技术(即超线程技术):HT技术是在处理器实现2个逻辑处理器(注意不是物理处理器),是充分利用处理器资源,类似虚拟CPU,让系统误认为是双核处理器。而双核心处理器是集成2个物理核心,是实际意义上的双核心处理器。举个形象例子来说,前者好像是一个能用双手同时炒菜的厨师,但一次只能把一碟菜放到桌面;而双核心处理器好比2个厨师炒两个菜,并同时把两个菜送到桌面。
8、进程和线程
进程(Process) 和 线程(Thread) 是计算机中用于执行任务的两个基本概念
进程
简单的来讲进程的概念主要有两点:第一,进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text region)、数据区域(data region)和堆栈(stack region)。文本区域存储处理器执行的代码;数据区域存储变量和进程执行期间使用的动态分配的内存;堆栈区域存储着活动过程调用的指令和本地变量。第二,进程是一个 “执行中的程序”。程序是一个没有生命的实体,只有处理器赋予程序生命时,它才能成为一个活动的实体,我们称其为进程。
进程是程序的一次执行过程,是动态概念
程序是一组有序的指令和数据集合,是静态概念
线程
有时被称为轻量进程(Lightweight Process,LWP),是程序执行流的最小单元。是被系统独立调度和分派的基本单位。
是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。线程有就绪、阻塞和运行三种基本状态。一个线程可以创建和撤销另一个线程,同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约,致使线程在运行中呈现出间断性。线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件,逻辑上可以运行在等待处理机;运行状态是指线程占有处理机正在运行;阻塞状态是指线程在等待一个事件(如某个信号量),逻辑上不可执行。每一个程序都至少有一个线程,若程序只有一个线程,那就是程序本身。进程可以简单地理解为一个可以独立运行的程序单位。它是线程的集合,进程就是由一个或多个线程构成的,每一个线程都是进程中的一条执行路径。
进程与线程,它们之间存在一些关键区别:
概念定义:
进程:进程是计算机中运行的程序的实例。每个进程都有自己的地址空间、内存、文件句柄等资源,是操作系统进行资源分配和调度的基本单位。
线程:线程是进程中的一个执行单元,是进程的一个子集。一个进程可以包含多个线程,它们共享相同的地址空间和其他资源,但拥有独立的执行流。
资源分配:
进程:进程是独立的资源单位,拥有独立的内存空间和系统资源。进程间通信通常需要特殊的机制,如进程间通信(IPC)。
线程:线程共享相同进程的资源,包括内存空间和文件。线程之间的通信相对容易,因为它们可以直接访问共享的数据空间。
切换开销:
进程:由于进程有独立的资源,进程间切换的开销较大。进程切换通常需要保存和恢复大量的状态信息。
线程:线程切换的开销较小,因为它们共享相同的地址空间,切换只需要保存和恢复少量的状态信息。
并发性:
进程:进程间是相互独立的,一个进程的崩溃不会直接影响其他进程。
线程:线程共享相同的地址空间,因此一个线程的错误可能会影响到同一进程内的其他线程。
创建和销毁:
进程:创建和销毁进程的开销较大,通常需要分配和释放大量的资源。
线程:创建和销毁线程的开销相对较小,因为它们共享进程的资源。
独立性:
进程:进程是独立的执行单位,进程之间相对隔离。
线程:线程是进程内的执行单元,线程之间共享相同进程的资源,因此相对于进程来说更密切相关。
进程和线程是操作系统中用于管理和执行任务的两个关键概念。线程的轻量级和共享资源的特性使其在某些情况下更适合实现并发性和多任务处理。选择使用进程还是线程通常取决于任务的性质和系统设计的需求。
一个基本的事实前提:一个CPU在一个瞬间只能处理一个任务。但为什么在我们人类视角,哪怕是单核心计算机也能同时做很多事情,比如同时听音乐和浏览网页,作为整个系统唯一可以完成计算任务的 CPU 是如何保证两个进程“同时进行”的呢?时间片轮转调度!
每个进程会被操作系统分配一个时间片,即每次被 CPU 选中来执行当前进程所用的时间。时间一到,无论进程是否运行结束,操作系统都会强制将 CPU 这个资源转到另一个进程去执行。为什么要这样做呢?因为只有一个单核 CPU,假如没有这种轮转调度机制,那它该去处理写文档的进程还是该去处理听音乐的进程?无论执行哪个进程,另一个进程肯定是不被执行,程序自然就是无运行的状态。如果 CPU 一会儿处理 word 进程一会儿处理听音乐的进程,起初看起来好像会觉得两个进程都很卡,但是 CPU 的执行速度已经快到让人们感觉不到这种切换的顿挫感,就真的好像两个进程在“并行运行”。
9、多任务、多线程、多核。
多任务是指系统可以同时执行多个任务,比如你可以一边下载、一边听歌,Windows可以很好支持多任务的运行,这和多核CPU并没有多大关系。多线程则是指系统可以针对某项操作,调用多个CPU进行并行处理。比如支持多线程的PS,在批处理多个操作(如滤镜、抠图)时,系统就会调用多路CPU并行处理这些操作以提高操作效率。
"多任务"、"多线程" 和 "多核" 是计算机系统中描述并发处理和并行计算的概念,它们之间存在一些区别:
多任务 (Multitasking):
定义:多任务是指在同一时间内执行多个任务或程序的能力。这些任务可能属于不同的应用程序,系统通过快速切换执行上下文来模拟同时运行。
实现方式:多任务可以通过时间片轮转、优先级调度等方式实现。每个任务分配一小段时间,系统在不同任务之间切换,使用户感觉好像它们在同时运行。
多线程 (Multithreading):
定义:多线程是在同一进程内执行多个线程的能力。线程是进程内的执行单元,多线程允许程序同时执行多个独立的线程,每个线程都有自己的执行流。
实现方式:多线程可以在单个核心上运行,通过在不同线程之间进行快速切换来模拟并发。多线程也可以在多核系统中发挥更大的优势,每个线程可以在不同核心上并行执行。
多核 (Multicore):
定义:多核是指计算机系统中包含多个处理器核心的架构。每个核心都是一个独立的处理器,能够独立执行指令序列。多核系统允许同时处理多个任务或线程,提高整体系统性能。
实现方式:多核系统可以是对称多处理(SMP)或非对称多处理(AMP)。在 SMP 中,所有核心共享内存,而在 AMP 中,核心可能具有不同的性能特征。
多任务 是指同时执行多个任务,可以是不同应用程序的任务。单核也可以多任务,把处理器按照时间片段分配给不同的任务。
多线程 是在同一进程内执行多个线程,每个线程可以独立执行,但它们共享进程的资源。
多核 是指计算机系统中包含多个独立的处理器核心,可以同时执行不同的任务或线程。
审核编辑:汤梓红
全部0条评论
快来发表一下你的评论吧 !