Haskell会自动执行SIMD优化吗?

11

1
这里有一个分支:https://github.com/haskell/vector/tree/simd,但是已经有几年没有进行过更新了。 - cchalmers
1
Data.Vector的源代码中似乎没有使用任何SIMD操作。 - CR Drost
2
相关链接:https://dev59.com/sknSa4cB1Zd3GeqPN3C2?rq=1 - Daenyth
2个回答

8

首先,我不知道 GHC 甚至有用于 SIMD 的原语。很好的发现!

无论如何,我的理解是:

  • GHC 本地代码生成后端永远不会单独产生 SIMD 指令。
  • 可选的 LLVM 后端可能会产生 SIMD,但我不确定。但这不是默认的编译路线;我的理解是它仍然相当实验性。
  • 鉴于你提到的原语的存在,Vector 库可以构想生成 SIMD 代码。我怀疑它没有,但真正了解是否有必要询问作者或者只需 grep 源代码...
  • 如果你想要特定的东西,自己编写似乎是完全合理的。我不知道需要多少工作...

6

目前,GHC在SIMD方面绝对没有自动向量化功能。没有任何一种。

当前的SIMD Primops在使用本地代码生成时将触发GHC崩溃,但它们将与-fllvm后端一起工作。

这些SIMD Primops关键缺乏良好的数据模型来进行数据混洗,当前的数据模型需要进行相当大的重构以正确支持SIMD混洗。

LLVM后端可能会对代码执行某些自动向量化优化,但我通常将自动向量化视为额外的优化而不是核心假设,需要进行仔细的审核才能验证!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接