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.
Echa un vistazo a macstl: http://www.pixelglow.com/macstl/
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.