在Xeon-Phi上运行Haskell

19

有没有一种方法可以将Haskell编译成可在Xeon Phi协处理器上运行的代码?

英特尔的一些研究人员最近报告了Haskell Research Compiler(该编译器并不公开,这使得他们的结果基本上无法再现),并测量了Haskell Gap(显示在某些情况下,Haskell的性能超过了C语言)。他们描述了一条编译路径,通过一个名为Pillar(类似于C--)的中间语言进行编译,然后将其编译为C语言,以便使用icc创建可在Phi上执行的目标代码。

GHC支持编译到LLVM或直接生成本地代码(NCG)。据我所知,没有针对Phi的NCG可用,也没有针对Phi的LLVM后端。通过C通过icc的路线似乎是可能的,但目前我不确定它有多现实(我认为GHC中的C代码生成器不再受支持,对于LLVM IR-to-C后端也是如此,请纠正我如果我错了)。因此,有三条路线可以考虑:1、在未注册模式下编译GHC,并使用-fvia-c然后使用icc;2、使用旧版本的GHC生成C代码,然后使用icc;3、使用旧版本的LLVM通过GHC LLVM,然后从LLVM生成C,然后使用icc。哪种路线最可行(为什么/为什么不)?还有其他可能性吗(我放弃了Pillar路线,因为诸如pillar2c之类的工具尚未(尚未?)公开)?

一个相关的问题是关于Phi的x86兼容性 - 看起来不支持SSE / AVX指令,如果使用例如gccclang编译,则会导致某些目标代码无法运行。

更新:

在与LLVM会议上的一些Intel人员交谈后,他们似乎不太可能发布他们的Phi LLVM后端。但是,下一代Xeon Phi将支持AVX512。

1个回答

1
如果您通过C编译Haskell,那么结果是否受限于不比C更快,因为您可以直接编写该C代码?您的问题指出,您想要复制的项目是通过不同的语言编译的。因此,我不确定可用的工具是否足够先进,能够做到您想要做的事情,抱歉。

4
通过习惯用语编写的汇编程序,其优化程度可能比通过Haskell(即使通过C)生成的汇编程序要差一些,这是因为一些函数式语言的特性(如纯度)可以实现某些优化。我提到的项目使用不同的中间语言,但仍然通过C和icc进行处理。编写C语言似乎不太适合于性能可移植性:架构高度多样且快速发展,因此需要在每种架构上重新编写和调整C程序,这是(理想情况下)一个复杂编译器应该完成的工作。 - jev

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