arm-none-eabi-gcc非常慢,但是时间报告说窗户速度很快

时间:2017-12-21 09:33:20

标签: gcc arm

我在windows上使用gcc for arm但它很慢: 编译文件:

#include "stdint.h"
int main ( int argc, char **argv ) {
     // code
     return 0; // Indicates that everything went well.
}

使用的命令:

bash-3.1$ time C\:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.4\ 2016q3/bin/arm-none-eabi-gcc.exe -c -ftime-report main.c

结果:

bash-3.1$ time C\:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.4\ 2016q3/bin/arm-none-eabi-gcc.exe -c -ftime-report main.c

    Execution times (seconds)
     phase setup             :   0.01 (52%) usr    1538 kB (90%) ggc
     phase parsing           :   0.01 (26%) usr     127 kB ( 7%) ggc
     TOTAL                 :   0.02              1707 kB

    real    0m0.795s
    user    0m0.000s
    sys     0m0.015s

并且缺少文件:

bash-3.1$ time C\:/Program\ Files\ \(x86\)/GNU\ Tools\ ARM\ Embedded/5.4\ 2016q3/bin/arm-none-eabi-gcc.exe -c -ftime-report main.c
arm-none-eabi-gcc.exe: error: main.c: No such file or directory
arm-none-eabi-gcc.exe: fatal error: no input files
compilation terminated.

real    0m0.123s
user    0m0.000s
sys     0m0.015s

所以我不明白为什么gcc这么慢

Ps:主机是带有ssd和8Go内存的英特尔i7

2 个答案:

答案 0 :(得分:0)

我用来加速GCC(以我的情况为http://winlibs.com/的MinGW-w64构建)和MSYS2 shell的一个技巧是使用RAM驱动器。

我使用http://www.ltr-data.se/opencode.html/#ImDisk

中的ImDisk

要设置4G的RAM驱动器(将其调整为适合您的系统的值),我运行(在提升的提示下):

imdisk -a -t vm -s 4G -m R: -p "/FS:NTFS /V:RAMDisk /Q /Y" -o rem
MKDIR R:\TEMP
ECHO Y|CACLS R:\ /G Everyone:F /T /C

最后一行是将NTFS权限设置得尽可能简单,以免浪费时间。

然后(作为编译前的普通用户),您需要将TEMP环境变量指向RAM驱动器。

在命令提示符中(如果您也在同一命令提示符中运行编译器),可以使用以下命令执行此操作:

SET TEMP=R:\TEMP

在您的bash外壳中,可能是这样的:

export TMP=R\:/TEMP
export TEMP=R\:/TEMP

为了进一步加快速度,我还从源代码在同一RAM驱动器上构建了所​​有软件。

但是,即使您的源位于磁盘(HDD或SSD)上,构建过程编译器也将更快,因为它会定期在临时文件夹中创建(和删除)文件。

答案 1 :(得分:0)

如果您真的想知道什么很慢,请对其进行分析。几年前,在类似情况下,我使用了StraceNT。我不记得确切的命令行。

在我的案例中(使用Cygwin工具),计时表明,Cygwin程序较慢的是文件访问,而跟踪显示,(公司要求的)防病毒软件已挂接到每个系统调用中。

使用密集的优化来编译复杂的程序可能会受到CPU的限制,但是不进行优化就编译hello world完全会受到IO的限制。不管速度慢的原因是什么,都在文件访问中。

同一编译器的不同Windows版本可能更快,也可能不会更快。如果您有足够的RAM使系统不开始交换,则在虚拟机中运行的Linux构建可能会更快(当然,本机Linux会更快)。

使用RAM磁盘可能会加快大型构建的速度(尽管仅在操作系统在管理磁盘高速缓存方面做得中等的情况下)。但是,如果问题是文件I / O系统调用缓慢,而不是文件系统I / O缓慢,那将无济于事。