У Accelerate и Repa разные варианты использования? - PullRequest
16 голосов
/ 07 июня 2011

Я играл с Repa и Accelerate - они оба интересны, но я не могу понять, когда я использую один, а когда другой. Они растут вместе, соперники или просто из-за разных проблем?

1 Ответ

14 голосов
/ 07 июня 2011

Repa - это библиотека для эффективного построения и обхода массива, запрограммированная в Haskell и работающая во время выполнения Haskell.Repa полагается на оптимизатор GHC и потоки для повышения производительности.Вы можете смешивать произвольный код на Haskell с Repa (функции Repa, такие как map, принимают функции Haskell в качестве параметров).

Accelerate - это встроенный язык для программирования на GPU.Accelerate полагается на собственный компилятор и параллелизм графического процессора для повышения производительности.Часть кода, использующая библиотеку Accelerate, на самом деле не выполняет вычисления массива.Он генерирует программу Accelerate, которая обрабатывается собственным компилятором Accelerate для генерации кода, который фактически обрабатывает данные вашего массива.

Если вы хотите программировать графические процессоры в Haskell, Accelerate является основной опцией.Если вы хотите, чтобы ваш код работал на процессорах, Repa - это то, что вам нужно.Ускорение не генерирует многоядерный код.Он спроектирован таким образом, что может поддерживать другую цель, но, насколько я могу судить, мотивация для поддержки процессоров с помощью Accelerator низка, потому что существует большая конкуренция.

Редактировать: Обсидиан и Николаальтернативы для программирования на GPU.После краткого изучения документации, Обсидиан кажется более узким по объему;он может выражать конвейеры в виде (f >=> g >=> h).Набор функций Николы, кажется, ближе к Ускорению.У меня нет опыта, чтобы действительно сравнить их.

...