Developpez.com - Rubrique Lazarus

Le Club des Développeurs et IT Pro

Bibliothèque mathématique sur les vecteurs et formules trigonométriques optimisées en assembleur SSE et AVX

Par Jérôme Delauney

Le 2018-01-20 19:19:13, par BeanzMaster, Expert confirmé
Bonjour à tous !

Cela faisait un petit moment que j'étais resté sans donner de nouvelles, mais je viens aujourd'hui vous présenter un projet sur lequel je planche avec un autre programmeur anglophone (Dicepd sur le forum anglais).

Vous en trouverez les sources sur mon espace github.

Il s'agit d'une bibliothèque de gestion et calcul des vecteurs 2D, 3D et 4D. Elle prend aussi en charge les matrices, quaternions, plans homogènes, "BoundingBox", etc. Il y a également une unité comprenant le calcul rapide par approximation des sinus, cosinus, arcos, atan2, etc.

Cette bibliothèque est compatible avec les environnements Linux, Windows 32 et 64 bits.

Le projet principal à compiler est fondé sur les classes "FPCUnit" de FPC et Lazarus pour faire des tests unitaires, ce qui nous permet de vérifier nos fonctions, mais aussi de faire des tests de performances pour différents formats de fichiers (csv, bbcode, html, markdown).

À l'heure actuelle, seules les versions SSE sont mises à jour. Les versions AVX le seront après nos tests définitifs (par défaut, le projet est configuré pour utiliser le jeu d'instructions SSE version 3).

Pour activer les fonctions trigonométriques "rapides", if faut ajouter dans les options personnalisées du projet la commande
Code :
-dUSE_FASTMATH
Vous trouverez également une démonstration graphique toute bête avec TBitmap ou le Canvas de la forme (à votre choix) sur les boids de Craig Reynolds. Elle permet par ailleurs de comparer les performances du code natif et celui du code ASM (portage d'un code trouvé sur "comment-ça marche".

Si vous avez des questions, des problèmes, ou si le projet vous intéresse, alors n'hésitez pas à me joindre !
  Discussion forum
1 commentaire
  • Gouyon
    Membre expérimenté
    Très intéressant. Je vais regarder ça de plus près