pthread_attr_setaffinity_np und logischer Kern

337
Tushar Goyal

Ich bin etwas verwirrt über CPU-Logikkerne und physische Kerne und die Scheduler-Affinität. Nehmen wir an, es gibt eine CPU mit 4 physischen Kernen, bei der jeder Kern 2 Hyperthreads unterstützt. Fortan sind /cpu/procinfologischer Kern 0 und logischer Kern 8 von Natur aus derselbe physikalische Kern.

Nehmen Sie nun zwei Threads an:

Fall I: Die beiden Threads werden pthread_attr_setaffinity_npmit logischem Kern 0 gestartet .

Fall II: Ein Thread wird pthread_attr_setaffinity_npmit logischem Kern 0 und ein anderer mit logischem Kern 8 gestartet

Gibt es in beiden Fällen einen Unterschied?

0

1 Antwort auf die Frage

0
David Schwartz

Ja, es wird einen signifikanten Unterschied geben. Wenn beide Threads auf den logischen Kern 0 gesetzt sind, werden die beiden Threads niemals gleichzeitig ausgeführt, und es wird abwechselnd der logische Kern 0 verwendet Gleichzeitig teilen Sie die Ressourcen in diesem physischen Kern.

Stellen Sie sich vor, wenn ein Thread fast vollständig Ganzzahloperationen und der andere fast vollständig Gleitkommaoperationen ausführt. Wenn beide an logischen Kern 0 gebunden sind, wechselt der physische Kern abwechselnd, wobei die Ganzzahl-Einheiten im Leerlauf und die Gleitkomma-Einheiten im Leerlauf sind. Bei einer Einstellung auf 0 und einer Einstellung auf 8 kann ein Thread die Ganzzahleinheiten verwenden, während der andere Thread die Fließkommaeinheiten des physischen Kerns verwendet.

Warum sollte das passieren? Auf Hardwareebene hat der physische Kern nicht das Konzept logischer Kerne. Es versucht nur, so viele Anweisungen aus den mehreren verfügbaren Ausführungskontexten auszuführen. Tushar Goyal vor 6 Jahren 0
@TusharGoyal Auf Hardwareebene hat der physische Kern zwei Sätze von allem, was für einen logischen Thread spezifisch ist, wie z. B. Register. Diese beiden Sätze von Ausführungskontexten teilen sich die Ausführungseinheiten. Wenn beide Threads denselben logischen Kern verwenden, steht dem physischen Kern jeweils nur ein Ausführungskontext zur Verfügung. Wenn sich jeder Thread in einem anderen logischen Kern befindet, stehen dem physischen Kern beide Ausführungskontexte gleichzeitig zur Verfügung. David Schwartz vor 6 Jahren 0