找回密码
 注册
楼主: Kyoryu

同样的程序在Linux和Windows下速度差别如此之大?

[复制链接]
发表于 2006-2-21 10:15:20 | 显示全部楼层
说说我的想法,大家平价一下对不对:

运行单个任务,Linux并不比Windows更快。
同时运行多个任务,任务越多,Linux性能较windows越好。

因为不管你运行多少东西,Linux进程调度的代价差别不太多,
但是Windows就不一样了,可能对单任务进行了优化,而放弃多任务的性能。
回复

使用道具 举报

发表于 2006-2-25 13:52:19 | 显示全部楼层
我在windows 的VC6.0编译,运行花了30s (同时还开了BT下载……)
回复

使用道具 举报

发表于 2006-2-27 11:40:18 | 显示全部楼层
[quote:e215c4ffad="向LINUX投降"]我在同一台机器上用不同的编译器编译了楼主的PI程序,输入值为500000000时,运行情况(时间单位:秒)
如下表:

编译环境    默认选项编译  速度优化选项     操作系统              备注
              运行时间     编译运行时间   
Dev-C++       68               61         Windows2000     它是用gcc做编译器的
BC5.5         29               29         Windows2000     Borland的免费编译器
TC3.0         78               77         DOS7.0          Borland 92年的产品,16位
TC2.0         108             108         DOS7.0          Borland 88年的产品,16位
GCC           100              80         红旗Linux 5.0   核心版本是2.6.9

GCC编译出来的代码速度实在令人失望,居然只能跟TC系列勉强打个平手。不过GCC的速度优化确实还有点用。
还有个有意思的地方:同样是用GCC编译出来的代码,在Windows2000下和Linux下运行时间居然差了有50%!我猜这可能是Linux的核心进程占用了更多的CPU时间,分给用户进程的CPU时间就少了。这么以降低用户进程性能来换取系统的稳定到底值不值得?[/quote]


那这样说来GCC的执行效率是在不怎么样咯。。。
回复

使用道具 举报

发表于 2006-3-17 09:39:26 | 显示全部楼层
gcc4的RAND_MAX是7fffffff,vc6的应该是7fff
也就是说一次rand(),gcc产生31位随机数,而vc6产生15位随机数,所以gcc的效率和vc实际上是差不多了。
回复

使用道具 举报

发表于 2006-11-6 10:07:04 | 显示全部楼层

请教gnap

我想引用你的文章内容,请问引用说明就如何写
回复

使用道具 举报

发表于 2006-11-9 11:16:44 | 显示全部楼层
第一,你没有加优化.
第二,有大量的浮点运算.Linux/FreeBSD/Windows对于浮点异常的处理方式是各不相同的.这是浮点计算效率差别的主要来源.
回复

使用道具 举报

发表于 2006-11-9 11:17:44 | 显示全部楼层
[quote:1d33c11079="NoInfoNoFear"]说说我的想法,大家平价一下对不对:

运行单个任务,Linux并不比Windows更快。
同时运行多个任务,任务越多,Linux性能较windows越好。

因为不管你运行多少东西,Linux进程调度的代价差别不太多,
但是Windows就不一样了,可能对单任务进行了优化,而放弃多任务的性能。[/quote]

Linux至今对thread没有什么支持.
而Windows 此方面已经做的很完善了.
回复

使用道具 举报

发表于 2006-11-9 22:43:14 | 显示全部楼层
[quote:88de26d338="snnn"][quote:88de26d338="NoInfoNoFear"]说说我的想法,大家平价一下对不对:

运行单个任务,Linux并不比Windows更快。
同时运行多个任务,任务越多,Linux性能较windows越好。

因为不管你运行多少东西,Linux进程调度的代价差别不太多,
但是Windows就不一样了,可能对单任务进行了优化,而放弃多任务的性能。[/quote]

Linux至今对thread没有什么支持.
而Windows 此方面已经做的很完善了.[/quote]

LINUX下进程使用了写时复制的方式,使其创建新进程的开销很少,因此很长时间以来LINUX下都没有线程。而WINDOWS下创建新进程的开销很大,因此才不得不提供了线程的功能。
回复

使用道具 举报

发表于 2006-11-14 18:49:10 | 显示全部楼层
我在vc6中.用vc6自己的编译器,只要26S.vc调用intel 9.1的编译器,结果要107秒
回复

使用道具 举报

发表于 2006-11-16 22:08:08 | 显示全部楼层
会不会是微软有一部分API没有公开,只是给自己用
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2025-2-6 09:53 , Processed in 0.023200 second(s), 13 queries .

© 2001-2025 Discuz! Team. Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表