使用STL的程序,Windows下比Linux下慢很多怎么办
本帖最后由 reiase 于 2011-06-15 11:34 编辑
如题,程序在Linux/GCC 4.5下速度很快,大概1秒
在VC下,跑了10分钟不见结果出来啊
后来换了mingw编译器,结果一样滴慢
整个程序就300来行,只用了Vector,pair和结构体
大概定义如下:
struct{
int a;
double b;
vector< pair<int, int> >c;
} typeA;
struct{
int a;
double b;
vector< typeA >c;
} typeB;
求大牛帮忙分析原因
如题,程序在Linux/GCC 4.5下速度很快,大概1秒
在VC下,跑了10分钟不见结果出来啊
后来换了mingw编译器,结果一样滴慢
整个程序就300来行,只用了Vector,pair和结构体
大概定义如下:
struct{
int a;
double b;
vector< pair<int, int> >c;
} typeA;
struct{
int a;
double b;
vector< typeA >c;
} typeB;
求大牛帮忙分析原因
作者: reiase 发布时间: 2011-06-15
源码
作者: prc 发布时间: 2011-06-15
这个,差别能有这么大?
作者: lenovo 发布时间: 2011-06-15
基本不可能。
难道能说明Windows比Linux性能差?或者说Windows的STL库比Linux下的STD库性能差?
描述清楚测试场景包括机器的配置,软件环境的版本,编译选项。
难道能说明Windows比Linux性能差?或者说Windows的STL库比Linux下的STD库性能差?
描述清楚测试场景包括机器的配置,软件环境的版本,编译选项。
作者: wuqing 发布时间: 2011-06-15
分段计时找出最耗时的部分!
作者: damcool 发布时间: 2011-06-15
本帖最后由 reiase 于 2011-06-15 13:42 编辑
头文件
复制代码
代码
复制代码
硬件配置:core2/2G
Linux环境:Gentoo/gcc4.5.2
Windows环境两个:VC2008/VC2010+Win7,或者mingw gcc4.5.2+Win7
使用GCC时的编译选项:g++ -std=c++0x -march=native -O2
Win7和Linux下都是这个选项
程序跑了一个小时还没结果,郁闷死了啊
头文件
- typedef struct {
- int length;
- double threshold;
- double alpha;
- vector< pair<int, int> > svector;
- } cc1;
-
- typedef struct {
- int length;
- double threshold;
- vector< cc1> cls;
- } cc2;
-
- typedef struct {
- int length;
- vector< cc2> cls;
- } cc3;
- inline int run_cc1(cc1&h, int *im){
- double retval = 0;
- for (auto i = h.svector.begin(); i != h.svector.end(); i++){
- retval += im[i->first] * i->second;
- }
- return (retval > (h.threshold)) ? +1 : -1;
- }
-
- inline int run_cc2(cc2&v, int *im){
- double val = 0;
- for (auto i = v.cls.begin(); i != v.cls.end(); i++)
- val += i->alpha * run_cc1(*i, im);
- predict_result = val;
- return (val > (v.threshold)) ? +1 : -1;
- }
-
- int run_cc3(cc3*c, int *im)
- {
- int count = 0;
- for (auto i = c->cls.begin(); i != c->cls.end(); i++){
- if (run_cc2(*i, im) == -1)
- return -count;
- count++;
- }
- return +1;
- }
Linux环境:Gentoo/gcc4.5.2
Windows环境两个:VC2008/VC2010+Win7,或者mingw gcc4.5.2+Win7
使用GCC时的编译选项:g++ -std=c++0x -march=native -O2
Win7和Linux下都是这个选项
程序跑了一个小时还没结果,郁闷死了啊
作者: reiase 发布时间: 2011-06-15