raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 avril 2011
-
6 déc. 2007 à 16:56
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 avril 2011
-
7 déc. 2007 à 15:57
salut.
Y'a t'il quelqun qui saurrait, ou aurrait des infos sur, la programmation pour un dual ou un quad core.
est ce que ce processeur, dispatch les threads a son bon vouloir entre ses coeurs, ou faut t'il le spéciffier, ou, ou, je sait pas !
comment fonctionne ce cpu ?
je continue a chercher sur le net, en attendant une reponse.
harf, y'a pas grandes infos !!!
merci.
bye.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 avril 2011 6 déc. 2007 à 18:19
Salut,
en ce qui concerne le fonctionnement du partage des taches sur un multi-core ou même sur une archi multi-cpu, l'OS est le 1er responsable.
Je m'explique :
Le système d'exploitation est le seul garant de la liste des process en cours de fonctionnement.
En effet, ce n'est pas au CPU de gérer cette liste de process. Le seul rôle du CPU est d'executer du code sur chaque core.
Lorsque ta machine démarre, ton OS boote sur le core master, puis "démarre" les cores supplémentaires avec une liste de tache vide (en fait y-a une tache qui s'appelle IDLE et qui existe toujours avec une priorité trés trés faible et un code permettant de mettre le Core à une trés basse consomation).
L'OS crée alors une liste de processus. Ces processus peuvent être soit des application mono-thread soit des threads d'une application (tout thead est séparé en processus à part entière, la seule chose qui les diffère des autres applis, c'est qu'ils partagent le même espace d'adressage .. mais c'est encore une autre loooongue histoire ;) ).
Il faut bien comprendre que cette liste de processus est unique sur la machine et ce quelque soit le nombre de CPU ou de Core.
Ensuite, sur chaque CPU ou Core, est exécuté ce qu'on appelle un "scheduler". Ce scheduler, ou ordonnanceur en français, est un bout de code de l'OS appelé par une interruption du TIMER de manière périodique, c'est ce qu'on appelle le TIME_SLOT. Je le rappelle, il y en a 1 par CPU ou Core.
Donc tous ces "ordonnanceur" de taches, vont venir périodiquement "piocher" dans la liste des process, un morceau de process à exécuter en tenant compte des priorités de chacun des process ainsi que du nombre de fois qu'ils ont été exécutés pour éviter que ce soit toujours le même qui prenne la main.
"Oui mais comment font-ils pour savoir entre eux qui a déja été exécuté ?" me diras-tu. Et bien tout simplement en conservant cette information dans ce qu'on appelle un contexte de process. Chaque process a un contexte (en fait la liste de process est une liste de contexte de process).
Ce contexte contient aussi au passage l'état complet du CPU au moment ou ce process a été arreté pour pouvoir reprendre là où il en était ...
Ainsi à tout moment, l'ordonnanceur de tache de n'importe quel CPU ou CORE du système peut venir voir dans la liste des process à qui c'est le tour.
Je résume donc : on a une liste unique de process pour la machine, et autant d'ordonnanceur que de CPU ou CORE. à partir de là, on comprend facilement que le CPU ou CORE n'est aucunement responsable de l'affectation d'un process sur lui-même.
Ensuite, on peut se dire que c'est bien jolie ce fonctionnement, mais est-ce que le fait de basculer un process un coup sur un CORE, un autre coup sur l'autre ne serait-il pas un peu pénalisant ?
Bien sûr que si, comme on peut se douter, tant que le process tourne sur un CORE, il bénéficie du cache de celui-ci (si un autre process entre temps ne l'a pas anéanti en étant encore plus gourmand ;)). Mais si il bascule sur un autre CORE, il faut alors décharger le cache du 1er CORE, pour le recharger sur le second CORE.
Pour palier à ce problème, plusieurs solutions sont utilisées :
1) hardware : c'est le principe du shared-cache qu'utilise Intel, le principe est de dire que le cache est partagé par les 2 CORE du Core2Duo ... ainsi, même si un process bascule d'un CORE à l'autre (sur le même Core2Duo), son cache est toujours dispo. Mais il-y a des limites, d'une part dans le cas d'un Core Quad, car il faut savoir que ce sont 2 CoreDuo qui sont implantés dans une seule puce, le cache est donc partagé par paire de Core mais pas plus. Ensuite si tu as plusieurs XeonDuo, ça parait évident, ils ont des caches bien distincts physiquement.
2) software : coté logiciel, le principe est de gérer ce qu'on appelle une "affinité". ainsi dans le contexte de la tache on va rajouter un champs dans lequel on notera quel est le dernier CORE qui l'a exécuté. Donc au re-scheduling (ré-ordonnancement), l'ordonnanceur préferera faire tourner sur son CORE (hé oui, toujours car chaque CORE a son ordonnanceur ;) ) un process qu'il a l'habitude de faire tourner et dont des données sont déjà en cache.
Voilà donc une bien belle petite histoire qu'est l'ordonancement des taches sur un système multi-cpu/multi-core.
Si tu as d'autres questions sur ce point n'hésite pas ...
(j'ai beau me relire ... je me demande parfois si je me fais bien comprendre ;) )
raoulli
Messages postés93Date d'inscriptionlundi 1 août 2005StatutMembreDernière intervention25 avril 2011 7 déc. 2007 à 13:50
salut.
merci.
ok,ok,ca change pas des masses du processus multitaches.
si si, hi, j'ai compris.
ce processeur est vraiment rapide !!!
je vais ne plus utiliser les events, que des bools de controle.
Sleep() perd les pedales, et ne fonctionne que quand elle veut (ou alors, j'en ai deja un en cour).
ben, non, c'est bon, si c'est l'os comme d'ab qui deffinie les prioritées, ou nous (avec nos progs), c'est je pense pas la peine que je m'y interresse plus a ce cpu.
2) software : coté logiciel, le principe est de gérer ce qu'on appelle
une "affinité". ainsi dans le contexte de la tache on va rajouter un
champs dans lequel on notera quel est le dernier CORE qui l'a exécuté.
Donc au re-scheduling (ré-ordonnancement), l'ordonnanceur préferera
faire tourner sur son CORE (hé oui, toujours car chaque CORE a son
ordonnanceur ;) ) un process qu'il a l'habitude de faire tourner et
dont des données sont déjà en cache.
c'est bon a savoir.
encore merci d'avoir pris tout ce temps, pour cette reponse..
bye.
_dune2_
Messages postés141Date d'inscriptionmercredi 19 juillet 2006StatutMembreDernière intervention20 avril 2011 7 déc. 2007 à 14:31
re,
afin d'illustrer un peu ce que j'ai dit concernant le mécanisme d'ordonnancement des tâches,
voici quelques documents du fonctionnement sous linux
( je n'ai pas les sources de windows ;) mais le fonctionnement doit être analogue ) :