Xscale Nicola Rebagliati 2001s135
Cose Xscale Xscale è una microarchitettura per processori che fornisce ottime prestazioni con bassi consumi energetici. Xscale implementa il set di istruzioni dell ARM5, ad eccezione delle floating point instruction.
Obiettivi del progetto Xscale Basso costo Basso consumo Ridotto time to market Flessibilità Elevata integrazione Elevata potenza di calcolo
Il PXA255 Il PXA255 è un processore che sfrutta la microarchitettura Xscale Palmari strongARM Il palmare Tungsten offre: Browser Word Excel Powerpoint Display a colori
Le features architetturali di xscale
3 Pipeline Sono presenti 3 pipeline: Main execution pipeline Memory pipeline MAC pipeline Luso ottimale di una pipeline è consentito dal branch buffer che effettua una previsione dinamica basata sulla storia passata di un salto.
Main execution pipeline Fetch istruzione (stadio 1) Fetch istruzione (stadio 2) Decodifica istruzione Lettura degli operandi Esecuzione (ALU) Esecuzione (modifica dello stato) Scrittura del risultato
Memory pipeline Fetch istruzione (stadio 1) Fetch istruzione (stadio 2) Decodifica istruzione Lettura degli operandi Esecuzione (ALU) Accesso alla cache di dati (1 stadio) Accesso alla cache di dati (2 stadio) Scrittura del risultato
MAC pipeline Fetch istruzione (stadio 1) Fetch istruzione (stadio 2) Decodifica istruzione Lettura degli operandi Moltiplicazione (stadio 1) Moltiplicazione (stadio 2) Moltiplicazioni successive Scrittura del risultato
Branch target buffer Consiste di una tabella con 128 entry. Ogni entry consiste di: Lindirizzo di una branch instruction (istruzione ramo). Lindirizzo di una possibile istruzione successiva. Una voce che indica quanto è consigliata la possibile istruzione successiva. le 4 voci possibili del terzo campo sono: strongly taken, weakly taken, weakly not-taken e strongly not-taken. Ogni volta che una strada viene scelta la terza voce della entry fa un passo verso il strongly taken. Ogni volta che una strada viene evitata la terza voce della entry fa un passo verso il strongly not-taken.
Branch target buffer Quindi arrivati ad una branch instruction la si cerca in questo buffer e si guarda il terzo campo: nel caso in cui indichi strongly taken o weakly taken viene fetchata la possibile istruzione successiva, altrimenti se dice weakly not-taken e strongly not-taken viene fetchata istruzione seguente del Branch.
Debug unit Consente ad unapplicazione apposita di debuggare un programma che gira sul processore, fermandolo in un certo momento e osservando i valori dei vari registri in quel momento e poi farlo ripartire. Usa : hardware breakpoint.
32 KB instruction cache Mantiene una copia locale delle istruzioni piu importanti per consentire buone performances e bassi consumi.
32KB local cache Mantiene una copia locale dei dati piu importanti per consentire buone prestazioni e bassi consumi.
Operazioni di I/O LI/O è di tipo memory mapped. I registri delle periferiche si trovano ad opportuni indirizzi di memoria. 2 tipi di interruzioni: normale e fast.
Risparmio energetico Run mode: modo operativo normale. Idle mode: clock fermo,stato preservato; risveglio tramite interruzione. Sleep mode:stato non completamente preservato; alimentati solo i piedini di input output. Turbo mode:commutazione rapida fra 2 sequenze di clock preprogrammate.
Ottimizzare le librerie C Molte routines della libreria standard C possono trarre beneficio da questa architettura, se modificate: Ad esempio strcat,strlen,memcmp etc.
Come si ottimizza in C Il manuale consiglia di creare cicli for dove la condizione di uscita preveda che un numero sia comparato con lo 0: Non così For (i=0;i<10;i++) Ma così For (i=9;i>=0;i--) Uso della funzione prefetch(dato) che mette già da parte il dato in questione.
Il prefetch Esempio: modifichiamo il codice: Preorder(treeNode *t){ If (t){ process(t->data); preorder(t->left); preorder(t->right);} }
Il prefetch Potremmo far risparmiare tempo e scrivere: Preorder(treeNode *t){ If (t){ prefetch(t->right); prefetch(t->left); process(t->data); preorder(t->left); preorder(t->right);} }
La lunghezza del codice Nel caso di sw per cellulari è importante che il codice non sia lungo, questo ovviamente abbasserà le prestazioni dellapplicazione.
Ottimizzazione per compilatori Uso delle lunghe istruzioni LDM/STM che salvano o caricano in più registri alla volta. Moltiplicazioni e divisioni sono ottimizzate se ricondotte a operazioni di shift dei bit.
Xscale fine Nicola Rebagliati 2001s135