作者:风河的高级技术规划主管Rob McCammon December 12, 2006
文章来源:http://www.ednchina.com/blog/rob/
为了能够提高设备的执行速度,许多嵌入式开发项目正在考虑从单核处理器到多核处理器的移植。不幸的是,为了提高设备执行速度,将移植软件到一个多核处理器上,并不像为了提高执行速度而直接更换另一个更加高速的单核处理器那么简单。
想让一个软件在一个多核处理器系统上正确、高效地运行,需要经过仔细的思考、规划和实施。在开始时,仔细检查软件和设备工作情况,可以确保你的设备在并行的处理器中运转良好。
有一个简单但又被反复证明的例子可以说明这个道理,那就是,把九个女人集中在一起并不能将生一个的孩子所需的怀孕时间从9个月缩短到一个月。当然,和这个例子一样,并行处理器也不能缩短软件的运行时间。但是,n个女人却可以在九个月的时间里生出n个孩子。并行处理器潜在的优良特性,与你所遇到的问题和你定义性能的方式之间的联系是十分紧密的。
可以确切的说,每一个装有32位或者64处理器的设备上都能够并行地完成任务,并且允许更多的任务在特定的总时间内完成。这样,在分析多核处理器能给你带来多少好处之前,你肯定会提出一些重要的问题,那么就让我们带着这些设备在运行中可能存在的问题开始我们下面的分析。
1.为了找寻到并行性,你需要在应用程序中找多深?
2.这种并行性在你现存的系统构架和实现中的表现如何?
3.基于这种可行的并行性,完成你需要的工作会加快多少速度?
解决第一个问题,可以使你了解到,在下面这些情况中找到并行性的真正本质是多么的容易。有一个可以支持1000个并发的设备,如果这些并发作业都是相互独立的,那么在用户会话中可以轻松地在高抽象级中发现并行性。例如,对于一个在汽车中决定何时需要打开气囊的装置,在寻找并行性的时候,你大概需要投入更多的精力去研究细节。在寻找并行性的时候,这些并行性越是接近C/C++实现,就越是难以被利用。
对于第二个问题的答案,在你使用多核设备进行大部分软件创建时,就会看到它的用处。 如果你的软件部件原本已经计划要重复使用,那么你的软件与某些支持并行处理的事物是否足够吻合呢? 如果你的软件已经是多线程的了,并且在某个时间点有很多独立的任务可以同时运行,那么,你的状况就比较便于引入多线程。但你仍然需要关心条件竞争和死锁问题。虽然这些问题都不会发生在单核处理器上, 但是至少你已经把任务很好地分解成为适当大小的模块,以便能够在多线程环境中很好地配合运行。风河公司的 VxWorks 控制系统本来就是多重任务处理系统,而我们许多客户的系统里只存有少数的任务;但这些任务常常是反映设备的不同的阶段或者运作状态, 所以它们从本质上看并不是相互独立的。对于这类任务来说,要想采用并行的方式来运作软件并从多任务中受益,这并不是一件简单的工作。
对于第三个问题,你需要了解你希望通过并行处理带来多大的速度提升。对于这个问题, Amdahl's law 的百科条目(Wikipedia)是一个不错的开端。
在你花费很多时间考虑并行编程模型、选定操作系统并确定应该使用哪一款多核处理器之前,你需要仔细盘算一下,需要付出多少精力才能达到你的目标,还需要考虑使用并行处理可能给你的应用程序和软件带来多少好处。
文章评论(0条评论)
登录后参与讨论