-- 作者: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]
|