我挣扎理解为什么这个代码与英特尔编译器12起泡的速度运行,而真正与英特尔编译器16英特尔compilator for循环速度C
#include <stdlib.h>
#include <time.h>
int main(int argc, char *argv[])
{
int i,t;
int n=10000000;
int T=1000;
time_t t1,t2;
// double A[n],B[n],C[n];
double *A = (double*) malloc (sizeof(double)*n);
double *B = (double*) malloc (sizeof(double)*n);
double *C = (double*) malloc (sizeof(double)*n);
for (i=0;i<n;i++)
{
A[i]=1.0;
B[i]=2.0;
}
t1=clock();
for (t=0;t<T;t++)
for (i=0;i<n;i++)
C[i]=A[i]*B[i];
t2=clock();
double sum=0.0;
for (i=0;i<n;i++) sum += C[i];
printf("sum %f\n",sum);
printf("time %f\n",(double)(t2-t1)/CLOCKS_PER_SEC);
}
- 英特尔编译器12减慢:在沙质桥上跑0.1秒;英特尔 编译器16:取25秒在沙质桥运行
生成文件: ICC -O2 -o阵列array.c
不相关:不要在C中投放'malloc'和好友的结果! – Olaf
也许会使'double's'volatile'? –
您是否尝试过使用'-O3'而不是'-O2'? –