Esiste qualche istruzione SSE2 per caricare un registro vettoriale a 128 bit int
da un buffer int
, nell'ordine inverso?Istruzione SSE2 per caricare numeri interi in ordine inverso
risposta
E 'abbastanza facile per invertire a 32 bit int
elementi dopo un carico normale:
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi32(v, _MM_SHUFFLE(0, 1, 2, 3)); // PSHUFD - mask = 00 01 10 11 = 0x1b
È possibile fare la stessa cosa per 16 bit short
elementi, ma ci vuole più istruzioni:
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi32(v, _MM_SHUFFLE(0, 1, 2, 3)); // PSHUFD - mask = 00 01 10 11 = 0x1b
v = _mm_shufflelo_epi16(v, _MM_SHUFFLE(2, 3, 0, 1)); // PSHUFLW - mask = 10 11 00 01 = 0xb1
v = _mm_shufflehi_epi16(v, _MM_SHUFFLE(2, 3, 0, 1)); // PSHUFHW - mask = 10 11 00 01 = 0xb1
Nota che puoi farlo con meno istruzioni usando _mm_shuffle_epi8
(PSHUFB
), se SSSE3 è disponibile:
const __m128i vm = _mm_setr_epi8(14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 4, 5, 2, 3, 0, 1);
// initialise vector mask for use with PSHUFB
// NB: do this once, outside any processing loop
...
__m128i v = _mm_load_si128(buff); // MOVDQA
v = _mm_shuffle_epi8(v, vm); // PSHUFB
EDIT: (I seguenti sono per scalari punto singolo precisione galleggiamento, lasciando qui nel caso)
Il più approssimativa (e pratico) è _mm_loadr_ps
intrinseca. Essere consapevoli che l'indirizzo deve essere allineato a 16 byte.
Sebbene questo intrinseco traduce in più di istruzione (MOVAPS
+ shuffling).
Grazie per la risposta, ma questa istruzione carica quattro valori di virgola mobile a precisione singola in ordine inverso. Sto cercando la stessa operazione per i numeri interi ma suppongo che non ci sia supporto per quello. – Andy
Sì, non ho notato che stavi parlando di valori interi (dovresti rileggere il tuo titolo). La risposta di Paul R è ciò di cui hai bisogno. – Trax
Sì. Con curiosità, la stessa operazione può essere eseguita con valori brevi? – Andy
- 1. TemplateBeginRepeat in ordine inverso
- 2. Markdown in ordine inverso elenco?
- 3. Android - FirebaseListAdapter in ordine inverso?
- 4. Ordine inverso matrice
- 5. Generare numeri interi in ordine crescente usando un numero di numeri primi
- 6. Numeri romani ai numeri interi
- 7. note ordine inverso in modalità org
- 8. Come eseguire il log in ordine inverso?
- 9. Istruzione SSE per sommare interi 32 bit a 64 bit
- 10. ordine inverso dopo coord_flip in R
- 11. Perché. Native compile loop in ordine inverso?
- 12. Numeri interi senza segno in C++ per loop
- 13. funzione restituisce la lista in ordine inverso in OCaml
- 14. In R è meglio usare integer64, numerico o carattere per numeri interi di numeri interi grandi?
- 15. Trucchi per ottenere istogramma cumulativo ordine inverso in matplotlib
- 16. Ordina N numeri in ordine numerico
- 17. Dividere i numeri interi
- 18. SHA256 preferisce numeri interi?
- 19. Tipi interi da utilizzare per i numeri interi Core
- 20. Java ArrayList per i numeri interi
- 21. Javascript - sostituire numeri interi per decimali
- 22. Generatore di numeri casuali che genera numeri interi per Java
- 23. Determinazione di numeri pari/dispari (numeri interi)?
- 24. heatmap seaborn ordine inverso asse y
- 25. Jackson JSON converte numeri interi in stringhe
- 26. ordinamento numeri interi veloci in haskell
- 27. come leggere un file csv in ordine inverso in python
- 28. k-combinazioni di un insieme di numeri interi in ordine ascendente
- 29. Iterazione di un elenco in ordine inverso in java
- 30. numeri interi di tipo in ocaml
Grazie Paul. La tua logica sta funzionando bene. Ma non riesco a capire l'uso del secondo parametro "0x1B". È una specie di maschera? Un altro dubbio è ... È possibile fare la stessa operazione su pantaloncini? – Andy
Ho aggiunto un secondo esempio per il caricamento e l'inversione dei cortocircuiti. La maschera è trattata nei documenti Intel, ma ho aggiunto dei commenti per mostrare come è costruita. –
P.S. Consiglio vivamente di scaricare la [Intel Intrinsics Guide] (http://software.intel.com/en-us/articles/intel-intrinsics-guide) - uno strumento molto utile per WIN/Mac OS X/Linux che documenta tutti i Istruzioni SSE/AVX e elementi intrinseci in un modo molto accessibile. –