Question

peut-on recommander la bibliothèque portable SIMD qui fournit un c / c ++ API, fonctionne sur Intel et AMD extensions et Visual Studio, GCC compatible. Je cherche à accélérer les choses comme mise à l'échelle d'un tableau de doubles 512x512. produits dot vecteur, la multiplication de matrices, etc.

Jusqu'à présent, le seul que j'ai trouvé est: http://simdx86.sourceforge.net/ mais comme la première page dit qu'il ne compile pas visuelle studio.

Il y a aussi Intel IPP qui ne fonctionne pas sur AMD de ce que je crois. Et il y a Framewave d'AMD, mais j'avais quelques problèmes de compilation et de relier leur bibliothèque et leurs forums sont complètement morts. Tout le monde a réussi à utiliser Framewave partout?

Merci.

Était-ce utile?

La solution

Puisque vous parlez des opérations de haut niveau sur des matrices et des vecteurs, ATLAS , MKL d'Intel , PLASMA et FLAMME peut intéresser.

Certaines matrice bibliothèques mathématiques C ++ comprennent uBLAS de Boost, Armadillo, Eigen, IT ++ et Newmat. La bibliothèque POOMA comprend probablement aussi certaines de ces choses. Cette question fait également référence à MTL.

Si vous cherchez des primitives de portabilité de niveau inférieur, un de mes collègues a développé une enveloppe autour SSE2, Altivec, VSX, Larrabee, et les opérations de SPE cellulaire vecteur. Il se trouve dans dépôt la source, mais son permis (scolaire) peut ne pas être approprié si vous voulez le distribuer dans le cadre de votre travail. Il est également en cours de développement important pour couvrir l'ensemble des besoins de l'application qu'il est ciblé à.

Autres conseils

Eigen est un MPL2 -licensed tête seule bibliothèque C ++ qui a mathématiques vecteur / matrice qui est optimisé pour SSE, Enseigne lumineuse, et Altivec. Ils ont des opérations mathématiques plus plus sophistiqués dans leurs modules add-on.

liboil ou connexes ORC . Surtout ORC est intéressante; il met en oeuvre un langage d'assemblage de haut niveau qui est compilé en code spécifique de l'architecture. Assez sophistiqué, bien plus qu'une simple bibliothèque wrapper.

Si vous ne me dérange pas descendre et sale avec l'assembleur vous pouvez toujours utiliser les fonctions intrinsèques pour toutes les instructions SIMD. Ils seront processeur spécifique, à savoir SSE4 intrinsics ne fonctionnera que sur SSE4 activé processeurs et il est à vous pour vous assurer que les extensions sont là.

Il y a un bon article sur l'application SIMD .

Vous pouvez toutefois utiliser un compilateur qui génère du code SIMD pour vous sans bibliothèques externes. VectorC est censé être bon même si je ne l'ai jamais utilisé personnellement. Il ne nécessite pas de bibliothèques spéciales pour autant que je sache, il voit juste ces bouts de code source qui peut benfit de SIMD et rassemble à tous les niveaux de SSE que vous spécifiez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top