spacer.png, 0 kB

Identification



Copyright © 2018 GRATISIM, promotion du graticiel pour Flight Simulator. Tous droits réservés.
Joomla! est un logiciel libre sous licence GNU/GPL.
Nous avons 57 invités en ligne

spacer.png, 0 kB
spacer.png, 0 kB
Accueil Documentations Technologie de traitement de l'environnement - 8. Parlons Threads, Fibers, et architectures Multi-core
Technologie de traitement de l'environnement - 8. Parlons Threads, Fibers, et architectures Multi-core Imprimer Envoyer
Index de l'article
Technologie de traitement de l'environnement
2. Les conditions
3. Traitement des données géographiques
5. Tracé de la scène
6. Maillage géométrique de l`environnement
7. Synthèse de l`imagerie aérienne
7.1. Construction du modèle de classe
7.2. Application des textures de landclass
7.3. Restitution linéaire des données vectorielles
7.4. Construction du modèle d'éclairage
8. Parlons Threads, Fibers, et architectures Multi-core
9. Remerciements
10. Références et bibliographie
Toutes les pages
 

8. Parlons Threads, Fibers, et architectures Multi-core

On pourrait définir une "thread" par une unité d'exécution dans un process et "fiber" comme un procédé permettant d'administrer un ensemble de threads. Le architectures "multi-core" sont des procédés de fabrication de processeurs permettant de fondre plusieurs CPU dans un boîtier, accélérant ainsi les traitements, à condition que les OS et applications sachent les exploiter.

argaiv1852

Beaucoup des tâches exécutées par le moteur d'environnement, incluant celles décrites dans cet article, ne peuvent être démarrées et exécutées durant le laps de temps compris entre deux affichages successifs de l'écran  (frames). Certaines d'entre-elles peuvent mettre plusieurs secondes à s'exécuter, même si 100% du processeur leur était affecté. Quelle est donc la meilleure solution pour exécuter ces tâches sans trop impacter la vitesse d'affichage ou la stabilité globale ?

Une solution possible est de les faire tourner en "threads" indépendantes de la boucle principale. En pratique, ce n'est pas le meilleur moyen, la raison principale étant que les tâches constituant le rendu d'environnement font travailler le processeur de façon intensive et peuvent ainsi facilement priver la boucle principale du jeu de toute ressource temps. Pire encore, les tâches d'environnement vont et viennent par intermittence et causeraient de graves fluctuations de la vitesse d'affichage (lags).

En théorie, abaisser la priorité des threads environnement pourrait éviter à la boucle principale du programme d'être privée de ressources. Cependant, la boucle principale elle-même est également grosse consommatrice, et ce serait prendre le risque de priver cette fois de ressources les tâches d'environnement.

Une meilleure solution, basée sur notre propre expérience, est de faire tourner la plupart des tâches du moteur d'environnement dans des "Win32 fibers". Le "fibers" sont identiques sur le principe aux "threads" puisqu'elles s'exécutent dans leur contexte propre (pile d'exécution et registres), mais contrairement aux "treads" qui sont des sortes d'électrons libres, leur organisation en "fiber" permet au programme principal de planifier leur exécution entre les itérations de la boucle principale et de ne pas les exécuter lorsque le système est occupé à faire du rendu graphique ou autres tâches temps réel critiques.

Les "fibers" ont également leur revers de médaille, évidemment... Le planificateur de tâches de Flight Simulator est coopératif, ce qui signifie que les tâches de types "fiber" doivent périodiquement interroger ce dernier pour savoir si du temps leur est alloué. Même si tout cela consomme un peu de ressources, cela a l'avantage de simplifier le travail de synchronisation entre les "fibers" et la boucle du programme principal, puisque tous les points possibles de préemption sont connus.

Devant la généralisation de la disponibilité des PCs à architecture double coeur, nous envisageons d'exécuter quelques "fibers" encapsulées dans une  "thread" unique sur le second coeur de processeur. Les "fibers" qui échangent des données exclusivement avec d'autres "fibers" sur le même coeur de processeur pourront ainsi alléger le processus de synchronisation ; cependant,  n'importe quel autre type d'échange de données avec la boucle principale ou d'autres "fibers" tournant sur le coeur principal devront évidemment continuer à être synchronisées de manière traditionnelle.

 



 
spacer.png, 0 kB
spacer.png, 0 kB
spacer.png, 0 kB

porno, sex child sex, child porno

porno, sex child sex, child porno

porno, sex child sex, child porno

justin tv