多核的多重挑战——新联盟在编制多核通信API的规范
milex 2007-09-06 02:28:47 种存储器结构也是问题
多核结构也可以按存储器结构形式和通信采用的机制来讨论。
对于共用存储器结构多核系统,传统上多采用SMP编程模式。每个核都可以访问到全局地址空间中的所有存储器。访问共用存储器的典型方法是通过总线,使用查询的控制机制,来避免多个核同时访问同一个存储器。为使片上的每一个核都能够访问到所有的存储器,这是一种最直接明了的方法。另外,共用存储结构可以使用引用方式传递数据,数据不必真实地移动。当太多的核同时存取时,共用存储器会变成瓶颈。传统的SMP编程模式,不太能够适应多核系统处理器。因为SMP传统编程模式假定,有均一的存取结构和缓存等机制。SMP的功耗不理想,在伸缩方面也达不到嵌入式多核系统期望的数十乃至数百个核的水平。SMP频繁地同步对于多数嵌入式多核系统是过度的耗费。嵌入式多核系统需要适合流式的通信和编程,而SMP对于流模式却笨拙不灵。
分布式结构包括从全球英特网、广域网(WAN)到局域网(LAN),服务器、含有各种处理内核的单芯片器件。对于分布存储的多核系统,各核都有自己的局部存储器。尽管可能有全局存储地址空间,但需要各种形式的信息传输和资源同步机制
才能通信。具有自己局部存储器的核不必与其它核分享存取以求效率与支持伸缩。当某个核要求从其它单个或多个核取得数据或命令时,必须在它们之间进行同步,而且数据必须物理地在处理器间移动而取代引用。并行编程支持便携形态的信息传送。分布式的编程通常比多线程(但它在SMP系统中能工作的很好)编程容易。然而,信息传输所需代码大于并行传输的共用代码。信息传输方式最初就是为串行通信过程(CSP)而设计的。从串行通信的字眼上就可联想到,它不会运行于现代要求紧凑代码的科学应用上面,更不用说用到嵌入式可伸缩的系统上了。
为了支持这些多种不同存储和通信结构,多年来开发了多种API标准。其中有称之为OpenMP(开放多处理)和MPI(信息传输接口) 的两个标准。
MPI是大范围分布计算系统中广为应用的信息传输API。它可用于多种分布的存储结构,因而也适宜于移动系统。每个运行的硬件都可自行优化,因而它又是高速的。 MPI虽然功能强大,但是复杂。要是把各种功能都发挥出来,单片多核上的内存远远不足,同时计算开销之大也使存储系统时延过大。
开发更快的通信API
处理器间的通信标准尽管很多,但是没有一个是为近邻分布(紧耦合)、存储紧凑、性能约束苛刻的嵌入式多核的系统所设计的。在嵌入式世界里,多数的应用在性质上是非对称的。多核系统可以在同一个单芯片内使用异构的核,或是在同构核上运行不同的操作系统而成为非对称结构,或者在同一芯片上令二者共存。
为应对向多核系统的转移,业界同意抽象化并发概念,令其通用、简单、有效,直观地表达为一组编程用的API。这即是多核协会的宗旨。 编写嵌入式多核系统的规范时,应对资源管理(核、存储、连接、I/O),核间通信,和片内行为的同步等有所陈述。编写API不应只针对单一操作系统,或单一的SMP操作系统。当异构多核系统跨越多个核运行多个操作系统时,需要考虑任一操作系统均不能操作的资源。硬件加速器不运行任何操作系统,仅依靠当时运行核的操作系统对它的交互作用来工作。硬件加速器更加重了这种系统的复杂性。
联盟已经着手编制关于嵌入式分布基础通信方面的信息传输和资源管理的API。内部称它为通信API(即CAPI)。CAPI的目标系统包括多维异构核,片上连接,存储器,操作系统,软件开发工具,和编程语言。CAPI是关于API的编写规范,而并非是其实现。联盟的成员可以自由地参照它完成自己所需处理器结构和选用操作系统的CAPI实现。