2015-06-03 20 views
8

使用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優化?

+1

有一個分支:https://github.com/haskell/vector/tree/simd,但它在幾年之內還沒有完成。 – cchalmers

+1

這些SIMD操作在源代碼中似乎都沒有被Data.Vector使用。 –

+2

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

回答

6

目前在ghc中絕對沒有自動向量化的SIMD。 none

當前的simd指令會在與本地代碼gen一起使用時觸發GHC恐慌,儘管它們將與-fllvm後端一起使用。

那些simd primops嚴重缺乏數據混洗的良好數據模型,當前的數據模型將需要相當大量的重新處理來正確支持simd混洗。

LLVM的後端MAY做某些代碼自動向量化優化,但我一般會處理自動矢量作爲獎勵,而不是代碼如何被優化的核心假設,它需要仔細審覈來驗證!

8

第一:我不知道GHC甚至有SIMD的紋飾。很好找!

無論如何,這一邊,我的理解是這樣的:

  • 的GHC本地代碼生成後端將絕不會發出SIMD指令全部由自己。
  • 可選LLVM後端可能產生SIMD,我不知道。但這不是默認的編譯路徑;我的理解是它仍然是實驗性的。
  • 鑑於您提到的primops的存在,Vector庫可能會生成SIMD代碼。我懷疑它不是,但要真正知道的唯一方法是問作者或者只是grep源代碼...
  • 如果你想要特定的東西,它自己編碼似乎是完全合理的。我不知道它會有多少工作...