Haskell是否自动执行SIMD优化?

时间:2015-06-03 15:25:26

标签: haskell simd

可以使用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原语手动编写优化库?

2 个答案:

答案 0 :(得分:8)

首先:我不知道GHC甚至有SIMD的初学者。很好找!

无论如何,除此之外,我的理解是:

  • GHC本机代码后端将永远不会单独发出SIMD指令。
  • 可选的LLVM后端可能生成SIMD,我不知道。但那不是默认的编译路线;我的理解是它仍然是实验性的。
  • 鉴于你提到的primops的存在,Vector库可以想象生成SIMD代码。我怀疑它不是,但真正知道的唯一方法是询问作者或只是grep源代码......
  • 如果你想要特定的东西,自己编码似乎是完全合理的。我不知道会有多少工作......

答案 1 :(得分:6)

目前ghc中没有SIMD自动矢量化。无

当使用本机代码时,当前的simd primops将触发GHC恐慌,尽管它们将与-fllvm后端一起使用。

那些simd primops至关重要地缺乏一个良好的数据混洗数据模型,当前的数据模型将需要相当大的改造来正确支持simd shuffle。

llvm后端 MAY 对代码进行某些自动矢量化优化,但我通常将自动矢量化视为奖励,而不是代码如何优化的核心假设,需要仔细审核验证!