ich kämpfen, ich zu verstehen, warum dieser Code ausgeführt wird mit rasantem Tempo mit Intel-Compiler 12 und verlangsamt wirklich unten mit Intel-Compiler 16Intel compilator für Schleifengeschwindigkeit 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);
}
- Intel Compiler 12 : Dauert 0,1 Sekunden, um auf sandiger Brücke zu laufen; Intel Compiler 16: dauert 25 Sekunden lang auf Sandbrücke laufen
Make-Datei: ICC -O2 -o Array Array.c
Nicht verwandt: Werfen Sie nicht das Ergebnis von 'malloc' & Freunde in C! – Olaf
Vielleicht machen die 'double' 'volatile'? –
Haben Sie "-O3" anstelle von "-O2" probiert? –