2014-03-07 55 views
18

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

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

GHC支持编译为LLVM或直接生成本机代码(NCG)。据我所知,既没有NCG定位Phi,也没有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等工具尚未公开可用)。

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

更新

聊天在LLVM会议一些英特尔人后,似乎不太可能,他们将释放他们披LLVM后端。但是,下一代Xeon Phi将支持AVX512。

回答

1

如果你通过C编译你的Haskell,那么结果是不是不比C快,因为你可以直接编写C代码?你的问题指出你试图复制的项目是通过不同的语言编译的。

所以我不确定可用的工具是否足够先进,以做你想做的事情,对不起。

+4

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