[商用频道] [企业采购] [办公打印] [投影机] [服务器] [网络与安全] [电脑][软件及服务]
在为移动平台及多核芯片开发高性能软件时,人工智能技术可以发挥独特的作用,由IBM、欧盟等支持进行的MilePost研究项目在这方面做出了大胆的探索。
■乐天 编译
在软件开发过程中,程序代码的优化是一个基本的步骤。所有的程序员都希望他们编写的程序运行得更快、占用更少的资源。然而,当今CPU的架构非常复杂,进行处理器级的代码优化不仅复杂而且费时,所以一般的程序员根本做不了这项工作,必须依靠优化编译器还完成。经过这些编译器优化后的机器码简单而且高效,只有极少数的汇编语言大师可以与之媲美,因此,也没有必要在进行进一步的优化了。
但是,这里有个前提就是人们已经为该CPU架构开发出了一个非常好的优化编译器。一般而言,为当今主流的台式CPU找一个这样的编译器并不难,但是面对移动设备时就不是那么回事了。在嵌入式系统快速发展的今天,处理器架构变化太快了,编译器的设计和开发者们根本就跟不上这种变化。
一个有IBM研究院和欧盟支持的研究项目MilePost 找到了解决这一问题的办法。该项目的研究人员开发出了一个新的、实验性的GCC编译器,采用人工智能技术来提高代码的质量。这个项目的最终目标是让编译器的开发者在为某个指定的平台开发编译器时能够更容易,而解决办法则是让编译器能根据平台的不同自动对代码进行优化。这是一个听起来有些不可思议但很有吸引力的想法,也许会成为编译器的发展方向。
优化是一个学习的过程
就目前研究进展来看,MilePost不会指导程序员编写代码,也不会提供任何关于如何编写高效算法的建议,MilePost所做的是通过机器学习技术收集软件在性能方面的数据,然后对机器码进行响应的调整。
这是一个非常复杂的过程(如果你感兴趣,已经有很有学者发表了众多与此相关的论文),不过,从本质上说,其工作原理是通过分析源代码找出一些可能会用于优化的地方,比如涉及很多参数的子程序、多层嵌套的循环语句以及频繁使用的数学公式等。在MilePost对某个程序中所有可以优化的语句进行统计后,它再根据统计学原理决定哪些优化可以产生最佳结果,据此对编译后的代码进行针对性的调整。
这其实与这年来编译器的设计和研发人员在开发编译器时所做的工作基本一样,区别只是研发人员在做这件事情的时候更主观,很多时候,人们是在猜测那种优化方法可能更好。而MilePost能够基于统计数据进行上述决策,这些统计数据是代码在某种特定环境中运行时取得的。根据IBM进行的测试,与传统的编译器相比,MilePost编译后的代码性能能提高18%左右。
并不只是速度问题
有人也许会问,现如今CPU的运算速度越来越快,比如,有研究显示,大多数使用者连PC处理器的一半处理能力都没有用到,在这种情况下,还有必要进行这么低级别的代码优化?对台式CPU来说,情况也许的确是这样,但是对移动设备来说这种机器码级别的代码优化却是很有必要的。特别是当某个设备安装的是低能耗的CPU,而且其计算资源很有限的情况下,此时的代码优化就不是可做可不做,而是必须做的工作。
为移动设备开发软件的程序员常常要一次面对几种不同的平台,保证在每个平台运行的程序性能大体一致需要大量的代码优化工作。如果没有成熟的代码优化编译器,程序员只好人工进行代码的优化。这种代码优化工作有时可能需要几个月,既增加了开发成本同时也延误了产品上市时间。而一个具有机器学习能力的编译器可以自动根据每个平台的特点进行代码的优化,从而把程序员从复杂而且耗时的代码优化工作中解脱出来。
从长远来看,机器学习技术还能给编译器带来其他帮助。一个可能的应用领域就是是对在多核处理器上运行的代码进行优化。并行编程是当今软件开发领域最大的挑战之一,如果编译器通过机器学习能设法让代码自动并行运行,这对于整个软件领域将是一个巨大的贡献,同时对芯片制造商来说也是一个巨大的利好消息,因为可以解除它们设计多核芯片时的后顾之忧。
到目前为止,MilePost还只算是一个实验性的项目,感兴趣的人们可以从该项目的网站上下载源代码,编译它,自己进行试验,但还不能指望马上就可以在软件开发过程中真正使用。不过,无论如何,MilePost反应了下一代编译技术上的最新进展。对于那些关注软件效率,特别是为手持设备或其他嵌入式系统开发软件的人们来说,一定是值得关注的好消息。