On Tue, 04 May 2004 10:16:01 +0200
Sythos <smtp-pop3_bnc@xxxxxx> wrote:
> Ivan Sergio Borgonovo wrote:
> A partire dai primi pentiom 60 e 66 c'era gia', due pipe da 12
> istruzioni l'una, sparavi 13 nop di fila e la pulivi (funzionava
> abbastanza alla cazzo), se eri ordinato nel codare assembly potevi
> avere un guadagno intorno al 5%
multiple pipeline <> branch prediction
> > Sugli AMD la cosa potrebbe essere anche più divertente perchè
> > lavorano in "emulazione" x86 e traducono tutto internamente in
> > VLIW, con il risultato che quel nop potrebbe appunto sparire
> > definitivamente e avere rilevanza solo per il padding degli
> > indirizzi.
> Il NOP e' stato tenuto a 3cl dal 8088 fino a oggi, non e' come
> alcuni tipi di copie o salti che fino al 386 dipendevano dal
> displacement per la durata di cicli per poi passare a durata fissa,
> il NOP e' NOP ^_^
Il nop *se* viene eseguito *forse* dura 3 cicli *ma* con la branch
prediction o l'interpretazione o la traduzione dell'assembly x86 in
VLIW, i miss sulla cache, il fetch fuori pagina e vari sarca dura bho.
Senza essermi documentato sinceramente non mi fiderei a fare
previsioni nemmeno su un ciclo stretto come questo
mov eax, -1
looppo:
nop
dec eax
jnz looppo
Il processore *potrebbe* decidere che le istruzzioni successive non
dipendono da quello che succede nel loop e tirare avanti, o
addirittura "riscrivere" il tutto in qualche VLIW che non contempla
affatto il loop.
Teoricamente è possibile prevedere di saltare interamente il loop
visto che è possibile prevedere il valore di eax all'uscita.
Tutto quel codice potrebbe essere riscritto come
xor eax,eax
e accoppiato alle istruzioni che gli stanno intorno in una VLIW che fa
altro per tenere impegnate altre pipeline.
La riscrittura in VLIW negli AMD viene fatta RT, cioè le istruzzioni
vengono "interpretate", mentre nel Crusoe vengono "compilate" in una
cache che viene validata eg. a seconda delle previsioni della branch
prediction.
Queste cose erano in giro già 10 anni fa ca (a livello teorico o già
implementate), quando nutrivo più interesse per queste amenità.
Oggi ho solo una vaga idea di quante cose porche alle tue spalle possa
fare una CPU... quindi previsioni sulla durata di un nop potrebbero
essere decisamente ancora più aleatorie.
Oggi il nop viene usato per padding per gli indirizzi al limite.
E tutto ciò senza nemmeno tirare in ballo il fatto che l'applicazione
deve girare us un OS multitasking.
I delay con i nop sono acqua passata.
|