Xscale Nicola Rebagliati 2001s135. Cose Xscale Xscale è una microarchitettura per processori che...

Post on 01-May-2015

216 views 1 download

Transcript of Xscale Nicola Rebagliati 2001s135. Cose Xscale Xscale è una microarchitettura per processori che...

XscaleNicola Rebagliati 2001s135

Cos’e’ 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 65000 colori

Le features architetturali di xscale

3 Pipeline

• Sono presenti 3 pipeline:

• Main execution pipeline

• Memory pipeline

• MAC pipeline

• L’uso 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:• L’indirizzo di una branch instruction (istruzione ramo).• L’indirizzo 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 un’applicazione 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

• L’I/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 dell’applicazione.

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.

Xscalefine

Nicola Rebagliati 2001s135