Chinaunix首页 | 论坛 | 博客
  • 博客访问: 45313
  • 博文数量: 21
  • 博客积分: 1425
  • 博客等级: 上尉
  • 技术积分: 175
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-11 20:51
文章分类

全部博文(21)

文章存档

2013年(1)

2010年(12)

2009年(8)

我的朋友

分类: 嵌入式

2010-01-23 14:23:02

   接触多核有段时间了,决定把这方面的知识做个总结。
 

1。多核基本理论

多核即在一个单芯片上面集成两个甚至更多个处理器内核,其中每个内核都有自己的逻辑单元、控制单元、中断处理器、运算单元、一级cache、二级cache共享或独有,其部件的完整性和单核处理器内核相比完全一致。

片上多核处理器(CMP)是将多个计算内核集成在一个片处理器芯片中,从而提高计算能力。每个微处理器核心实质上都是一个相对简单的单线程微处理器或者比较简单的多线程微处理器,这样多个微处理器核心就可以并行地执行程序代码,因而具有了较高的线程级并行性。由于CMP采用了相对简单的微处理器作为处理器核心,使得CMP具有高主频、设计和验证周期短、控制逻辑简单、扩展性好、易于实现、功耗低、通信延迟低等优点。此外,CMP还能充分利用不同应用的指令级并行和线程级并行,具有较高线程级并行性的应用如商业应用等可以很好地利用这种结构来提高性能。

按照内核的对等与否,CMP可分为同构多核和异构多核。计算内核相同,地位对等的称为“同构多核”。同构CMP大多数由通用的处理器组成,多个处理器执行相同或者类似的任务。计算内核不同,地位不对等的称为“异构多核”,异构多核多采用“主处理核+协处理核”的设计,Cell处理器正是这种异构架构的典范,它是一枚拥有9个硬件核心的多核处理器。在Cell芯片中,只有一个是IBM完整的Power(精简的PowerPC970)处理器,其余8个内核都是为处理图像而专门设计的、用于浮点运算的协处理器。主处理器的主要职能就是负责任务的分配,实际的浮点运算工作都是由协处理器来完成。由于Cell中的协处理器只负责浮点运算任务,所需的运算规则非常简单,对应的电路逻辑同样如此,只要CPU运行频率足够高,Cell就能获得惊人的浮点效能。整数性能和动态指令执行性能并不理想。由于电路逻辑简单,主处理器和协处理器都可以轻松工作在很高的频率上,Cell起步频率可达到4GHz。在高效率的专用核心和高频率的帮助下,Cell可以获得高达256Gigaflops2560亿次浮点运算每秒)的浮点运算能力。Cell聚集在消费性电子市场。

CMP处理器由多个CPU核心组成,每个核心执行各自的程序代码,但是CMP处理器的各CPU核心执行的程序之间要进行数据共享和同步,所以硬件结构必须支持核间通信。高效的通信机制是CMP处理器高性能的重要保障,比较主流的片上高效通信机制有两种,一种是基于总线共享的cache结构,一种是基于片上的互连结构。

总线共享cache结构是指每个CPU内核拥有共享的二级或三级cache,用于保存比较常用的数据,并通过连接核心的总线进行通信。这种系统的优点是结构简单,通信速度高,缺点是基于总线的结构可扩展性较差。

基于片上互连的结构是指每个CPU核心具有独立的处理单元和cache,各个CPU核心通过交叉开关或片上网络等方式连接在一起,各个CPU核心间通过消息通信。这种结构的优点是可扩展性好,数据带宽有保证,缺点是硬件结构复杂,且软件改动较大。

 

2。网络多核处理器

网络处理器主要应用于通信领域的各种任务,比如包处理、协议分析、路由查找、声音/数据的汇聚、防火墙、QoS等。网络设备如路由器和交换机的体系结构的发展基本上经历了基于通用处理器的体系结构和基于ASICRISC的体系结构两个阶段。

网络处理器的体系结构是在以上两种体系结构的基础上,综合了双方优点推出的一种新型的体系结构。网络处理器是一种可编程ASIC,不但可为系统提供类似ASIC的处理速度,而且可以提供类似通用处理器的灵活性。网络处理器主要被用于处理线速wire-speed数据,进行协议分析和数据分类,位于物理接口处理器和交换架构之间。

网络处理器器件内部通常由若干个微码处理器和若干硬件协处理器组成,多个微码处理器在网络处理器内部并行处理,通过预先编制的微码来控制处理流程。而对于一些复杂的标准操作如内存操作、路由表查找算法、QoS的拥塞控制算法、流量调度算法等则采用硬件协处理器来进一步提高处理性能,从而实现了业务灵活性和高性能的有机结合。

网络处理器是一种专门用于网络报文处理的CPU,它的设计充分结合了网络环境中数据流的特点,具有优化的体系结构和指令集。一般由通用的RISC(精简指令集计算机)核或专用的处理器实现,通过执行预先编制的程序对到达的报文进行处理。为提高性能,网络处理器内部可以由多个核组成。网络多核处理器一般可以分为两种,一种是具有一般运算能力和指令存储能力的处理单元,另一种是能够完成特定处理任务的功能模块。这两种单元一般采用以下两种组织机制:

流水线:每个内核被设计成具有特定处理功能的模块,这些模块以流水线方式组织在一起完成分组的处理。

并行处理:每个处理单元都可以完成相似的任务,多个处理单元彼此间可并行执行,网络处理器可实现不同级别的并行处理。通过流水线实现指令级的并行; 通过硬件线程实现线程级的并行; 通过片内多处理器结构实现处理器级的并行。

然而网络处理器对报文处理的并行度是有限的,主要原因是

Ø  共享资源访问瓶颈。一旦多个并行体对共享资源(如路由表)的访问出现瓶颈,增加并行度只能增加对共享资源的高度开销而不能提高性能。

Ø  相关性问题。某些应用(如IPsec协议处理)对同一个会话中报文处理是前后相关的,即同一个会话的报文必须被相同的core处理。将报文随机分给不同的core并行处理不但会破坏相关性,还会造成错误。即使对于没有相关性的会话,并行处理造成的报文乱序还会引发网络系统不必要的TCP重传。

 

3。多核发展现状

  

网络处理器可以看作是基于多线程的片上多内核系统(CMP),它不但集成了多个可以独立并行的微内核,还提供了多线程的支持,是一套典型的多线程、多内核的并行处理机系统。在这样的硬件体系架构中,网络处理器的应用开发者不得不研究和挖掘特殊的硬件技术和编程技能以获得优良的包处理性能,包括基于多内核架构的并行处理模型,多线程技术,特定用途的硬件加速单元,优化的内存结构等。对硬件细节的过度关心增加了编程的复杂性,没有良好的并行软件设计模型的支持也降低了代码的可重用性和可维护性。在现有的相关研究项目中,大多对通用处理器提出了解决方案,但是很少有专门针对特定网络处理器的研究。这使得研究特定网络多核处理器的程序设计技术具有很高的实用价值和理论意义。

在单核处理器研究中,主要集中在提高频率,提高指令级并行度等方面。而在多核体系中,更加关注核与核之间的协作、共享资源的分配、提高线程级并行度等方面。

多核处理器必然带来一个问题是,需要提高程序的并行度,因为单线程程序是无法发挥多核处理器的优势的。通过编译优化可以把原先单线程的代码编译成多线程的形式。OpenMP提供了一种方法,程序员根据需要把可以并行处理的代码加上合适的标记,编译器根据这些标记把相应代码编译成多线程的程序段。多线程程序开发涉及到多线程调试的难题,这在多核处理器上会变得更加困难,所以多核体系导致程序开发模式发生巨大变化。

多核处理器上的任务调度也是个新问题,常用的调度算法有全局队列调度和局部队列调度。前者是指操作系统维护一个全局的任务等待队列,当系统中有一个CPU核心空闲时,操作系统就从全局任务等待队列中选取就绪任务开始在此核心上执行。这种方法的优点是CPU核心利用率较高。后者是指操作系统为每个CPU内核维护一个局部的任务等待队列,当系统中有一个CPU内核空闲时,便从该核心的任务等待队列中选取恰当的任务执行,这种方法的优点是任务基本上无需在多个CPU核心间切换,有利于提高CPU核心局部Cache命中率,从而提高系统的性能。目前多数CMP操作系统采用的是基于全局队列的任务调度算法。

如何有效地利用多核技术,对于多核平台上的应用程序员来说是个首要问题。多核时代的到来需要软件开发者必须找出新的开发软件的方法,选择程序执行模型。在多核系统中,核心是通过内存共享数据和通讯。为了充分利用多核,程序需要同时做很多工作。

多核编程存在的问题:

Ø  同步问题。对于同一个分组中的报文必须被相同的核处理的情况,各个报文不是相互独立的,有时分组间也存在一定的制约关系。这种制约关系主要体现在服务时序和资源操作两个方面,对于服务时序引起的同步问题可以维护分组处理状态来解决,对于资源操作冲突则需要通过加锁机制来解决。

Ø  处理资源调度问题。对一个待处理的报文到达时交由哪个核内处理,如何处理。在调度时要考虑系统负载和流量特性在内的多种信息,并要保证效率和公平性。

Ø  模块间通信问题。为了解决同步以及系统控制等问题,网络处理器内部核间的通信以及外部设备间的通信越来越多,甚至成了系统性能的瓶颈。高效的核间及设备间的通信机制将大大提高程序的效率,这也是程序设计中必须要考虑的问题。

Ø  编程者如何设计一个能充分利用多线程并行来提高应用程序性能的合适模型。如果没有统一模型,则每个程序都要重新实现多线程的性能提高模型,降低了编程效率。

Ø  随着处理器数目的增加,负载均衡就成了一个很大的问题。而且对于一般的编程人员来说,实现一个动态调度器来解决不规则任务问题来使程序保持在一个良好状态是困难的以及耗时的。

 

 

阅读(606) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~