2012-01-18 10 views
8

È possibile eseguire contemporaneamente due processi su un core della CPU, che presenta hyper threading? Imparo da Internet. Ma, non vedo una risposta chiara e diretta.È possibile eseguire contemporaneamente due processi su un core della CPU?

Modifica: Grazie per la discussione e la condivisione! Il mio portafoglio per postare la mia domanda qui non è discutere del calcolo parallelo. Sarà troppo grande per essere discusso qui. Voglio solo sapere se un'applicazione multithread può trarre più benefici dall'hyper threading rispetto a un'applicazione multi processo. Dopo ulteriori letture, ho seguito le mie note di apprendimento.

1) Una tecnologia Hyper-Threading abilitata CPU Core ha due set di stato CPU e logica di interrupt. Nel frattempo, ha solo un set di unità di esecuzione e cache. (Non ho ancora studiato la pipeline)

2) I vantaggi del multi threading da Hyper Threading solo se si verifica una latenza in alcuni thread eseguiti. Penso che questo punto possa essere mappato esattamente alla ragione comune del perché e quando il programmatore software usa il multi-thread. Se l'applicazione multi-thread è stata ottimizzata. Potrebbe non ottenere alcun beneficio dalla filettatura di Hypter.

3) Se lo stato della CPU si associa allo stato di elaborazione, credo che Marc abbia ragione sul fatto che l'applicazione a più processi possa anche trarre maggior vantaggio dalla tecnologia di hyper-threading.

4) Quando il produttore di CPU dice "thread", sembra che il loro "thread" sia diverso dal thread che conosco come programmatore java?

risposta

2

No, un core CPU hyperthreaded ha ancora una sola pipeline di esecuzione. Anche se appare come due CPU per il sistema operativo sovrastante, c'è sempre solo un'istruzione che viene eseguita in un dato momento.

L'hyperthreading aveva lo scopo di consentire alla CPU di continuare l'esecuzione di un thread mentre un altro thread era in attesa di una risorsa o di un'altra operazione da completare, senza lasciare troppe fasi della pipeline vuote e inutili. Questo risale ai Pentium 4 giorni, con la sua pipeline assurdamente lunga: uno stallo era essenzialmente catastrofico per efficienza e produttività, e l'hyperthreading consentiva a Intel di mantenere la CPU occupata a fare altre cose mentre veniva ripulita dallo stallo.

+0

Grazie per la conferma che due processi non possono essere eseguiti sullo stesso core della CPU contemporaneamente. Ma hai anche parlato di thread nella tua risposta. Mi sembra che due thread non possano essere eseguiti contemporaneamente? Oppure parli solo del caso in cui due thread hanno risorse condivise? Due thread, che non hanno risorse condivise, possono essere eseguiti simultaneamente sullo stesso core con hyper threading, giusto? –

+0

Possono coesistere due thread all'interno della pipeline di un determinato core, in varie fasi di decodifica/preelaborazione/esecuzione/finalizzazione. Dove in tutto ciò si verifica l'effettiva "esecuzione" dipende da come si definisce "esecuzione". Non ci saranno mai più istruzioni di un thread in una data fase della pipeline allo stesso tempo, quindi non c'è ancora alcuna esecuzione parallela. appare solo parallelamente. –

+0

grazie per aver chiarito. sembra che la nostra discussione stia scivolando verso l'esecuzione parallela e la programmazione multitasking e multithread. Secondo la mia comprensione fino ad ora, penso che possiamo dire che un'applicazione multi-thread ha la possibilità di trarre beneficio dalla CPU hyperthreading. e un'applicazione multi-processo non può trarre vantaggio dall'iper-threading. sarai d'accordo con me? –