有沒有辦法編譯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