L'équipe d'émulation x86 corrige du code défaillant

Original : The time the x86 emulator team found code so bad they fixed it during emulation

Pourquoi c'est important

Illustre les défis historiques de l'émulation et comment les équipes optimisent les code générés par les compilateurs.

L'équipe d'émulation x86-32 de Microsoft a découvert un programme compilé de manière inefficace utilisant 256 kilobytes de code pour initialiser 64 kilobytes de données, avec 65 536 instructions d'écriture individuelles au lieu d'une boucle. L'équipe a ajouté un code spécialisé pour détecter et remplacer cette fonction.

Selon Raymond Chen du blog The Old New Thing, lors d'une période où Windows incluait un émulateur de processeur x86-32 sur des systèmes utilisant d'autres architectures, l'équipe a rencontré un programme problématique. Le compilateur ayant généré ce code avait « optimisé » une routine d'initialisation de 64 kilobytes en mémoire stack en déroulant complètement la boucle. Au lieu de générer une boucle compacte pour initialiser chaque octet du buffer, le compilateur avait créé 65 536 instructions individuelles d'écriture d'octet, chacune de 4 bytes, occupant au total 256 kilobytes de code. L'émulateur utilisait la traduction binaire, générant du code natif équivalent aux opérations x86-32 originales, fonctionnant comme un compilateur JIT. Offensée par cette inefficacité, l'équipe d'émulation a ajouté du code spécialisé au traducteur pour détecter cette fonction problématique et la remplacer par la boucle équivalente compacte, améliorant significativement les performances.

Source

devblogs.microsoft.com — Lire l'original →