以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 生物信息学 』   (http://bbs.xml.org.cn/list.asp?boardid=46)
----  vc的编译优化有多牛(转载)  (http://bbs.xml.org.cn/dispbbs.asp?boardid=46&rootid=&id=10386)


--  作者:admin
--  发布时间:9/23/2004 2:05:00 AM

--  vc的编译优化有多牛(转载)


vc的编译优化有多牛(转载)              


发信人: tinysheep (祝大家好运), 信区: Bioinformatics
标  题: vc的编译优化有多牛(转载)
发信站: 北大未名站 (2001年10月17日14:09:12 星期三), 站内信件

【 以下文字转载自 VisualC 讨论区 】
【 原文由 tinysheep 所发表 】

今天编了一个简单的程序,想测试一下同样的C++程序在不同的系统下
不同的编译器下运行的速度如何。
结果着实的下了我一跳 VC编译出的程序的效率是gcc编译出程序效率的
五倍都多。
下面是我的实验结果
cpu             系统/编译器             处理的数据量            运行所花时间(
s)      
p3 866          win2000/vc              100000                  1
p3 866          win2000/vc              1000000                 3
p3 866          win2000/vc              10000000                83
p3 450          win2000/vc              100000                  1
p3 450          win2000/vc              1000000                 7
p3 450          win2000/vc              10000000                190
p3 450          linux/gcc               100000                  2
p3 450          linux/gcc               1000000                 38
p3 450          linux/gcc               10000000                956
后面附有我的程序,很简单就是找出某一区间里所有的质数。
我一开始还以为程序里有大量的i/o ,而gcc对i/o处理得不好,没有很好的使i/o并行化
我改动程序,把里边的i/o去掉,发现实验结果和原来相差无几。
我只能相信VC比gcc牛的太多了。
附:源程序
// getprime.cpp :
//
#include "StdAfx.h"
#include "stdio.h"
#include "stdlib.h"
#include "assert.h"
#include "math.h"
#include "time.h"
bool IsPrimeNumber(int n)
{
        int i;
        if(n<=1)return false;
        bool result=true;
        for(i=2;i<=(int)sqrt(n);i++)
        {
                if(n%i==0)
                {
                        result=false;
                        break;
                }
        }
        return result;
}
int main(int argc, char* argv[])
{
        if(argc!=4)
        {
                printf("usage:getprime savefilename beginnumber
endnumber\r\n");
                return -1;
        }
        int begin,end;
        FILE * file;
        file=fopen(argv[1],"w");
        if(file==NULL)
        {
                printf("file open error\r\n");
                return -1;
        }
        begin=atoi(argv[2]);
        end=atoi(argv[3]);
        char buffer[100];
        time_t timebegin,timeend;
        time(&timebegin);
        for(int i=begin;i<=end;i++)
        {
                if(IsPrimeNumber(i))
                {
                        sprintf(buffer,"%d\r\n",i);
                        fputs(buffer,file);
                }
        }
        time(&timeend);
        double timediff=difftime(timeend,timebegin);
        fprintf(file,"%f seconds used\r\n",timediff);
        fclose(file);
        return 0;
}
另:在gcc下编译时去掉#include "StdAfx.h" 或者使用一个空的StdAfx.h
        

--
※ 来源:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.69.191]
--
※ 转载:·北大未名站 bbs.pku.edu.cn·[FROM: 162.105.69.191]



W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
7,408.203ms