mercredi 21 mai 2014

Swizzle [fr]

J'en avais déjà parlé dans un précédent article : les cartes vidéo 3dfx ont été à la base construite pour le gigantesque marché du PC qui lui est Little Endian.

Or, nos 68k sont Big Endian, ce qui entraîne une nécessaire conversion des données avec trois instructions : ror/swap/ror...

Bien sûr, ces trois instructions indispensables prennent déjà du temps au CPU et pèse aussi 6 octets à chaque conversion dans Warp3D !

En regardant de plus près le datasheet des 3dfx, il existe un bit appelé Swizzle qui permet de changer les registres internes du GPU en Big Endian :

Et ça fonctionne !!

Oui, après quelques modifications, ce bit est bien opérationnel et il est maintenant possible d'ôter toutes les conversions ror/swap/ror des W3D_AvengerLE.library et W3D_AvengerLEMU.library !

Le GPU "devient" en quelque sorte Big Endian, ce qui nous arrange bien !

J'ai ainsi pu commettre une très belle optimisation : 22,2 Ko de gagner sur la librairie ! Oui, vous avez encore bien lu, il y avait 22,2 Ko de ror/swap/ror dedans, et qui ont donc tous dégagés maintenant !! Allez, du balais !

Un grand MERCI aux ingénieurs 3dfx qui ont fait du bon travail !

Un peu de patience, je vais mettre les nouvelles versions en Downloads bientôt...
 

2 commentaires:

  1. Bravo, car en lisant l'extrait du datasheet des 3dfx cela ne saute pas aux yeux .
    As-tu obtenu un gain en fps pour GLBlitsQuake ?
    Car en extrapolant :
    Suppression des instructions "nop": 9ko=0,7fps ,
    alors avec la suppression des instructions "ror/swap/ror": 22,2ko=1,7fps ?
    Vincent V.

    RépondreSupprimer
    Réponses
    1. Avec mon 060, pas de speedup : je suppose que l'on arrive à une certaine saturation du bus Mediator. Après, je pense qu'avec un 030 ou 040, il y a du gain de vitesse puisque ces deux CPUs son moins puissants que le 060... Je vais faire quelques tests...

      Supprimer

Laissez vos commentaires ici :