Я играл с Repa и Accelerate — они оба интересные, но я не могу понять, когда я буду использовать один, а когда другой. Они растут вместе, соперники или просто для разных задач?
Имеют ли Accelerate и Repa разные сценарии использования?
Ответы (1)
Repa — это библиотека для эффективного построения и обхода массивов, запрограммированная на Haskell и работающая в среде выполнения Haskell. Производительность Repa зависит от оптимизатора и потоков GHC. Вы можете смешивать произвольный код Haskell с Repa (функции Repa, такие как map
, принимают функции Haskell в качестве параметров).
Accelerate — это встроенный язык для программирования GPU. Accelerate полагается на собственный компилятор и параллелизм графического процессора для повышения производительности. Фрагмент кода, использующий библиотеку Accelerate, на самом деле не выполняет вычисление массива. Он создает программу Accelerate, которая обрабатывается собственным компилятором Accelerate для создания кода, который фактически обрабатывает данные вашего массива.
Если вы хотите программировать графические процессоры на Haskell, Accelerate является основным вариантом. Если вы хотите, чтобы ваш код работал на процессорах, Repa — это то, что вам нужно. Accelerate не генерирует многоядерный код. Он разработан таким образом, что может поддерживать другую цель, но, насколько я могу судить, мотивация для поддержки процессоров с ускорителем низка, потому что конкуренция выше.
Редактировать: Obsidian и Nikola являются альтернативой для программирования GPU. Из краткого изучения документации Obsidian кажется более узкой; он может выражать конвейеры в форме (f >=> g >=> h)
. Набор функций Nikola кажется ближе к Accelerate. У меня нет опыта, чтобы их сравнивать.