在Xeon-Phi上运行Haskell

jev*_*jev 18 c haskell llvm icc intel-mic

有没有办法编译Haskell在Xeon Phi协处理器上运行?

英特尔的一些研究人员最近报道了Haskell研究编译器 (这是不公开的,这使得他们的结果基本上不可复制)并测量了Haskell间隙(显示在某些情况下Haskell性能超过C).它们通过名为Pillar的中间语言(类似于C--)描述编译路径并将其编译为C,以便他们可以使用icc创建可在Phi上执行的目标代码.

GHC支持编译到LLVM或直接生成本机代码(NCG).据我所知,目前没有针对Phi的NCG,也没有针对Phi的LLVM后端.有权访问icc,通过C的路径似乎是可能的,但我不确定它目前有多现实(我认为不再支持GHC中的C代码生成器,LLVM IR-to-C后端也是如此,如我错了请纠正我).

因此,我想到了三条路线:

  1. 未注册模式下编译GHC ,-fvia-c 然后用icc编译

  2. 使用较旧的GHC版本生成C代码,然后使用icc

  3. 使用较旧的LLVM版本通过GHC LLVM然后从LLVM生成C,然后使用icc

哪条路线最可行(为什么不这样做)?是否还有其他可能性(因为诸如pillar2c之类的工具尚未公开提供,因此我驳回了Pillar路线).

一个相关的问题是关于Phi的x86兼容性 - 似乎不支持SSE/AVX指令,如果使用例如gccclang编译,某些目标代码将无法运行.

更新:

在LLVM会议上与一些英特尔人聊天后,他们似乎不太可能发布他们的Phi LLVM后端.然而,下一代Xeon Phi将支持AVX512.

And*_*ett 1

如果你通过 C 编译 Haskell,结果是否会被限制为不比 C 快,因为你可以直接编写 C 代码?您的问题指出您尝试重现的项目是通过不同的语言编译的。

所以我不确定可用的工具是否足够先进来完成您想做的事情,抱歉。

  • 从惯用的 C 程序生成的汇编程序可能不如从 Haskell 生成的汇编程序(甚至通过 C)优化得好,因为由于函数式语言的某些属性(例如纯度)而可能进行一些优化;我提到的项目使用不同的中间语言,但仍然通过 C 和 icc;编写 C 语言对于性能可移植性似乎并不可行:体系结构高度多样化且发展迅速,因此需要在每个体系结构上重新编写并重新调整 C 程序,这是(理想情况下)复杂的编译器应该做的工作做 (4认同)