Julia,CuArrays和ArrayFire对Nvidia GPU软件包的困惑

时间:2019-03-24 04:17:49

标签: julia arrayfire

我最近研究了GPU计算的使用情况,其中软件包的使用似乎令人困惑。

例如,CuArrays和ArrayFire似乎在做同样的事情,其中​​ArrayFire似乎是Nvidia开发人员网页上的“官方”软件包。(https://devblogs.nvidia.com/gpu-computing-julia-programming-language

此外,还有CUDAdrv和CUDAnative软件包...,它们似乎令人困惑,因为它们的功能似乎不像其他软件包那么简单。

这些软件包的作用是什么? CuArrays和ArrayFire有什么区别吗?

1 个答案:

答案 0 :(得分:4)

正如您分享的博客文章中所述,它非常简单,如下所示

  

Julia软件包生态系统已经包含了许多与GPU相关的内容   包,针对不同的抽象级别,如图1所示。   在最高抽象级别,特定于域的软件包(例如   MXNet.jl和TensorFlow.jl可以透明地使用您的GPU   系统。使用ArrayFire.jl可以进行更通用的开发,如果   您需要线性代数或深层代数的专用CUDA实现   神经网络算法,您可以使用供应商特定的软件包,例如   cuBLAS.jl或cuDNN.jl。所有这些软件包本质上都是包装器   围绕本地图书馆,利用Julia的外部功能   接口(FFI)以最小的开销调用库的API。

CUDAdrv和CUDAnative软件包旨在直接使用CUDA运行时API并从Julia本身编写内核。我相信这就是CuArray派上用场的地方-粗略地说,将本地Julia对象包装为CUDA可访问格式。

另一方面, ArrayFire是一个通用库,可将所有内容(cuBLAS,cuSparse,cuSolve,cuFFT)包装在一起。CUDA提供了特定于域的库,成为漂亮的接口(函数)。除了与CUDA特定领域库的接口外,ArrayFire本身还提供了统计,图像处理,计算机视觉等领域的许多其他功能。它具有不错的JIT feature功能,可以将用户代码编译为运行时内核-简单放。 ArrayFire.jl是一种语言绑定,在包装程序级别上对Julia进行了一些额外的改进。

那是一般的区别。从开发人员的角度来看,使用库(如ArrayFire)基本上减轻了跟上CUDA API的负担以及维护/调整内核以获得最佳性能的负担,我认为这会花费很多时间。

PS。我是ArrayFire开发团队的成员。