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