Путаница с пакетами графических процессоров Nvidia в Julia, CuArrays и ArrayFire - PullRequest
0 голосов
/ 24 марта 2019

Я недавно изучил использование вычислений на GPU, где использование пакета, похоже, сбивает с толку.

Например, CuArrays и ArrayFire, похоже, делали то же самое, где ArrayFire, казалось, был "официальный "пакет на веб-странице разработчиков Nvidia. (https://devblogs.nvidia.com/gpu-computing-julia-programming-language)

Кроме того, были пакеты CUDAdrv и CUDAnative ..., которые, казалось, сбивали с толку, поскольку их функциональные возможности казались не такими простымикак остальные.

Что делают эти пакеты?Есть ли разница между CuArrays и ArrayFire?

1 Ответ

4 голосов
/ 25 марта 2019

Как объясняется в сообщении в блоге, которым вы поделились, это довольно просто, как указано ниже

Экосистема пакетов Julia уже содержит довольно много пакетов, связанных с GPU, нацеленных на разные уровни абстракции, как показано на рисунке 1показывает.На самом высоком уровне абстракции пакеты, специфичные для домена, такие как MXNet.jl и TensorFlow.jl, могут прозрачно использовать графические процессоры в вашей системе.Более универсальная разработка возможна с ArrayFire.jl, и если вам нужна специализированная реализация CUDA линейной алгебры или алгоритма глубокой нейронной сети, вы можете использовать специфичные для поставщика пакеты, такие как cuBLAS.jl или cuDNN.jl.Все эти пакеты, по сути, являются обертками вокруг собственных библиотек и используют интерфейсы внешних функций (FFI) Джулии для вызова API библиотеки с минимальными издержками.

CUDAdrv и CUDAnative предназначены для непосредственного использования среды выполнения CUDA.API и написание ядер от самой Юлии.Я полагаю, что именно здесь CuArray пригодится - оборачивая нативные объекты Julia в доступный формат CUDA, грубо говоря.

ArrayFire, с другой стороны, является универсальной библиотекой, которая охватывает все (cuBLAS, cuSparse, cuSolve, cuFFT) CUDA предоставила доменные библиотеки в приятный интерфейс (функции).Помимо интерфейса к доменным библиотекам CUDA, ArrayFire сам по себе предоставляет множество других функций в области статистики, обработки изображений, компьютерного зрения и т. Д. Он имеет замечательную функцию JIT , где код пользователя компилируется во время выполнения.ядро - проще говоря.ArrayFire.jl - это языковая привязка с некоторыми дополнительными улучшениями, характерными для Julia, на уровне оболочки.

В этом и заключается общее отличие.С точки зрения разработчиков, использование библиотеки (например, ArrayFire) в основном снимает бремя поддержания CUDA API и поддержки / настройки ядер для достижения оптимальной производительности, что, на мой взгляд, занимает много времени.

PS.Я являюсь членом команды разработчиков ArrayFire.

...