Comment puis-je obtenir le cœur de PROCESSEUR nombre de l'intérieur d'un espace utilisateur de l'application (Linux, C)?
Sans doute il est une bibliothèque ou un simple asm blob qui peut me procurer le numéro de la CPU que je suis en cours d'exécution sur.
Je suis sûr à 100% qu'il y a une question comme ça avant, mais je ne le trouve pas
Ce n'est pas trop difficile de déterminer dans le noyau, mais je suis (assez) assurez-vous qu'aucun utilisateur moyen de la trouver. Voté ce jusqu'en espérant que je suis incorrect, bonne question 🙂
Ce n'est pas trop difficile de déterminer dans le noyau, mais je suis (assez) assurez-vous qu'aucun utilisateur moyen de la trouver. Voté ce jusqu'en espérant que je suis incorrect, bonne question 🙂
OriginalL'auteur efunneko | 2009-01-29
Vous devez vous connecter pour publier un commentaire.
Utilisation
sched_getcpu
pour déterminer le PROCESSEUR sur lequel le thread appelant est en cours d'exécution. Voirman getcpu
(l'appel système) etman sched_getcpu
(un wrapper de la bibliothèque). Toutefois, notez ce qu'il dit:OriginalL'auteur
Vous avez besoin de faire quelque chose comme:
(Je ne suis pas sûr que si, après sched_setaffinity vous avez la garantie d'être sur le CPU, ou
besoin pour générer de façon explicite ?)
Maintenant, vous pouvez CPUID à nouveau chaque fois que vous en avez besoin et de recherche de base, vous êtes sur.
Mais j'avais requête pourquoi vous avez besoin pour ce faire; normalement, vous voulez prendre le contrôle via sched_setaffinity plutôt que de trouver essentielles qui vous êtes (et encore c'est assez rare de vouloir/besoin). (C'est pourquoi je ne connais pas les détails cruciaux de quoi sortir de CPUID exactement, désolé!)
Mise à jour: Juste appris à propos de sched_getcpu de litb de réponse ici. Beaucoup mieux! (ma Debian/etch libc est trop vieux pour avoir bien).
OriginalL'auteur
Je ne sais pas de n'importe quoi pour obtenir votre identité de base. Avec le noyau au niveau de la tâche/processus de migration, vous ne serait pas garanti qu'elle reste constante pour toute longueur de temps, à moins que vous étaient en cours d'exécution dans une certaine forme de mode en temps réel.
Si vous voulez être sur une base spécifique, vous pouvez mettre de l'utilisation que
sched_setaffinity()
fonction ou de lataskset
de commande pour le lancement de votre programme. Je crois que ces autorisations élevées pour le travail, cependant. Dans votre programme, vous pouvez ensuite exécutersched_getaffinity()
de voir le masque qui a été défini plus haut et de l'utiliser comme une deviner le noyau sur lequel vous êtes en cours d'exécution.OriginalL'auteur
La raison de ce qui est downvoted est parce que ce calles vous donne le NOMBRE de cœurs (processeurs), et non pas l'id de la base (dont la question demande).
OriginalL'auteur