Processeur d'exécution

Processeur d'exécution - C++ - Programmation

Marsh Posté le 02-10-2006 à 10:51:13    

Bonjour, j'ai un programe multithread sur une machine multiprocesseurs et je souhaiterais savoir comment récupérer le processeur (numero du processeur et non son type) sur lequel s'exécute le code qu'il y a dans un thread.  
Si vous avez une méthode simple sous windows XP, je suis preneur. Merci


Message édité par argusazure le 02-10-2006 à 11:50:18
Reply

Marsh Posté le 02-10-2006 à 10:51:13   

Reply

Marsh Posté le 02-10-2006 à 10:57:46    

Si sous windows, cpuid, smbios, WMI, fonction recherche du forum


---------------
Töp of the plöp
Reply

Marsh Posté le 02-10-2006 à 11:13:44    

_darkalt3_ a écrit :

Si sous windows, cpuid, smbios, WMI, fonction recherche du forum


Tu es sur que ce n'est pas pour récuppérer les caractéruistiques du processeur ce que tu proposes?

Reply

Marsh Posté le 02-10-2006 à 11:21:35    

tu veux parler du serial du proc ?


---------------
Töp of the plöp
Reply

Marsh Posté le 02-10-2006 à 11:27:30    

Bon on va faire simple:  j'ai 2 processeurs sur ma machine et je veux savoir si mon thread s'exécute sur le processeur 1 ou sur le processeur 2.

Reply

Marsh Posté le 02-10-2006 à 11:40:44    

Reply

Marsh Posté le 02-10-2006 à 11:51:01    

Ouep c'est exactement ça que je cherche. Sauf que ça existe pas sous windows xp. Bon je cherche dans cette direction, on s'approche.

Reply

Marsh Posté le 02-10-2006 à 11:57:10    

En fait ca existe sous .net depuis le 1.1 si je ne m'abuse, donc dispo sous .net.


---------------
Töp of the plöp
Reply

Marsh Posté le 02-10-2006 à 12:00:17    

_darkalt3_ a écrit :

Si sous windows, cpuid, smbios, WMI, fonction recherche du forum


ok on doit pouvoir avec cpuid en regardant le processeur actif. Une fonction comme GetCurrentProcessorNumber() aurait été plus simple mais bon ...

Reply

Marsh Posté le 02-10-2006 à 14:36:13    

Autre solution SetThreadIdealProcessor, tu force un thread a s'exécuter sur une cpu donnée.

Reply

Marsh Posté le 02-10-2006 à 14:36:13   

Reply

Marsh Posté le 02-10-2006 à 17:09:46    

straffo a écrit :

Autre solution SetThreadIdealProcessor, tu force un thread a s'exécuter sur une cpu donnée.


Merci mais le but était plutot de contrôler que l'os distribue bien mes threads sur des processeurs différent.

Message cité 2 fois
Message édité par argusazure le 02-10-2006 à 17:10:16
Reply

Marsh Posté le 02-10-2006 à 23:31:30    

argusazure a écrit :

Merci mais le but était plutot de contrôler que l'os distribue bien mes threads sur des processeurs différent.


 
Je ne vois pas la raison qui l'empêcherait de le faire, sauf si tu t'es raté dans la synchro et que tes threads ne tournent jamais en même temps. Est-ce possible de mettre une grosse boucle de calcul au milieu et d'en lancer plusieurs (2 suffisent) ? Tu regardes ensuite l'occupation CPU (par contre sous Windows je ne sais pas si le gestionnaire de tâches différencie les CPU) et tu devrais assez vite être convaincu que ça marche.
 

Reply

Marsh Posté le 03-10-2006 à 15:47:08    

argusazure a écrit :

Merci mais le but était plutot de contrôler que l'os distribue bien mes threads sur des processeurs différent.


 
Et pourquoi il le ferait (ou ne le ferait pas d'ailleur) pour ce genre de gestion il vaut mieux faire confiance à l'OS.
 
Ca dépend du contexte par exemple si sur la 2eme cpu il y a un gros process  
bien gourmand ou serait l'intéret de ventiller des threads sur une cpu au taquet ?

Reply

Marsh Posté le 10-10-2006 à 10:45:29    

straffo a écrit :

Et pourquoi il le ferait (ou ne le ferait pas d'ailleur) pour ce genre de gestion il vaut mieux faire confiance à l'OS.
 
Ca dépend du contexte par exemple si sur la 2eme cpu il y a un gros process  
bien gourmand ou serait l'intéret de ventiller des threads sur une cpu au taquet ?


Oui je suis d'accord que c'est l'os qui doit ventiler les threads. Mon contexte est : une application doit traiter une tache les plus vite possible sur une machine bi proc. C'est la seule application qui tourne. Dans ce cas, je m'attend à voir les treads ventilés sur les 2 cpu. J'aurais préféré valider de façon un peu plus propre que de regarder dans le gestionnaire des taches mais bon on va s'en contenter.  
Merci à tous!

Reply

Marsh Posté le 11-10-2006 à 16:57:59    

SetThreadIdealProcessor ne force pas une thread à s'executer sur un cpu/core particulier, c'est seulement une indication. Pas plus d'ailleurs que cpuid ne retourne de numero logique puisque celà n'a pas de sens localement mais seulement au niveau de l'OS.
 
Pour effectivement forcer l'execution sur un cpu/core/noeud - ou plusieurs - il faut toucher le masque d'affinité, cf SetProcessAffinityMask/SetThreadAffinityMask. Notons qu'xp n'est que partiellement NUMA-aware, neanmoins les allocations, par exemple via VirtualAlloc, serons affectées; la localité de la mémoire est une excellente raison pour tripoter le masque d'affinité. Et puis ce n'est pas comme si le scheduler de windows était un modele du genre: il a une facheuse et lamentable tendance au pingpong.
 
PS: les k8 (athlon64 & co) utilisent un modèle NUMA et non un basique SMP comme les Intel, ce qui n'est pas sans consequences.


Message édité par tbp le 11-10-2006 à 17:06:44
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed