首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么我的代码在使用Realview工具构建时性能很差,但是使用Codesourcery更好呢?

为什么我的代码在使用Realview工具构建时性能很差,但是使用Codesourcery更好呢?
EN

Stack Overflow用户
提问于 2011-04-22 13:02:37
回答 5查看 1.2K关注 0票数 3

我有一个C项目,以前是用Codesourcery的gnu工具链构建的。最近,它被转换为使用Realview的armcc编译器,但是与用gnu工具编译时相比,我们使用Realview工具获得的性能非常差。它不应该是相反的情况,即它应该提供更好的性能时,使用Realview的工具?我在这里错过了什么。如何使用Realview的工具来提高性能?

我还注意到,如果我用Lauterbach运行Realview工具生成的二进制文件,它就会崩溃,但是如果我使用Realview运行它,它会运行得很好。

更新1

Realview命令行:

armcc -c -diag_-c=ide-取决于格式=unix_转义-no_依赖性_system_headers no_unix_access-C99-arm_only-debug-cpu=ARM1136J-S=SoftVFP-apcs=/nointerwork -O3 -Otime

GNU GCC命令行:

手臂-无-eabi-gcc -mcpu=arm1136jf-s - -Wall endian-msoft- -O3 -Wall

我使用的是Realview工具版本4.1和GCC版本4.4.1

更新2

劳特巴赫问题已经解决了。造成这种情况的原因是半托管,因为在Lauterbach环境中没有处理半托管SWI。重定向C库以避免半托管实现了这个目的,现在我的程序成功地与Lauterbach以及Realview ICE一起运行。但性能问题仍然存在。

EN

回答 5

Stack Overflow用户

发布于 2011-04-22 17:10:02

由于您已经进行了优化,并且在某些环境中它会崩溃,所以您的代码可能会使用未定义的行为或其他潜在的错误。这样的行为可以随着优化而改变,甚至完全崩溃。

我建议您在没有优化的情况下尝试这两种工具链,并确保将警告级别设置得很高,并将它们全部修复。GCC在误差检查方面要好得多,所以也是一个合理的静态分析检查。如果代码构建干净,那么它更有可能工作,并且可能更容易由优化器处理。

票数 4
EN

Stack Overflow用户

发布于 2012-10-30 13:37:29

您试过删除“--no_unaligned_access”吗?ARM11s通常可以进行非对齐访问(如果在启动代码中启用),而强制编译器/库不这样做可能会减慢您的代码。

票数 3
EN

Stack Overflow用户

发布于 2011-04-25 17:46:39

当前版本的RVCT表示“--fpu=SoftVFP”:

在RVCT的以前版本中,如果您指定了--fpu=softvfp和一个带有隐式VFP硬件的CPU,则链接器选择了一个使用VFP指令实现软件浮点调用的库。现在情况不再是这样了。如果需要这种遗留行为,请使用--fpu=softvfp+vfp。

这意味着,如果您可能有一个旧版本的RVCT,行为将是使用软件浮点,而不考虑硬件浮点的存在。在GNU版本中,当FPU可用时,msoft-float将使用硬件浮点指令。

你用的是什么版本的RVCT?

无论哪种方式,我建议您删除--fpu选项,因为编译器将根据选中的--cpu选项进行隐式的适当选择。您还需要纠正CPU的选择,您的RVCT选项显示--cpu=ARM1136J-S不是ARM1136FJ-S,就像您告诉GCC的那样。这无疑会阻止编译器生成VFP指令,因为您告诉它它没有VFP。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5755684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档