Domanda

E 'possibile ottenere GHC per produrre codice SIMD per le varie generazioni SSE?

Eg. ha ottenuto un programma come questo

import Data.Array.Vector
main = print . sumU $ (enumFromToFracU 1 10000000 :: UArr Double)

Posso vedere il codice generato (compilato per 64 bit x86) utilizzare le istruzioni SSE in modalità scalare (sia C e ASM backend). Quindi, piuttosto che addsd addpd. Per i tipi di programmi su cui lavoro l'uso di istruzioni vettoriali è importante per le prestazioni. C'è un modo semplice per un principiante come me per arrivare al GHC SIMDize il codice utilizzando SSE?

È stato utile?

Soluzione

Sì, è possibile, tramite il backend C, ma è tentativi ed errori. Le bandiere che uso:

 gcc -O2 -funbox-strict-fields -fvia-C -optc-O3 -march=native -optc-msse4

Quindi spero GCC ha visto il loop stretto GHC genera tramite il codice uvector, e si rende conto esiste un potenziale SIMD.

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