我最近研究了GPU计算的使用情况,其中软件包的使用似乎令人困惑。
例如,CuArrays和ArrayFire似乎在做同样的事情,其中ArrayFire似乎是Nvidia开发人员网页上的“官方”软件包。(https://devblogs.nvidia.com/gpu-computing-julia-programming-language)
此外,还有CUDAdrv和CUDAnative软件包...,它们似乎令人困惑,因为它们的功能似乎不像其他软件包那么简单。
这些软件包的作用是什么? CuArrays和ArrayFire有什么区别吗?
答案 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)基本上减轻了跟上CUDA API的负担以及维护/调整内核以获得最佳性能的负担,我认为这会花费很多时间。
PS。我是ArrayFire开发团队的成员。