由于CPU更灵活和DSP功率效率更高,因此同时含有CPU和DSP的异质多内核硅芯片能够以一种高功效的方式运行要求很高的多媒体应用。不过,只有当软件能够充分利用多内核平台的特性时,异质多内核硅芯片的优势才能体现出来。多内核芯片的编程远不同于对几个相连的单核系统的编程。在进行多内核芯片编程时需要考虑如下几个主要方面:
1)单线程应用不会自动在多内核系统上运行得更快。在嵌入式系统中普遍使用的C和C++在本质上是顺序执行语言。因此,当把一个用C或C++编写的应用程序移植到多内核系统上时,该应用也许并不能从多内核平台的并行处理能力中获益。
2)由于C和C++不能在语言级为应用分割提供任何帮助,因此必须采用系统级分割方法。通过采用能在内核间重新分配任务的合适的运行(run-time)平台(操作系统及内核间通信),应用/算法分割可在任务(系统)级完成。为获得最佳效率而进行的精细分割(分割任务/算法)可以采用专为该目标设计的代码分割工具来完成。
3)通信是要花费时间和功率的。对于一个将任务分割到多个内核上的应用而言,软件模块或任务间的通信效率(如通信建立时间、需要传输的数据量、传输速度、以及抵达时间的可预测性)是至关重要的。
需要传输的数据量取决于应用类型和应用分割。而传输效率和可预测性则与通信(软件)架构和系统中使用的硬件互联类型有关。硬件互联提供的灵活性可能有限,但分割和通信软件的选择权通常掌握在设计人员手中。
连在一条总线上的共享存储器用起来是很方便的(这是一种很常见的设计),但存储器和/或总线的可用带宽必须在多个内核间共享。如果存储器是单端口的,其它的内核将有可能停止运行。专用互连(在内核上的串行或并行端口)或许可以减轻这一竞争。
数据的同步传输可由一个易于实现的轮询任务来实现,不过通常情况下,基于中断的同步传输更有效。
一种用于处理器间通信的高效灵活的软件架构能够快速地和可预测地传输数据、管理多个逻辑连接和不同种类的硬件互联、同步传输、以及为应用提供一个抽象层。
4)调试多内核系统比调试单处理器系统更为复杂,而且可能会影响到应用。
如果整个系统停止工作,那么系统状态很容易被检测出来。但如果其中一个内核或子系统停止工作,系统状态的检测就变得更加复杂,因为其它内核可能正在与停止运作的内核进行数据传输。一些内核会使其外设与内核一起停止工作,这使得内核之间通信状态很容易被检测出来。一个允许你控制系统中哪些部分应被停下来进行调试和控制传输中数据的多内核调试器是必不可少的。
大多数嵌入式系统会受到外部事件的影响和有时间依赖性。如果一个内核为了调试暂停下来,那么整个系统可能将无法正常工作。
作者:Peter Leyssens
peter@
产品工程师
PolyCore软件公司