2011-09-25 21 views
7

Eventuali duplicati:
how to set CPU affinity of a particular pthread?Come eseguire thread diversi su core diversi?

Sto scrivendo un programma in C++, utilizzando g ++ compiler in Ubuntu. Ho 4 thread nel mio programma e 4 core nella mia CPU. Voglio essere sicuro che ogni thread verrà eseguito su un core diverso. Raramente ho familiarità con pthread.

+2

Posso chiederti perché vuoi farlo? Se si assicura che i gradini non si inganni l'un l'altro (in modo che possano essere eseguiti allo stesso tempo), il sistema operativo si prenderà cura della loro pianificazione ogni volta che un nucleo ha tempo libero. – James

+0

@autopulated, in realtà l'affinità core e socket può influire notevolmente sulle prestazioni. immagina fork/join, normalmente ti piacerebbe che i thread aggiuntivi fossero programmati su core liberi, non iniziare sullo stesso (come di solito è più veloce) per poter essere eseguito in parallelo. Inoltre preferiresti essere programmato sullo stesso socket 1 per utilizzare la località. – bestsss

+0

La località è una buona ragione, ma come sottolineato da David qui sotto, i risultati non sono necessariamente all'altezza delle aspettative. – James

risposta

13

non farlo. Lascia che il sistema pianifichi i thread. Se si affinitizzano i thread in nuclei distinti, si modifica semplicemente lo scheduler. Quando l'app è l'unica che consuma CPU, lo scheduler pianificherà naturalmente ogni thread su un core separato.

+8

Questo è un commento, non una risposta. Probabilmente è corretto, ma se l'idea dell'esercizio è scoprire cosa succede quando i thread sono bloccati, allora stai scoraggiando l'apprendimento. Perché non masterizzare i manuali di Linux mentre ci sei, la conoscenza è pericolosa ;-p –

+0

+1 per il tuo parere utile – Saeed

Problemi correlati