Dual Core e HyperThreading: un possibile bug

Alcune analisi con processori Xeon DP hanno evidenziato un possibile problema del sistema operativo Windows XP, nella gestione di sistemi biprocessore con tecnologia HyperThreading attivata
di Paolo Corsini pubblicata il 08 Marzo 2005, alle 14:17 nel canale ProcessoriWindowsMicrosoft
61 Commenti
Gli autori dei commenti, e non la redazione, sono responsabili dei contenuti da loro inseriti - infox MaxArt
Pipeline da 20 a 30 statdi sono solo nel progetto P4Non mi riferisco a nessun applicativo, non ne ho mai nominati. Lo scheduler è quella porzione di codice che si preoccupa di ordinare secondo un certo criterio la coda dei processi.
Re: x MaxArt
Non mi riferisco a nessun applicativo, non ne ho mai nominati. Lo scheduler è quella porzione di codice che si preoccupa di ordinare secondo un certo criterio la coda dei processi.
Re: Re: x MaxArt
E perché una riorganizzazione dello scheduler dovrebbe portare detrimenti ad altri processori?
Infatti basta che se il 2 ed il 3 sono liberi il thread venga assegnato al 3...
Beh, direi che il problema è che proprio funziona decisamente male, non "benino" (in pratica con 2 thread invece di sfruttare 2 processori ne sfrutto uno solo, anche se con HT). Se la cosa si ripetesse sulla versione server, non sarebbe una cosa buona: in pratica potrebbe essere meglio disabilitare l'HT.
Comunque ritengo che diversamente dall'altra volta, in questo caso MS farà uscire qualche patch.
n credo sia sufficiente l'uscita di qlc patch per sistemare il problema...se è così grave come sembra ( e legando la causa al kernel, lo è
cmq sn d'accordo con te, i futuri Dual Core EE ne sarebbero penalizzati, anzi, verrebbe meno la loro presenza stessa dato che la differenza sostanziale con i "fratelli minori" stà proprio nella presenza dell'HT.
il motivo è banale, gli athlon64 sono nati con la "ciruiteria" integrata per supportare i 64bit, mentre i p4 (prescott) non sono nati per essere proci a 64bit ma a 32bit...l'introduzione dei 64bit di intel è stata una mossa per tentare di arginare il fenomeno AMD64
poi se cerchi bench su internet noterai che in ambiente 64bit la differenza già presente tra athlon64 e p4 diventa quasi una voragine...
e non parlo di soli bench come 3dmark o spi ma parlo anche di compilazione che imho è uno dei parametri più importanti per verificare la bontà di una architettura
be però ora mi viene da chiedermi come funzionano davvero le pipeline, intendo: ma che sono? ed i registri, di cui si parla spesso, che "cosa" sono? righe di codice? ciruiti appositi?
vorrei andare al principio delle cose ma le mie conoscenze (com vedi in tale campo equivalenti al nulla) non me lo permettono
La cpu per eseguire istruzioni e processare dati deve averli disponibili al suo interno, ed i registri fungono proprio da "contenitori" per le istruzioni/dati che la cpu elaborerà; non essendo addentro alla cosa posso supporre che siano gruppi di transistor che in qualche modo permettono di mantenere le informazioni (sotto forma di corrente) al loro interno.
Da quel che mi ricordo nell'8086 c'erano vari registri a 16 bit, da cui la capacità elaborativa parallela della cpu; gli Athlon64 odierni hanno registri interni a 64 bit e suppongo anche il bus di collegamento con le altre periferiche.
Questo a grandi linee quello che fanno i registri.
Per quanto riguarda invece la pipeline, definiamo prima le due operazioni basilari che un processore effettua per l'esecuzione di un'istruzione:
-FETCH
-EXECUTE
La prima è il precarimento dell'istruzione nei registri (se non ricordo male), mentre la seconda è l'effettiva esecuzione della stessa da parte della cpu.
Ora il concetto alla base della pipeline è molto semplice, perchè aspettare la fine dell'esecuzione dell'istruzione corrente prima di caricare la successiva?
Se noi precarichiamo l'istruzione che dovrà essere eseguita successivamente quando la cpu sta eseguendo l'istruzione corrente possiamo risparmiare tempo.
Questo è il concetto che ha portato allo sviluppo di pipeline sempre più lunghe.
Sorge però un problema rilevante.
Perchè, se nel caso di programmi sequenziali la prossima istruzione da eseguire sarà sempre conosciuta con esattezza, lo stesso potrebbe non accadere (ed anzi spessissimo è così
Per sfruttare la pipeline anche con questi particolari programmi sono stati sviluppati algoritmi di predizione che permettono di conoscere con una certa sicurezza quale sarà l'istruzione successiva da eseguire e quindi da caricare all'interno del processore.
Il problema è che per quanto precise possano essere queste previsioni quando il numero di errori predittivi diventa elevato (ad esempio con programmi altamente condizionali come possono essere, suppongo, i videogames (correggettemi se sbaglio)), l'utilizzo di una pipeline così profonda come quella implementata da Intel porta a tempi di svuotamento e ricaricamento della stessa molto più elevati rispetto a quello necessario ad esempio sui processori AMD che prevedono una pipeline più snella.
Questo è anche uno dei motivi per il quale i processori Intel sono più performanti in quei compiti piuttosto "lineari", come può essere ad esempio la riproduzione di un flusso multimediale.
Spero di averti aiutato
Adesso aspettiamo l'intervento di quei pazzoidi degli ingegneri (informatici od elettronici che siano
www.arstechnica.com
n credo sia sufficiente l'uscita di qlc patch per sistemare il problema...se è così grave come sembra ( e legando la causa al kernel, lo è
Un bel Service pack 3 (Intel Edition) e tutto torna a posto
La cpu per eseguire istruzioni e processare dati deve averli disponibili al suo interno, ed i registri fungono proprio da "contenitori" per le istruzioni/dati che la cpu elaborerà
C'è da dire che un tempo i registri delle CPU avevano ciascuno un compito specifico: uno veniva usato per fare le somme, un altro per "contare", un altro ancora per il resto della divisione e così via. Oggi le cose si sono mantenute parzialmente così nei processori x86, ma per la maggior parte dei compiti ci sono 8 registri "general purpose" (*AX, *BX, *CX, *DX, *SI, *DI, *BP, *SP, anche se in effetti *SP è meglio non toccarlo).
Le estensioni a 64 bit AMD64 e EM64T aggiungono altri 8 registri general purpose, chiamati R9, ..., R16, che danno un certo incremento prestazionale.
Per la pipeline provo a dare una spiegazione io.
La pipeline multistadio fu dapprima implementata nei primi Pentium (1993) e questo segnò l'inizio dell'architettura superscalare per i processori x86.
Il concetto di una pipeline multistadio può essere assimilato a quello di una catena di montaggio. L'esecuzione di un'istruzione viene scissa in più compiti minori, ed ognuno di questi viene eseguito nei vari stadi che compongono la pipeline, attraverso cui l'istruzione passa sequenzialmente. Chiaramente, non è necessario che un'istruzione venga eseguita dall'inizio alla fine perché si cominci a processare le successive, ed ecco che si può cominciare a decodificare le altre.
Il vantaggio? Più gli stadi sono brevi, meno ci impiega il processore a completarli, e questo consente di salire meglio di frequenza. Detto in parole molto povere!
Il branch prediction ovviamente dà il suo meglio nel caso di istruzioni in ciclo.
C'è un altro problema che riguarda le pipeline lunghe: l'OOE (Out of Order Execution)... in sostanza può capitare che un'istruzione venga finita di eseguire prima di un'altra... ommadonna!
Col mal di testa!
Devi effettuare il login per poter commentare
Se non sei ancora registrato, puoi farlo attraverso questo form.
Se sei già registrato e loggato nel sito, puoi inserire il tuo commento.
Si tenga presente quanto letto nel regolamento, nel rispetto del "quieto vivere".