Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Jeu d'instruction

3 réponses
Avatar
ast
Bonjour,

Des nouvelles instructions sont régulièrement ajoutées aux processeurs Intel et AMD.
Ces instructions appelées MMX, SSE 1, 2, 3, 4 permettent d'accélérer certaines taches
bien spécifiques comme le traitement video par exemple.

Je ne pense pas que les fabricants de logiciels fournissent autant de version de leurs
programmes qu'il y a de pack d'instructions additionnelles par rapport au jeu d'instruction
historique x86. En tout cas je n'ai jamais vu plusieurs versions d'un binaire executable,
une version si vous avez SSE4, une autre si vous n'avez que SSE3 etc.

Reste donc à savoir comment un processeur avec SSE3 se comporte lorsque qu'une instruction
SSE4 se présente. C'est l'objet de mon post. J'ai une idée sur la question mais j'attends de voir
vos réponses.

ast

3 réponses

Avatar
Nicolas George
"ast" wrote in message <47ce7fc0$0$871$:
Bonjour,

Des nouvelles instructions sont régulièrement ajoutées aux processeurs
Intel et AMD. Ces instructions appelées MMX, SSE 1, 2, 3, 4 permettent
d'accélérer certaines taches bien spécifiques comme le traitement video
par exemple.

Je ne pense pas que les fabricants de logiciels fournissent autant de
version de leurs programmes qu'il y a de pack d'instructions
additionnelles par rapport au jeu d'instruction historique x86. En tout
cas je n'ai jamais vu plusieurs versions d'un binaire executable, une
version si vous avez SSE4, une autre si vous n'avez que SSE3 etc.


Moi si.

Il faut bien voir que la vitesse apportée par ces nouvelles instructions
n'est que très rarement critique. La plupart des programmes sont limitées
par leurs entrées-sorties (interaction avec l'utilisateur ou réseau). Pour
les programmes qui restent, chacun adopte la politique qui l'intéresse.

Premier exemple : OpenSSL : c'est de la crypto qui sert
en flux ; les performances peuvent limiter le débit plus que le réseau sur
des machines un peu lentes. Le paquet Debian i386 vient avec 4 versions de
la bibliothèque : sans optimisation particulière, optimisé pour 486,
pentium, et pentium 3 + CMOV. C'est le chargeur dynamique qui sélectionne
automatiquement la bonne version à utiliser.

Deuxième exemple : les outils d'encodage vidéo libres. Les développeurs de
MPlayer et ffmpeg recommandent vivement de ne pas utiliser de binaires
précompilés, et de se compiler soi-même sa propre version. Les scripts de
configuration détectent le processeur sur lequel c'est censé tourner, et
activent les optimisations qui vont bien.

Reste donc à savoir comment un processeur avec SSE3 se comporte lorsque
qu'une instruction SSE4 se présente. C'est l'objet de mon post. J'ai une
idée sur la question mais j'attends de voir vos réponses.


Sur le principe, c'est très facile à tester : il suffit de trouver une
machine un peu vieille, d'y compiler un programme un peu complexe avec des
options incompatible, et regarder.

En pratique, ce qui se passe, c'est que le processeur déclenche une
exception (de même nature que s'il rencontre une instruction complètement
inconnue, ce qui pour lui est effectivement est le cas), cette exception est
rattrapée par le système d'exploitation, qui va soit interrompre le
programme en signalant une erreur, soit, si le programme est prévu pour,
déclencher une routine de gestion d'erreur dans le programme.

Avatar
ast
"Nicolas George" <nicolas$ a écrit dans le message de news: 47ce85b5$0$9030$
"ast" wrote in message <47ce7fc0$0$871$:


Je vous remercie pour votre réponse détaillée


En pratique, ce qui se passe, c'est que le processeur déclenche une
exception (de même nature que s'il rencontre une instruction complètement
inconnue, ce qui pour lui est effectivement est le cas), cette exception est
rattrapée par le système d'exploitation, qui va soit interrompre le
programme en signalant une erreur, soit, si le programme est prévu pour,
déclencher une routine de gestion d'erreur dans le programme.


Je peux maintenant dire qu'elle était mon idée.

Je pensais que le programme d'interruption déclenché par l'arrivé d'une instruction
inconnue pouvait émuler la nouvelle instruction. Ainsi un binaire éxécutable pourrait
être compatible avec tous les processeurs.

Avatar
Nicolas George
"ast" wrote in message <47ce890f$0$874$:
Je pensais que le programme d'interruption déclenché par l'arrivé d'une
instruction inconnue pouvait émuler la nouvelle instruction. Ainsi un
binaire éxécutable pourrait être compatible avec tous les processeurs.


C'est ce qui se passe, au moins sous Linux, quand on insiste pour faire
tourner des programmes utilisant les flottants sur un processeur dénué de
FPU. Mais c'est abominablement lent (le changement de contexte lié à
l'exception est très coûteux), et ce ne serait pas du tout rentable pour les
cas d'optimisations fines.

PS : ton newsreader envoie des lignes trop longues.