我掙扎理解爲什麼這個代碼與英特爾編譯器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'? –