c++ open-source cross-platform simd

c++ - Buena biblioteca SIMD portátil



open-source cross-platform (5)

¿Alguien puede recomendar la biblioteca SIMD portátil que proporciona API ac / c ++, funciona en las extensiones Intel y AMD y en Visual Studio, compatible con GCC? Estoy buscando acelerar cosas como escalar una matriz de dobles de 512x512. Productos de puntos vectoriales, multiplicación de matrices, etc.

Hasta ahora, el único que encontré es: http://simdx86.sourceforge.net/ pero como la primera página dice que no compila en visual studio.

También hay Intel IPP que no funciona en AMD de lo que recojo. Y está Framewave de AMD, pero tuve algunos problemas para compilar y vincular su biblioteca y sus foros están completamente muertos. ¿Alguien logró usar Framewave en cualquier lugar?

Gracias.


Como menciona operaciones de alto nivel en matrices y vectores, ATLAS , MKL , PLASMA y FLAME Intel pueden ser de su interés.

Algunas bibliotecas matriciales de C ++ incluyen uBLAS de Boost, Armadillo, Eigen, IT ++ y Newmat. La biblioteca de POOMA probablemente también incluye algunas de estas cosas. Esta pregunta también se refiere a MTL.

Si está buscando primitivas de portabilidad de nivel inferior, un colega mío ha desarrollado una envoltura alrededor de las operaciones vectoriales SSE2, Altivec, VSX, Larrabee y Cell SPE. Se puede encontrar en nuestro repositorio de fuentes , pero su licencia (académica) puede no ser adecuada si desea distribuirla como parte de su trabajo. También se encuentra aún en un desarrollo significativo para cubrir el rango de necesidades de aplicaciones a las que está dirigido.



Pruebe liboil o el ORC relacionado. Especialmente ORC es interesante; implementa un lenguaje ensamblador de alto nivel que se compila en un código específico de la arquitectura. Bastante sofisticado, mucho más que una simple biblioteca de envoltorios.


Si no le importa irse abajo y ensuciarse con el ensamblador, siempre puede usar las funciones intrínsecas para todas las instrucciones SIMD. Serán específicos para el procesador, es decir, los intrínsecos de SSE4 solo se ejecutarán en CPU habilitadas para SSE4 y depende de usted asegurarse de que las extensiones estén allí.

Hay un buen artículo here sobre la aplicación de SIMD.

Sin embargo, podría usar un compilador que genere código SIMD sin bibliotecas externas. Se supone que VectorC es bueno, aunque nunca lo he usado personalmente. No requiere ninguna biblioteca especial por lo que sé, solo localiza esos bits de código fuente que pueden beneficiarse de SIMD y se compila al nivel de SSE que especifique.


Eigen es una biblioteca de C ++ solo para encabezado con MPL2 MPL2 que tiene matemáticas vector / matriz optimizadas para SSE, Neon y Altivec. Tienen operaciones matemáticas más sofisticadas en sus módulos adicionales.