转自:http://server.zdnet.com.cn/server/2008/0723/1005241.shtml
毫无疑问的,“多核”、“多线程”此二词已快成为当今处理器架构设计中的两大显学,如同历史战国时代以“儒”、“墨”两大派的显学,只不过当年两大治世思想学派是争得你死我亡,而多核、多线程则是相互兼容并蓄,今日几乎任何处理器都朝同时具有多核多线程的路线发展迈进。
虽然两词到处可见,但可有人知此二者的实际差异?在执行设计时又是以何者为重?到底是该多核优先还是多线程提前?关于此似乎大家都想进一步了解,本文以下试图对此进行个中差异的解说,并尽可能在不涉及实际复杂细节的情形下,让各位对两者的机制观念与差别性有所理解。
行程早于线程
若依据信息技术的发展历程,在软件程序执行时的再细分、再切割的小型化单位上,先是有行程(Process),之后才有线程(Thread),线程的单位比行程更小,一个行程内可以有多个线程,在一个行程下的各线程,都是共享同一个行程所建立的内存寻址资源及内存管理机制,包括执行权阶、内存空间、堆栈位置等,除此之外各个线程自身仅拥有少许因为执行之需的变量自属性,其余都依据与遵行行程所设立的规定。
相对的,程序与程序之间所用的就是不同的内存设定,包括分页、分段等起始地址的不同,执行权阶的不同,堆栈深度的不同等,一颗处理器若执行了A行程后要改去执行B行程,对此必须进行内存管理组态的搬迁、变更,而这个搬迁若是在处理器内还好,若是在高速缓存甚至是系统主存储器时,此种切换、转移程序对执行效能的损伤就非常大,因为完成搬迁、切换程序的相同时间,处理器早就可以执行数十到上千个指令。
两种路线的加速思维
所以,想避免此种切换的效率损耗,可以从两种角度去思考,第一种思考就是扩大到整体运算系统的层面来解决,在一部计算机内设计、配置更多颗的处理器,然后由同一个操作系统同时掌控及管理多颗处理器,并将要执行的程序的各个程序,一个程序喂(也称:发派)给一颗处理器去执行,如此多颗同时执行,每颗处理器执行一个程序,如此就可以加快整体的执行效率。
当然!这种加速方式必须有一个先决条件,即是操作系统在编译时就必须能管控、发挥及运用多行程技术,倘若以单行程的系统组态来编译,那么操作系统就无法管控服务器内一颗以上的处理器,如此就不用去谈论由操作系统负责让应用程序的程序进行同时的多颗同时性的执行派送。
即便操作系统支持多程序,而应用程序若依旧只支持单程序,那情形一样是白搭,操作系统无法对单行程程序再行拆分,依然是只喂入单一颗处理器上去执行,无从加速。
同时用多颗处理器来执行,且每颗处理器执行一个行程,这是一种加速法,另一种加速法则是:尽量不进行内存管理组态的切换,避免切换的效能折损,线程正是在此概念下所出现的产物。
不过,线程也要程序的搭配才能发挥,线程的概念出现与落实已是“C++看消、Java看长”的阶段,所以C++只能通过API呼用的方式来支持与使用多线程,如此必须改写过往的程序才行,改写成有呼用到支持多线程的API才行。相对的,较C++晚问世的Java则是原生支持多线程,不用改写也能发挥及运用多线程的特性及其加速效益。
有了线程后,执行的分割、切割更加细腻,线程机制不仅在多颗处理器的系统内可以加速,在单颗处理器内也一样能获得好处,在多颗处理器的系统上每颗处理器不仅可以单独执行一个程序,当然也可以单独执行一个线程,而在单处理器系统上因为省去内存管理组态的搬迁,所以一样可以加速,很明显的,线程使执行的发派、分配更加细腻与灵活化。
线程的副作用
线程虽有好用的优点,不过它也有副作用的缺点,且此一优缺是一体两面无从分割,缺点是各个线程共享同一组内存管理组态及机制,倘若有一个线程的执行发生错误、瑕疵、或遭入侵等,其余在同一个行程内的每个线程也都会遭受影响、波及,最严重是同一个行程内的一切都错乱、毁坏,由此可知:线程其实是带有若干安全性牺牲的加速法。
此外有人会误会,就字面上而言,多核表示同时间有多颗处理器在执行,每颗处理器可以执行一个行程或一个线程,但是一颗具有多线程能力的处理器并不表示它可以同时执行多个线程,事实上在同一时间内一颗具多线程功效的处理器也依然是执行一个线程而已,只是多线程处理器的内部可以将原有线程的相关信息及变量暂时搁摆,然后去执行其它的线程,执行完后在切换回原来执行到一半的线程,甚至没执行完也可以切换回来,且整个切换过程都在处理器内进行,不用与快取与内存进行搬迁置换,如此以快速换线程执行的方式来加速。
相对于此的,一颗不具多线程能力的处理器,执行一个线程到一半若想改执行另一个线程,就必须将原线程、现线程的相关内容与信息搬迁到快取或内存,然后自快取及内存引入另一个线程,由于此一搬转颇耗时,所以多半选择将原有的线程执行完再引入下一个线程,如此在时间上可能还比较经济。然而无论一线程完整执行后再执行下一个线程,还是进行线程的进出搬迁转移,都不会比具备多线程能力的处理器来的快速有效。
至此我们可以归纳整理:
1.多核、多处理器系统中的每颗处理器(每个核),同时间内可以执行各自不同的行程(或线程)。
2.一颗多线程能力的处理器,无论是支持二线程、四线程、八线程,这些线程都必须是在同一个行程内,所以一颗处理器(一个核)还是只能执行一个行程,双核处理器就能够同时执行两个不同的行程(或线程),四核就可以同时不同的四个行程(或线程)。
3.倘若是执行不支持多线程的程序,其执行上的分拆最多只到行程而未到线程,那么每颗处理器内的多线程功效就无从发挥,而这类的程序历史较长久,相对的原生支持多线程的程序历史较短,不过信息技术的脚步向来进展快速,两种不同层次的支持仅差距数年时间。
产业实际发展可为证明
真的是多核优于、先于多线程吗?关于此可通过产业实际发展做为应证,Sun的UltraSPARC T1处理器(研发代号:Niagara)是八核四线程的设计,但接续的UltraSPARC T2处理器(研发代号:Niagara 2)则是八核八线程的设计,所以是核多、核优先,然后再来拉跋、提升线程的执行。
同样的,IBM为Microsoft Xbox 360所设计的Xenon处理器,是个三核二线程的设计,核数依然是高于线程数,又如IBM、Sony、Toshiba三家业者合研的Cell处理器,现有第一代的Cell(研发代号:DD1)是九核,组态上是八核媒体(SPE)、一核泛用(PPE),新一代的Cell(研发代号:DD2)也针对PPE的部分进行双线程发展,如此再次表示核比线程重要,当Cell仅进行增一线程的扩展改进时,而非再增一核,即可知这仅是一次小幅的改进。
“多核”、“多线程”之外 还有“多令”、“多机”
最后,且让我们谈谈与多核、多线程不同加速走向的“多令”,“多令”是笔者发明的词,指的是比执行行程(Process)、线程(Thread)更基底层次的执行指令(Instruction),多核的作法是尽可能在同时间内执行多个行程,多令则是尽可能在同时间内执行多个指令,学术上的VLIW与产业上的EPIC皆是多令理念下的架构。
到目前为止多令并非不可行,但仅行于数字信号、图像等处理,绘图芯片、媒体处理器等多实行VLIW架构,然多令在泛用运算上却未见效益,至于科学研究之类的高效运算也倾向使用更高层次的平行:多机(丛集、网格,执行范畴与分配类同于线程、行程),看来多令、多程/线程、多机各有所用,端看运用场合的适切性。
相关推荐
### Intel英特尔多核_多线程技术中文版 #### 计算机发展历程及微处理器的演进 ...未来,随着人工智能、大数据等领域的快速发展,对计算能力的要求只会越来越高,因此多核多线程技术将继续扮演着至关重要的角色。
在大数据分析、科学计算、3D渲染等高性能计算领域,多核多线程技术能够显著减少计算时间,提高工作效率。 然而,多核多线程技术并非没有挑战。编程时需要考虑如何有效地分配任务到各个核心,以避免线程间的竞争条件...
在理解多核多线程技术之前,我们首先需要了解进程与线程的基本概念: - **进程**是操作系统进行资源分配和调度的基本单位。每个进程都有自己的地址空间和资源,包括内存段、栈段以及代码段等。传统意义上的进程通常...
同时为高等学校计算机专业的师生进行多核多线程程序教学时提供一本有价值的参考书 英特尔软件学院联合大学教师编纂了这本《英特尔多核/多线程技术》/ 另外资源里打包了英特尔的软件开发者手册,intel 64 and IA-32 ...
本文档集重点探讨了“英特尔多核/多线程技术”,它源于英特尔软件网络,旨在提供全面的多线程编程指南。资料涵盖了多线程编程在不同操作系统下的应用,包括Linux/Unix环境和Windows环境,同时讨论了多线程程序设计中...
### 英特尔多核多线程技术概览 #### 计算机发展历程与微处理器技术 计算机的历史是一部持续创新和技术进步的历史。自1945年第一台电子数字计算机ENIAC诞生以来,计算机技术经历了多次重大变革,极大地推动了人类...
为了使开发人员在面对多核体系结构,以及需要多线程编程时有一本...同时为高等学校计算机专业的师生进行多核多线程程序教学时提供一本有价值的参考书 英特尔软件学院联合大学教师编纂了这本《英特尔多核/多线程技术》/
在IT领域,多核多线程技术是一种优化计算性能的关键技术,它允许程序同时执行多个任务或同一任务的不同部分,从而充分利用现代处理器的多个核心。本实验主要关注如何利用多核多线程来提高计算效率,通过两个经典的小...
在讨论多核多线程编程时,我们首先需要了解几个核心概念:多核、多线程、并发编程。多核指的是中央处理器(CPU)中集成多个处理核心的设计,每个核心都可以独立执行运算任务。多线程则是操作系统中能同时运行多个...
尽管多核多线程技术提供了巨大的性能潜力,但它也带来了一系列挑战: - **内存一致性问题**:在多线程环境下,如何确保共享内存的一致性是非常重要的。 - **数据竞争**:多个线程试图同时修改同一内存位置可能导致...
多线程与多核编程是现代计算机系统中提高性能和响应速度的重要技术。在多任务环境中,操作系统通过多线程实现并发执行,使得用户能够同时处理多个任务,从而提升用户体验。而多核CPU则提供了硬件层面的并行计算能力...
多线程与多核编程是现代计算机系统中提高性能和响应速度的重要技术。在这个领域,开发者需要理解如何有效地利用计算资源,特别是在处理大数据量或计算密集型任务时。以下是对这些概念的详细解释: 1. **多线程**:...
多线程与多核编程是当前计算机科学技术中一个非常重要的话题。在现代计算机系统中,多任务操作系统可以同时运行多个程序,是通过 CPU 分时和程序并发实现的。在这种情况下,进程和线程作为两个基本概念,扮演着非常...
### 多线程与多核编程 #### 13.1 进程与线程 **13.1.1 进程与多任务** 进程是操作系统中的一个重要概念,指的是正在执行中的程序。在现代多任务操作系统中,可以同时运行多个程序。进程包含了程序在内存中的所有...
在数据处理方面,64位多核多线程处理器能够高效地处理大量数据,特别是在数据库管理、视频编码、3D建模等领域。它们能够快速读取和写入大容量数据,同时执行多个计算密集型任务,显著提高了工作效率。 参考文献和...
- 英特尔作为多核技术的领先者,提供了多种多核处理器系列,如酷睿i3、i5、i7,至强(Xeon)等,这些处理器支持SMT(Simultaneous Multithreading,超线程技术),使得每个物理核心可以同时处理两个线程。 - 英特尔...