Pergunta

Alguém pode recomendar biblioteca SIMD portátil que fornece a / c ++ API c, trabalha em extensões Intel e AMD e Visual Studio, GCC compatível. Eu estou olhando para acelerar coisas como escalar uma 512x512 matriz de duplas. Vector dot produtos, matriz multiplicação etc.

Até agora, o único que eu encontrei é: http://simdx86.sourceforge.net/ mas como a primeira página diz que não compilar em Visual estúdio.

Há também Intel IPP que não funciona em AMD do que eu reunir. E há Framewave da AMD, mas eu estava tendo alguns problemas de compilação e vinculação a sua biblioteca e seus fóruns são completamente morto. Qualquer pessoa conseguiu usar em qualquer lugar Framewave?

Graças.

Foi útil?

Solução

Uma vez que você menciona operações de alto nível em matrizes e vetores, ATLAS , MKL da Intel , PLASMA , e FLAME podem ser de interesse.

bibliotecas

Alguns C ++ matriz matemática incluem uBLAS de Boost, Armadillo, Eigen, IT ++, e Newmat. A biblioteca POOMA provavelmente também inclui algumas dessas coisas. Esta questão também se refere a MTL.

Se você está procurando primitivas de portabilidade de nível mais baixo, um colega meu desenvolveu um invólucro em torno SSE2, Altivec, VSX, Larrabee, e operações vetoriais celular SPE. Ela pode ser encontrada no nosso fonte repositório , mas seu licenciamento (acadêmico) pode não ser apropriado se você quiser distribuí-lo como parte de seu trabalho. É também ainda em desenvolvimento significativo para cobrir a gama de necessidades de aplicação que está dirigida a.

Outras dicas

Eigen é um MPL2 -licensed cabeçalho somente biblioteca de C ++ que tem matemática vector / matriz que é optimizado para SSE, néon, e Altivec. Eles têm operações matemáticas mais mais sofisticados em seus add-on módulos.

Tente liboil ou relacionados ORC . Especialmente ORC é interessante; ele implementa uma linguagem de montagem de alto nível que é compilado em código de arquitetura específica. Muito sofisticado, muito mais do que uma biblioteca invólucro simples.

Se você não me importo de ficar para baixo e sujo com assembler então você pode sempre usar as funções intrínsecas para todas as instruções SIMD. Eles serão específicos do processador, ou seja intrínsecos SSE4 só vai rodar em SSE4 habilitado CPUs e cabe a você para certificar-se as extensões estão lá.

Há um bom artigo aqui sobre a aplicação de SIMD .

Você poderia, no entanto, usar um compilador que gera código SIMD para você sem qualquer bibliotecas externas. VectorC é suposto ser bom, embora eu nunca usei pessoalmente. Ele não requer qualquer bibliotecas especiais, tanto quanto eu sei, é apenas manchas esses pedaços de código fonte que pode benfit de SIMD e compila a qualquer nível de SSE especificados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top