打印

Cortex-M3平台下GCC编译器相比AC6编译器差距明显

[复制链接]
8504|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
imdx|  楼主 | 2021-7-18 19:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最近给之前测试Dhrystone的代码增加了GCC的Makefile,刚好对比一下AC6和GCC的编译结果。
测试平台:GD32F103C8T6,Cortex-M3核心,8M主频。测试代码除了startup文件以外完全相同。
编译器版本分别为:GCC v9.2.1和AC6 v6.13.1
测试结果如下:
  • GCC -Os面积优化,代码尺寸11136字节,运行时间115.5ms
  • AC6 -Oz面积优化,代码尺寸8536字节,运行时间64.88ms
  • GCC -O3速度优化,代码尺寸15484字节,运行时间67.89ms
  • AC6 -O3速度优化,代码尺寸16976字节,运行时间45.92ms
如果优化目标是代码体积,那么如11136/8536=1.305,115.5/64.88=1.779,GCC体积大了三成,速度慢了近八成。
如果优化目标是执行速度,那么67.89/45.92=1.478,GCC速度慢了近五成,体积倒是小了9%左右。
AC6的面积优化执行速度比GCC的速度优化还要快一点。
此外GCC都是开了`-fdata-sections -ffunction-sections -Wl,--gc-sections`选项的,否则面积优化和速度优化GCC代码体积分别是19376和26448字节。分别还要增加七成。
从测试结果来看,都是AC6明显占优。

使用特权

评论回复

相关帖子

沙发
m564522634| | 2021-7-22 09:15 | 只看该作者
这肯定了,一个收费的一个免费的。 裸机这一块的话专业度还是iar 和 keil

使用特权

评论回复
板凳
ufbycd| | 2021-7-30 11:10 | 只看该作者
arm-none-eabi-gcc最新版已经到11了,GCC还支持LTO 优化选项。

使用特权

评论回复
地板
sonicll| | 2021-7-30 11:32 | 只看该作者
ufbycd 发表于 2021-7-30 11:10
arm-none-eabi-gcc最新版已经到11了,GCC还支持LTO 优化选项。

AC6.15 也支持 -flto了

使用特权

评论回复
5
imdx|  楼主 | 2021-8-2 13:37 | 只看该作者
本帖最后由 imdx 于 2021-9-2 22:27 编辑
ufbycd 发表于 2021-7-30 11:10
arm-none-eabi-gcc最新版已经到11了,GCC还支持LTO 优化选项。

实测结果是:GCC增加-flto选项以后代码功能异常。
AC6的LTO选项正常,相同的代码。

使用特权

评论回复
6
ufbycd| | 2021-9-1 15:31 | 只看该作者
本帖最后由 ufbycd 于 2021-9-1 15:36 编辑
imdx 发表于 2021-8-2 13:37
实测结果是:GCC增加-lflto选项以后代码功能异常。
AC6的LTO选项正常,相同的代码。 ...

是 -flto 不要搞错了,功能异常那是你的版本低了,我开了LTO没有异常。
arm-none-eabi-gcc -v
Using built-in specs.
COLLECT_GCC=arm-none-eabi-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/arm-none-eabi/11.1.0/lto-wrapper
Target: arm-none-eabi
Configured with: /build/arm-none-eabi-gcc/src/gcc-11.1.0/configure --target=arm-none-eabi --prefix=/usr --with-sysroot=/usr/arm-none-eabi --with-native-system-header-dir=/include --libexecdir=/usr/lib --enable-languages=c,c++ --enable-plugins --disable-decimal-float --disable-libffi --disable-libgomp --disable-libmudflap --disable-libquadmath --disable-libssp --disable-libstdcxx-pch --disable-nls --disable-shared --disable-threads --disable-tls --with-gnu-as --with-gnu-ld --with-system-zlib --with-newlib --with-headers=/usr/arm-none-eabi/include --with-python-dir=share/gcc-arm-none-eabi --with-gmp --with-mpfr --with-mpc --with-isl --with-libelf --enable-gnu-indirect-function --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-pkgversion='Arch Repository' --with-bugurl=https://bugs.archlinux.org/ --with-multilib-list=rmprofile
Thread model: single
Supported LTO compression algorithms: zlib zstd
gcc version 11.1.0 (Arch Repository)

使用特权

评论回复
7
imdx|  楼主 | 2021-9-2 22:27 | 只看该作者
ufbycd 发表于 2021-9-1 15:31
是 -flto 不要搞错了,功能异常那是你的版本低了,我开了LTO没有异常。

是笔误已更新

使用特权

评论回复
8
fcccc| | 2021-9-3 07:34 | 只看该作者
那么和ARM_CC比一下呢

使用特权

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

本版积分规则

120

主题

901

帖子

8

粉丝