2010-07-29 4 views
5

Je voudrais savoir s'il est possible d'identifier le processeur physique (noyau) est utilisé par fil avec un fil-id spécifique?processeur (core) est utilisé par thread spécifique

Par exemple, j'avoir une application multithread qui a 2 fils (threadid = 10 et ThreadID = 20, par exemple). Je lance l'application sur un système doté d'un processeur dual core (core 1 et core 2). Alors, comment apprendre à connaître le nombre de core est utilisé par thread avec threadid = 20?

post-scriptum Plates-formes Windows.

Merci,

Denis.

Répondre

3

Sauf si vous utilisez du fil d'affinité, les fils ne sont pas affectés à des noyaux spécifiques. Avec chaque tranche de temps, le thread peut être exécuté sur différents cœurs. Cela signifie que s'il y a une fonction pour obtenir le noyau d'un thread, au moment où vous obtenez la valeur de retour, il y a de fortes chances que le thread s'exécute déjà sur un autre core.

Si vous utilisez du fil d'affinité, vous pouvez jeter un oeil sur les fonctions thread-affinité Windows (http://msdn.microsoft.com/en-us/library/ms684847%28v=VS.85%29.aspx).

+0

Merci pour votre réponse, Patrick! Donc, une autre question est apparue - est-il possible de savoir combien de temps un thread spécifique s'exécute sur un noyau spécifique? (par exemple, certains threads tournent 20% de leur temps sur core 1 et 80% de leur tranche de temps sur core 2) – DenisL

+0

Pas que je connaisse Denis. Ce que vous pouvez faire est de limiter un thread à des cœurs spécifiques (cela s'appelle thread-affinity). Peut-être que vous pouvez diviser votre processus en plusieurs threads où chaque thread est assigné à un noyau. Pouvez-vous expliquer quel est le problème original? (menant à votre question initiale) Peut-être que votre problème peut être résolu d'une autre manière. – Patrick

+0

J'ai été chargé de créer deux fonctions: 1. La première fonction retourne totale utilisation du processeur multicoeur par id fil spécifique. J'ai implémenté la fonction en utilisant les fonctions de compteur de performance. 2. La deuxième fonction renvoie l'utilisation du cœur spécifique par un ID de thread spécifique. Je n'ai aucune idée de comment créer la fonction, il semble que c'est impossible. – DenisL

2

Il existe des fonctions appelées GetCurrentProcessorNumber (disponibles depuis Server 2003 et Vista) et GetCurrentProcessorNumberEx (disponibles depuis Server 2008 R2 et Windows 7). Voir également this question's answers pour plus d'options et de considérations (y compris Windows XP - principalement this answer describing the use of cpuid instruction).

Bien sûr, le nombre de base peut être modifié à tout moment par le planificateur, donc si vous devez être sûr alors peut-être il aide pour un montant raisonnable si vous vérifiez le numéro de base à la fois avant et après quelque chose que vous avez mesuré ou exécuté pour un court Si le nombre de cœurs est toujours le même, vous savez sur quel noyau le code intermédiaire est le plus susceptible d'être exécuté.

Questions connexes