Запуск Haskell на Xeon-Phi

Есть ли способ скомпилировать Haskell для запуска на сопроцессоре Xeon Phi?

Некоторые исследователи из Intel недавно сообщили о компиляторе исследований Haskell (который не является общедоступным, что делает их результаты практически невоспроизводимыми) и измерили разрыв в Haskell (показывая, что в некоторых случаях производительность Haskell превосходит C). Они описывают маршрут компиляции через промежуточный язык, называемый Pillar (аналогично C--), и компилируют его в C, чтобы затем использовать icc для создания объектного кода, исполняемого на Phi.

GHC поддерживает компиляцию в LLVM или генерирует собственный код напрямую (NCG). Насколько я знаю, нет ни NCG, нацеленного на Phi, ни LLVM-бэкенда для Phi. Имея доступ к icc, маршрут через C кажется возможным, однако я не уверен, насколько он реалистичен в настоящее время (я думаю, что генератор кода C в GHC больше не поддерживается, то же самое верно и для бэкэнда IR-to-C LLVM, поправьте меня если я ошибаюсь).

Итак, на ум приходят три маршрута:

  1. Компилировать GHC в незарегистрированном режиме и компилировать с -fvia-c затем с ICC

  2. Используйте старую версию GHC для генерации кода на C, а затем используйте icc

  3. Используйте старую версию LLVM, чтобы пройти через GHC LLVM, затем сгенерируйте C из LLVM и затем используйте icc

Какой маршрут наиболее жизнеспособен (почему / почему нет)? Существуют ли другие возможности (я отклонил маршрут Pillar, поскольку такие инструменты, как pillar2c (еще не доступны), доступны для общественности).

Смежный вопрос касается x86-совместимости Phi - кажется, что инструкции SSE/AVX не поддерживаются, и некоторый объектный код не будет работать, если он скомпилирован, например, с gcc или clang.

Обновление:

После общения с некоторыми людьми из Intel на конференции LLVM кажется маловероятным, что они выпустят свой бэкэнд Phi LLVM. Однако следующее поколение Xeon Phi будет поддерживать AVX512.

1 ответ

Если вы компилируете свой Haskell с помощью C, разве результат не будет ограничен, чтобы быть не быстрее, чем C, как вы могли бы написать этот код C напрямую? В вашем вопросе отмечается, что проект, который вы пытаетесь воспроизвести, составлен на другом языке.

Поэтому я не уверен, что доступные инструменты достаточно продвинуты, чтобы делать то, что вы хотите сделать, извините.

Другие вопросы по тегам