erlug
[Top] [All Lists]

Re: [Erlug] (no subject)

To: erlug@xxxxxxxxxxxxxx
Subject: Re: [Erlug] (no subject)
From: Ivan Sergio Borgonovo <mail@xxxxxxxxxxxxxxx>
Date: Tue, 4 May 2004 11:47:30 +0200
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.


<Prev in Thread] Current Thread [Next in Thread>