多线程技术和多核技术

为什么 Intel 的超线程技术是一个核两条线程,而不是更多?

可以说是最优的。CPU在执行单线程任务时,并不是核心内每一个单元都在工作。而超线程技术就是让闲着的那些执行单元去做另一个线程的工作。这时你会看到两个线程同时进行。但是假设有两个线程在某一时刻都要使用CPU中的一个特定执行单元,那么他们俩就没法同时执行了,只能一个一个来。超线程的本意是提高CPU的使用效率,虽然增加了5%的芯片面积用以实现超线程技术,但是它带来的性能提升超过了它的成本。

那么为什么不超更多呢?因为CPU(这里主要谈PC的CPU)是按照一个核心执行一个线程的本意来设计的。在一个核心执行多个线程的情况下,线程越多,管理他们所需的代价就越大,而且由于资源的抢占问题,要么在核心内设置很多冗余硬件,要么就要承担线程等待自己所需的硬件的开销。所以,一个核心执行一个线程,是效率最高的选择。如果它偶尔有余力,我们再加一个线程,利用他的余力。可能它真的有时候有余力执行更多线程,但是那种情况太少了,去处理它所花费的代价超过了带来的提升。

IBM的power7处理器,8核32线程,确实很强,一个核超成四个。我觉得应该是因为服务器CPU对高并发需求很大,总合考虑了增加核心的成本和超线程的成本他们才决定超更多的吧。而且服务器的线程应该不像家用电脑的线程差异那么大,所以应该还是比较好控制的。

服务器和PC的区别。PC关心的是延迟,就是我面前这个程序还要几秒能打开;而服务器关心的是吞吐率,我响应一个客户端再快也没有用,我宁愿让大家都等一秒钟,然后一次响应成百上千个客户端。这也是服务器为什么喜欢多线程的原因之一吧。


作者】杨碧玲

多核与多线程都是提升处理器处理性能的重要手段,如今多核处理器随处可见,多线程处理器似乎鲜有提及,其实多线程并不是一个新鲜的概念,在很多地方也有广泛的应用。到底多核处理器与多线程处理两者之间有何差异?各有什么优势?哪种技术更能满足未来需求的发展?

 

随着应用需求变得越来越复杂,对处理器计算能力的要求也大大提高,作为提升处理器计算能力的一种重要技术,多核架构在处理器中应用得越来越普遍,从台式机到平板电脑、智能手机等便携设备,到处都可以看到多核处理器的身影。如今双核处理器已成为市场主流,而四核、八核甚至更多核产品的开发也正在进行中,一方面国内外主流的半导体公司都争先恐后地推出自己的多核处理器产品,另一方面处理器也在往核数越来越多的方向发展。


在多核技术被炒得火热的背后,同为提升处理器计算能力方法的多线程技术却似乎不被人关注。实际上在现实中,多线程处理器的应用早于多核,早在十年前,英特尔就推出了超线程(即双线程)技术,通过利用特殊的硬件指令,把两个逻辑内核模拟成两个物理芯片,让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和软件,减少CPU的闲置时间和提高CPU的运行效率。随着芯片设计技术的进步,目前市场上也出现了多种先进的多线程架构处理器。


那么这两种技术有什么不同,对于下游系统厂商来说应该如何选择?未来哪一种技术会成为主导,以及会有怎样的发展趋势呢?

 

技术与性能比较


既然同为提升处理器性能的技术手段,它们之间又有什么差异?简单地说,多核处理器是集成了多个处理器核心,其可同时执行的任务数是单核处理器的数倍,从而提高处理器的并行性能,而多线程处理器是在单核中加入并行执行架构以发挥核的最大效能来提高处理性能。从芯片设计的角度来看,多线程处理器在设计时需要对内核的微架构进行调整,开发难度比多核处理器要困难,因为多核只是需要处理核与核之间的关联,而多线程需要对核的内部架构进行调整。


深圳中微电科技有限公司首席技术官梅思行从资源共享方面指出两者的差别,“多核处理器与多线程处理器的主要区别在于:多核的硬件资源是独立而且不可以共享的,而多线程处理器在同一核内的线程之间可以进行资源的共享。”梅思行说道,“其实多线程技术在GPU上用得是非常多的,它的好处在于一是资源共享,二是延迟屏蔽。”正是因为有这两个突出的优点,多线程处理器在执行效率上有很大的优势。


MIPS中国区市场总监费浙平也认为多线程技术效率更高,另外多线程处理器也比多核更节省功耗。他指出,对于多核处理器每多增加一个核,功耗除了会相应增加一倍外,再加上额外的开销,总功耗就会有2倍以上的增加,但性能却没有成倍的增加,所以也可以说多核处理器是以功耗的增加来换取性能的提升。而多线程处理器因为在硬件面积上相比单线程处理器并不是成倍的增加,所以功耗也不是成倍增加。


不过ARM中国区总经理吴雄昂却不认同多核处理器效率低的观点,他认为多核与多线程技术都是利用应用的平行性,但在绝大部分的应用处理上多核处理器更有效率,因此才得到主流操作系统与软件的支持。而多线程技术只有在一些特定的实时数据处理任务上比较有效率, 如大量的平行包处理,但这类应用也需要多核。他举例道:“多核就好比是两辆车,任务好比是人,一人一车去不同的地方;多线程好比是拼车,因为要去较远的不同地方,效率反而不好。”因此他认为多线程在手机、PC等应用上没有优势,甚至很多高端应用上多线程其他开销反而会降低了性能。


尽管两种技术看上去截然不同,但芯原微电子中国业务和技术支持高级总监汪洋却认为,实际上多核技术也是一种多线程技术,只是在空间上静态划分了主要的硬件处理资源。多线程技术是在开发指令级并行性的基础上进一步开发线程级并行性,最大限度地利用处理器内部执行资源并具有最大的灵活性,但单核多线程处理器设计实现难度也最大。相对多线程架构来说,多核架构比较灵活,不管是“同构多核”还是“异构多核”,可在设计验证简化和应用适应性等多方面进行调整和折中,但其资源利用率相对多线程来说比较低。


既然两者都是通过采用并行计算的方式来提升处理器性能的,那么多核处理器相对单核处理器、多线程相对单线程性能的提升是怎样的关系,在功耗、成本方面又有什么影响?汪洋表示,不能简单地说双核就会有一倍的提高,四核就会有三倍的提高,实际的提升还要取决于所承载的应用以及多核架构下所采用的片上通信技术、存储器共享技术、操作系统调度和软件开发等因素,多核处理器相对于单核处理器的优势是显而易见的在成本上,由于多个核都集成在同一个芯片内,可以共享资源并提高核间通信效率,而单核处理器为了达到同样的性能,必然要通过提高指令级并行度和时钟频率来提高处理性能,这将增加单核处理器的设计验证成本,并且频率提升也将带来功耗的增加。另外,多核处理器的工作频率和工作电压可以比单核处理器低,再结合动态管理各个核心处理器功耗的方法,其在功耗控制上会更有优势


“在日常多任务应用使用性能上双核可比单核提高1.8~1.9倍,而在功耗上增加远低于2倍。这是因为我们日常应用有很多平行性的多任务,比如听音乐同时上网,或收发电子邮件等,这时多核非常有效。因为同时对应不同的任务时,每个核可以降频或关闭,因此功耗在同等处理能力上更低。”吴雄昂说道。为了进一步降低多核处理器的功耗,ARM去年底还推出了异构大小核(big.LITTLE)双A15/A7产品,让手机、平板电脑等在普通应用时只开A7,在大型应用时转开A15,这样在保持低功耗的同时具有PC级别的高处理能力。


一位业内人士也表示,增加一个内核其成本相对芯片总成本来说不算增加很多,因为芯片的成本涉及到封装、授权费、晶圆制造等等。如果芯片成本是十多美元的话,增加一个核产生的成本小于1美元。


可以这么说,多核处理器是以硬件规模增加换取性能的提高,那么多线程呢?费浙平指出,单核双线程处理器相对单核单线程来说,硬件复杂度仅增加20%~30%,而性能提升的多少于应用和软件的支持,在最差的情况下,可能会完全没有提升;而在最好的情况下,性能可以提升80%左右。“多线程和多核处理器相同的地方就是,性能的提升都需要软件的配合,主要是操作系统的支持,若操作系统是支持并行处理的话,那么就能支持多核或者多线程。性能的提升不是常数,取决于并行量的大小。”费浙平说道。


如果对由多个单线程独享内核组成的多核处理器与一个多线程内核进行比较,各自又有什么优势?汪洋认为,多核处理器的设计难度和周期要占优,功耗控制也更为灵活,并且深亚微米工艺下线延时大于门延时对其负面影响相对小些,其基本处理器单元的时钟频率容易做得更快;而多线程处理器优势是资源利用率较高,同时兼顾了指令并行度和线程并行度。


“多核处理器的优势在于性能的稳定性和核内设计的简单性,而多线程处理器的优势在于功耗、成本和伸缩性。”梅思行说道,这里的伸缩性指的是核的可扩展性。虽然单核多线程相对单核单线程来说开发难度大,但是从整体来看,多线程处理器的核扩展能力要优于多核处理器。“例如拿我们的单核四线程MVP与一个四核处理器来比较,我们的单核里面就包含了四个线程,对操作系统来说相当于SMP的四核;而对于四核处理器需要处理四个核之间的关系,复杂度会大大提高。”他说道。

 

对系统开发人员来说开发难度一致


由于多线程处理器在硬件架构上复杂度大于多核处理器,那么对于整机系统开发厂商来说,是不是基于多线程处理器的开发难度会大于多核呢?其实不然。费浙平指出,对系统开发人员来说,基于两种不同技术的开发难度都是一样的,他们都不需要关心底层处理器是多核还是多线程的,只要操作系统支持并行处理,那么在该操作系统上进行的开发并没有什么差别,唯一不同的地方可能就只是总线接口的不同而已。“其实也正是因为操作系统或软件大型化、复杂化以及对并行处理的支持,多核、多线程等技术才有了用武之地。就像在消费电子领域,Android 4.0的出现为推动多核技术发展起了非常大的作用。”他说道。


不过,在要求操作系统支持并行处理的同时,整体系统的软硬件开发人员也需要适应这种多线程处理器或多核处理器的开发要求。对于板级硬件工程师来说,以前单核处理器通过加大主频来提高性能,随之而来的是功耗和散热的问题,而采用并行计算技术所带来的散热问题将减轻,硬件设计难度会降低。但是对于软件工程师来说,需要学习新的编程模式以实现多线程、多任务调度,通过创立多线程、并行调试和各个线程或内核间性能调度优化等方式,更好地控制和安排处理器资源并提高程序效率。所以,并行编程和调试对软件厂商的挑战是存在的。尽可能地充分利用那些多线程编程的开发工具,可在一定程度上帮助开发人员设计出高效并可靠的多线程处理程序。


梅思行也表示:“我们的硬件设计已经完全做到让操作系统把多线程看成是SMP多核,只需要操作系统有处理多核的机制就同样能处理多线程。对系统开发人员来说,根本就不用关心处理器到底是多核还是多线程。至于选择哪种技术更为合适,如果是对成本和功耗比较敏感的话,多线程处理器则是最优的选择。”


至于系统开发人员是该选择多核还是多线程处理器,费浙平认为,主要看其关注的点,如果着重在主频和绝对性能的提高,则多核优于多线程,如果着重在效率和功耗方面,则多线程优于多核。

 

多核+多线程:满足未来发展需求


由于多核与多线程处理器都是采用并行技算技术,在数据并发量大以及数据实时处理的应用上如云计算、服务器系统、高速率无线互联网应用等都是非常有效的。特别在服务器系统中,一般也都是多核与多线程结合使用。


而在消费电子领域,由于ARM的推动,多核处理器已经深入人心,而多线程技术却似乎还没有用武之地。对于智能手机等消费类电子产品来说,因为目前其并行计算量并不大,双核或者说四核处理器已经完全够用,那么是不是就没有必要去发展多线程技术?因为毕竟多线程技术只有在网络服务器等并发量相当大的设备中才会用得到。不过随着移动设备中3D地图、3D视频等多媒体应用越来越普遍,对CPU和GPU的计算能力提出非常大的要求。如果只是单纯通过提高CPU核数或GPU线程数来提高性能的话,这样编程的复杂度将会非常高,功耗也会很大。梅思行表示,利用多核加多线程技术便能很好地解决这个问题。“我们的MVP多线程处理器是通过充分利用多核CPU和通用GPU这两大处理器技术的相似点而研发出来的,与之前一些多线程处理器最大的不同是MVP的多线程可动态地用于CPU和GPU,而其他多线程只能是为CPU使用。”梅思行说道,“其实多线程技术非常适合在对CPU和GPU都有高要求的场合使用,而未来移动终端、云终端中对计算能力要求越来越高的应用,必将推动着多核多线程处理器的发展。”


其实无论在网络或服务器领域还是在消费产品领域,对性能提升的要求是无止境的。而要满足这种快速增长的需求是远非单单靠增加处理器核数所能及的。首先,多核处理器中核数并不是越多越好,过多的内核将会引入更多的延迟,并降低整体时钟频率,而过度复杂的核间通信机制和总线传输管理也会影响多核系统性能。尤其在内核超过一定数量后,软件可编程性问题也将更为突出;再者考虑到功耗及成本,核数也不能无限制增加。


“多核与多线程技术不是完全对立的,而是某种程度上相辅相成的。”汪洋说道,“多核技术也可在其集成的单核处理器上采用多线程技术来提高单核资源利用率,从而弥补多核架构资源利用率低的缺点。”据透露,芯原也在规划多线程处理器的开发,除了开发针对高性能、多需求的应用场景的多核解决方案,为提高基本单核的处理能力,芯原也将在核中加入多线程技术。


“在消费电子领域,除多核技术外,多线程技术也是非常有必要的。因为多线程处理器在功耗和效率方面优于多核处理器。我们知道功耗的减少对便携消费电子产品来说是非常重要的。”费浙平说道,“从性能、成本、功耗等各方面综合考虑,我觉得未来发展应该是两者同时共存和结合使用,即多核多线程将会是未来处理器发展的最佳方式。”


多线程技术SMT

CPU多线程简称SMT,可通过复制处理器上的结构状态,让同一个处理器上的多个线程同步执行并共享处理器的执行资源,可最大限度地实现宽发射、乱序的超标量处理,提高处理器运算部件的利用率,缓和由于数据相关或Cache未命中带来的访问内存延时。

注:当没有多个线程可用时,SMT处理器几乎和传统的宽发射超标量处理器一样。

cpu的多线程技术可以为高速的运算核心准备更多的待处理数据,减少运算核心的闲置时间;解决了负载均衡问题,充分利用了CPU资源,提高CPU的使用率。采用多线程的方式可以同时完成几件事情而不互相干扰,缩短了处理大量的IO操作时或处理的情况需要花费大量的时间。

 

  1. 线程

(1)  进程,一个进程就是一个具有独立功能的应用程序,关于某个数据集合上的一次运行活动。进程是系统进行资源分配和调度的一个独立单位。

(2)  线程,线程是进程的实体,属于进程,是CPU调度和分派的基本单位。

 资源分配给进程,所有线程共享该进程的资源

(3)  操作系统的设计,可以归纳为3点。

  1. 以多进程形式,允许多个任务同时运行。
  2. 以多线程形式,允许一个任务拆分成多个线程运行。
  3. CPU提供协调机制,允许线程之间共享资源,防止线程之间产生冲突。
  4. CPU和线程的关系

(1)         第一阶段,单CPU时代,单CPU在同一时间点,只能执行单一线程。比如,的某一刻00:00:00 这一秒,只计算1+1=2(假设cpu每秒计算一次)

(2)         第二阶段,单CPU多任务阶段,计算机在同一时间点,并行执行多个线程。但这并非真正意义上的同时执行,而是多个任务共享一个CPU,操作系统协调CPU在某个时间点,执行某个线程,因为CPU在线程之间切换比较快,给人的感觉,就好像多个任务在同时运行。比如,电脑开了两个程序qq和qq音乐,假设这两个程序都只有一个线程。人能够感觉到CPU切换的频率是一秒一次,假设当前cpu计算速度是1秒1次,那么我们就能明显感到卡顿,当聊天,点击发送按钮时候,qq音乐就会停止运行。当前cpu计算速度是1秒100次,也就是它能在一秒之内在这两个进程见切换100次,那么我们就感不到卡顿,觉得QQ和QQ音乐是同时在运行。

(3)         第三阶段,多CPU多任务阶段,真正实现的,在同一时间点运行多个线程。具体到哪个线程在哪个CPU执行,这就跟操作系统和CPU本身的设计有关了。

  1. 举例说明

(1)假设一种极端情况,一台单核计算机,只运行2个程序A和B。

假设A和B的优先级相同,A有3个线程,B有1个线程,那么CPU分配给A和B的执行时间应该是3:1。

(2)假设同一种情况发生在一台多核计算机,核1处理A和B各一个线程,核2处理A剩下的线程。

(3)刚才说的是线程只消耗CPU,在实际应用中这种情况是不存在的,程序总会跟资源打交道,比如读个文件,查询数据库,访问网络,这个时候多线程才能体现出优势。在一个进程中,让A先用一下CPU去查询数据库,在A查询数据库的时候CPU空闲,B就用一CPU去读文件,让C去访问网络。相对于查询数据库,读取文件这些操作来说,CPU的计算时间几乎可以忽略不计。所以,多线程,实际上是计算机多种资源的并行运用,跟CPU有几个核心没什么关系


 

单个CPU一个时刻只能运行一个线程

单核CPU电脑同一时间内只能执行一个线程,首先了解一下,CPU执行的过程 ,它是把时间分成若干个小时间段,这些时间段很小的,系统中有很多进程,每个进程中又包含很多线程,在同一 时间段 内,电脑CPU只能处理一个线程(线程A),而下一个 时间段 就不一定是上一个时间段内执行的那个线程(线程A)了,可能是别的线程(线程B 吧)

CPU采用的是类似于时间片轮转的机制,也就是说同一时间一条进程提出执行请求时,其他进程只能等待它执行完毕,CPU才会处理其他请求。其他进程相当于在排队等待中。当然了,为了避免某条进程无限制时间的执行,一般会限定一个时间,超时 的话,CPU根据一定的线程调度算法来切换线程。可以看做很多线程在并发执行。其实还是在某一个时间点上只有一个线程在运行罢了。
多核的话,每个核心都是同样的原理。但是两个核心就可以通过系统分配资源,同时执行不同的进程,这个就更复杂了。
每条进程都有CPU分配的进程号的。避免混乱。

一个核心就是实实在在的一个cpu处理设备 线程的概念可以理解成电脑处理信息的通道 既一个线程一个通道 一般来说一个cpu核心处理一个通道的信息 但也不是绝对 因特尔支持超线程技术的cpu每个核心可以处理两个或多个通道的信息 这就可以形容为超线程(既多出来的通道的处理能力)但前提是软件也必须的支持超线程才行 否则单核双线程或多线程也只能有单个通道工作 从某种意义上来说cpu的能力被浪费了 所以网友一般就会说 真正的核心数(通道) 比虚拟出来的核心(通道)来个更实在。最后 线程数决定这CPU能同时处理几件事情,在没有超线程技术的情况下核心数等於线程数。


线程与进程的关系

1:线程定义

  • 线程是进程的基本执行单元,一个进程的所有任务都在线程中执行
  • 进程要想执行任务,必须得有线程,进程至少要有一条线程
  • 程序启动会默认开启一条线程,这条线程被称为主线程或 UI 线程

2:进程定义

  • 进程是指在系统中正在运行的一个应用程序
  • 每个进程之间是独立的,每个进程均运行在其专用的且受保护的内存

3:进程与线程的区别

  • 地址空间:同一进程的线程共享本进程的地址空间,而进程之间则是独立的地址空间。
  • 资源拥有:同一进程内的线程共享本进程的资源如内存、I/O、cpu等,但是进程之间的资源是独立的。
  • 一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
  • 进程切换时,消耗的资源大,效率高。所以涉及到频繁的切换时,使用线程要好于进程。同样如果要求同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程
  • 执行过程:每个独立的进程有一个程序运行的入口、顺序执行序列和程序入口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
  • 线程是处理器调度的基本单位,但是进程不是。

4:多线程的意义

  • 优点
    • 能适当提高程序的执行效率
    • 能适当提高资源的利用率(CPU,内存)
    • 线程上的任务执行完成后,线程会自动销毁
  • 缺点
    • 开启线程需要占用一定的内存空间(默认情况下,每一个线程都占 512 KB)
    • 如果开启大量的线程,会占用大量的内存空间,降低程序的性能
    • 线程越多,CPU 在调用线程上的开销就越大
    • 程序设计更加复杂,比如线程间的通信、多线程的数据共享
      5:多线程的原理
  • (单核cpu)同一时间,cpu只能处理 1 个线程。换言之,同一时间只有 1 个线程在执行
  • 多线程同时执行:
    *是 cpu 快速的在多个线程之间的切换
    * cpu 调度线程的时间足够快,就造成了多线程的“同时”执行效果
  • 如果线程数非常多
    * cpu 会在 N 个线程直接切换,消耗大量的 cpu 资源
    * 每个线程调度的次数会降低,线程的执行效率降低

     

 

  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在多核平台上,利用OpenMP线程绑定技术可以显著提升应用程序的性能。OpenMP是一种用于共享内存并行计算的编程模型,它允许程序员轻松地将串行代码转换为并行代码。而线程绑定则是指将线程与特定的CPU核心绑定,以确保线程在特定的核心上运行。 使用OpenMP线程绑定技术的主要好处是提高了应用程序的局部性。当线程与特定的核心绑定时,可以避免线程在不同核心之间频繁地切换,从而减少了缓存的失效和数据传输的开销。这样可以提高程序的数据局部性,加大数据重用的程度,从而提高了应用程序的性能。 此外,OpenMP线程绑定技术还能够充分利用多核平台的硬件资源。多核平台上的每个核心都有自己的缓存和执行单元,可以同时执行多个线程。通过将线程与核心绑定,可以确保每个核心上都有线程在执行,最大限度地利用了硬件资源,提高了能效。而不绑定线程的情况下,线程可能会在不同的核心之间迁移,导致某些核心空闲而造成资源浪费。 然而,需要注意的是,线程绑定技术并不适用于所有情况。在一些负载不平衡或者需要动态调度的情况下,线程绑定可能会导致负载不均衡或者线程之间的竞争,从而影响性能。因此,在选择是否使用线程绑定技术时,需要根据具体的应用场景和需求进行权衡。 总之,利用OpenMP线程绑定技术可以有效提升多核平台上应用程序的性能。它通过提高局部性和充分利用硬件资源,实现更好的并行化效果,从而加速应用程序的执行。同时,需要根据具体情况选择是否使用线程绑定技术,以获得最佳性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值