#1 Le 29/05/2010, à 21:37
- TatrefThekiller
Logiciel open-source / proprio & optimisations
Salut !
Un truc me trotte dans la tête depuis un petit moment :
Lorsque l'on compile un logiciel open-source, on peut l'optimiser avec -Ox, ou bien avec -march afin d'obtenir de meilleures performances.
Je me demande alors comment font les logiciels proprios pour avoir de bonnes performances (par exemple les jeux vidéo), sachant qu'ils compilent un exécutable qui marche sur quasiment tous les CPU X86 ?
Est-il possible de créer un exécutable avec plusieurs version d'une librairie, et sélectionner celle qui correspond à l'architecture au moment de l'exécution ?
Merci d'avance pour vos réponses !
Hors ligne
#2 Le 29/05/2010, à 21:47
- Le Farfadet Spatial
Re : Logiciel open-source / proprio & optimisations
Salut à tous !
C'est possible, mais c'est un mécanisme extrêmement difficile et complexe à mettre en place, sans parler du nombre de combinaisons à prendre en compte, donc très délicat à mettre en place.
L'approche classique consiste plutôt à déporter les éléments critiques à une bibliothèque tierce, ce qui permet de ne pas nécessiter d'options d'optimisations trop agressives, donc de proposer un exécutable utilisable sur toutes les architectures (qui peut tout de même être optimisé sur plusieurs points). Un bon exemple de bibliothèque tierce est OpenGL. Sous Windows, la majorité des jeux utilisent Direct X, dans la mesure où c'est le mieux supporté.
À bientôt.
Le Farfadet Spatial
Hors ligne
#3 Le 29/05/2010, à 21:59
- TatrefThekiller
Re : Logiciel open-source / proprio & optimisations
Merci pour la réponse !
Quand je parlais de CPU, je pensais plutôt à "catégorie de CPU" par exemple Core i7, Pentium M...
Ou bien par rapport aux fonctionnalités supportées par le CPU (SSE, 3D now...).
Est-ce que tu aurais un lien qui explique comment faire (google n'a pas été mon ami sur ce coup là !) ?
Hors ligne
#4 Le 29/05/2010, à 22:27
- Link31
Re : Logiciel open-source / proprio & optimisations
Si tu compiles avec le compilateur Intel, celui-ci insère des routines de détection des capacités du CPU (cpuid) qui permettent d'utiliser certaines portions de code optimisées si le processeur le permet. Tu peux bien évidemment faire la même chose à la main (c'est le cas dans mplayer par exemple).
Mais finalement, ce n'est pas si compliqué. La plupart des jeux commerciaux indiquent que le processeur doit être, par exemple, un Pentium 4 au minimum, donc > i686. Ça permet déjà une large gamme d'instructions optimisées. De plus, le CPU est loin d'être le facteur de performances le plus important si le jeu est en 3D.
Hors ligne