五千年(敝帚自珍)

主题:【原创】C++编译器的区别:ViscalC++ .VS. g++ -- 正宗鲁皮皮

共:💬13 🌺14
全看树展主题 · 分页首页 上页
/ 1
下页 末页
家园 【原创】C++编译器的区别:ViscalC++ .VS. g++

最近翻出来研究生时写的一个项目,用C++写的,用来处理GPS中频数据的,说白了是一个软件GPS接收机,中频采样率是16.34MHz, 总共是40秒的数据,一个数据采样是一个字节, 所以总共有600M左右的数据量,(干过GPS接收机 的都知道为什么需要40秒的数据)。 原来的程序是在Linux下写的,用g++编译,核心的信号处理部分大概有20个源文件,编译後的可执行文件处理所有40秒的数据需要10分钟左右。 最近几个周末忙活了一阵,将核心的信号处理部分给移植到windows下了, 用VisualC++6.0的编译器编译的,因为原来的文件都是用标准的C++写的,所以基本没有做任何改动,只是加了两个文件做DLL的接口, 今天我用这个DLL写了一个应用程序,几乎和Linux下一样的功能,结果好家伙, 处理速度那叫一个慢,处理完全部的数据需要40分钟还多! 这个结果实在让我困惑: 几乎一样的源代码,一样的数据, 为什么Linux下要比windows下要快好几倍?

我不是编译器的专家,但我猜差别应该在编译器上。河里的大牛多,那位对此有研究的欢迎赐教。

(追加一点,两个版本都在同一台机器上运行的,windows版本是xp2, linux版本是RedHat的FC6, 运行结果也是一样的(处理的结果,包括解调的电文,通道跟踪环的状态,以及最后的定位信息)。

家园 优化开关全开了吗?

照理两个OS虽然不一样,但是下面的机器是一样的,应该差别不大。最简单的检查办法就是看优化开关是否都打开了。编译器优化还是很有用的。

如果还不行,就要用profiler看bottleneck在哪里了,通常是一个最核心的loop里面效率低,比如说cache miss多。4倍的速度差,看起来像是cache miss比较严重。

家园 终于有人回话了, 先谢过。不过,

我已经好多年没有用VC写过程序了,对其设置一点都不熟,能不能详细讲讲如何检查编译器优化?

多谢了。

家园 我也不记得GUI了,makefile里面用cl ... /G7
家园 刚试了一下,没问题了,

一个低级错误, 我编译DLL的时候用的是debug版本,现在改为realease版本,然后选maximim speed优化,运行速度就和linux下不相上下了。

多谢美人他爹, 这ID怎么这么怪泥?对了, 你真有一个女儿吗?

家园 原来如彼
家园 【文摘】亲密接触VC6.0编译器

外链出处

家园 幸好坚持着看到这里

否则就要跳出来了:)

家园 你这个全文文摘如果原来的连接还在,能改成“真正”的文摘么?

虽然这篇文章看上去挺有用的,但版规还是要遵守的。

家园 抱歉,是我收藏的

而且当我找到贴出的时候,楼主还没有解决问题。我当时还在拼命的想啊,到底是什么问题?ui?多线程?dll?根本想不出来,所以就把这个文章找出来。没想到居然是这么简单的问题,哈! 还有前几天猛然发现你是版主,吓我一跳,略略有些担心不知道是否得罪过你,哈!

家园 还是跳出来了:)
家园 网上搜了一下,好象原发网址是

亲密接触VC6.0编译器

麻烦把全文帖子改一下。谢谢。

还有前几天猛然发现你是版主,吓我一跳,略略有些担心不知道是否得罪过你,哈!

让我好好想想。。。好像没有

不用担心,大家上网能碰到一块儿,还能聊起来,挺不过容易的。要是我的言语曾有冲撞,也请你担待。

家园 不错,好东东, 学习中。

谢谢了。

最近几年一直在Linux下写code, 都不会用windows编程了。

全看树展主题 · 分页首页 上页
/ 1
下页 末页


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河