Haskell 是否自动执行 SIMD 优化?

Does Haskell perfom SIMD optimizations automatically?

可以在 Haskell 中使用 https://hackage.haskell.org/package/ghc-prim-0.4.0.0/docs/GHC-Prim.html#g:28 but will it make any sense? I've came across several papers devoted to automatic SIMD optimization in Haskell, but what the current status (2014)? E.g. will https://hackage.haskell.org/package/vector 使用 SIMD 编写基于 SIMD 的矢量库,还是最好使用低级 SIMD 基元手动编写优化库?

首先:我不知道 GHC 甚至有 SIMD 的 primops。不错的发现!

不管怎么说,我的理解是这样的:

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

目前在 ghc 中绝对没有针对 SIMD 的自动矢量化。 none

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

那些 simd primops 严重缺乏用于数据改组的良好数据模型,当前的数据模型将需要相当大的改造才能正确支持 simd 改组。

llvm 后端 可以 对代码进行某些自动矢量化优化,但我通常将自动矢量化视为一种奖励,而不是代码优化方式的核心假设,它需要一些仔细的审核才能验证!