glug: kernel & ottimizzazioni

Stefano Sartini root@dreamware.com
Mar 11 Nov 2003 02:44:07 CET


Marco d'Itri wrote:
> On Nov 11, Stefano Sartini <root@dreamware.com> wrote:
> 
>  >>Non vorrei sconvolgerti, ma di regola il kernel non usa ne` MMX ne` la
>  >>FPU classica.
>  >Il che non è nemmeno tanto sbagliato dato che è un kernel in effetti. 
>  >Perlomeno se parliamo dello scheduler. Ma tutta la marea di drivers che 
>  >gli stanno attorno e sono puro .c non vengono ottimizzati dal 
>  >compilatore, il quale decide come tradurre da .c a LM, e quindi 
>  >eventualmente decide (ove possibile) di usare eventualmente istruzioni MMX?
> No, ci mancherebbe altro che il compilatore facesse cose simili...
> Se quello switch che hai citato lo fa allora avrai la garanzia di un
> kernel instabile, e possibilmente anche molto tossico.

Per ora regge benissimo, anche ad intense sessioni di UT2003. Il che 
puo' anche voler dire che mettere o non mettere -mmmx non cambia nulla :)

> Ho scritto "di regola" perche` ci sono alcune eccezioni come il driver
> RAID che ha delle versioni ottimizzate di alcune funzioni critiche, ma
> ci pensa il kernel ad attivarle se e` opportuno.
> Il problema e` che se si vuole usare la FPU nel kernel bisogna fare save
> e restore dei suoi registri, una operazione molto lunga che tipicamente
> annulla i benefici che si avrebbero potendo usare le istruzioni MMX.

Sulla questione FPU/MMX se ne discusse ai tempi dell'uscita del pentium 
MMX, e in effetti l'overhead era dato non tanto dall' uso di 
save/restore, quanto dal fatto che FPU e MMX usano lo stesso set di 
registri, e quindi è switchando da una istruzione FPU a una MMX (e 
viceversa) che si ha un degrado netto di prestazioni. Con le attuali CPU 
e relative pipelines tale rischio dovrebbe essere molto basso cmq.
Dando un occhio (al volo) al manuale del GCC si trova che è possibile 
sostituire le istruzioni per il 387 con le SSE (... "To have SSE/SSE2 
instructions generated automatically from floating-point code, see 
-mfpmath=sse. "), in questo caso il funzionamento è automatico ed è 
proprio il compilatore a decidere che unità FP usare.
Nel caso di MMX non lo dice, per cui puo' benissimo essere che non sia 
automatico.

Ciao,
stefano



Maggiori informazioni sulla lista glug