Bibliothèque SIMD C ++ [fermé]

14

Dans le passé, j'ai utilisé Visual Studio avec la bibliothèque mathématique DirectX XNA. Maintenant, j'utilise la collection de compilateurs GNU. Quelqu'un peut-il conseiller une bibliothèque mathématique SIMD avec une bonne documentation?

itun
la source

Réponses:

15

Vous pouvez également le faire "vous-même" en utilisant les instructions SSE (Streaming SIMD Extensions) et les éléments intrinsèques (fichiers * mmintrin.h) de votre compilateur / proc.


Tutoriels

Voici un exemple d'utilisation des instructions SSE avec l'assembly:
http://neilkemp.us/src/sse_tutorial/sse_tutorial.html

Et voici un tutoriel sur la façon d'utiliser les instructions SSE avec intrinsèques:
http://www.codeproject.com/KB/recipes/sseintro.aspx

Un guide pratique pour utiliser SSE SIMD avec C ++:
http://sci.tuomastonteri.fi/programming/sse/printable


Informations utiles

Référence Intel C ++ Intrinsics (utile pour obtenir la liste des instructions):
http://cache-www.intel.com/cd/00/00/34/76/347603_347603.pdf

Prise en charge intrinsèque SSE et SSE2 des jeux d'instructions améliorés pris en charge par les processeurs Intel et AMD (utiles pour toutes sortes d'informations relatives à SSE et SIMD):
http://msdn.microsoft.com/en-us/library/y0dh78ez%28v= vs.71% 29.aspx

Liste d'instructions générales et informations sur SSE, SSE2, SSE3, SSSE3, SSE4, 3DNow, etc. (différentes versions de SSE pour différentes architectures de proc):
http://softpixel.com/~cwright/programming/simd/sse.php


Si vous préférez un cadre d'algèbre linéaire, j'ai entendu parler d'Eigen:
http://eigen.tuxfamily.org/
http://eigen.tuxfamily.org/index.php?title=FAQ#Vectorization (sur le support SIMD)

Et enfin, si vous avez besoin de plus de réponses sur les cadres SIMD C ++, voici un lien StackOverflow . (Framework C ++ SSE SIMD):
/programming/4953121/c-sse-simd-framework

Valkea
la source
Merci, mais je n'ai pas le temps de faire autant de routine.
itun
Peut-être que la prochaine fois, ce n'est pas si difficile que ça ressemble;). Cependant, j'ai ajouté quelques liens en bas qui pourraient aider.
Valkea
Bonne réponse. Les mathématiques SIMD sont amusantes. Je me souviens des jours où j'utilisais SSE pour accélérer le lancer de rayons. Mais pourquoi jouer au petit jouet, si nous avons GPGPU maintenant :)
Notabene
3

Ces deux bibliothèques vectorielles / matricielles ont optimisé le code SSE2, Sony a également un commutateur de compilation Altivec pour PowerPC:

  1. Sony vectormath SSE2 et Altivec

  2. Bullet's Linearmath SSE2

Maik Semder
la source
1
Les deux liens sont morts.
vexe
1

par un peu de recherche, je pense que vous pouvez utiliser la bibliothèque mathématique de bullet, bullet lui-même est un moteur de physique open source et il semble avoir une bibliothèque mathématique puissante à côté. voici un raccourci pour télécharger le lien http://sourceforge.net/projects/bullet/files/SIMD%20and%20amp_%20Vector%20Math%20library/simd%20math%201.02%20and%20vector%20math%201.01/simdvectormath.tgz /Télécharger

Ali1S232
la source
Je l'ai vu, mais comment le compiler je n'ai pas compris
itun
3
Plutôt que de simplement vider un lien de téléchargement, un lien vers le site Web réel avec la documentation, le wiki et la référence API pourrait être plus utile. bulletphysics.org
Bob Somers
@Bob je voulais juste exprimer ce lien de téléchargement car il faut juste un peu de temps pour trouver simdvectormathun fichier spécifique dans des fichiers à puce
Ali1S232
0

AMD a le projet open source SSEPlus , même si je ne l'ai jamais utilisé, je ne peux donc pas commenter sa qualité ou son applicabilité.

Bob Somers
la source
0

Bien qu'il ne soit pas exactement axé sur l'utilisation de SIMD, je trouve que glm est une très bonne bibliothèque mathématique à usage général en matière de jeux. Il ne prend pas en charge les matrices arbitraires et similaires, mais il a des fonctionnalités rationalisées à utiliser avec les graphiques 3D et il a des fonctionnalités pour activer SSE ainsi que certaines implémentations plus rapides d'algorithmes courants.

Bien qu'il soit spécifiquement conçu pour être utilisé avec OpenGL, je l'ai trouvé très utile pour une variété de tâches. Il utilise fortement la surcharge de l'opérateur, ce qui le rend très facile à utiliser et à maintenir le code qui l'utilise.

Il est basé sur le langage OpenGL GLSL, qui a une documentation très solide, et toutes les différences sont également bien documentées.

akaltar
la source