在做GPU开发设计的时候,遇到了ArrayFire,但我对ArrayFire并不了解。本文档编写的目的是为了学习ArrayFire。同时,该系列文档是我于业余时间来翻译的。原文为ArrayFire的官方文档指南。(链接:http://arrayfire.org/docs/index.htm)在翻译过程中,如果有错误的地方,请后续读者尽早指出,我会尽快改正。
本文档版权属于我个人所有,如需转载,请私信联系。
综述
什么是ArrayFire?
ArrayFire是一个为并行计算而设计的高性能的软件库,具有十分易于使用的API。其基于数组的函数集,使并行计算变得十分便利。
安装 ArrayFire
ArrayFire支持Windows,OSX,以及Linux。具体下载链接,请在ArrayFire官方网站下载。
便于使用
数组对象非常简单。
基于数组的符号,以可读的数学相似符号有效地表达可计算的算法。
任何软件工程师,在使用ArrayFire之前,并不需要具备并行编程方面的专业知识。软件工程师只需要使用ArrayFire的仅仅几行代码,就可以完成在CUDA/OpenCL的Kernel函数中几百行代码需要完成的功能。
应用广泛
ArrayFire的应用非常广泛支持多领域ArrayFire包含数百个跨越各个领域的函数,主要包括:
- 矢量算法
- 图像处理
- 计算机视觉
- 信号处理
- 线性代数
- 统计学
- 其他
每一个函数都由ArrayFire的开发人员从底层进行手工优化。
支持各种数据类型和大小
ArrayFire可以处理常见的数据类型和大小,包括矢量,矩阵,卷积等。并且它支持通用的数据类型,包括单精度和双精度浮点值,复数,布尔型,以及32bit无符号和有符号整型。
扩展ArrayFire
ArrayFire可以被独立地用来设计成为应用程序,也可以与已有的CUDA或OpenCL程序集成。所有的ArrayFire数组都可以与其他CUDA或OpenCL数据结构互换。
一次编码,随处运行!
ArrayFire代码支持x86,ARM,CUDA,以及OpenCL设备,ArrayFire支持如下全面的设备列表。
ArrayFire在安装时附带:
- 支持NVIDIA GPU的一个CUDA版本(命名为‘libafcuda’)
- 支持OpenCL设备的一个OpenCL版本(命名为‘libafopencl’)
- 当CUDA或OpenCL设备不可用时,一个CPU版本(命名为‘libafcpu’)
ArrayFire非常高效
矢量化和批量操作
ArrayFire支持N维数组的批量操作。批量操作在ArrayFire中是并行运算的,以确保CUDA或OpenCL设备达到最佳的性能。我们可以使用矢量化技术从ArrayFire中获得最佳性能。
ArrayFire也可以使用gfor函数,以并行的方式执行循环迭代。
即时编译
ArrayFire会自动对代码执行运行时的分析以提高运算强度和内存吞吐量,并且能避免不必要的内存临时分配。它有一个内部的高性能编辑器JIT来对目标程序进行优化。
关于ArrayFire JIT,请详细阅读:http://arrayfire.com/performance-of-arrayfire-jit-code-generation/
一个简单的使用ArrayFire的例子
在下面的这个例子中,首先可以大概看到ArrayFire程序的示例。工程师可以在CUDA或OpenCL设备上创建数组,然后就可以在这些数组的基础上使用ArrayFire函数了。