有没有办法编译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后端,纠正我,如果我错了)。
所以三条路线浮现在脑海中:
编译GHC在未注册的模式与
-fvia-c
然后用ICC使用旧GHC版本编译生成C代码,然后使用icc
使用旧版本的LLVM通过GHC LLVM去,然后从 LLVM生成C,然后用ICC
哪条路线是最可行的(为什么/为什么不)?是否还有其他可能性(我否认支柱路线,因为诸如pillar2c等工具尚未公开可用)。
一个相关的问题是关于Phi的x86兼容性 - 似乎不支持SSE/AVX指令,并且如果使用例如编译器编译,某些目标代码将无法运行。 gcc或clang。
更新:
聊天在LLVM会议一些英特尔人后,似乎不太可能,他们将释放他们披LLVM后端。但是,下一代Xeon Phi将支持AVX512。
从惯用C程序生成的汇编程序可能不如由Haskell生成的汇编程序(甚至通过C)优化,因为由于函数语言的某些属性(例如纯度)可能会进行某些优化;我提到的项目使用不同的中间语言,但仍然通过C和icc;写C似乎不适合性能可移植性:体系结构高度多样化并且发展迅速,因此需要重新编写和重构每个体系结构上的C程序,这是一个(理想情况下)复杂的编译器应该做 – jev