Marko60 ha scritto:
Beh, per dirla tutta, la velocità di calcolo (e quindi il numero di FLOPS che un processore è in grado di eseguire) dipende da numerosi fattori, tra i quali:
- l'architettura interna
- il tipo di calcolo che si sta eseguendo
- il compilatore che si sta usando
L'architettura in genere è dotata di "code" (pipelines) che consentono di tenere occupata la FPU consentendo un accesso molto più veloce agli operandi successivi rispetto alla RAM. D'altro canto, per caricare le pipelines, sono necessari dei tempi che si ammortizzano se il calcolo è tale da adattarsi bene alla dimensione delle pipelines stesse. Per esempio, alcuni processori sono ottimizzati per calcoli vettoriali, cioè su insiemi di elementi, perché hanno delle pipelines molto ampie. In ogni caso esiste una dimensione ottima del vettore che consente la gestione migliore delle pipelines.
Ma la cosa più importante è il compilatore che si usa. Esistono compilatori che producono codice ottimizzato per specifiche famiglie (o addirittuta specifici modelli) di processori. Questo si ottiene modificando l'ordine di esecuzione delle operazioni presenti in una determinata espressione in modo da sfruttare al massimo l'architettura a disposizione. Lo stesso codice macchina, ottimizzato per il processore X può andare malissimo sul processore Y.
Insomma, come in tutte le cose, quando si comparano processori sulla base dei MFLOPS, bisogna sempre andare a guardare come sono ottenute queste misure...
Il discorso sul compilatore non mi convince fino in fondo.
Se il benchmark e' del processore, come generi il codice macchina e' irrilevante dal punto di vista dei risultato.
I compilatori si scrivono in funzione del processore, non il viceversa.
Poi, che per comparare le misure bisogna guardarci dentro ai benchmark questo e' ovvio.
Guido