|
设计和优化多核处理器软件
|
新加坡动力科技公司 Daniel Ang & Jason Lee
|
随着多核芯片的应用越来越多,设计软件的思路也开始转变。因为在多核的环境下,应用模式已经转变为并行,采用传统的设计观点肯定会出现问题。按照传统的顺序控制、循环控制模式也无法发挥多核芯片的性能。在设计的过程中,如何共享资源和解决冲突的问题是必须考虑的。另外,如何找到一个可靠的基础进行软件移植,使原来开发的代码还可以继续使用。
QNX在多核领域做的很完善。QNX在1997年率先将SMP引入嵌入式行业,1984年QNX就开始支持透明式的分布式处理。另外,QNX能够支持多核环境开发工具。
操作系统主要分为三种内核结构。实时执行(Realtime Executive)操作系统(如VxWorks 5.x)没有完整的MMU和完整的内存保护,程序运行在一个内核的空间里,如果任何一个程序出现问题,就会导致操作系统出现死机。另外一种是整体内核 (Monolithic kernel)操作系统,包括NT/ Unix等,提供了部分的内存保护,自己设计的程序放在用户的空间,内核和驱动程序放在另一个空间。如果内核出现问题,并不会导致驱动程序出现问题;但是当驱动程序出现问题时,内核会受到影响。
而QNX是微内核(Microkernel)结构的操作系统,QNX的内存管理被封装在一起,任何其他组件出现问题不会对其造成影响。QNX内核是完全独立的,其他应用程序完全放在自己的内存空间里面,它们相互之间不会受到干扰。而且文件或系统应用可以随时启动停止,不需要重启系统,完全可在运行的时候进行。
在多核环境下进行开发,主要是非对称多重处理和对称多重处理。非对称多重处理是两个CPU可以同时运行不同的操作系统。这就要求设计的时候各种资源都要分配好,否则每个操作系统都只能看到部分资源,导致升级很困难。在1984年,QNX已经有了透明的分布式处理,CPU能够完全共享资源。这样就可以充分利用硬件资源。各核之间的通信是通过扩展总线进行的。其好处是两个核上面的资源不需要修改代码。
而对称多重处理是在两个CPU上跑一个操作系统,由操作系统完成里面的分配工作。操作系统可以看到现有资源,CPU负载的平衡由操作系统动态的进行。它的缺点是,在对CPU和内存进行指定分配时,如果设置的不好,就会出现问题。一般情况下,都需要修改原来的软件。
QNX是一个多核标准的系统,可以把进程划分成一个个独立的线程,线程都会共享进程的资源。线程完全是由操作系统配置的,这样可以充分利用CPU。在非对称模式下,如果增加一个线程,就要处理线程和进程之间的共享,导致工作量非常大。而在对称模式下,这个工作很简单,不需要做任何的工作,系统可以自动的分配。
Q NX还提供了一套多核环境下的开发工具,里面包括了代码编译器、调试器和系统分析、应用分析、内存分析等工具。
在设计单核应用和多核应用时,最主要的不同点就是在多核的应用下要考虑到并发。中断来了要判断是哪个CPU响应。通常的做法是,把一个外围的事件分布到一个线程上去,把不同的操作分布到不同的CPU。单核的环境下喜欢用先进先出,但多核的情况下必须考虑到并发的情况,必须设定优先级。QNX的线程优先级可以动态分配,可以提到20-25。在移植到多核的情况下,如果选择AMP,就要作分区。可以用CPU的负载作分区,或者以数据的共享需求作分区。在对称多重处理的环境下,考虑的问题是线程的进度,同一个线程在不同的CPU上运行,就会有干扰问题。当然,也可以把一个线程只设置到一个CPU上。 |
《世界电子元器件》2006.11
|
|