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