[gl-como] Chi ha detto che i MIPS sono processori spompati?

Nicola Viganò ben.vighy@gmail.com
Gio 3 Feb 2011 18:10:05 CET


Beh dipende da molte cose, un'architettura può avere delle istruzioni più
performanti che però nella fase di instruction selection della compilazione
non vengono scelte. Questo può dipendere da carenze di informazioni nella
rappresentazione intermedia o dal costrutto utilizzato dal programmatore che
confonde il compilatore, oppure infine dal fatto che si vuole compilare
mantenendo la retrocompatibilità con macchina della stessa architettura ma
di generazioni precedenti.

Un esempio possono essere le istruzioni MMX, SSE etc etc che possono esser
utilizzate oppure no.

Un altro fattore limitante non sta proprio nelle istruzioni ma nel design
strutturale del processore: dimensioni e velocità della cache, profondità
della pipeline, capacità di prefetch migliori/branch prediction e infine
unità aritmetico/logiche a disposizione in parallelo.
Anche in questi casi molto dipende dal compilatore ma anche dal
programmatore.

Ad esempio, se si deve calcolare la somma elemento per elemento di due
vettori, e salvarla in un altro vettore, ma i due vettori di partenza sono
in realtà i campi di una struttura, la quale è in forma di vettore, per il
compilatore diventa un bel casino capire come iterare sui vettori di
partenza.
Succede infatti che i dati che effettivamente possono entrare nella cache
sono pochi, il prefetch fallisce e o il processore aspetta che il fetch vada
a buon fine, oppure deve proprio svuotare la pipeline e ricominciare.

A seconda del compilatore, ed a seconda della architetuttura questo può aver
un impatto maggiore o minore.
Alcuni processori infatti hanno cache più grosse, magari unità di
prefetching/branch prediction più complesse ed efficienti o pipeline più
lunghe/corte.

Il fatto della pipeline luna o corta può esser sia un bene che un male: su
dati lunghi organizzati in modo sequenziale, su cui si deve fare la stessa
operazione, la pipeline lunga ha prestazioni maggiori... ma se per caso c'è
un branch non predetto, svuotarla richiede più tempo della pipeline corta.

Ho forse dimenticato qualcosa?
Beh si, anche tutto il contorno esterno! non dimentichiamoci il bus verso la
memoria!! :) e anche il resto..

Dici che è troppo lunga?
In ogni caso, se te lo sei perso, ti ricordo il Linux Compiler Deathmatch:
http://www.phoronix.com/scan.php?page=article&item=linux_compiler_deathmatch&num=1
Questo si che è interessante!! :)

Ciao!

Il giorno 03 febbraio 2011 14:50, ADB <albeluci@gmail.com> ha scritto:

> ....quindi vuol dire che un dual Opteron a 2 Ghz e un ARM Cortex A9
> dual alla stessa frequenza, potrebbero avere la stessa potenza di
> calcolo, se il codice fosse ben ottimizzato per la relativa
> architettura?
>
> O l'architettura e le istruzioni specifiche per le 2 CPU non c'entrano
> nulla?  :-)
>
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.linux.it/pipermail/gl-como/attachments/20110203/cb86cf57/attachment.htm>


Maggiori informazioni sulla lista gl-como