新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > 嵌入式开发技巧:利用编程技术发挥多内核架构优势

嵌入式开发技巧:利用编程技术发挥多内核架构优势

作者:时间:2016-09-12来源:网络收藏

另一种并行编程架构,CUDA和OpenCL(开放计算语言),则完全匹配GPU方法(使用与主处理器分开的存储器)。这意味着数据在能被操作之前必须从一个地方移动到另一个地方。C编程语言有一定扩展,但也有限制。例如,它是自由递归的,不支持函数指针。其中一些限制源自SIMT方法。

许多应用程序使用CUDA,但与传统SMP平台相比,性能增益有很大的变化,从2倍到100倍不等。造成这种变化的原因是,线程以32为组运行时的效率最高。分支不影响性能,前提是32线程组在同一分支内。

像GPU这样的专用处理器,其采用的方案是同时提供图形和多内核处理。另外一种方案是使用许多传统内核,如Intel的Larrabee(图5)。Larrabee使用专门针对矢量处理优化过的x86兼容内核。

5.jpg

从某种角度看,Larrabee有点类似于IBM的Cell处理器。Larrabee内核只有32KB的一级缓存和256KB的二级缓存可以访问。如果数据不在缓存中,必须从内存控制器或系统中的另一个缓存中申请,然后数据被放进内核的缓存中,再由应用程序继续处理。

环形总线用于内核和控制器之间的通信。IBM的Cell单元互连总线(EIB)也是一种环形总线,连接着 SPE和内存控制器以及外设接口。从编程角度看,Larabee的缓存和Cell的SRAM有很大的差异。诚然,对编程人员来说,Larrabee看起来更像是一组连贯缓存的x86处理器。由于其GPU定位,编程人员可以充分利用它对DirectX和OpenGL的支持。

多内核联网

多内核芯片也是网络基础设施中的常见元件。处理10Gps的网络对多内核芯片来说本身就是很大的挑战。分析和处理来自线速网络连接的数据需要大量的处理资源。

Netronome的NFP-3200网络流量处理器包含40个1.4GHz的内核,每个内核可以运行8个线程,因此1个芯片总共可提供320个基于硬件的线程。这个数量级与GPU相同,但这些处理器主要用于数据包处理。

与IBM的Cell一样,NFP-3200也有一个主CPU型控制器,而且是一个ARM11内核。NFP-3200的40个内核也叫做微引擎,兼容 Intel的IXP28xx架构,主要用于网络处理。这种兼容性很重要,因为大量代码是针对这种架构开发的。较老的芯片具有较少的内核,因此在某种意义上 NFP-3200提供的是相同解决方案。

当然,为解决问题而简单地采用更多的内核只是其中一种措施。Netronome作了大量改进,例如支持TCP任务卸载的增强型微模块。互连速度也更高了,内核之间的运行速度高达44Gbps。

Netronome芯片拥有大量的专用处理器,其中包括了用于处理各种安全协议的加密系统。Netronome的PCI Express接口支持x86处理器经常使用的I/O虚拟化功能。它能被移动到NFP-3200旁边,而不是被另外一条网络链路隔开。

与其它多内核芯片相比,编程NFP-3200通常没有太大问题,因为针对IXP28xx系列有大量现成代码。另外,Netronome提供库,这使得网络处理应用程序的创建更像是模块的堆叠。

Cavium的Octeon II是一种更传统的SMP多内核设计,有2到6个64位 MIPS64内核,它们通过一个交叉开关相连。与Netronome芯片一样,Octeon II是针对网络和存储设备设计的。

Octeon II还有一个RAID 5/6加速器以及用于数据包检查的正则表达式超有限时序机(HFA)。编程Octeon II与编程大多数SMP系统相仿。Octeon II可以运行诸如Linux的操作系统。

其它多

采用更激进的多会增加编程事务,但它能为开发人员开启利用新架构的机会。IntellaSys的SeaFORTH 40C18就属于这种类型(图6)。它本身的编程语言是VentrueForth,指令长度实际上是5位,4个指令可以压缩为单个18位的字(一个指令只有3位长)。40C18有40个内核,它们有相同的处理单元,并且都有64个字的RAM和64个字的ROM。

与具有更多存储空间的芯片(如Intel的Larrabee或IBM的Cell)相比,对40C18进行编程显然有很大的区别。40C18内核的功耗不到9mW,而其它两种芯片在没有大散热器或风扇的情况下都无法正常工作。40C18设计用于嵌入式甚至移动应用。

对大多数开发人员来说,对40C18进行编程将是不同的体验,这不仅因为Forth是编程语言。每个内核的小内存容量和矩阵互连改变了程序设计方法。内核通常运行将数据传送到一个或多个相邻内核的小型函数,因此协同编程将是大势所趋。

即使外部存储器访问也要求三个内核一起工作,当有许多内核可以一起工作时这种方法很管用。40C18还有一种独特的能力,它能将4个指令组成的小程序用一个字发送给相邻内核执行,因此就有足够的空间执行块传送。

XMOS公司的XS1-G4是一种基于32位整数Xcores的有趣混合产品。每个Xcore可以处理大量不同的线程,同时还有一个基于硬件的事件系统帮助XMOS的软外设。与40C18一样,XS1-G4可以在I/O端口上等待。区别是XS1-G4处理多个线程,而IntellaSys芯片处理单个线程。

开发人员可以使用C语言的扩展版本XC发挥XMOS硬件的最大功效。C语言扩展提供了到硬件支持的快捷路径,其中也包括 Xlinks。Xlinks连接芯片中的4个内核,并提供4个片外链路,因此可以连接多个芯片。芯片内部使用一个开关用于Xlink连接,但硬件和软件为处理器间通信提供统一接口。

每个内核有64KB的内存,这个容量比40C18大,但比本文提到的一些更高性能的芯片的内存容量小。同样,对大部分应用代码来说这个容量是足够用的,并且允许使用更传统的线程方法进行编程。针对XMOS芯片的大部分编程工作很可能用传统的C或C++完成,而不是用XC,后者更倾向用于通信和外设处理。

XS1-G4不会向双精度浮点GPU或其它高端系统提出挑战,但它的整数和定点DSP支持使得它适用于其它许多音频和视频处理功能。链接好的XMOS芯片早已在内部用来驱动多个大屏幕LCD。

还将继续保持高速发展。高效地对这些内核进行编程和选择合适的产品并不容易,但它会变得越来越普及,即使是对人员而言。传统应用程序将不断地移植到匹配现有主机的架构上。当应用程序被重新设计或从头创建时,也许会有更好的方案产生。



评论


相关推荐

技术专区

关闭