2009-06-11 15 views
20

chiunque può consigliare la libreria SIMD portatile che fornisce un'API c/C++, funziona su estensioni Intel e AMD e Visual Studio, compatibile con GCC. Sto cercando di velocizzare le cose come ridimensionare un array di doppi 512x512. Prodotti con punti vettoriali, moltiplicazione matrix ecc.Buona libreria SIMD portatile

Finora l'unico che ho trovato è: http://simdx86.sourceforge.net/ ma come la prima pagina dice che non si compila in Visual Studio.

C'è anche Intel IPP che non funziona su AMD da ciò che raccolgo. E c'è Framewave di AMD, ma ho avuto alcuni problemi nella compilazione e nel collegamento della loro libreria e i loro forum sono completamente morti. Qualcuno è riuscito a usare Framewave ovunque?

Grazie.

+0

Ho visto una tesi di master su questo argomento una volta. Non posso per la vita di me ricordare quali termini lo porterebbero in una ricerca. – dmckee

+8

Controlla la libreria [libsimdpp] (https://github.com/p12tic/libsimdpp) - fornisce un'interfaccia comune per SSE2-SSE4.1, AVX, AVX2, NEON, FMA3/4 e XOP intrinsec.Come bonus, viene fornito un comodo meccanismo di invio dinamico: lo stesso codice sorgente può essere compilato più volte con diverse opzioni del compilatore (gli spazi dei nomi si occupano di ODR), collegato allo stesso eseguibile e la libreria selezionerà automaticamente l'implementazione migliore per il processore di destinazione . (disclaimer: Sono l'autore) – user12

+0

Sarebbe meglio migrare questa domanda a http://softwarerecs.stackexchange.com – Eonil

risposta

8

Dal momento che si parla di operazioni di alto livello su matrici e vettori, ATLAS, Intel's MKL, PLASMA e FLAME possono essere di interesse.

Alcune librerie matematiche Matrix C++ includono uBLAS di Boost, Armadillo, Eigen, IT ++ e Newmat. La libreria POOMA probabilmente include anche alcune di queste cose. This question fa riferimento anche a MTL.

Se si cercano primitive di portabilità di livello inferiore, un mio collega ha sviluppato un wrapper attorno alle operazioni vettoriali SSE2, Altivec, VSX, Larrabee e Cell SPE. Può essere trovato nel nostro source repository, ma la sua licenza (accademica) potrebbe non essere appropriata se si desidera distribuirla come parte del proprio lavoro. Inoltre, è ancora in fase di sviluppo significativo per coprire la gamma di esigenze applicative a cui è destinato.

2

Se non ti dispiace di scendere e sporcare con l'assemblatore, puoi sempre utilizzare le funzioni intrinseche per tutte le istruzioni SIMD. Saranno specifici del processore, ad esempio SSE4 intrinseca funzionerà solo su CPU abilitate SSE4 e spetterà a te assicurarsi che le estensioni siano presenti.

C'è un buon articolo here sull'applicazione di SIMD.

Si potrebbe, tuttavia, utilizzare un compilatore che genera il codice SIMD per te senza alcuna libreria esterna. VectorC dovrebbe essere buono anche se non l'ho mai usato personalmente. Per quanto ne so, non richiede alcuna libreria speciale, ma individua solo quei bit di codice sorgente che possono essere adattati da SIMD e compili a qualsiasi livello di SSE specificato.

+0

Grazie, allontanarmi dal processore specifico assemblaggio è il mio obiettivo principale. Non voglio preoccuparmi se la CPU supporta SSE o SSE2 e in alcuni casi scrivere 2 versioni differenti del codice. Speravo che qualcuno lo facesse già in una biblioteca =). Lo stesso vale per le estensioni specifiche del compilatore ecc. – Budric

3

Provare liboil o il relativo ORC. Soprattutto ORC è interessante; implementa un linguaggio assembly di alto livello che viene compilato in codice specifico per l'architettura. Piuttosto sofisticato, molto più di una semplice libreria di wrapper.

10

Eigen è un -licensed solo intestazioni C++ libreria MPL2 che ha matematica vettore/matrice che è ottimizzato per SSE, neon, e Altivec. Hanno operazioni matematiche più sofisticate nei loro moduli aggiuntivi.

+2

Eigen è stato autorizzato da MPL2 http://eigen.tuxfamily.org/index.php?title=News:Relicensed_to_MPL2, che è un buon passo avanti. –

+0

Grazie. Ho aggiornato la mia risposta per riflettere questo. –

Problemi correlati