通过加法运算看内存访问对CPU运算速度的影响

程序代码如下:

 #include<iostream> #include<ctime> using namespace std; template<class T> void test(int n,int m) { T *A=new T[n]; for(int i=0;i<n;++i) A[i]=static_cast<T>(i); T s(0); clock_t t1=clock(); for(int i=0;i<n-m;i++) for(int j=0;j<m;++j) s+=A[i+j]; cout<<static_cast<double>(n-m)*m/((clock()-t1)/1000.0)*1.0e-9; if(typeid(s)==typeid(0.0)) cout<<"G次双精度浮点运算/秒"<<endl; else if(typeid(s)==typeid(0.0f)) cout<<"G次单精度浮点运算/秒"<<endl; else cout<<"G次整数加法运算/秒"<<endl; cout<<"和: "<<s<<endl; delete[] A; } int main() { int n=100000,m=3000; test<int>(n,m); test<float>(n,m); test<double>(n,m); }

 

环境: Windows XP SP3+Intel Core(TM)2CPU: 主频2.5G, 4G内存. 结果汇总如下:

n=100000, m=3000

 

整数加法(G/)

单精度浮点加法(G/)

双精度浮点加法(G/)

Intel c++编译器

9.3871

6.19149

3.12903

Visual c++编译器

2.06383

0.277937

0.810585

n=100000000, m=1

 

整数加法(G/)

单精度浮点加法(G/)

双精度浮点加法(G/)

Intel c++编译器

1.5873

1.6129

0.8

Visual c++编译器

1.28205

0.266667

0.714286

 

结果分析: visual C++编译器对于两组参数不敏感, 结果变化不大, 而Intel C++编译器的结果有显著变化. 据Intel C++的结果来看, 在程序经过较好的优化的前提之下, 内存的访问延迟对运算速度的影响是很大的, 编程时要尽可能少量的内存访问, 尽可能多的CPU运算.

 

 

你可能感兴趣的:(编程,c,windows,优化,XP,编译器)