Имеют ли Accelerate и Repa разные сценарии использования?

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


person Mark Wotton    schedule 07.06.2011    source источник


Ответы (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. У меня нет опыта, чтобы их сравнивать.

person Heatsink    schedule 07.06.2011
comment
Для программирования графических процессоров также есть Obsidian и Никола. Оба они являются экспериментальными проектами, как и Accelerate. - person Mikhail Glushenkov; 07.06.2011
comment
Обратите внимание, ускорение теперь поддерживает многоядерные процессоры: github.com/AccelerateHS/accelerate#additional- компоненты - person stites; 14.05.2017