可以使用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原语的优化库?
可以使用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原语的优化库?
首先,我不知道 GHC 甚至有用于 SIMD 的原语。很好的发现!
无论如何,我的理解是:
目前,GHC在SIMD方面绝对没有自动向量化功能。没有任何一种。
当前的SIMD Primops在使用本地代码生成时将触发GHC崩溃,但它们将与-fllvm后端一起工作。
这些SIMD Primops关键缺乏良好的数据模型来进行数据混洗,当前的数据模型需要进行相当大的重构以正确支持SIMD混洗。
LLVM后端可能会对代码执行某些自动向量化优化,但我通常将自动向量化视为额外的优化而不是核心假设,需要进行仔细的审核才能验证!
Data.Vector
的源代码中似乎没有使用任何SIMD操作。 - CR Drost