Qualcuno può spiegare cosa sta succedendo qui con questo piccolo programma?Tempo di elaborazione sproporzionato con operazioni aritmetiche [C]
#include<stdio.h>
int main()
{
float a=0.577;
float b=0.921;
float c;
int i;
for (i=0;i<100000000;i+=1){
c=0.7*a-0.2*b;
//a=0.145*c+2.7*b;
}
printf ("%.3f\n",c);
}
Nota, c'è una riga commentata.
L'ho compilato prima senza linea e poi con la linea. (Usato gcc -O2 ...
). E ha misurato il tempo di elaborazione. Sono stato molto sorpreso di scoprire che il tempo di esecuzione era 0.001s
versus 2.444s
. E questo non ha molto senso. O meglio, ci deve essere una logica dietro questo.
Potete spiegare cosa sta succedendo e come mitigare questo problema?
Lavoro su un programma che elabora enormi quantità di dati e mi sembra che ci si imbatta in un problema di prestazioni molto simile.
Stavo considerando di passare da float a interi ma sembra che con gli interi si comporti lo stesso.
EDIT: Alla fine la soluzione era banale e logica. Quindi ringrazio per tutte le risposte e le spiegazioni!
Hai guardato il codice generato? –
Che cosa stai ripetendo esattamente? Non vedo molto spazio per qualcosa con una simile catena di dipendenze da migliorare ... (che sembra convergere molto rapidamente. Suppongo che il conteggio delle iterazioni elevate fosse solo per renderlo testabile.) – Mysticial
Prova a dichiarare 'a' con 'volatile'. – jxh