|
|
|
![]() |
|
Strumenti |
![]() |
#41 | ||||||
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Ho mal di testa
![]() Quote:
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. Quote:
![]() 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! ![]() Quote:
![]() Quote:
Il branch prediction ovviamente dà il suo meglio nel caso di istruzioni in ciclo. Quote:
![]() 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! ![]() Quote:
![]() Col mal di testa! ![]()
__________________
![]() |
||||||
![]() |
![]() |
![]() |
#42 | |
Senior Member
Iscritto dal: Jan 2003
Città: Milano - Udine
Messaggi: 9418
|
Quote:
![]() ![]() |
|
![]() |
![]() |
![]() |
#43 |
Senior Member
Iscritto dal: Nov 2000
Città: Grosseto
Messaggi: 10696
|
Non riesco a capire una cosa.
Se dal punto di vista di una dual-cpu con ht posso capire che non si possa a livello hw decidere l' ordine delle cpu (fisiche e logiche), da un punto di vista dual-core, quindi dove l' assegnazione é fissa, non sarebbe più semplice organizzare la cosa via hardware, dentro la cpu stessa, fare cioé cpu1-cpu2-cpu1ht-cpu2ht ? |
![]() |
![]() |
![]() |
#44 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
L'assegnazione di un thread ad un certa CPU lo decide sempre e solo lo scheduler...
|
![]() |
![]() |
![]() |
#45 |
Senior Member
Iscritto dal: Nov 2000
Città: Grosseto
Messaggi: 10696
|
Si, questo l' avevo capito (scusatemi se son duro di comprendonio) quel che non capisco é la logica che ha lo scheduler, cioé da dove prende l' ordine delle cpu.
Attualmente se ho capito é come se venissero assegnati come ordine questi: (ammettendo anche cpu=core) 1 - cpu1ht1 2 - cpu1ht2 3 - cpu2ht1 4 - cpu2ht2 Se invece proprio a livello hw avessimo 1 - cpu1ht1 2 - cpu2ht1 3 - cpu1ht2 4 - cpu2ht2 sarebbe risolto il problema. Quel che voglio dire, é che a livello di controller (immagino, sono digiuno di molti concetti) della cpu venga assegnato quell' ordine, che poi viene utilizzato dallo scheduler per smistare i thread. |
![]() |
![]() |
![]() |
#46 |
Senior Member
Iscritto dal: Jun 2000
Città: Bologna
Messaggi: 829
|
problema
Secondo me in questo modo il problema nn può essere risolto, come ho scritto nel post precedente! Quando si danno in pasto ad un p4 con ht attivato 2 thread, questi nn vengono eseguiti in realtà contemporaneamente, bensì tramite tecniche di register renaming si passa dall'esecuzione di uno a quella dell'altro ogni qual volta vi sia da attendere un qualche tipo di fault da una memoria o altri conflitti. Quindi se vengono assegnati due grossi thread di calcolo al un singolo core le prestazioni saranno scarse in confronto all'esecuzione su core diversi... questo indipendentemente dall'"ordine" delle cpu dentro lo scheduler, semplicemente egli nn sa cosa il thread debba eseguire (come è giusto che sia, altrimenti si porterebbe l'ht a livello di codice cosa non bella)
|
![]() |
![]() |
![]() |
#47 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: problema
Quote:
|
|
![]() |
![]() |
![]() |
#48 |
Senior Member
Iscritto dal: Jun 2000
Città: Bologna
Messaggi: 829
|
x cionci
Secondo me è inutile assegnare le cpu in ordine diverso
per i motivi scritti prima: non c'è determinismo nell'assegnamento di un thread ad una unità di esecuzione più performante o meno! Nelle SSE3 ci sono 2 istruzioni per la gestione dei thread Monitor e MWAIT: servono solo per ottimizzare consumi e prestazioni nei casi in cui un thread si deve sospendere in attesa di un qualsiasi evento (es spin-wait) non sono indispensabili ![]() |
![]() |
![]() |
![]() |
#49 |
Senior Member
Iscritto dal: Jul 2001
Città: -
Messaggi: 3798
|
ora non ho modo di controllare i reply e di informarmi perchè starò offline per alcuni giorni.
comunque ringrazio coloro che mi hanno (forse) risposto ![]() ci si sente prossimamente e statemi bene ![]()
__________________
- |
![]() |
![]() |
![]() |
#50 |
Senior Member
Iscritto dal: Jun 2000
Città: Bologna
Messaggi: 829
|
x MaxArt
Qualche errore macroscopico:
La prima cpu pipelined x86 è stata il 386 (pipe di 4 stage). Il concetto di cpu superscalare invece è tutt'altra cosa: esistono all'interno dello stesso core più path di esecuzione delle istruzioni, quindi più pipeline lavorano affiancate. La prima cpu x86 superscalare è stata il Pentium, con un parallelismo pari a due (anche se il secondo path nn è in grado di eseguire il set completo di istruzioni) |
![]() |
![]() |
![]() |
#51 |
Senior Member
Iscritto dal: Jun 2004
Città: 127.0.0.1 Lavora presso: Tua Mamma Titolo di studio: Asilo Nido
Messaggi: 11137
|
non vorrei sbagliarmi ma quindi il P4 con 4 cpu logiche non potra essere sfruttato a pieno con widnows xp perche è stato progettato solo per 2 cpu al massimo?
se è cosi non rispondo. e sull' uso di queste cpu su linux si sa qualcosa?
__________________
|
![]() |
![]() |
![]() |
#52 | |
Senior Member
Iscritto dal: Jul 1999
Città: Passato, Presente e Futuro
Messaggi: 3698
|
Quote:
La prova? Tasto destro sulla barra applicazioni - Task Manager - Processi - Scegliere una qualunque riga - Tasto destro - Imposta affinità... Quanti processori vedi? Io 31, di cui solo due selezionabili (possiedo un P4 2800 HT).
__________________
Il tempo non è denaro.[/url] ma si può usare quando si vuole.[/url]i9-11900F~128 GB~ASRock Z590 Taichi~9070 XT 16GB Ultima modifica di corgiov : 11-03-2005 alle 17:23. |
|
![]() |
![]() |
![]() |
#53 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Re: x MaxArt
Quote:
__________________
![]() |
|
![]() |
![]() |
![]() |
#54 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
L'utilizzo che se ne fa nei server è solitamente con thread relativamente leggeri, vedi server web o server database in cui fanno da collo di bottiglia il disco fisso e la ram... L'unica possibilità sarebbe di tentare uno scheduling in base alla percentuale di occupazione storica dell'intera CPU... Quindi non solo si dovrebbe tenere conto di quali core appartengono alla stessa CPU, ma anche tenersi una statistica, forse un po' troppo complessa per lo scheduler... In caso un CPU, ad esempio, risulti occupata oltre il 90% negli ultimi 300ms allora verrà allocato un solo thread in un solo core logico... Ultima modifica di cionci : 11-03-2005 alle 06:32. |
|
![]() |
![]() |
![]() |
#55 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: x cionci
Quote:
|
|
![]() |
![]() |
![]() |
#56 |
Senior Member
Iscritto dal: Jun 2000
Città: Bologna
Messaggi: 829
|
x cionci
purtroppo temevo che non si trattasse solo di un accelerazione hw allo spinloc ma venisse abusato in questo modo. Ma se così fosse, se si utilizzasse un meccanismo di lock quando concettualmente nn c'è una regione critica ma solo un "lavoro pesante" sarebbe una vera e propria porcata! Gli unici benefici di un codice si fatto sarebbero quelli di nn strozzare una cpu single core con ht, penalizzando tutto il resto del mondo! e se mi permetti questo fa proprio orrore !!!
|
![]() |
![]() |
![]() |
#57 | ||
Senior Member
Iscritto dal: Jun 2000
Città: Bologna
Messaggi: 829
|
Re: Re: x MaxArt
Quote:
Quote:
Cmq il concetto di pipeline è totalmente indipendente da quello di cpu superscalare, quindi nn segna l'inizio di nulla :P |
||
![]() |
![]() |
![]() |
#58 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non credo che sia un bug del kernel di Windows (come di qualunque altro s.o.): il problema è intrinsecamente dovuto all'HT e al fatto che le due CPU logiche non hanno le stesse risorse. Questo è stato detto e mi sembra ovvio.
La soluzione potrebbe essere quella di permettere agli applicativi SMP di scegliere liberamente quanti e quali CPU utilizzare. Lasciare sullo scheduler quest'onere (selezionando, ad esempio, prima le cpu pari e poi quelle dispari) può sembrare una buona soluzione, ma sicuramente non risolve il problema in generale. Ad esempio, per alcune applicazioni può essere meglio far eseguire due thread all'interno della CPU fisica anziché su due CPU fisiche diverse, perché condividono buona parte delle risorse. x MaxArt: fino a una ventina d'anni fa buona parte dei processori aveva un registro in cui veniva caricata l'istruzione da eseguire, o i primi byte... ![]()
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
#59 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Re: x cionci
Quote:
|
|
![]() |
![]() |
![]() |
#60 | |
Senior Member
Iscritto dal: Apr 2004
Città: Livorno
Messaggi: 6661
|
Quote:
Mi potresti approfondire questo punto?
__________________
![]() |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 22:33.