Ho visto in letteratura alcune delle CPU più recenti come la Intel Xeon "Nehalem-EX" con 8 core e 16 thread. Di cosa stanno parlando qui? Ho visto menzionare questo in riferimento quindi anche SPARCS, sicuramente questo non è il tipo di thread logici generato dal codice? Questo hyperthreading è rinominato?Che cos'è un thread della CPU e in che modo è correlato ai thread logici nel codice?
risposta
Sì, Nehalem-based processori implementare Hyper-threading.
Il nuovo Nehalem-EX a cui si fa riferimento dispone di 8 core fisici in cui ogni core può essere visto come 2 core logici per un totale di 16 core logici, consentendo l'esecuzione di 16 thread dell'applicazione su un singolo processore.
Questa è la stessa tecnologia utilizzata nei processori Pentium 4 abilitati per Hyper-threading e, più recentemente, nei processori Atom. My Eee PC ha un processore Atom single-core che ha due core logici: il Task Manager di Windows mostrerà due grafici della CPU; uno per ogni nucleo logico.
di UltraSPARC T2 (e T1) anche consentire simultaneous multithreading (di cui implementazione Intel è chiamato diFilettatura - un marchio di Intel) Sun che permette che un singolo nucleo di apparire come più core logici per eseguire più thread una singola nucleo.
L'idea alla base del multithreading simultaneo è di avere più registri per memorizzare lo stato del processore, quindi sembra che ci siano più core in un singolo core, perché ha più set completi di registri hardware.
Mentre le strutture fisiche come ALU e FPU potrebbero non aumentare, disporre di più set di registri per eseguire più thread su un core fisico può portare a un migliore utilizzo delle risorse del processore disponibili. Il core potrebbe non essere stato saturato durante l'esecuzione di un singolo thread, ma l'esecuzione di più potrebbe saturare tutte le unità al massimo potenziale.
Quindi cosa significa per i programmatori?
Significa che avremo ancora bisogno di scrivere software multi-thread: avere un programma che ha solo un singolo thread sarà in grado di utilizzare un solo core logico. Solo avendo un codice multi-threaded ben scritto siamo in grado di sfruttare l'enorme numero di core logici offerti da questi processori.
Anche con multithreading simultaneo, il codice viene eseguito su un thread per core logico.
L'hyperthreading (marchio INTEL) consente a ogni thread di essere eseguito contemporaneamente. Quindi in questo caso è possibile eseguire i thread delle applicazioni 8X2 contemporaneamente.
Dalla brochure ...
Intel Nehalem Architettura costruito sulla tecnologia di processo Intel 45nm unico high-k gate metallici
Up to **8 cores** per processor
Up to **16 threads per processor** with Intel® Hyper-threading
2.3 billion transistors
confrontare questo a singola CPU, sistemi unipolari cui ogni filo must essere programmato e al massimo sarà attivo solo un thread, ovvero uno che esegue l'attività associata alla CPU e gli altri in attesa di un trasferimento I/O.
Inizialmente il threading veniva utilizzato per modellare un insieme di attività simultanee (non un modello non effettivamente eseguito in parallelo) o per produrre l'aspetto di un sistema che era reattivo anche durante l'esecuzione dell'I/O. Ad esempio senza thread, il tuo word processor sembrerebbe stallo durante il salvataggio di un documento.
Per molti anni ho resistito all'idea di avere più thread nelle mie applicazioni desktop - ha complicato il codice e potenzialmente ridotto le prestazioni - pensiamo a tutte quelle operazioni mutex che richiedono il coinvolgimento del kernel del sistema operativo. Con l'avvento dell'esecuzione parallela dei thread, le mie obiezioni sono ridotte, ma credo ancora che più processi piuttosto che più thread in un singolo processo sia un approccio migliore.
Chris
Non si tratta di hyper-threading rinominato, si tratta di hyper-threading (è scritto su questa pagina Web a cui è stato dato il collegamento).
Semplicemente, il processore dice al sistema operativo che ha 16 core, quindi può bilanciare le attività su un numero doppio di core. La tecnologia Hyper-Threading offre alcuni vantaggi perché in alcuni casi due istruzioni diverse da due diversi programmi/thread possono essere eseguite contemporaneamente su un core. Ma di sicuro non darà velocità al 200%. Non ho lavorato su questo processore, ma penso che tu possa ottenere circa il 10% -20% di tempo di CPU aggiuntivo.
Spetta al modello di threading di ciascun sistema operativo mappare i thread a livello di sistema operativo a thread a livello di hardware come quelli descritti nella domanda.
I thread logici generati dai linguaggi di programmazione di alto livello utilizzati dai programmatori di applicazioni sono ancora a livello di sistema operativo rimosso dall'hardware, a meno che, naturalmente, non si stia parlando del codice del sistema operativo che esegue la mappatura.
Un estremo di un processore multi-thread è il processore di canna. Questa è una forma di SMT in cui il processore divide gli slot tra i vari thread in modo uniforme in modo round robin. Per fare ciò, ha bisogno solo delle copie dei vari registri mentre usa lo stesso insieme di unità di esecuzione. Quindi, in 4 cicli di clock avrebbe inserito il codice da Thread 0-3 nella pipeline.
Si può pensare al resto di questi processori che funzionano in modo simile, più o meno. Anziché distribuire equamente gli slot, è possibile utilizzare solo slot vuoti a causa di rischi di controllo o di dati nel processore.
Ad esempio, quando viene prelevato un ramo, potrebbe essere necessario lavare le istruzioni nella tubazione. Invece di svuotare completamente tutto, alcuni degli slot possono essere utilizzati per altri thread. L'idea è di migliorare le prestazioni non sprecando i cicli della CPU.
Ecco come funzionano più thread nell'hardware.
- 1. In che modo thread-safe è V4L2?
- 2. thread logici correnti in aumento/perdita di thread in uscita
- 3. pthreads: un thread che attiva altri thread
- 4. Che cosa significa POSIX che un thread è "sospeso"?
- 5. Modo alternativo ai thread in Android
- 6. Utilizzo CPU per thread
- 7. Perché lo stesso codice è molto più lento nel mio thread BackGroundWorker che nel mio thread GUI?
- 8. In che modo Phusion Passenger riutilizza thread e processi?
- 9. Java - relazione tra thread e CPU
- 10. Che cos'è il "realm" nell'autenticazione IIS e in che modo è correlato ai parametri del certificato SSL?
- 11. Come impostare l'affinità core della CPU di un thread Java?
- 12. È un codice thread-safe? Come posso renderlo thread-safe?
- 13. In che modo PHP utilizza più del 100% della CPU?
- 14. In che modo Spring MVC è correlato ai livelli Service, Controller e Accesso ai dati in un'applicazione Web?
- 15. Thread verde e thread nativi in java
- 16. In che modo un pool di thread memorizzato nella cache riutilizza i thread esistenti
- 17. In che modo questo codice calcola il numero di cicli della CPU trascorsi?
- 18. Come denominare un thread che esegue un'attività?
- 19. In che modo il TDD è correlato alla programmazione estrema?
- 20. Errore correlato volatile nel codice C++
- 21. Monitorare l'utilizzo della cpu per thread in java?
- 22. In che modo Quicksort è correlato alla cache?
- 23. Come ottenere l'utilizzo della cpu per thread su windows (win32)
- 24. È corretto dire che JavaScript è un linguaggio "single-thread"?
- 25. Utilizzo dell'evento F # nel codice multi-thread
- 26. Questo codice è un thread sicuro?
- 27. msdn: Che cos'è "Thread Safety"?
- 28. In che modo Dispatcher differisce dal thread in background?
- 29. Come posso ottenere l'utilizzo della CPU e/o l'utilizzo della RAM di un * THREAD * in C# (codice gestito)?
- 30. JavaFX che funziona con thread e GUI
Intendi 8 volte 16 quando scrivi 8X16? Se è così, immagino che sia, come le vecchie CPU HT, due thread per core, cioè 16 thread in totale, non 128. – OregonGhost
Sì. Secondo INTEL significa veramente 16 thread in ogni core. Per ottenere ciò di cui hanno bisogno per garantire che ci sia un sacco di duplicazione della logica sul dado. –
Ovviamente, non lo intendono. Hai citato tu stesso la parte: 16 thread per ** processore **. – MSalters