Kyoryu 发表于 2005-11-21 14:36:38

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

写了一个小程序,是用Monte Carlo算法算圆周率的。
在VisualC++6.0 Release下跑500000000需要12秒。
在FC4下编译:
gcc aa.c -lm
然后执行,跑500000000却用了50多秒!

郁闷,是什么原因呢?难道Linux不如Windows吗?
附源程序:

#include "stdio.h"
#include "stdlib.h"
#include "time.h"
#include "math.h"

int main(int argc, char* argv[])
{
        double x,y,sigma,pi=0.0;
        long end=1,i,time1,time2,count;
        while(end)
        {
        count=0;
        printf("\nPlease input uplimit of the rand numbers( 0 to stop ): ");
        scanf("%ld",&end);
        if(end<=0)
        {
                printf("Error: Wrong Uplimit!\n");
                continue;
        }
        printf("Now is calculating the pi ...\n");
        time1=time(NULL);
        srand(time1);
        for(i=0;i<end;i++)
        {
                x=(double)rand()/RAND_MAX;
                y=(double)rand()/RAND_MAX;
                if((x*x+y*y)<=1.0) count++;
        }
        pi=(count/(double)end)*4;
        sigma=sqrt(pi*(pi-1)/(double)end);
        time2=time(NULL);
        printf("Pi = %f +- %f\t\tTime use: %d seconds\n",pi,sigma,time2-time1);
        }
        return 0;
}

marship 发表于 2005-11-21 15:43:57

很奇怪,不知道,在我的机器上跑了102s,没有windows,也没有VC6,没有测windows的

yuyulvxian 发表于 2005-11-21 16:21:22

老大 那是编译器的问题 怎么把责任都推给LINUX 如果你把相同的汇编语言分别测试一下 看看情况怎么样

Kyoryu 发表于 2005-11-21 16:36:39

我也知道是编译器的问题啊!我用的是FC4自带的gcc4.0
可是没有理由啊!gcc不是最好的C编译器吗?
难道是编译参数问题?我加了-O3还是同样的结果

mozilla 发表于 2005-11-21 17:11:53

我用cygwin试了一下,效果跟linux下基本一样,说明的确是编译去问题。。。。。。。太打击了吧,gcc跟微软的编译器就差那么远?郁闷。

mozilla 发表于 2005-11-21 17:31:44

不过也有可能跟rand()函数有关系。

marship 发表于 2005-11-21 17:37:44

我在同事的机器上测了一下,我们机器配置基本一致,windows下跑了55s,基本比linux下快了一半,尤其奇怪,得出的结果也不完全一样,也许跟数学库有一定关系。

Kyoryu 发表于 2005-11-21 17:54:09

我在同事的机器上测了一下,我们机器配置基本一致,windows下跑了55s,基本比linux下快了一半,尤其奇怪,得出的结果也不完全一样,也许跟数学库有一定关系。

结果有小的不一样是正常的,因为用到了随机数嘛。那个sigma就是误差范围。

bluesky000 发表于 2005-11-21 18:48:58

建议有条件的用INTEL的编译器试试,应该就不会有太大的差别了吧

mozilla 发表于 2005-11-23 16:02:01

我用intel编译器试了一下,结果跟gcc没有差别,应该是rand()函数的实现不一样。

黑暗哭泣 发表于 2005-11-24 00:07:32

已经被证实了VC的程序执行速度很快,难道你没发现VC编译后的可执行文件很大吗?

老马 发表于 2005-11-24 10:44:32

Visual C++的确是很强大的。你知道吗,WinDVD就坚持用Visual C++编译所有的底层函数库,比如视频解码、音频解码等程序,这些都是标准C和汇编程序,而不仅仅在软件界面才使用Visual C++进行编译。

hzhq2 发表于 2005-11-25 20:14:14

用time测一下?

rushrush 发表于 2005-11-26 15:41:07

有点打击... 难道不是优化参数的问题.?

向LINUX投降 发表于 2005-11-27 19:46:44

我在同一台机器上用不同的编译器编译了楼主的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时间就少了。这么以降低用户进程性能来换取系统的稳定到底值不值得?
页: [1] 2 3 4
查看完整版本: 同样的程序在Linux和Windows下速度差别如此之大?