使用https://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/GHC-Prim.html#g:28可以在Haskell中編寫基於SIMD的矢量庫,但它有什麼意義嗎?我遇到過幾篇關於Haskell中自動SIMD優化的論文,但是目前的狀態(2014)是什麼?例如。將https://hackage.haskell.org/package/vector使用SIMD還是使用低級別SIMD原語手動編寫優化庫更好?Haskell是否會自動執行SIMD優化?
8
A
回答
6
目前在ghc中絕對沒有自動向量化的SIMD。 none
當前的simd指令會在與本地代碼gen一起使用時觸發GHC恐慌,儘管它們將與-fllvm後端一起使用。
那些simd primops嚴重缺乏數據混洗的良好數據模型,當前的數據模型將需要相當大量的重新處理來正確支持simd混洗。
LLVM的後端MAY做某些代碼自動向量化優化,但我一般會處理自動矢量作爲獎勵,而不是代碼如何被優化的核心假設,它需要仔細審覈來驗證!
8
第一:我不知道GHC甚至有SIMD的紋飾。很好找!
無論如何,這一邊,我的理解是這樣的:
- 的GHC本地代碼生成後端將絕不會發出SIMD指令全部由自己。
- 可選LLVM後端可能產生SIMD,我不知道。但這不是默認的編譯路徑;我的理解是它仍然是實驗性的。
- 鑑於您提到的primops的存在,Vector庫可能會生成SIMD代碼。我懷疑它不是,但要真正知道的唯一方法是問作者或者只是grep源代碼...
- 如果你想要特定的東西,它自己編碼似乎是完全合理的。我不知道它會有多少工作...
相關問題
- 1. C#優化器是否執行copy elision?
- 2. Delphi編譯器是否執行優化?
- 3. 使用SIMD進行HOG優化
- 4. SSE SIMD優化For循環
- 5. MSVC是否會自動優化雙核架構上的計算?
- 6. 可執行優化
- 7. GPGPU編程是否只允許執行SIMD指令?
- 8. 優化SIMD直方圖計算
- 9. 優化Haskell代碼
- 10. Haskell性能優化
- 11. 優化Haskell程序
- 12. AFNetworking是否會自動在後臺線程上執行操作?
- 13. 彈性搜索時是否會自動執行批量處理
- 14. 在驗證之前,Rails是否會自動執行轉換?
- 15. 自動化執行命令
- 16. MATLAB是否執行尾部呼叫優化?
- 17. 可執行文件大小是否可以優化?
- 18. Frege是否執行尾部呼叫優化?
- 19. Haskell構建自動化
- 20. JIT優化器是否優化乘法?
- 21. 在VB.NET,C#等中,單點規則是否會自動優化到代碼中?
- 22. VBS自動優化
- 23. 編譯器是否會針對布爾分配進行優化?
- 24. LLVM執行哪種優化?
- 25. 優化C++模板執行
- 26. mysql優化查詢執行
- 27. mysql_close()是否需要進行REAL優化?
- 28. socket.emit()是否自動串化?
- 29. 優化工作在Haskell
- 30. 優化Haskell BFS實現
有一個分支:https://github.com/haskell/vector/tree/simd,但它在幾年之內還沒有完成。 – cchalmers
這些SIMD操作在源代碼中似乎都沒有被Data.Vector使用。 –
相關:http://stackoverflow.com/questions/1452309/generate-vector-code-from-haskell?rq=1 – Daenyth