打印

怎样提高ARM编译器的编译时间

[复制链接]
2640|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
liuweifeng168|  楼主 | 2010-1-20 13:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 liuweifeng168 于 2010-1-20 13:52 编辑

现在一些大型的工程项目,都是由成千上百的源文件组成,那编译的时候就需要花费大量的时间。以高通开发平台为例,每完全编译一次所需要花费的时间少则67个小时,多则1516个小时。这篇**主要讨论不需要任何编译加速软件(如,ElectricAccelerator软件)的情况下去提高编译的时间。
(一)编译器实际执行情况的分析。编译器进行编译的时候大致分为下面三个阶段
1)
编译器进行加载原文件。这个时间一般情况下是固定的。

2)
编译器获得license。一般情况下获得floating license的时间要比node lock license的时间长。编译器只是简单的解析node lock license文件并确定次license文件可用就可以了;而对于floating license,编译器先需要通过TCP/IP网络给服务器发送一个消息,然后等待响应,当接收到响应后进行确认是否是个可用的license,最后对license进行解析并确认。为了提高编译速度还是尽量使用node lock license

3)
编译器进行编译原文件。这步是关键的一步,可从下面几步进行优化。

l
所用时间的长短取决于源文件的复杂度和尺寸,编译少量的大文件就比编译大量的小文件花费的时间少,主要因为少量的大文件花费在加载、获得license上的时间就少的多了。

l
使用一个命令编译多个文件比更能节省编译的时间,如原先的脚本文件如下:

armcc file1.c ….
armcc file2.c ….
armcc file3.c ….
…….
如果改为如下的形式,编译的时间要少很多,但是一定要注意并不是所有的文件都可以合并为一个,因为可能每个每个文件的编译选项不同。
armcc file1.c file2.c file3.c ….
(二)包含路径的影响
包含路径对我们编译的时间影响也很大,应该尽量减少包含路径。还应该尽量避免多次包含同一个头文件,如我们在foo.h文件中这样填写。
#ifndef foo_h
#define foo_h
….
#endif
/* foo_h */

我们也可以在里添加-W+g来警告不合法的头文件。
(三)使用make进行并行编译
很多情况下,在一些大的工程中是使用makefile进行编程的,这种情况下我们可以利用多线程及多核的思想来加快编译的速度,典型的语法如下:
make
–j
N*M

其中N代表执行的进程数,M代表执行的时候所参与的处理器核数。
这种情况可以大大的加快编译的速度,比如我们现在使用一个24核处理器的服务器进行编译,那可以使用命令:
Make
–j
48

表示使用24个处理器核,每个核开启2个进程。
(四)操作系统的选择
一般情况下,在linuxsolaris操作系统下比在windows系统下编译的速度更快。如果是使用windows操作系统,那么我们尽量关闭杀毒软件,来避免杀毒软件对文件的扫描浪费的时间。

相关帖子

沙发
zhangxujun1981| | 2010-1-21 08:48 | 只看该作者
学习了,谢谢

使用特权

评论回复
板凳
wowow| | 2010-1-21 16:39 | 只看该作者
补充一点:使用预编译头文件(pch文件),一搜就知道了。

使用特权

评论回复
地板
王紫豪| | 2010-1-22 16:08 | 只看该作者
“提高”编译时间???????

嘿嘿

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

8

主题

26

帖子

0

粉丝