免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: magicboatrocket
打印 上一主题 下一主题

换了快几倍的ARM,为什么性能没提上去 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-10-21 20:04 |只看该作者
呵呵,确实是比较头疼的问题


imx31工具链,没有看到--with-float=soft的选项,不过感觉这个工具链相对montavista工具链比较简单
[root@localhost ~]# arm-linux-gcc  -v
Reading specs from /opt/mtwk/usr/local/gcc-3.4.3-glibc-2.3.4/arm-linux/lib/gcc/arm-linux/3.4.3/specs
Configured with: /usr/src/RPM/BUILD/crosstool/source/gcc-3.4.3/configure --target=arm-linux --host=i686-host_pc-linux-gnu --prefix=/opt/mtwk/usr/local/gcc-3.4.3-glibc-2.3.4/arm-linux --with-headers=/opt/mtwk/usr/local/gcc-3.4.3-glibc-2.3.4/arm-linux/arm-linux/include --with-local-prefix=/opt/mtwk/usr/local/gcc-3.4.3-glibc-2.3.4/arm-linux/arm-linux --disable-nls --enable-threads=posix --enable-symvers=gnu --enable-__cxa_atexit --enable-languages=c,c++ --enable-shared --enable-c99 --enable-long-long
Thread model: posix
gcc version 3.4.3
[root@localhost ~]#



DM6446带的montavista的工具链,有--with-float=soft,但事实是用它编译出来的程序运行起来比imx31带的工具链编译出来的程序速度快。

[root@localhost bin]# ./arm-linux-gcc -v
Reading specs from /opt/mv_pro_4.0/montavista/pro/devkit/arm/v5t_le/bin/../lib/gcc/armv5tl-montavista-linuxeabi/3.4.3/specs
Configured with: ../configure --host=i686-pc-linux-gnu --target=armv5tl-montavista-linuxeabi --prefix=/opt/montavista/foundation/devkit/arm/v5t_le --exec-prefix=/opt/montavista/foundation/devkit/arm/v5t_le --bindir=/opt/montavista/foundation/devkit/arm/v5t_le/bin --sbindir=/opt/montavista/foundation/devkit/arm/v5t_le/sbin --sysconfdir=/opt/montavista/foundation/devkit/arm/v5t_le/etc --datadir=/opt/montavista/foundation/devkit/arm/v5t_le/share --includedir=/opt/montavista/foundation/devkit/arm/v5t_le/include --libdir=/opt/montavista/foundation/devkit/arm/v5t_le/lib --libexecdir=/opt/montavista/foundation/devkit/arm/v5t_le/libexec --localstatedir=/opt/montavista/foundation/devkit/arm/v5t_le/var --sharedstatedir=/opt/montavista/foundation/devkit/arm/v5t_le/share --mandir=/opt/montavista/foundation/devkit/arm/v5t_le/man --infodir=/opt/montavista/foundation/devkit/arm/v5t_le/info --build=i686-pc-linux-gnu --program-transform-name=s,^,arm_v5t_le-, --enable-cross --with-sysroot=/opt/montavista/foundation/devkit/arm/v5t_le/target --enable-shared --enable-languages=c,c++ --enable-__cxa_atexit --enable-threads=posix --disable-multilib --with-gxx-include-dir=${prefix}/lib/gcc/armv5tl-montavista-linuxeabi/3.4.3/../../../../target/usr/include/c++/3.4.3 --with-numa-policy=yes --with-float=soft --with-cpu=arm10tdmi --with-interwork --with-arch=armv5t --with-tune=arm10tdmi --libexecdir=/opt/montavista/foundation/devkit/arm/v5t_le/lib
Thread model: posix
gcc version 3.4.3 (MontaVista 3.4.3-25.0.30.0501131 2005-07-23)
[root@localhost bin]#

论坛徽章:
0
12 [报告]
发表于 2009-10-21 20:53 |只看该作者
用arm-linux-objdump -p 查看,硬浮点

[root@localhost lib]# arm-linux-objdump -p  libjpeg.a
In archive libjpeg.a:

jcapimin.o:     file format elf32-littlearm
private flags = 0: [APCS-32] [FPA float format]

论坛徽章:
5
摩羯座
日期:2014-07-22 09:03:552015元宵节徽章
日期:2015-03-06 15:50:392015亚冠之大阪钢巴
日期:2015-06-12 16:01:352015年中国系统架构师大会
日期:2015-06-29 16:11:2815-16赛季CBA联赛之四川
日期:2018-12-17 14:10:21
13 [报告]
发表于 2009-10-21 22:46 |只看该作者
看你这么说好像不是编译器的问题
能否详细说说怎么个慢法吗?
绘图慢?
在几个关键的地方打印时间对比一下



  1. struct timeval tvStart,tvEnd;
  2. double linStart = 0,linEnd = 0,lTime = 0;
  3. gettimeofday (&tvStart,NULL);
  4.                        
  5.                         这里加你的关键要测试的代码
  6.                         gettimeofday (&tvEnd,NULL);

  7.               linStart = ((double)tvStart.tv_sec * 1000 + (double)tvStart.tv_usec/1000);  //unit S
  8.                linEnd = ((double)tvEnd.tv_sec * 1000 + (double)tvEnd.tv_usec/1000);        //unit S
  9.                 lTime = linEnd-linStart;
  10.        printf("the time is %f\n",lTime);
复制代码

论坛徽章:
0
14 [报告]
发表于 2009-10-21 23:14 |只看该作者
从老外那里得知
gcc 4.2 toolchain has support to do ARM vfp
the compiler options you would want to use would be: -mfpu=vfp -mfloat-abi=softvfp

我的toolchain才3.4.3 版本的,应该还不直持硬件的浮点单元。
上面用arm-linux-objdump -p 看格式是错误的方法。

关键部分我再慢慢详细的测一下


  1. static void timestamp( char* buffer) {

  2.     static int startSecond = 0;
  3.     static int startMs = 0;
  4.     struct timeval tv;
  5.     int deltaSecond, deltaMs;

  6.     gettimeofday(&tv, NULL);

  7.     /* Running for the first time? */
  8.     if(startSecond == 0) {

  9.         /* Copy to prev so that we get 0 delta. */
  10.         startSecond = tv.tv_sec;
  11.         startMs = tv.tv_usec;

  12.     }

  13.     /* Calculate the delta (in microseconds). */
  14.     deltaSecond = tv.tv_sec - startSecond;
  15.     deltaMs = tv.tv_usec - startMs;



  16.     /* Create the string giving offset from start in seconds. */
  17.        snprintf(buffer, BUFFER_SIZE, "%u.%u",deltaSecond,deltaMs);
  18. }
复制代码

[ 本帖最后由 magicboatrocket 于 2009-10-21 23:18 编辑 ]

论坛徽章:
0
15 [报告]
发表于 2009-10-22 23:12 |只看该作者
问题解决

感谢 “ARM VFP的一点体会”文档的作者,写得相当棒!!!
http://linux.chinaunix.net/bbs/thread-1125926-1-1.html

利用这个文档,我找到一个支持vfp的4.1版本的gcc。把所有库,程序
加 CFLAGS="-mfpu=vfp -mfloat-abi=softfp" ,用新的toolchian重新遍过。
现在性能满足了。

居然有差不多20 ~ 25倍的差距:wink:
VFP硬浮点奶真强大也!

评分

参与人数 2可用积分 +36 收起 理由
T-bagwell + 30 分享精神鼓励
chenyx + 6 分享经验

查看全部评分

论坛徽章:
381
CU十二周年纪念徽章
日期:2014-01-04 22:46:58CU大牛徽章
日期:2013-03-13 15:32:35CU大牛徽章
日期:2013-03-13 15:38:15CU大牛徽章
日期:2013-03-13 15:38:52CU大牛徽章
日期:2013-03-14 14:08:55CU大牛徽章
日期:2013-04-17 11:17:19CU大牛徽章
日期:2013-04-17 11:17:32CU大牛徽章
日期:2013-04-17 11:17:37CU大牛徽章
日期:2013-04-17 11:17:42CU大牛徽章
日期:2013-04-17 11:17:47CU大牛徽章
日期:2013-04-17 11:17:52CU大牛徽章
日期:2013-04-17 11:17:56
16 [报告]
发表于 2009-10-23 08:22 |只看该作者

回复 #15 magicboatrocket 的帖子

gcc版本差异这么大啊.
谢谢楼主分享经验

论坛徽章:
0
17 [报告]
发表于 2009-10-24 15:07 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP