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

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

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

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

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

  1. Скомпилируйте GHC в незарегистрированном режиме и скомпилируйте с -fvia-c, а затем с icc

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

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

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

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

Обновление:

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


person jev    schedule 07.03.2014    source источник


Ответы (1)


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

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

person Andrew Aylett    schedule 10.03.2014
comment
ассемблер, сгенерированный из идиоматических программ на C, потенциально менее оптимизирован, чем сгенерированный из Haskell (даже с помощью C), из-за некоторых оптимизаций, которые возможны благодаря некоторым свойствам функциональных языков (например, чистоте); проект, который я упомянул, использует другой промежуточный язык, но по-прежнему использует C и icc; написание C не кажется жизнеспособным для переносимости производительности: архитектуры очень разнообразны и быстро развиваются, поэтому нужно будет переписать и перенастроить программу C для каждой архитектуры, работа, которую (в идеале) должен выполнять сложный компилятор. делать - person jev; 11.03.2014