2009-09-07 16 views

risposta

38

Per prima cosa, non consiglio di utilizzare le funzioni integrate - non sono portatili (su compilatori dello stesso arco).

Utilizzare intrinsics, GCC does a wonderful job ottimizzare gli intrinseci SSE in un codice ancora più ottimizzato. È sempre possibile dare un'occhiata all'assieme e vedere come utilizzare SSE per il suo pieno potenziale.

Intrinsics sono facili - proprio come le chiamate alle funzioni normali:

#include <xmmintrin.h> 

__m128 vector1 = _mm_set1_ps(4, 3, 2, 1); // Little endian, stored in 'reverse' 
__m128 vector2 = _mm_set1_ps(7, 8, 9, 0); 

// Addition 
__m128 result = _mm_add_ps(vector1, vector2); // result = vector1 + vector 2 

// A more advanced function, called shuffle 
vector1 = _mm_shuf_ps(vector1, vector1, _MM_SHUFFLE(0,1,2,3)); 
// vector1 is now (1, 2, 3, 4) (above shuffle reversed it) 

Naturalmente ci sono il modo più opzioni, SSE è davvero potente e, a mio parere relativamente facile da imparare.

+0

Sai caldo per fare un prodotto punto di due matrici di elementi int32 ciascuno? – psihodelia

+6

Fai una domanda per questo, e farò in modo di aiutare :) – LiraNuna

32

Poiché hai chiesto che le risorse:

A practical guide to using SSE with C++: Buono panoramica concettuale su come utilizzare in modo efficace SSE, con esempi.

MSDN Listing of Compiler Intrinsics: riferimento completo per tutte le esigenze intrinseche. È MSDN, ma praticamente tutti gli elementi intrinseci elencati qui sono supportati anche da GCC e ICC.

Christopher Wright's SSE Page: Riferimento rapido sui significati dei codici operativi SSE. Immagino che i manuali Intel possano svolgere la stessa funzione, ma questo è più veloce.

Probabilmente è meglio scrivere la maggior parte del codice in intrinseche, ma controllare l'objdump dell'output del compilatore per assicurarsi che stia producendo codice efficiente. La generazione del codice SIMD è ancora una tecnologia abbastanza nuova ed è molto probabile che il compilatore possa sbagliare in alcuni casi.

4

Trovo molto preziosa la ricerca del Dr. Agner Fog sulle guide di ottimizzazione &! Ha anche alcune librerie & strumenti di test che non ho ancora provato. http://www.agner.org/optimize/