Intel和Microsoft C++编译器在矩阵乘法测试例子中运行时间的差异

程序代码如下:

#include<iostream> #include<ctime> using namespace std; #define N 500 template<class T> void mul(T *A,T *B,T *C) { T tmp(0.0); for(int i=0;i<N;++i) for(int j=i+1;j<N;++j) { tmp=B[i*N+j]; B[i*N+j]=B[j*N+i]; B[j*N+i]=tmp; } for(int i=0;i<N;++i) for(int j=0;j<N;++j) { tmp=0.0; for(int k=0;k<N;k++) { tmp+=A[i*N+k]*B[j*N+k]; } C[i*N+j]=tmp; } for(int i=0;i<N;++i) for(int j=i+1;j<N;++j) { tmp=B[i*N+j]; B[i*N+j]=B[j*N+i]; B[j*N+i]=tmp; } } int main() { double *A=new double[N*N]; double *B=new double[N*N]; double *C=new double[N*N]; for(int i=0;i<N;++i) for(int j=0;j<N;++j) A[i*N+j]=B[i*N+j]=static_cast<double>(i+j); clock_t t1=clock(); mul<double>(A,B,C); cout<<"双精度耗时: "<<clock()-t1<<"毫秒"<<endl; delete[] A; delete[] B; delete[] C; float *A1=new float[N*N]; float *B1=new float[N*N]; float *C1=new float[N*N]; for(int i=0;i<N;++i) for(int j=0;j<N;++j) A1[i*N+j]=B1[i*N+j]=static_cast<float>(i+j); t1=clock(); mul<float>(A1,B1,C1); cout<<"单精度耗时: "<<clock()-t1<<"毫秒"<<endl; delete[] A1; delete[] B1; delete[] C1; }

测试电脑主频2.5G, 内存4G, 运行结果如下:

运行时间(ms)/N的取值              500     1000     2000

Intel C++12.0编译器  双精度   156      1141     9407

                                 单精度     47        594     4656

Visual C++9.0编译器  双精度   187      1468   11859

                                 单精度   437      3750   29969

注意Visual C++编译器对于单精度比双精度运行得慢.

你可能感兴趣的:(C++,测试,Microsoft,delete,float,编译器)