2012-12-24 10 views
11

Non riesco a trovarli nella Intel Intrinsic Guide v2.7. Sai se i set di istruzioni AVX o AVX2 li supportano?Elementi intrinseci di dispersione in AVX

+2

carichi raccolti: http://software.intel.com/sites/products/documentation/studio/composer/en-us/2011Update/compiler_c/intref_cls/common/intref_bk_avx2_masked_gather.htm - I don' Per vedere le istruzioni del negozio sparse però –

+2

Dalla RWT: _ [AVX2 non include le istruzioni scatter (cioè i negozi con indirizzamento vettoriale), a causa delle complicazioni con il modello di ordinamento della memoria x86 e dei buffer di caricamento/archivio.] (http: // www .realworldtech.com/haswell-cpu/2 /) _ – Stringer

risposta

15
  • Non ci sono istruzioni di dispersione o raccolta nel set di istruzioni AVX originale.

  • AVX2 aggiunge istruzioni, ma non dispersione.

  • AVX512F include sia le istruzioni scatter che quelle di raccolta.

  • AVX512PF fornisce inoltre varianti di prefetch delle istruzioni gather e scatter.

  • AVX512CD fornisce istruzioni per rilevare i conflitti negli indirizzi di dispersione.

  • Intel MIC (noto anche come Xeon Phi, Knights Corner) include istruzioni di raccolta e dispersione, ma è un coprocessore separato e non può eseguire il normale codice x86-64.

+0

Quale codice x86_64 non funziona su KNC? – Jeff

+1

@Jeff No, non è così! KNC ha anche un tipo di macchina ELF separato –

+1

@Jeff: KNL (Knight's Landing) dovrebbe eseguire il codice macchina x86_64, però, giusto? Sarà anche disponibile come CPU host, anziché solo coprocessore. –

8

Come l'altra risposta indicato, non è possibile implementare dispersione per ora, anche su AVX2. Tuttavia, il manuale di ottimizzazione di Intel ci fornisce una versione scritta a mano dell'operazione di dispersione. È a pagina 11-17 della versione 2013 del manuale di ottimizzazione Intel. Fondamentalmente quello che fanno è che leggono l'indice ogni volta e lo memorizzano in un registro generale, ad esempio, rax e quindi spostano il numero corretto che si desidera su un registro xmm usando cose come vpalignr. Quindi memorizziamo il risultato nella posizione di memoria con vmovss --- sposta il singolo scalare in memoria. Immagino che questo sarà di bassa efficienza ma immagino che questo sia l'unico modo per realizzare la dispersione dei dati sull'architettura della CPU X86 per ora. Su Xeon Phi le cose sono belle, forniscono supporto nativo per operazioni di dispersione e il primo op, ovviamente, è una locazione di memoria. Quindi credo che se il tuo codice coinvolge un sacco di gather e scatter, il passaggio a Xeon Phi sarà una buona scelta. Per favore, rispondi per dirmi se c'è qualcosa di sbagliato nella mia risposta.

Buona fortuna!

xiangpisaiMM

+1

Grazie per la tua opinione, la mia speranza è più in AVX3 (perché probabilmente porterà spargimento nativo con l'unificazione delle istruzioni simd core e MIC). – Stringer

+0

cambia e quindi memorizza i suoni più lentamente rispetto all'utilizzo di 'extractps', poiché l'elemento da estrarre è una costante in fase di compilazione. O forse la stessa velocità, ma una minore dimensione del codice, dal momento che deve ancora usare la porta shuffle. –

+0

@ xian, c'è un modo per contattarti? – Royi

Problemi correlati