Wie bekomme ich die CPU-Kern-Anzahl von innerhalb einer user-space-Anwendung (Linux, C)?
Vermutlich gibt es eine Bibliothek oder einfache asm-blob, das können Sie mir die Nummer der aktuellen CPU, dass ich die Ausführung auf.
InformationsquelleAutor der Frage efunneko | 2009-01-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden
sched_getcpu
so ermitteln Sie die CPU auf, die dem aufrufenden thread ausgeführt wird. Sehenman getcpu
(system-call) undman sched_getcpu
(eine wrapper-Bibliothek). Beachten Sie jedoch, was es sagt:InformationsquelleAutor der Antwort Johannes Schaub - litb
Müssen Sie etwas tun, wie:
(Ich bin mir nicht sicher, ob nach sched_setaffinity sind Sie garantiert auf der CPU, oder
müssen Rendite explizit ?)
Nun können Sie die CPUID wieder, Wann immer Sie brauchen und suchen, welche core du hast.
Aber ich würde eine Abfrage, warum Sie brauchen, um dies zu tun; normalerweise will man die Kontrolle über sched_setaffinity anstatt herauszufinden, welche core du on bist (und selbst das ist eine ziemlich seltene Sache zu wollen/müssen). (Das ist, warum ich weiß nicht, das entscheidende detail, was zu ziehen aus CPUID genau, sorry!)
Update: Gerade gelernt, über sched_getcpu von litb Antwort hier. Viel besser! (meine Debian/etch-libc zu alt, um es aber).
InformationsquelleAutor der Antwort timday
Ich kenne nichts, um Ihre aktuellen core-id. Mit kernel-level-Aufgabe/Prozess der migration, Sie würden nicht garantiert werden, dass Sie konstant bleiben würde, für irgendeine Länge von Zeit, es sei denn, Sie liefen in irgendeine form von real-time-Modus.
Wenn Sie wollen, um auf einem bestimmten Kern, Sie können verwenden, dass
sched_setaffinity()
- Funktion oder dietaskset
Befehl starten Sie Ihr Programm. Ich glaube, dass diese benötigen erhöhte Berechtigungen zu arbeiten, obwohl. In Ihrem Programm, Sie könnten dann laufensched_getaffinity()
zu sehen, die Maske, die zuvor festgelegt und verwenden, die als eine der besten Vermutung auf den Kern, auf dem Sie ausgeführt werden.InformationsquelleAutor der Antwort jvasak
InformationsquelleAutor der Antwort