È 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?
risposta
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!
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 ...
- 1. Perché questo programma Haskell perde spazio quando compilato con ottimizzazioni?
- 2. Aggiungi automaticamente le proprietà quando si esegue JUnit in Eclipse
- 3. RyuJIT non utilizza completamente le intrinseche SIMD
- 4. CLR Le ottimizzazioni JIT violano la causalità?
- 5. Quali sono le costose ottimizzazioni di GCC?
- 6. Come disabilitare le ottimizzazioni tailcall in gcc
- 7. Vettorializzazione (SIMD) Funzionamento dell'albero
- 8. SIMD vs Architetture vettoriali
- 9. . Ottimizzazioni target della piattaforma .Net
- 10. Buona libreria SIMD portatile
- 11. Linguaggi di programmazione SIMD
- 12. ZSH: esegue automaticamente ls dopo ogni cd
- 13. automake: esegue automaticamente i test delle unità
- 14. Posso implementare automaticamente le classi?
- 15. OpenMP SIMD su Power8
- 16. SIMD il seguente codice
- 17. Throughput di latenza SIMD
- 18. Tecniche SIMD comuni
- 19. Ottimizzazioni del CALayer?
- 20. Ottimizzazioni di Eclipse
- 21. Ottimizzazioni con piegature
- 22. È possibile l'inversione della matrice 3x3 utilizzando le istruzioni SIMD?
- 23. Come posso provare le istruzioni SIMD in Chrome?
- 24. Ottimizzazioni di scacchi
- 25. Otlang ottimizzazioni del compilatore
- 26. Tabella di ricerca utilizzando SIMD
- 27. SSE SIMD Optimization per Loop
- 28. Quali ottimizzazioni esegue un browser quando un elemento DOM viene sottoposto a rendering fuori dallo schermo?
- 29. Le ottimizzazioni del compilatore, come ghc -O2, possono modificare l'ordine (tempo o memoria) di un programma?
- 30. ARM NEON SIMD versione 2
C'è un ramo: https://github.com/haskell/vector/tree/simd ma non è stato elaborato in un paio di anni. – cchalmers
Nessuna di queste operazioni SIMD sembra essere utilizzata da 'Data.Vector' nel suo codice sorgente. –
Correlati: http://stackoverflow.com/questions/1452309/generate-vector-code-from-haskell?rq=1 – Daenyth