Page 1 sur 1

BS and multi core : trad forum off

Publié : ven. janv. 30, 2009 11:45 pm
par hellfrog
BS and multi core

http://forums.eagle.ru/showthread.php?t=35091&page=13

Pour obtenir un gain de performance, le problème n'est pas de découper l'exécution du programme en tranches, mais que le code s'exécute en parralèle sur plusieurs CPU/Cores. Il est facile de tronçonner un programme, mais la plupart des tranches ne vont de toute façon pas s'exécuter en même temps car elles dépendent les unes des autres.
Je suppose que dans un bon simulateur de vol, les modèles physiques sont affectés par la météo. C'est bien une dépendance, le mouvement de l'avion dépend du vent par ex. Pour calculer ce mouvement, l'effet du vent doit être calculé au préalable. Il est impossible de résoudre une équation avec trop d'inconnues.
Cela veut dire que la tranche "modèle de vol" devra attendre la fin de la tranche "météo" pour qu'elle lui envoie les données dont elle a beson : ces deux tranches ne peuvent donc pas s'exécuter en parallèle.

DCS.exe utilise 10 tranches. Il est multithreadé comme la plupart des programmes, mais cela ne veut pas dire qu'il saurait s'exécuter en parralèle sur 10 CPUs.

Il y a qqs solutions au problème de l'exécution en parallele.
Il est possible de ralentir qqch (comme utiliser les données du vent de la frame précédente) ou calculer des choses en avance, mais de toute manière de telles choses peuvent avoir des effets collatéraux étranges, augmenter les calculs ou même diminuer les performances (c'est possible).

Il est donc TRES difficile (bcp plus que ce que les gens pensent) d'arriver à obtenir une exécution du code en parallele dans les programmes de type simulateurs.

Si régler l'affinité à 2 cores a un impact important, que pensez des CPU 4 et 8 cores ?

Cela dépend surtout :
du nombre de tranches threads : 1 tranche nécessite 1 CPU unique
du degré de parallelisme : réduit si les tranches sont dépendantes
de la charge en calcul : les performances sont médiocres avec bcp de tranches qui exécutent de petits calculs.
Il y a aussi une limite au multi threading :
il faut du temps de calcul CPU pour gérer les tranches et leur synchronisation. Parfois il faut plus de ressources pour cela que pour exécuter les threads : 3 calculs: a=1+2; b+1+2; c=a+b. la version Multithread sera plus lente que la simple, parce que cela prend plus de temps pour initialiser et synchroniser que pour faire des calculs aussi simples.

Je ne pense pas que 4 ou 8 cores sont inutiles, mais je pense que le gain de performance sera de moins en moins important à mesure que l'on multipliera le nombre de cores.

En fait, je ne sais pas exactement à quel degré DCS peut être exécuté en parallele, mais à priori pas beaucoup.

Je pense que l'effet du réglage de l'affinité pour BS a plus à voir avec la manière dont Vista gère DirectX que avec le multithread de DCS, c'est pour cela que ce réglage n'a pas d'effet dans XP.

****
Vista gère DirectX differement que XP, et d'après Intel, mieux que XP.
Une théorie est que Vista permet à un core de gérer DirectX et à l'autre de gérer le jeu.
Une petite recherche sur YouTube montre un présentation de Intel qui explique les rapports entre Vista, les Cores et leur partage, et DirectX.

Publié : sam. janv. 31, 2009 10:07 am
par Black Wolf
Intéressant la "théorie" DX sur 1 core, le simu sur l'autre. Pour le reste oui la programmation d'un soft multi-threads peut être un véritable casse tête si le soft ne s'y prête pas.

MAJ version 3.0 de Bill's Process Manager

Publié : sam. janv. 31, 2009 12:55 pm
par hellfrog