Подтвердить что ты не робот

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

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

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

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

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

  • Скомпилируйте GHC в незарегистрированном режиме и скомпилируйте с помощью -fvia-c то с icc

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

  • Используйте более старую версию LLVM для перехода через GHC LLVM, затем сгенерируйте C из LLVM, а затем использовать icc

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

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

Обновление:

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

4b9b3361

Ответ 1

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

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