小编jev*_*jev的帖子

在Xeon-Phi上运行Haskell

有没有办法编译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.

c haskell llvm icc intel-mic

18
推荐指数
1
解决办法
1181
查看次数

如何扩展GHC的线程状态对象

我想StgWord32线程状态对象(TSO)中添加两个额外的字段.基于我在GHC-Wiki上找到的信息以及查看源代码,我扩展了结构/includes/rts/storage/TSO.h并更改了创建不同偏移(创建DerivedConstants.h)的程序.编译器,rts和一个简单的应用程序重新编译,但在执行结束时(hs_exit_垃圾收集器)抱怨:

 internal error: scavenge_stack: weird activation record found on stack: 45
Run Code Online (Sandbox Code Playgroud)

我想它必须使用cmm和/或STG实现细节(因为结构在cmm级别上不可见而产生偏移,如果我错了就纠正我).字段的顺序是否重要?我错过了一个应该更改的文件吗?

我在64位架构上使用了编译器和RTS 的调试版本以及相当过时的ghc 6.12.3.任何关于TSO处理的相关文档和关于ghc 6和7之间差异的评论的任何提示也是受欢迎的.

haskell runtime-error ghc c-minus-minus

13
推荐指数
1
解决办法
364
查看次数

标签 统计

haskell ×2

c ×1

c-minus-minus ×1

ghc ×1

icc ×1

intel-mic ×1

llvm ×1

runtime-error ×1