2015-06-03 17 views
8

È possibile scrivere una libreria vettoriale basata su SIMD in Haskell usando https://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/GHC-Prim.html#g:28 ma avrà senso? Mi sono imbattuto in numerosi articoli dedicati all'ottimizzazione automatica SIMD in Haskell, ma quale stato attuale (2014)? Per esempio. https://hackage.haskell.org/package/vector usa SIMD o è meglio scrivere manualmente una libreria ottimizzata usando le primitive SIMD di basso livello?Haskell esegue automaticamente le ottimizzazioni SIMD?

+1

C'è un ramo: https://github.com/haskell/vector/tree/simd ma non è stato elaborato in un paio di anni. – cchalmers

+1

Nessuna di queste operazioni SIMD sembra essere utilizzata da 'Data.Vector' nel suo codice sorgente. –

+2

Correlati: http://stackoverflow.com/questions/1452309/generate-vector-code-from-haskell?rq=1 – Daenyth

risposta

6

non vi è assolutamente alcuna autoizzazione automatica su SIMD in ghc al momento. nessuno

gli attuali primati simd attiveranno un panico GHC quando vengono utilizzati con il codice gen nativo, sebbene funzionino con il backend -fllvm.

a quelli primari simd manca un buon modello di dati per il mescolamento dei dati, l'attuale modello di dati richiederà una rielaborazione piuttosto sostanziale per supportare correttamente shuffle simd.

backend LLVM MAGGIO fare certe ottimizzazioni auto vettorizzazione sul codice, ma mi piacerebbe generalmente trattano auto-vettorizzazione come bonus piuttosto che un assunto di base nel modo in cui il codice viene ottimizzato, richiede una certa attenzione a revisione contabile per convalidare!

8

Primo: non avevo idea che GHC avesse anche i prim per SIMD. Bella scoperta!

Comunque, a parte questo, la mia comprensione è questo:

  • Il GHC codegen nativo backend sarà mai emetterà istruzioni SIMD da sola.
  • Il backend LLVM opzionale può produrre SIMD, non so. Ma non è il percorso di compilazione predefinito; la mia comprensione è che è ancora piuttosto sperimentale.
  • Data l'esistenza dei primi che hai menzionato, la libreria Vector potrebbe essere in grado di generare codice SIMD. Sospetto che non lo sia, ma l'unico modo per sapere davvero di sicuro è chiedere all'autore (s) o semplicemente grep il codice sorgente ...
  • Se vuoi qualcosa di specifico, sembra perfettamente ragionevole codificarlo da solo . Non ho idea di quanto lavoro sarebbe ...
Problemi correlati