【问题标题】:Does Haskell perfom SIMD optimizations automatically?Haskell 会自动执行 SIMD 优化吗?
【发布时间】:2015-08-17 21:59:01
【问题描述】:

可以使用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】:

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

不管怎样,除此之外,我的理解是这样的:

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-09-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多