微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > MCU和DSP > 有效利用RTOS编程概念支持先进的多线程架构

有效利用RTOS编程概念支持先进的多线程架构

时间:02-20 来源:电子工程专辑 点击:

器资源,13个执行指令周期可以全部用上,效率达到100%。相比基本情况速度提高263%。

采用EEMBC性能基准的测试表明,34K内核与24KE系列产品相比,只用两个线程就可以提速60%,而硅片尺寸只增加14%,如图3所示。


图3:EEMBC基准性能例子表明只用两个线程性能就有60%的提高。

使软件适应多线程

多线程方法的关键优势是在大多数情况下现有软件只需做极少量的修改就能顺利运行。大多数消费类设备程序已经写成一系列的半独立线程。每个线程可以被自动或人工地分配给专门的硬件TC。

如果当前正在执行的线程由于缓存丢失或其它原因引起的时延而无法继续运行,CPU执行机制就会从那个TC切换到另外一个TC,该TC的线程可以在不浪费CPU周期的情况下运行。程序中线程越多,利用等待存储器访问周期的可能性就越高。

多线程处理对使用或考虑使用RTOS的任何人来说都是非常理想的,因为RTOS程序本身就具有多线程特性。无需为多线程重新编写RTOS程序,因为RTOS可以在程序控制下自动将程序线程映射为TC,其映射方式与将线程映射为传统处理器的方式相同。

如果线程数比TC多,通常需要用到传统的环境切换(context switch)。这些环境切换与传统处理器中的是一样的。RTOS保存当前任务的状态,加载另外一个任务的环境并开始执行。多线程环境显然要比传统处理器更适合更多环境的切换,所实现的环境切换速度也更快。

Linux/Windows与RTOS的多线程比较

本节重点介绍相对Linux和嵌入式Windows版本等操作系统而言快速RTOS的优势。Linux的典型实时性能在数百微秒到数毫秒。但在最坏情况下Linux实时性能并不理想。而快速RTOS可以提供确定的实时性能,在单线程处理器上可以达1到2毫秒,在多线程处理器上还会更快。


图4:将线程映射为TC

RTOS将唯一资源分配给唯一的TC。传统的做法是将单浮点单元(FPU)分配给TC0。任何执行硬件级浮点运算的线程都需要被映射为TC0,因此所有这类线程必须共享TC0。这就形成了多种有趣的编程选择,特别是用硬件还是软件实现浮点运算的选择。

用硬件实现浮点运算显然速度会更快,但另一方面需要共享FPU。如果线程只做少量的浮点运算,那么用软件实现将更有意义,而需要密集浮点运算的线程通常要用硬件实现,并被映射到TC0。值得注意的是,这个修改不需要记录,因为是否用硬件或软件浮点实现的决定可以由编译器切换实现。

给线程分配权重

如果程序没有给各个线程定义权重,那么程序调度器就会给所有线程分配相同的权重,另外也可以使用时间分段技术使线程依据用户指定的权重共享CPU周期。分配权重相当于将适当比例的CPU周期分配给各个具体线程。线程权重由RTOS透明地映射为硬件TC。

一些现有程序是针对传统处理器设计的,其前提条件是假设在有高优先级的线程"准备好"时低优先级线程将被禁止运行。在嵌入式编程环境中,准备好的意思是线程运行所必需的全部条件都得到了满足,阻止它运行的唯一因素是它的优先级。

多线程可破坏这种条件,因为无论高优先级线程是否停止,低优先级线程都能运行。编写取消这种状态的代码可优化性能。

另外一方面,根据这种条件编写的现有代码无需修改就能运行在多线程处理器上,只需简单地设置操作系统开关,使其只允许相同优先级的线程同时被加载到TC。在设置这个开关时,需要确保给那些能够并行运行的线程尽量分配相同的优先级。

可中断的重要性

在传统的嵌入式应用中中断是非常重要的,因为它们提供了主要的、在许多情况下也是唯一的线程间切换方式。中断在多线程应用中也起着相同的作用,但有一个重要的区别,即在多线程应用中,线程间的切换不仅要通过中断,还要使用空闲CPU周期。

需要尽量避免在修改关键数据结构时中断某个线程,同时起用另外一个线程对同一结构作其它修改。这将导致数据结构处于不一致的状态,极易引起灾难性后果。

大多数传统应用解决这个问题的方法是,当ISR或系统服务正在修改RTOS中关键的数据结构时暂时锁住中断。这种方法可靠地阻止了任何其它程序跳进来对执行代码正在使用的关键区域做出不恰当的修改。

然而在多线程环境中这种方法是不够的,因为有可能被切换到不受中断锁定控制的不同TC,从而可能对关键区域做出修改。该问题可以利用34K架构中的DMT指令解决,当数据结构在修改状态时可禁止多线程功能。

除了这些相对简单的例外情况外,设备代码在从传统设备移植到多线程设备时无需修改就能直接运行。因此,我们能够利用以往被传统RISC处理器浪费的CPU周期,充分发挥多线程性能优势。多线程可以满足当前和未来需要高性能的消费类、网络、存储和工业设备应用要求,而成本和功耗只有少许的增加。

与主要的竞争技术--多内核技术相比,多线程有更小的硅片面积和更低功耗的优势,而且编程简单,现有程序只需做少量修改甚至不用修改就能运行。多内核方法也有它自己的优势和强项,因此没有理由证明这两种方法不能融合出一种"最佳方法"。在要求高性能、低成本和最小功耗的应用场合,多线程是一种极具竞争力的方案。

作者:

John A. Carbone

产品行销副总裁

Express Logic公司

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top