Domanda

qualcuno può consigliare libreria portabile SIMD che fornisce un C / C ++ API, lavora sulle estensioni Intel e AMD e Visual Studio, GCC compatibili. Sto cercando di accelerare le cose come scalare una serie di 512x512 doppie. prodotti dot vettore, la moltiplicazione di matrici ecc.

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

C'è anche Intel IPP che non funziona su AMD da quanto ho capito. E c'è Framewave di AMD, ma ho avuto alcuni problemi di compilazione e collegamento loro biblioteca e loro forum sono completamente morto. Chiunque è riuscito a usare Framewave da qualche parte?

Grazie.

È stato utile?

Soluzione

Dal momento che si parla di operazioni di alto livello su matrici e vettori, ATLAS , Intel MKL , PLASMA , e FIAMMA potrebbero interessare.

Alcuni librerie C ++ matrice matematica includono uBLAS da Boost, Armadillo, Eigen, IT ++ e NEWMAT. La libreria POOMA probabilmente comprende anche alcune di queste cose. Questa domanda si riferisce anche alla MTL.

Se siete alla ricerca di primitive portabilità di livello inferiore, un mio collega ha sviluppato un wrapper per SSE2, Altivec, VSX, Larrabee, e le operazioni vettoriali cellulare SPE. Si può trovare nel nostro fonte repository , ma la sua licenza (accademico) potrebbe non essere indicato se si vuole distribuirlo come parte del vostro lavoro. E 'inoltre ancora in fase di sviluppo significativo per coprire la gamma di esigenze applicative che è mirato a.

Altri suggerimenti

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

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

Se non ti dispiace scendere e sporco con assemblatore allora si può sempre utilizzare le funzioni intrinseche per tutte le istruzioni SIMD. Saranno processore specifico, vale a dire SSE4 intrinseche verrà eseguito solo su SSE4 abilitato CPU ed è a voi per assicurarsi che le estensioni sono lì.

C'è un buon articolo qui di applicare SIMD .

Si potrebbe, tuttavia, utilizzare un compilatore che genera il codice SIMD per voi senza librerie esterne. VectorC si suppone essere buono anche se non ho mai usato personalmente. Non richiede nessuna libreria speciali per quanto ne so, solo che ha visto quei pezzetti di codice sorgente che può benfit da SIMD e compila a qualsiasi livello di SSE specificato.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top