2013-01-24 11 views
5

Qualcuno sa che cosa è ERG sui processori Apple A5, A5X, A6 e A6X?Granulare prenotazione esclusivi (ERG) sui processori Apple

ci siamo imbattuti in un oscuro bug con istruzioni LDREX/STREX e il comportamento è diverso tra la A5 e A6 di. L'unica spiegazione che ho è che hanno ERG diverso, ma non riesco a trovare nulla al riguardo. Inoltre, non sono riuscito a trovare un modo per recuperare questo valore, l'istruzione MRC sembra essere vietata nella modalità utente su iOS.

Grazie!

+0

Mentre una domanda corretta, sono un po 'incuriosito dal motivo per cui è necessario conoscere ai fini del debugging? Le dimensioni dell'ERG non dovrebbero avere nient'altro che impatti sulle prestazioni. Potresti spiegare qual è il comportamento che stai vedendo e cosa invece ti aspettavi di vedere? – unixsmurf

+0

Abbiamo riscontrato un errore quando il compilatore ha generato un codice che ha colpito ERG durante la lettura di una variabile ad accesso esclusivo, entrando così in un ciclo infinito poiché STREX ha sempre fallito. Questo errore si è verificato solo sui dispositivi A6X. –

+0

Ok. Ma senza vedere il codice interessato, non sono in grado di commentare se si può essere un bug hardware reale, o se quello che si ha è un (sottile) bug del software che si può aggirare allineando attentamente i blocchi, ma potrebbe tornare indietro di nuovo su altri processori. ERG _does_not_ influisce su software architettonicamente corretto su hardware architettonicamente corretto in qualsiasi altro modo rispetto alle prestazioni. – unixsmurf

risposta

2

Su OMAP 4460 (ARM Cortex-A9, come Apple A5/A5X) ERG è 32 byte (che è uguale alla dimensione della linea della cache).

Non so che quei valori sono su A6/A6X (e non c'è modo di scoprirlo senza caricare il proprio driver, cosa che non si può fare sui dispositivi Apple), ma il mio ospite è la dimensione della linea della cache aumentato a 64 byte, e così ha fatto ERG.

alternativa, è possibile ottimizzare l'algoritmo per la massima architettonica di 512 parole (2 kbyte).

+0

Anche i nostri test mostrano che sono anche 64 byte. La cosa strana è che per A5 il test funziona sempre come se funzionasse senza ERG. –

-1

Il formato ERG è un critico quando si utilizza ldrex/strex..

Quando un ldrex è stato rilasciato, in caso di accesso alla memoria nel ERG entro il quale il ldrex leggere succede, lo strex avrà esito negativo.

Non è insolito avere una struttura che contiene un target ldrex/strex e alcuni dati aggiuntivi, in cui si accede ai dati aggiuntivi tra la coppia ldrex/strex (ad esempio, per memorizzare il valore caricato da ldex).

Se il target ldrex/strex ha un riempimento insufficiente nella struttura (vale a dire che la dimensione ERG scelta è troppo piccola) l'accesso ad altri membri della struttura causerà quindi il failover di SEMPRE.

Game over, si spegne.

Per quanto riguarda ldrex/strex, ARM implementa un "monitor locale" e un "monitoraggio globale". Su sistemi con solo un monitor locale, l'unico modo in cui un ldrex/strex può fallire è se due ldrex vengono emessi sullo stesso indirizzo prima che sia stato emesso un strex: solo i sistemi con monitor globali notano effettivamente il traffico del bus di memoria all'interno dell'ERG del obiettivo ldrex/strex.

sistemi ARM variano enormemente e ho il sospetto ci sono sistemi che hanno solo monitor locali e quindi non in realtà in realtà supportare ldrex/strex.

+1

Questo in realtà non risponde alla domanda. –

Problemi correlati