Je recherche une bibliothèque SIMD ciblée de petites opérations de matrice (4x4) pour graphiques. Il y a beaucoup de précision unique là-bas, mais j'ai besoin de prendre en charge la première et la double précision. P>
J'ai regardé la bibliothèque IPP MX d'Intel, mais je préférerais quelque chose avec la source. Je suis très intéressé par les implémentations SSE3 + de ces opérations particulières: P>
EDIT: Non "Optimisation prématurée" réponses s'il vous plaît. Toute personne qui a travaillé avec de petites matrices connaît GCC ne vectorise pas ainsi que des intrinsions ou de l'ASM optimisées à la main. Et dans ce cas, c'est important, ou je ne demanderais pas. p>
5 Réponses :
Si vous utilisez un compilateur moderne, vous n'avez probablement pas besoin de déranger. La vectorisation automatique de la plupart des compilateurs doit pouvoir transformer facilement pour code> boucles avec des limites fixes dans le code SIMD. GCC a eu ceci pour tout un peu de temps , et c'est l'un des Points de vente principaux du compilateur d'Intel (bien que vous devriez faire attention à l'utilisation du compilateur d'Intel si vous souhaitez utiliser des jetons AMD). P>
Avez-vous des exemples d'où vous voudrez peut-être faire attention si vous utilisez un compilateur Intel avec une puce AMD?
Intel a obtenu des problèmes juridiques dans le passé pour la vérification de la CPI de la chaîne de fournisseur renvoyée par l'instruction CPUID au lieu de s'appuyer uniquement sur les chèques de contrôle SSEX, ce qui signifiait que le code généré par la CPI n'utiliserait pas les chemins de code SSEX sur des machines non-Intel. Un regard rapide sur la documentation actuelle montre que vous pouvez forcer l'utilisation du SSSE3 jusqu'à SSSE3 pour les processeurs non Intel, mais si vous souhaitez utiliser une sélection de code de temps d'exécution, il utilisera toujours l'option la plus lente sur les processeurs non Intel .
ne savais pas ça. Recherchez Comparer Ifort Vs. Open64 (et autres) sur mon système d'Opteron.
Soins pour fournir un peu plus d'informations sur la raison pour laquelle? (Et probablement pourquoi le bowvote?)
Downvoted parce que même maintenant en 2016, les compilateurs modernes sucent à la vectorisation automatique. L'assemblage écrit manuellement ou le code intrincical a tendance à être 2 à 3 fois plus rapide.
Peut-être le Bibliothèque Eigen ? p>
Il prend en charge l'ensemble d'instructions SSE 2/3/4, Arm Néon et Altivec. p>
+1: Vérifiez simplement le Benchmarks pour Le i> raison de l'utiliser.
Merci, mais Eigen s'adresse aux matrices NXN, je suis concentré sur les opérations 4x4 pour les graphiques.
Très bien, je vais vérifier - je pourrais finir de rouler le mien.
Eigen prend en charge les matrices de taille fixe. De petites matrices de taille fixe peuvent être attribuées sur la pile pour une meilleure performance. 4x4 est bon pour SSE, puisque la taille du vecteur SSE est de 128 bits. Une rangée ou une colonne de 4 numéros de double précision s'adapterait uniformément dans des vecteurs SSE 2x128 bits. Cela rend la mise en œuvre de la SIMD facile. P>
Une autre option consiste à le coder vous-même. Étant donné que vos matrices sont petites et entrent dans le cache L1, vous n'avez pas à vous soucier de la préoccupation avec le titrage de la mémoire nécessaire aux grandes matrices. Vous pouvez utiliser AVX pour une meilleure performance. Nouvelles versions de GCC et de Visual C ++ 2010 Support AVX intrinsics. La taille du vecteur AVX est de 256 bits peut contenir exactement 4 numéros de double précision. P>
Il y a une implémentation AVX 4x4 ici a>. Il est écrit comme exemple d'application, mais je suis sûr qu'il ne serait pas trop difficile pour quiconque d'extraire les pièces intéressantes dans une bibliothèque partagée. Je pensais que je publierais ceci malgré l'âge de la question initiale pour que quiconque se pose ici à l'avenir. p>
Pourquoi tous les votes d'avance? Semble comme une question parfaitement bonne pour moi ...
L'OP a initialement rejeté deux réponses raisonnables, puis a modifié la question pour justifier l'une des rejets et éventuellement religionné sur l'autre rejet. La question est bonne, mais l'étiquette de l'assergeuse a besoin d'une amélioration.
@ user57368 Realiatory Downvotes Eh? Vous avez demandé pourquoi vous avez été retrouvé, vous l'avez eu. Comment cela peut-il être interprété comme en quelque sorte trompeur? - La modification est clairement marquée.